[PATCH] ARM: errata: pl310 cache sync operation may be faulty
Srinidhi KASAGAR
srinidhi.kasagar at stericsson.com
Wed Feb 16 07:34:11 EST 2011
On Wed, Feb 16, 2011 at 11:32:12 +0100, Catalin Marinas wrote:
> 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.
updated patch below.
More information about the linux-arm-kernel
mailing list