summaryrefslogtreecommitdiff
path: root/system/alpha/console/console.c
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2004-12-06 11:44:22 -0500
committerAli Saidi <saidi@eecs.umich.edu>2004-12-06 11:44:22 -0500
commit5821f37cb6f1875f5912adc37a01139a159e697c (patch)
treef05941554025e5e72c0dda80e41095ea91359655 /system/alpha/console/console.c
parent99a522fb8b04a30d2114a19642be9a7acd78b425 (diff)
downloadgem5-5821f37cb6f1875f5912adc37a01139a159e697c.tar.xz
Add support for tsunami with 64 processors and fix some console bugs
I steped on while doing it console/console.c: Allocate more HWRPB pages so we have room for 64 percpu_rpbs Fix writing of Console Relocation Block virtual addresses so that if they are outside of the first page, which they will be with more than 8 processors, the correct adress is written palcode/Makefile: Update makefile for tsunami with 64 processors palcode/platform_m5.S: Add support for tsunami with 64 processors
Diffstat (limited to 'system/alpha/console/console.c')
-rw-r--r--system/alpha/console/console.c21
1 files changed, 8 insertions, 13 deletions
diff --git a/system/alpha/console/console.c b/system/alpha/console/console.c
index b4afcaae1..2ab4c6ec8 100644
--- a/system/alpha/console/console.c
+++ b/system/alpha/console/console.c
@@ -58,7 +58,7 @@ typedef unsigned int uint32;
/* Kernel write | kernel read | valid */
#define KPTE(x) ((ul)((((ul)(x)) << 32) | 0x1101))
-#define HWRPB_PAGES 4
+#define HWRPB_PAGES 16
#define MDT_BITMAP_PAGES 4
#define CSERVE_K_JTOKERN 0x18
@@ -480,6 +480,7 @@ unixBoot(int go, int argc, char **argv)
first[1] = KPTE(PFN(first)); /* Region 3 */
second[SECOND(0x10000000)] = KPTE(PFN(third_rpb)); /* Region 0 */
+
for (i=0;i<NUM_KERNEL_THIRD;i++) {
second[SECOND(0x20000000)+i] = KPTE(PFN(third_kernel)+i); /* Region 1 */
}
@@ -720,9 +721,10 @@ unixBoot(int go, int argc, char **argv)
rpb_crb->rpb_map[0].rpb_pgcount = HWRPB_PAGES;
- printf_lock("Console Callback at 0x%x, fixup at 0x%x \n",
+ printf_lock("Console Callback at 0x%x, fixup at 0x%x, crb offset: 0x%x\n",
rpb_crb->rpb_va_disp,
- rpb_crb->rpb_va_fixup );
+ rpb_crb->rpb_va_fixup,
+ rpb->rpb_crb_off);
rpb_mdt = (struct _xxm_rpb_mdt *) (((ul)rpb_crb) + sizeof(struct rpb_crb));
rpb->rpb_mdt_off = (ul)rpb_mdt - (ul)rpb;
@@ -811,11 +813,7 @@ unixBoot(int go, int argc, char **argv)
{
ul *ptr = (ul*)((char*)rpb_dsr + sizeof(struct rpb_dsr ));
rpb_crb->rpb_pa_disp = KSEG_TO_PHYS(ptr);
-#if 0
- rpb_crb->rpb_va_disp = 0x10000000 + ((ul)ptr&(0x2000*HWRPB_PAGES-1));
-#else
- rpb_crb->rpb_va_disp = 0x10000000 + ((ul)ptr & 0x1fff);
-#endif
+ rpb_crb->rpb_va_disp = 0x10000000 + (((ul)ptr - (ul)rpb) & (0x2000*HWRPB_PAGES-1));
printf_lock("ConsoleDispatch at virt %x phys %x val %x\n",
rpb_crb->rpb_va_disp,
rpb_crb->rpb_pa_disp,
@@ -823,12 +821,9 @@ unixBoot(int go, int argc, char **argv)
*ptr++ = 0;
*ptr++ = (ul) consoleCallback;
rpb_crb->rpb_pa_fixup = KSEG_TO_PHYS(ptr);
-#if 0
- rpb_crb->rpb_va_fixup = 0x10000000 + ((ul)ptr& (0x2000*HWRPB_PAGES-1));
-#else
- rpb_crb->rpb_va_fixup = 0x10000000 + ((ul)ptr & 0x1fff);
-#endif
+ rpb_crb->rpb_va_fixup = 0x10000000 + (((ul)ptr - (ul)rpb) & (0x2000*HWRPB_PAGES-1));
*ptr++ = 0;
+
*ptr++ = (ul) consoleFixup;
}