Module Name:    src
Committed By:   cliff
Date:           Mon Mar 22 07:45:19 UTC 2010

Modified Files:
        src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_subr.S

Log Message:
- in rmixlfw_wakeup_cpu, properly nuke the upper half of sp
before OR-ing in KSEG0_START.  This is only needed in _LP64 case.
- in rmixl_cpu_trampoline:
trampoline args addr needs reconstructing the upper half only in _LP64 case.
delete set of MIPS_SR_INT_IE bit.
use REG_L instead of PTR_L to load trampoline args
so we get 64 bit loads in both 32 and 64 bit kernels.


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.5 -r1.1.2.6 src/sys/arch/mips/rmi/rmixl_subr.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/rmi/rmixl_subr.S
diff -u src/sys/arch/mips/rmi/rmixl_subr.S:1.1.2.5 src/sys/arch/mips/rmi/rmixl_subr.S:1.1.2.6
--- src/sys/arch/mips/rmi/rmixl_subr.S:1.1.2.5	Sun Mar 21 21:29:45 2010
+++ src/sys/arch/mips/rmi/rmixl_subr.S	Mon Mar 22 07:45:19 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rmixl_subr.S,v 1.1.2.5 2010/03/21 21:29:45 cliff Exp $	*/
+/*	$NetBSD: rmixl_subr.S,v 1.1.2.6 2010/03/22 07:45:19 cliff Exp $	*/
 
 #include "opt_cputype.h"
 #include "opt_multiprocessor.h"
@@ -55,10 +55,14 @@
 	REG_S		t0, CALLFRAME_SIZ+2*SZREG(sp)
 
 	move		s0, sp			/* save sp */
-	srl		t0, sp, 0		/* nuke upper half */
+#ifdef _LP64
+	dsll32		t0, sp, 0		/* nuke upper half */
+	dsrl32		t0, t0, 0		/*  "    "     "   */
 	li		t1, MIPS_KSEG0_START
+	or		sp, t0, t1		/* set MIPS_KSEG0_START */
+#endif
 	jalr		a3			/* callback to firmware */
-	 or		sp, t0, t1		/* set MIPS_KSEG0_START */
+	 nop
 	move		sp, s0			/* restore sp */
 
 	REG_L		t0, CALLFRAME_SIZ+2*SZREG(sp)
@@ -77,13 +81,14 @@
 NESTED(rmixl_cpu_trampoline, CALLFRAME_SIZ, ra)
 #ifdef _LP64
 	li		t0, MIPS_SR_KX
+	li		t1, MIPS_KSEG0_START	/* reconstruct presumed upper half ... */
+	or		a0, a0, t1		/* ... of trampoline args addr */
 #else
 	li		t0, 0
 #endif
 
 	mtc0		zero, $9, 7	/* disable all in MIPS_COP_0_EIMR */
 
-	or		t0, MIPS_SR_INT_IE
 	mtc0		t0, MIPS_COP_0_STATUS
 
 	/* ensure COP_0_EBASE field 'EBASE' is 0 */
@@ -91,26 +96,22 @@
 	and		t0, t0, 0x3ff
 	mtc0		t0, $15, 1	/* MIPS_COP_0_EBASE */
 
-	/* XXX reconstruct presumed upper half of trampoline args addr */
-	li		t1, MIPS_KSEG0_START
-	or		a0, a0, t1
-
 	/*
 	 * load our stack pointer from trampoline args
 	 */
-	PTR_L		sp, 0*SZREG(a0)		/* XXX ta_sp */
+	REG_L		sp, 0*SZREG(a0)		/* XXX ta_sp */
 
 	/*
 	 * load our (idle) lwp from trampoline args
 	 * save in t8 reg dedicated as 'mips_curlwp'
 	 */
-	PTR_L		t8, 1*SZREG(a0)		/* XXX ta_lwp */
+	REG_L		t8, 1*SZREG(a0)		/* XXX ta_lwp */
 
 	/*
 	 * load our ta_cpuinfo from trampoline args and pass in a1
 	 * jump to common mips cpu_trampoline
 	 */
-	PTR_L		a1, 2*SZREG(a0)		/* XXX ta_cpuinfo */
+	REG_L		a1, 2*SZREG(a0)		/* XXX ta_cpuinfo */
 	j		cpu_trampoline
 	 mtc0		a1, $22, 0		/* MIPS_COP_0_OSSCRATCH */
 

Reply via email to