summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2004-03-17 16:12:13 -0500
committerAli Saidi <saidi@eecs.umich.edu>2004-03-17 16:12:13 -0500
commit1eb0c9626a575dfc9f2e32243610e76614c331d2 (patch)
tree03c56cbb588cd3715e37f06f0156e023e52be48c
parent256a1ac478f8da64c6d7d64f04decf2976def2cd (diff)
downloadgem5-1eb0c9626a575dfc9f2e32243610e76614c331d2.tar.xz
Updated kern/* code so we can have one console code and the simulator
changes the HWRPB to the correct system type/variation. kern/linux/linux_system.cc: kern/tru64/tru64_system.cc: Added code to change system type/variation so that we can have one console --HG-- extra : convert_revision : 5f35f7d965419cd3038e2e85e05a20884b2f6068
-rw-r--r--kern/linux/linux_system.cc14
-rw-r--r--kern/tru64/tru64_system.cc14
2 files changed, 28 insertions, 0 deletions
diff --git a/kern/linux/linux_system.cc b/kern/linux/linux_system.cc
index d863ffd0a..12c1f5c32 100644
--- a/kern/linux/linux_system.cc
+++ b/kern/linux/linux_system.cc
@@ -300,6 +300,20 @@ LinuxSystem::LinuxSystem(const string _name, const uint64_t _init_param,
strcpy(osflags, boot_osflags.c_str());
}
+ if (consoleSymtab->findAddress("xxm_rpb", addr)) {
+ Addr paddr = vtophys(physmem, addr);
+ char *hwprb = (char *)physmem->dma_addr(paddr, sizeof(uint64_t));
+
+ if (hwprb) {
+ *(uint64_t*)(hwprb+0x50) = 34; // Tsunami
+ *(uint64_t*)(hwprb+0x58) = (1<<10);
+ }
+ else
+ panic("could not translate hwprb addr to set system type/variation\n");
+
+ } else
+ panic("could not find hwprb to set system type/variation\n");
+
if (kernelSymtab->findAddress("panic", addr))
kernelPanicEvent->schedule(addr);
else
diff --git a/kern/tru64/tru64_system.cc b/kern/tru64/tru64_system.cc
index b03d7bf26..f8dda6f84 100644
--- a/kern/tru64/tru64_system.cc
+++ b/kern/tru64/tru64_system.cc
@@ -124,6 +124,20 @@ Tru64System::Tru64System(const string _name, const uint64_t _init_param,
strcpy(osflags, boot_osflags.c_str());
}
+ if (consoleSymtab->findAddress("xxm_rpb", addr)) {
+ Addr paddr = vtophys(physmem, addr);
+ char *hwprb = (char *)physmem->dma_addr(paddr, sizeof(uint64_t));
+
+ if (hwprb) {
+ *(uint64_t*)(hwprb+0x50) = 12; // Tlaser
+ *(uint64_t*)(hwprb+0x58) = (2<<1);
+ }
+ else
+ panic("could not translate hwprb addr to set system type/variation\n");
+ } else
+ panic("could not find hwprb to set system type/variation\n");
+
+
#ifdef DEBUG
if (kernelSymtab->findAddress("panic", addr))
kernelPanicEvent->schedule(addr);