[RFC 02/11] ARM: Fix errata 411920 workarounds
Catalin Marinas
catalin.marinas at arm.com
Thu Oct 29 14:32:33 EDT 2009
On Wed, 2009-10-28 at 17:32 +0000, Russell King - ARM Linux wrote:
> On Wed, Oct 28, 2009 at 03:31:35PM +0000, Catalin Marinas wrote:
> > On Sat, 2009-10-24 at 22:36 +0100, Russell King wrote:
> > > diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h
> > > index 3147f75..af0624c 100644
> > > --- a/arch/arm/include/asm/cacheflush.h
> > > +++ b/arch/arm/include/asm/cacheflush.h
> > > @@ -412,9 +412,14 @@ extern void flush_dcache_page(struct page *);
> > >
> > > static inline void __flush_icache_all(void)
> > > {
> > > +#ifdef CONFIG_ARM_ERRATA_411920
> > > + extern void v6_icache_inval_all(void);
> > > + v6_icache_inval_all();
> > > +#else
> > > asm("mcr p15, 0, %0, c7, c5, 0 @ invalidate I-cache\n"
> > > :
> > > : "r" (0));
> > > +#endif
> > > }
> >
> > For correctness, can we add a dsb() at the end of this function so that
> > the I-cache operation is guaranteed to complete?
>
> Two reasons why not to in this patch:
>
> 1. it changes the produced code, and therefore is another functional change.
> 2. it means we end up with a sequence like:
>
> data cache maintainence
> dsb();
> instruction cache maintainence
> dsb();
>
> The dsb() between the two operations probably isn't required.
That's described in B2.2.7 in the ARM ARM (make sure you use the latest
errata markup - 4.0).
The first DSB is needed to ensure the the D-cache op completed before
the I-cache op (in case we get speculative prefetches into the I-cache
before the D-cache op completed).
The second DSB would be needed to ensure the completion of the I-cache
maintenance operation. An ISB may be needed as well but the return from
exception has the same effect, so user code isn't affected.
--
Catalin
More information about the linux-arm-kernel
mailing list