[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