svn commit: r306065 - in head/sys vs. PowerMacs: Nathan's trail patch included but inappropriate?
Justin Hibbits
chmeeedalf at gmail.com
Wed Sep 21 17:28:05 UTC 2016
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
More information about the freebsd-ppc
mailing list