Deleted Added
sdiff udiff text old ( 9934:b105ac205021 ) new ( 10037:5cac77888310 )
full compact
1/*
2 * Copyright (c) 2010-2012 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
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 47 unchanged lines hidden (view full) ---

58#include "sim/stat_control.hh"
59
60using namespace ArmISA;
61using namespace Linux;
62
63LinuxArmSystem::LinuxArmSystem(Params *p)
64 : ArmSystem(p),
65 enableContextSwitchStatsDump(p->enable_context_switch_stats_dump),
66 kernelPanicEvent(NULL), kernelOopsEvent(NULL)
67{
68 if (p->panic_on_panic) {
69 kernelPanicEvent = addKernelFuncEventOrPanic<PanicPCEvent>(
70 "panic", "Kernel panic in simulated kernel");
71 } else {
72#ifndef NDEBUG
73 kernelPanicEvent = addKernelFuncEventOrPanic<BreakPCEvent>("panic");
74#endif

--- 18 unchanged lines hidden (view full) ---

93 "__loop_const_udelay", "__const_udelay", 1000, 107374);
94 if(!constUDelaySkipEvent)
95 constUDelaySkipEvent = addKernelFuncEventOrPanic<UDelayEvent>(
96 "__const_udelay", "__const_udelay", 1000, 107374);
97
98 secDataPtrAddr = 0;
99 secDataAddr = 0;
100 penReleaseAddr = 0;
101 kernelSymtab->findAddress("__secondary_data", secDataPtrAddr);
102 kernelSymtab->findAddress("secondary_data", secDataAddr);
103 kernelSymtab->findAddress("pen_release", penReleaseAddr);
104
105 secDataPtrAddr &= ~ULL(0x7F);
106 secDataAddr &= ~ULL(0x7F);
107 penReleaseAddr &= ~ULL(0x7F);
108}
109
110bool
111LinuxArmSystem::adderBootUncacheable(Addr a)
112{
113 Addr block = a & ~ULL(0x7F);
114 if (block == secDataPtrAddr || block == secDataAddr ||
115 block == penReleaseAddr)
116 return true;
117 return false;
118}
119
120void
121LinuxArmSystem::initState()
122{
123 // Moved from the constructor to here since it relies on the
124 // address map being resolved in the interconnect

--- 15 unchanged lines hidden (view full) ---

140 // device trees.
141 bool kernel_has_fdt_support =
142 kernelSymtab->findAddress("unflatten_device_tree", addr);
143 bool dtb_file_specified = params()->dtb_filename != "";
144
145 if (kernel_has_fdt_support && dtb_file_specified) {
146 // Kernel supports flattened device tree and dtb file specified.
147 // Using Device Tree Blob to describe system configuration.
148 inform("Loading DTB file: %s\n", params()->dtb_filename);
149
150 ObjectFile *dtb_file = createObjectFile(params()->dtb_filename, true);
151 if (!dtb_file) {
152 fatal("couldn't load DTB file: %s\n", params()->dtb_filename);
153 }
154
155 DtbObject *_dtb_file = dynamic_cast<DtbObject*>(dtb_file);
156
157 if (_dtb_file) {
158 if (!_dtb_file->addBootCmdLine(params()->boot_osflags.c_str(),
159 params()->boot_osflags.size())) {
160 warn("couldn't append bootargs to DTB file: %s\n",
161 params()->dtb_filename);
162 }
163 } else {
164 warn("dtb_file cast failed; couldn't append bootargs "
165 "to DTB file: %s\n", params()->dtb_filename);
166 }
167
168 dtb_file->setTextBase(params()->atags_addr);
169 dtb_file->loadSections(physProxy);
170 delete dtb_file;
171 } else {
172 // Using ATAGS
173 // Warn if the kernel supports FDT and we haven't specified one
174 if (kernel_has_fdt_support) {
175 assert(!dtb_file_specified);
176 warn("Kernel supports device tree, but no DTB file specified\n");

--- 33 unchanged lines hidden (view full) ---

210 offset += ac.copyOut(boot_data + offset);
211 offset += am.copyOut(boot_data + offset);
212 offset += ad.copyOut(boot_data + offset);
213 offset += an.copyOut(boot_data + offset);
214
215 DPRINTF(Loader, "Boot atags was %d bytes in total\n", size << 2);
216 DDUMP(Loader, boot_data, size << 2);
217
218 physProxy.writeBlob(params()->atags_addr, boot_data, size << 2);
219
220 delete[] boot_data;
221 }
222
223 for (int i = 0; i < threadContexts.size(); i++) {
224 threadContexts[i]->setIntReg(0, 0);
225 threadContexts[i]->setIntReg(1, params()->machine_type);
226 threadContexts[i]->setIntReg(2, params()->atags_addr);
227 }
228}
229
230LinuxArmSystem::~LinuxArmSystem()
231{
232 if (uDelaySkipEvent)
233 delete uDelaySkipEvent;
234 if (constUDelaySkipEvent)

--- 103 unchanged lines hidden ---