[OpenBIOS] [commit] r1364 - trunk/openbios-devel/arch/sparc64
repository service
svn at openbios.org
Tue Dec 29 16:50:40 CET 2015
Author: mcayland
Date: Tue Dec 29 16:50:39 2015
New Revision: 1364
URL: http://tracker.coreboot.org/trac/openbios/changeset/1364
Log:
SPARC64: move IMMU/DMMU miss handler stacks inline to the new Forth context stack
Rather than having a separate OpenBIOS stack for IMMU/DMMU miss handlers, reuse
the Forth context stack by reserving 8K extra beneath the CPU save state area and
using that instead.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
Modified:
trunk/openbios-devel/arch/sparc64/vectors.S
Modified: trunk/openbios-devel/arch/sparc64/vectors.S
==============================================================================
--- trunk/openbios-devel/arch/sparc64/vectors.S Tue Dec 29 16:50:36 2015 (r1363)
+++ trunk/openbios-devel/arch/sparc64/vectors.S Tue Dec 29 16:50:39 2015 (r1364)
@@ -276,17 +276,8 @@
.section ".data"
.align 8
- .globl tlb_handler_stack_top, tlb_handler_stack_pointer, obp_ticks_pointer
+ .globl obp_ticks_pointer
- ! Stack for the tlb MMU trap handlers
-tlb_handler_stack_bottom:
- .skip 8192
-tlb_handler_stack_top:
- .skip 8
-
- ! MMU trap handler stack pointer
-tlb_handler_stack_pointer:
- .xword tlb_handler_stack_top
! Pointer to current tick value
obp_ticks_pointer:
@@ -549,10 +540,17 @@
SAVE_CPU_STATE(dtlb)
- /* Switch to TLB locked stack space (note we add an additional 192 bytes required for
+ /* Switch to 8K TLB locked OpenBIOS stack (note we add an additional 192 bytes required for
gcc to save its arguments when building with -O0) */
- setx tlb_handler_stack_top, %g6, %g1
- add %g1, -STACK_BIAS - 192, %sp
+ setx _fcstack_ptr, %g6, %g7
+ ldx [%g7], %g6
+ setx 0x2000, %g4, %g5
+ sub %g6, %g5, %g6
+ stx %g6, [%g7]
+
+ setx - 2047 - 192, %g6, %g7
+ add %g1, %g7, %g7
+ mov %g7, %sp
/* Enable interrupts for window spill/fill traps */
rdpr %pstate, %g7
@@ -570,6 +568,9 @@
/* Restore CPU state from stack */
setx _fcstack_ptr, %g6, %g7
ldx [%g7], %g1
+ setx 0x2000, %g4, %g5
+ add %g1, %g5, %g1
+ stx %g1, [%g7]
RESTORE_CPU_STATE(dtlb)
@@ -590,10 +591,17 @@
SAVE_CPU_STATE(itlb)
- /* Switch to TLB locked stack space (note we add an additional 192 bytes required for
+ /* Switch to 8K TLB locked OpenBIOS stack (note we add an additional 192 bytes required for
gcc to save its arguments when building with -O0) */
- setx tlb_handler_stack_top, %g6, %g1
- add %g1, -STACK_BIAS - 192, %sp
+ setx _fcstack_ptr, %g6, %g7
+ ldx [%g7], %g6
+ setx 0x2000, %g4, %g5
+ sub %g6, %g5, %g6
+ stx %g6, [%g7]
+
+ setx - 2047 - 192, %g6, %g7
+ add %g1, %g7, %g7
+ mov %g7, %sp
/* Enable interrupts for window spill/fill traps */
rdpr %pstate, %g7
@@ -611,6 +619,9 @@
/* Restore CPU state from stack */
setx _fcstack_ptr, %g6, %g7
ldx [%g7], %g1
+ setx 0x2000, %g4, %g5
+ add %g1, %g5, %g1
+ stx %g1, [%g7]
RESTORE_CPU_STATE(itlb)
More information about the OpenBIOS
mailing list