Date: Wed, 21 Sep 2016 12:28:02 -0500 From: Justin Hibbits <chmeeedalf@gmail.com> To: Mark Millard <markmi@dsl-only.net> Cc: Nathan Whitehorn <nwhitehorn@freebsd.org>, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, svn-src-head@freebsd.org Subject: Re: svn commit: r306065 - in head/sys vs. PowerMacs: Nathan's trail patch included but inappropriate? Message-ID: <917EFF5A-D054-4424-9D7D-4E4BEF6072EF@gmail.com> In-Reply-To: <C48933C3-DB22-4D94-B22D-B51822197E4E@dsl-only.net> References: <C48933C3-DB22-4D94-B22D-B51822197E4E@dsl-only.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sep 21, 2016, at 1:46 AM, Mark Millard wrote: > The following from > > https://lists.freebsd.org/pipermail/svn-src-head/2016-September/091934.html > > seems in include a patch that Nathan made for testing on PowerMac/ > iMac/Xserve G5's that failed the PowerMac7,3 test that was tried by > Jukka A. Ukkonen. > >> Modified: head/sys/powerpc/ofw/ofw_machdep.c >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- head/sys/powerpc/ofw/ofw_machdep.c Wed Sep 21 02:27:23 2016 >> (r306064) >> +++ head/sys/powerpc/ofw/ofw_machdep.c Wed Sep 21 02:28:39 2016 >> (r306065) >> @@ -99,6 +99,7 @@ ofw_restore_trap_vec(char *restore_trap_ >> /* >> * Saved SPRG0-3 from OpenFirmware. Will be restored prior to the >> callback. >> */ >> +#ifndef __powerpc64__ >> register_t ofw_sprg0_save; >> >> static __inline void >> @@ -140,6 +141,8 @@ ofw_sprg_restore(void) >> } >> #endif >> >> +#endif >> + >> static int >> parse_ofw_memory(phandle_t node, const char *prop, struct >> mem_region *output) >> { >> @@ -344,11 +347,12 @@ OF_initial_setup(void *fdt_ptr, void *ju >> ofmsr[0] = mfmsr(); >> #ifdef __powerpc64__ >> ofmsr[0] &= ~PSL_SF; >> - #endif >> + #else >> __asm __volatile("mfsprg0 %0" : "=&r"(ofmsr[1])); >> __asm __volatile("mfsprg1 %0" : "=&r"(ofmsr[2])); >> __asm __volatile("mfsprg2 %0" : "=&r"(ofmsr[3])); >> __asm __volatile("mfsprg3 %0" : "=&r"(ofmsr[4])); >> + #endif >> openfirmware_entry = openfirm; >> >> if (ofmsr[0] & PSL_DR) >> @@ -440,7 +444,9 @@ openfirmware_core(void *args) >> */ >> oldmsr = intr_disable(); >> >> +#ifndef __powerpc64__ >> ofw_sprg_prepare(); >> +#endif >> >> /* Save trap vectors */ >> ofw_save_trap_vec(save_trap_of); >> @@ -463,7 +469,9 @@ openfirmware_core(void *args) >> /* Restore trap vecotrs */ >> ofw_restore_trap_vec(save_trap_of); >> >> +#ifndef __powerpc64__ >> ofw_sprg_restore(); >> +#endif >> >> intr_restore(oldmsr); > > Part of the ofw_sprg_prepare() and ofw_sprg_restore() activity is > required for PowerMac G5's to boot: the save of the FreeBSD sprg0 > value and its later restore back to sprg0. (Established by other > testing after Nathan's patch was tried.) > > My guess is that this code was accidentally included in -r306065, > not intentionally included. > > > [There is the separate issue that avoiding restoring the Open > Firmware sprg0 value before calling into Open Firmware (leaving the > FreeBSD value in place) helps PowerMac G5's boot more reliably by > allowing correct handling some SLB faults that sometimes occur.] > > === > Mark Millard > markmi at dsl-only.net > Crap, I got extra stuff in my diff. Going to revert this part tonight, until everything is known good. - Justin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?917EFF5A-D054-4424-9D7D-4E4BEF6072EF>