[RFC][PATCH v4] powerpc/mm: e300c2/c3/c4 TLB errata workaround

Kumar Gala galak at kernel.crashing.org
Tue Mar 17 02:09:40 EST 2009


On Mar 16, 2009, at 10:06 AM, Kumar Gala wrote:

>
> On Mar 16, 2009, at 10:02 AM, David Jander wrote:
>
>>
>> Ok, I was analysing your code (which seems much more compact than  
>> mine):
>>
>> On Monday 16 March 2009 14:02:18 Kumar Gala wrote:
>>> [...]
>>> --- a/arch/powerpc/kernel/head_32.S
>>> +++ b/arch/powerpc/kernel/head_32.S
>>> @@ -587,9 +587,19 @@ DataLoadTLBMiss:
>>> 	ori	r1,r1,0xe04		/* clear out reserved bits */
>>> 	andc	r1,r0,r1		/* PP = user? (rw&dirty? 2: 3): 0 */
>>> 	mtspr	SPRN_RPA,r1
>>> +	mfspr	r2,SPRN_SRR1		/* Need to restore CR0 */
>>> +	mtcrf	0x80,r2
>>> +BEGIN_MMU_FTR_SECTION
>>> +	li	r0,1
>>> +	lwz	r1,sw_way_lru at l(0)
>>> +	rlwinm	r3,r3,19,25,29		/* Get Address bits 19:15 */
>>
>> This should be 'rlwinm	r3,r3,17,27,31' now, since you address bits,  
>> not ints.
>
> was just copying/pasting what you had :)
>
>> Note that you are trashing r3 (SPRN_DMISS) here!
>
> good catch..
>
>>> +	slw	r0,r0,r3
>>> +	xor	r1,r0,r1
>>> +	srw	r0,r1,r3
>>> +	stw	r1,sw_way_lru at l(0)
>>> +	rlwimi	r2,r0,31-14,14,14

I'm also missing a:
	mtspr	SPRN_SRR1,r2

- k



More information about the Linuxppc-dev mailing list