[RFC 07/18] arm: mm: retry on QSD icache parity errors

Ashwin Chaugule ashbertslists at gmail.com
Tue Jan 19 11:16:36 EST 2010


On Mon, Jan 18, 2010 at 1:42 PM, Ashwin Chaugule
<ashbertslists at gmail.com> wrote:

>> +static int
>> +do_imprecise_ext(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
>> +{
>> +#ifdef CONFIG_ARCH_MSM_SCORPION
>> +       unsigned int regval;
>> +       static unsigned char flush_toggle;
>> +
>> +       asm("mrc p15, 0, %0, c5, c1, 0\n" /* read adfsr for fault status */
>> +           : "=r" (regval));
>> +       if (regval == 0x2) {
>> +               /* Fault was caused by icache parity error. Alternate
>> +                * simply retrying the access and flushing the icache. */
>> +               flush_toggle ^= 1;
>> +               if (flush_toggle)
>> +                       asm("mcr p15, 0, %0, c7, c5, 0\n"
>> +                           :
>> +                           : "r" (regval)); /* input value is ignored */
>
> Wouldn't you need regval = 0 here, to clear the EFSR ?
>
>

Gah. Nevermind. Need to write 1 to clear this reg. Alternating methods
to clear regs, is just .. confusing. ;)



More information about the linux-arm-kernel mailing list