Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 Dec 2013 19:45:04 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r258808 - head/sys/powerpc/ofw
Message-ID:  <201312011945.rB1Jj492079019@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Sun Dec  1 19:45:04 2013
New Revision: 258808
URL: http://svnweb.freebsd.org/changeset/base/258808

Log:
  No actual hardware supported by FreeBSD requires this SPRG save/restore
  paranoia, so kill it. In particular, changes to SPRG0 are dangerous, since
  that is where the PCPU pointer is kept.

Modified:
  head/sys/powerpc/ofw/ofw_machdep.c

Modified: head/sys/powerpc/ofw/ofw_machdep.c
==============================================================================
--- head/sys/powerpc/ofw/ofw_machdep.c	Sun Dec  1 19:43:15 2013	(r258807)
+++ head/sys/powerpc/ofw/ofw_machdep.c	Sun Dec  1 19:45:04 2013	(r258808)
@@ -91,52 +91,6 @@ ofw_restore_trap_vec(char *restore_trap_
 	__syncicache(EXC_RSVD, EXC_LAST - EXC_RSVD);
 }
 
-/*
- * Saved SPRG0-3 from OpenFirmware. Will be restored prior to the callback.
- */
-register_t	ofw_sprg0_save;
-
-static __inline void
-ofw_sprg_prepare(void)
-{
-	if (ofw_real_mode)
-		return;
-	
-	/*
-	 * Assume that interrupt are disabled at this point, or
-	 * SPRG1-3 could be trashed
-	 */
-	__asm __volatile("mfsprg0 %0\n\t"
-			 "mtsprg0 %1\n\t"
-	    		 "mtsprg1 %2\n\t"
-	    		 "mtsprg2 %3\n\t"
-			 "mtsprg3 %4\n\t"
-			 : "=&r"(ofw_sprg0_save)
-			 : "r"(ofmsr[1]),
-			 "r"(ofmsr[2]),
-			 "r"(ofmsr[3]),
-			 "r"(ofmsr[4]));
-}
-
-static __inline void
-ofw_sprg_restore(void)
-{
-#if 0
-	if (ofw_real_mode)
-		return;
-#endif
-	
-	/*
-	 * Note that SPRG1-3 contents are irrelevant. They are scratch
-	 * registers used in the early portion of trap handling when
-	 * interrupts are disabled.
-	 *
-	 * PCPU data cannot be used until this routine is called !
-	 */
-	__asm __volatile("mtsprg0 %0" :: "r"(ofw_sprg0_save));
-}
-#endif
-
 static int
 parse_ofw_memory(phandle_t node, const char *prop, struct mem_region *output)
 {
@@ -332,13 +286,10 @@ openfirmware_core(void *args)
 
 	/*
 	 * Turn off exceptions - we really don't want to end up
-	 * anywhere unexpected with PCPU set to something strange
-	 * or the stack pointer wrong.
+	 * anywhere in the kernel while in OF state.
 	 */
 	oldmsr = intr_disable();
 
-	ofw_sprg_prepare();
-
 	/* Save trap vectors */
 	ofw_save_trap_vec(save_trap_of);
 
@@ -360,8 +311,6 @@ openfirmware_core(void *args)
 	/* Restore trap vecotrs */
 	ofw_restore_trap_vec(save_trap_of);
 
-	ofw_sprg_restore();
-
 	intr_restore(oldmsr);
 
 	return (result);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201312011945.rB1Jj492079019>