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

_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to