[PATCH] ARM: errata: pl310 cache sync operation may be faulty

Catalin Marinas catalin.marinas at arm.com
Wed Feb 16 05:32:12 EST 2011


On 16 February 2011 06:03, Srinidhi KASAGAR
<srinidhi.kasagar at stericsson.com> wrote:
> On Tue, Feb 15, 2011 at 12:34:22 +0100, Russell King - ARM Linux wrote:
>> On Tue, Feb 15, 2011 at 04:48:03PM +0530, srinidhi kasagar wrote:
>> > +#ifdef ARM_ERRATA_753970
>> > +#define L2X0_DUMMY_REG  0x740
>> > +   /* write to an unmmapped register */
>> > +   writel_relaxed(0, base + L2X0_DUMMY_REG);
>> > +   cache_wait(base + L2X0_CACHE_SYNC, 1);
>> > +#else
>> >     writel_relaxed(0, base + L2X0_CACHE_SYNC);
>> >     cache_wait(base + L2X0_CACHE_SYNC, 1);
>> > +#endif
>>
>> So why wrap cache_wait() up in that horrible ifdef as well - and why not
>> put the dummy register definition along side the other register definitions?
[...]
> --- a/arch/arm/mm/cache-l2x0.c
> +++ b/arch/arm/mm/cache-l2x0.c
> @@ -49,8 +49,14 @@ static inline void cache_wait(void __iomem *reg, unsigned long mask)
>  static inline void cache_sync(void)
>  {
>        void __iomem *base = l2x0_base;
> +
> +#ifdef CONFIG_ARM_ERRATA_753970
> +       /* write to an unmmapped register */
> +       writel_relaxed(0, base + L2X0_DUMMY_REG);
> +#else
>        writel_relaxed(0, base + L2X0_CACHE_SYNC);
>        cache_wait(base + L2X0_CACHE_SYNC, 1);
> +#endif
>  }

You could still leave cache_wait() after #endif, even though it is a
no-op. I think it is clearer that the erratum workaround only targets
the sync.

-- 
Catalin



More information about the linux-arm-kernel mailing list