Skip site navigation (1)Skip section navigation (2)
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>