Author: marius
Date: Sat Feb 13 15:36:33 2010
New Revision: 203833
URL: http://svn.freebsd.org/changeset/base/203833

Log:
  - At least the trap table of the Sun Fire V1280 firmware apparently has
    no cleanwindows handler so just remove trying to trigger it from _start
    and the AP trampoline code as that leads to a crash there. This should
    be okay as leaking data from the OFW via the CPU registers on start of
    the kernel should be no real concern.
  - Make the comments of _start and the AP trampoline code regarding the
    initializations they perform match each other and reality.
  - Make the comments of the AP trampoline code regarding iTLB accesses
    refer to the right macro.

Modified:
  head/sys/sparc64/sparc64/locore.S
  head/sys/sparc64/sparc64/mp_locore.S

Modified: head/sys/sparc64/sparc64/locore.S
==============================================================================
--- head/sys/sparc64/sparc64/locore.S   Sat Feb 13 15:35:51 2010        
(r203832)
+++ head/sys/sparc64/sparc64/locore.S   Sat Feb 13 15:36:33 2010        
(r203833)
@@ -46,12 +46,14 @@ ENTRY(btext)
 ENTRY(_start)
        /*
         * Initialize misc. state to known values: interrupts disabled, normal
-        * globals, windows flushed (cr = 0, cs = nwindows - 1), no clean
-        * windows, pil 0, and floating point disabled.
+        * globals, windows flushed (cr = 0, cs = nwindows - 1), PIL 0 and
+        * floating point disabled.
+        * Note that some firmware versions don't implement a clean window
+        * trap handler so we unfortunately can't clear the windows by setting
+        * %cleanwin to zero here.
         */
        wrpr    %g0, PSTATE_NORMAL, %pstate
        flushw
-       wrpr    %g0, 0, %cleanwin
        wrpr    %g0, 0, %pil
        wr      %g0, 0, %fprs
 

Modified: head/sys/sparc64/sparc64/mp_locore.S
==============================================================================
--- head/sys/sparc64/sparc64/mp_locore.S        Sat Feb 13 15:35:51 2010        
(r203832)
+++ head/sys/sparc64/sparc64/mp_locore.S        Sat Feb 13 15:36:33 2010        
(r203833)
@@ -44,12 +44,14 @@ __FBSDID("$FreeBSD$");
        .text
        _ALIGN_TEXT
        /*
-        * Initialize misc. state to known values: interrupts disabled,
-        * normal globals, no clean windows, PIL 0, and floating point
-        * disabled.
+        * Initialize misc. state to known values: interrupts disabled, normal
+        * globals, windows flushed (cr = 0, cs = nwindows - 1), PIL 0 and
+        * floating point disabled.
+        * Note that some firmware versions don't implement a clean window
+        * trap handler so we unfortunately can't clear the windows by setting
+        * %cleanwin to zero here.
         */
 1:     wrpr    %g0, PSTATE_NORMAL, %pstate
-       wrpr    %g0, 0, %cleanwin
        wrpr    %g0, 0, %pil
        wr      %g0, 0, %fprs
 
@@ -68,7 +70,7 @@ __FBSDID("$FreeBSD$");
 
        setx    TD_V | TD_L, %l1, %l0
        /*
-        * We read ASI_DTLB_DATA_ACCESS_REG twice in order to work
+        * We read ASI_ITLB_DATA_ACCESS_REG twice in order to work
         * around errata of USIII and beyond.
         */
        ldxa    [%g0] ASI_ITLB_DATA_ACCESS_REG, %g0
@@ -94,7 +96,7 @@ __FBSDID("$FreeBSD$");
        mov     (1 << TLB_DAR_SLOT_SHIFT), %l4
        setx    TD_V, %l1, %l0
        /*
-        * We read ASI_DTLB_DATA_ACCESS_REG twice in order to work
+        * We read ASI_ITLB_DATA_ACCESS_REG twice in order to work
         * around errata of USIII and beyond.
         */
 2:     ldxa    [%l4] ASI_ITLB_DATA_ACCESS_REG, %g0
@@ -136,7 +138,7 @@ __FBSDID("$FreeBSD$");
        mov     (1 << TLB_DAR_SLOT_SHIFT), %l0
        setx    TD_V, %o1, %o0
        /*
-        * We read ASI_DTLB_DATA_ACCESS_REG twice in order to work
+        * We read ASI_ITLB_DATA_ACCESS_REG twice in order to work
         * around errata of USIII and beyond.
         */
 5:     ldxa    [%l0] ASI_ITLB_DATA_ACCESS_REG, %g0
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to