From 48449a87138c3a6b1d6aff0a7ca7f80058e36010 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 6 Oct 2011 16:46:36 +0000 Subject: 2011-10-06 Gedare Bloom PR 1920/bsp * shared/helenos/kernel/sparc64/src/sun4u/takemmu.S, shared/start/start.S, shared/startup/bspgetworkarea.c, shared/startup/linkcmds: Fix BSP memory use to support more than 4 MB of RAM. --- .../helenos/kernel/sparc64/src/sun4u/takemmu.S | 38 +++++++++++++++++++--- c/src/lib/libbsp/sparc64/shared/start/start.S | 7 ++-- .../libbsp/sparc64/shared/startup/bspgetworkarea.c | 2 +- c/src/lib/libbsp/sparc64/shared/startup/linkcmds | 8 ++--- 4 files changed, 43 insertions(+), 12 deletions(-) (limited to 'c/src/lib/libbsp/sparc64/shared') diff --git a/c/src/lib/libbsp/sparc64/shared/helenos/kernel/sparc64/src/sun4u/takemmu.S b/c/src/lib/libbsp/sparc64/shared/helenos/kernel/sparc64/src/sun4u/takemmu.S index 70aa3f1260..35fe1034bc 100644 --- a/c/src/lib/libbsp/sparc64/shared/helenos/kernel/sparc64/src/sun4u/takemmu.S +++ b/c/src/lib/libbsp/sparc64/shared/helenos/kernel/sparc64/src/sun4u/takemmu.S @@ -178,11 +178,11 @@ _take_mmu: stxa %g0, [%g1] ASI_DMMU_DEMAP membar #Sync */ -#define SET_TLB_TAG(r1, context) \ - set VMA | (context << TLB_TAG_ACCESS_CONTEXT_SHIFT), %r1 +#define SET_TLB_TAG(xVMA, r1, context) \ + set xVMA | (context << TLB_TAG_ACCESS_CONTEXT_SHIFT), %r1 ! write DTLB tag - SET_TLB_TAG(g1, MEM_CONTEXT_KERNEL) + SET_TLB_TAG(0x4000, g1, MEM_CONTEXT_KERNEL) stxa %g1, [VA_DMMU_TAG_ACCESS] %asi membar #Sync @@ -271,7 +271,7 @@ _take_mmu: flush %g5 */ ! write ITLB tag of context 0 - SET_TLB_TAG(g1, MEM_CONTEXT_KERNEL) + SET_TLB_TAG(0x4000, g1, MEM_CONTEXT_KERNEL) mov VA_DMMU_TAG_ACCESS, %g2 stxa %g1, [%g2] ASI_IMMU flush %g5 @@ -280,6 +280,36 @@ _take_mmu: SET_TLB_DATA(g1, g2, TTE_L) ! use non-global mapping stxa %g1, [%g0] ASI_ITLB_DATA_IN_REG flush %g5 + + ! GAB: add more mappings for dmmu in 4 MB chunks + SET_TLB_TAG(0x404000, g1, MEM_CONTEXT_KERNEL) + stxa %g1, [VA_DMMU_TAG_ACCESS] %asi + membar #Sync + set 0x400000, %g1 + add %g1, %l5, %l5 + SET_TLB_DATA(g1, g2, TTE_L | TTE_W) + stxa %g1, [%g0] ASI_DTLB_DATA_IN_REG + membar #Sync + + SET_TLB_TAG(0x804000, g1, MEM_CONTEXT_KERNEL) + stxa %g1, [VA_DMMU_TAG_ACCESS] %asi + membar #Sync + set 0x400000, %g1 + add %g1, %l5, %l5 + SET_TLB_DATA(g1, g2, TTE_L | TTE_W) + stxa %g1, [%g0] ASI_DTLB_DATA_IN_REG + membar #Sync + + SET_TLB_TAG(0xc04000, g1, MEM_CONTEXT_KERNEL) + stxa %g1, [VA_DMMU_TAG_ACCESS] %asi + membar #Sync + set 0x400000, %g1 + add %g1, %l5, %l5 + SET_TLB_DATA(g1, g2, TTE_L | TTE_W) + stxa %g1, [%g0] ASI_DTLB_DATA_IN_REG + membar #Sync + + /* ! enter nucleus - using context 0 wrpr %g0, 1, %tl diff --git a/c/src/lib/libbsp/sparc64/shared/start/start.S b/c/src/lib/libbsp/sparc64/shared/start/start.S index 0d660bae0d..f812885180 100644 --- a/c/src/lib/libbsp/sparc64/shared/start/start.S +++ b/c/src/lib/libbsp/sparc64/shared/start/start.S @@ -123,6 +123,10 @@ setstack: set SYM(StackStart), %sp add %sp, -STACK_BIAS, %sp + /* BSP-specific pre-bootcard initializations */ + call SYM(_BSP_init) + nop + setx ofw_cif, %l0, %l1 call ofw_init ! initialize OpenFirmware @@ -131,9 +135,6 @@ setstack: call bootstrap nop - /* BSP-specific pre-bootcard initializations */ - call SYM(_BSP_init) - nop /* Set up ISR handler for interrupt enable/disable */ setx SYM(syscall), %l0, %o1 diff --git a/c/src/lib/libbsp/sparc64/shared/startup/bspgetworkarea.c b/c/src/lib/libbsp/sparc64/shared/startup/bspgetworkarea.c index 2b8775df57..7bef613f9c 100644 --- a/c/src/lib/libbsp/sparc64/shared/startup/bspgetworkarea.c +++ b/c/src/lib/libbsp/sparc64/shared/startup/bspgetworkarea.c @@ -59,7 +59,7 @@ void bsp_get_work_area( #endif *work_area_start = WorkAreaBase; - *work_area_size = ram_end - (uintptr_t) WorkAreaBase; + *work_area_size = (uintptr_t) HeapSize; *heap_start = (void*) HeapBase; *heap_size = (uintptr_t) HeapSize; diff --git a/c/src/lib/libbsp/sparc64/shared/startup/linkcmds b/c/src/lib/libbsp/sparc64/shared/startup/linkcmds index 30b7b2516e..0cf83ff30f 100644 --- a/c/src/lib/libbsp/sparc64/shared/startup/linkcmds +++ b/c/src/lib/libbsp/sparc64/shared/startup/linkcmds @@ -13,9 +13,9 @@ * Declare some sizes. */ RamBase = DEFINED(RamBase) ? RamBase : 0x0; -RamSize = DEFINED(RamSize) ? RamSize : 16M; -HeapSize = DEFINED(HeapSize) ? HeapSize : 256k; -StackSize = DEFINED(StackSize) ? StackSize : 256k; +RamSize = DEFINED(RamSize) ? RamSize : 12M; +HeapSize = DEFINED(HeapSize) ? HeapSize : 1M; +StackSize = DEFINED(StackSize) ? StackSize : 1M; RAM_END = RamBase + RamSize; @@ -25,7 +25,7 @@ ENTRY(start) MEMORY { - ram : ORIGIN = 0x0, LENGTH = 16M + ram : ORIGIN = 0x0, LENGTH = 12M } -- cgit v1.2.3