system.cc (8870:f95c4042f2d0) | system.cc (8885:52bbd95b31ed) |
---|---|
1/* 2 * Copyright (c) 2010 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 44 unchanged lines hidden (view full) --- 53#include "mem/physical.hh" 54 55using namespace ArmISA; 56using namespace Linux; 57 58LinuxArmSystem::LinuxArmSystem(Params *p) 59 : ArmSystem(p) 60{ | 1/* 2 * Copyright (c) 2010 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 44 unchanged lines hidden (view full) --- 53#include "mem/physical.hh" 54 55using namespace ArmISA; 56using namespace Linux; 57 58LinuxArmSystem::LinuxArmSystem(Params *p) 59 : ArmSystem(p) 60{ |
61#ifndef NDEBUG 62 kernelPanicEvent = addKernelFuncEvent<BreakPCEvent>("panic"); 63 if (!kernelPanicEvent) 64 panic("could not find kernel symbol \'panic\'"); 65#endif 66 67 // With ARM udelay() is #defined to __udelay 68 Addr addr = 0; 69 if (kernelSymtab->findAddress("__udelay", addr)) { 70 uDelaySkipEvent = new UDelayEvent(&pcEventQueue, "__udelay", 71 fixFuncEventAddr(addr), 1000, 0); 72 } else { 73 panic("couldn't find kernel symbol \'udelay\'"); 74 } 75 76 // constant arguments to udelay() have some precomputation done ahead of 77 // time. Constant comes from code. 78 if (kernelSymtab->findAddress("__const_udelay", addr)) { 79 constUDelaySkipEvent = new UDelayEvent(&pcEventQueue, "__const_udelay", 80 fixFuncEventAddr(addr), 1000, 107374); 81 } else { 82 panic("couldn't find kernel symbol \'udelay\'"); 83 } 84 85 secDataPtrAddr = 0; 86 secDataAddr = 0; 87 penReleaseAddr = 0; 88 kernelSymtab->findAddress("__secondary_data", secDataPtrAddr); 89 kernelSymtab->findAddress("secondary_data", secDataAddr); 90 kernelSymtab->findAddress("pen_release", penReleaseAddr); 91 92 secDataPtrAddr &= ~ULL(0x7F); 93 secDataAddr &= ~ULL(0x7F); 94 penReleaseAddr &= ~ULL(0x7F); |
|
61} 62 63bool 64LinuxArmSystem::adderBootUncacheable(Addr a) 65{ 66 Addr block = a & ~ULL(0x7F); 67 if (block == secDataPtrAddr || block == secDataAddr || 68 block == penReleaseAddr) --- 42 unchanged lines hidden (view full) --- 111 offset += ad->copyOut(boot_data + offset); 112 offset += an->copyOut(boot_data + offset); 113 114 DPRINTF(Loader, "Boot atags was %d bytes in total\n", size << 2); 115 DDUMP(Loader, boot_data, size << 2); 116 117 physProxy.writeBlob(params()->atags_addr, boot_data, size << 2); 118 | 95} 96 97bool 98LinuxArmSystem::adderBootUncacheable(Addr a) 99{ 100 Addr block = a & ~ULL(0x7F); 101 if (block == secDataPtrAddr || block == secDataAddr || 102 block == penReleaseAddr) --- 42 unchanged lines hidden (view full) --- 145 offset += ad->copyOut(boot_data + offset); 146 offset += an->copyOut(boot_data + offset); 147 148 DPRINTF(Loader, "Boot atags was %d bytes in total\n", size << 2); 149 DDUMP(Loader, boot_data, size << 2); 150 151 physProxy.writeBlob(params()->atags_addr, boot_data, size << 2); 152 |
119#ifndef NDEBUG 120 kernelPanicEvent = addKernelFuncEvent<BreakPCEvent>("panic"); 121 if (!kernelPanicEvent) 122 panic("could not find kernel symbol \'panic\'"); 123#endif 124 125 // With ARM udelay() is #defined to __udelay 126 Addr addr = 0; 127 if (kernelSymtab->findAddress("__udelay", addr)) { 128 uDelaySkipEvent = new UDelayEvent(&pcEventQueue, "__udelay", 129 fixFuncEventAddr(addr), 1000, 0); 130 } else { 131 panic("couldn't find kernel symbol \'udelay\'"); 132 } 133 134 // constant arguments to udelay() have some precomputation done ahead of 135 // time. Constant comes from code. 136 if (kernelSymtab->findAddress("__const_udelay", addr)) { 137 constUDelaySkipEvent = new UDelayEvent(&pcEventQueue, "__const_udelay", 138 fixFuncEventAddr(addr), 1000, 107374); 139 } else { 140 panic("couldn't find kernel symbol \'udelay\'"); 141 } 142 143 secDataPtrAddr = 0; 144 secDataAddr = 0; 145 penReleaseAddr = 0; 146 kernelSymtab->findAddress("__secondary_data", secDataPtrAddr); 147 kernelSymtab->findAddress("secondary_data", secDataAddr); 148 kernelSymtab->findAddress("pen_release", penReleaseAddr); 149 150 secDataPtrAddr &= ~ULL(0x7F); 151 secDataAddr &= ~ULL(0x7F); 152 penReleaseAddr &= ~ULL(0x7F); 153 | |
154 for (int i = 0; i < threadContexts.size(); i++) { 155 threadContexts[i]->setIntReg(0, 0); 156 threadContexts[i]->setIntReg(1, params()->machine_type); 157 threadContexts[i]->setIntReg(2, params()->atags_addr); 158 } 159} 160 161LinuxArmSystem::~LinuxArmSystem() --- 12 unchanged lines hidden --- | 153 for (int i = 0; i < threadContexts.size(); i++) { 154 threadContexts[i]->setIntReg(0, 0); 155 threadContexts[i]->setIntReg(1, params()->machine_type); 156 threadContexts[i]->setIntReg(2, params()->atags_addr); 157 } 158} 159 160LinuxArmSystem::~LinuxArmSystem() --- 12 unchanged lines hidden --- |