L1 & L2 cache flush sequence on CortexA5 MPcore w.r.t low power modes

Murali N nalajala.murali at gmail.com
Thu May 17 01:01:02 EDT 2012


On Tue, May 15, 2012 at 11:47 PM, Will Deacon <will.deacon at arm.com> wrote:
> Hi Russell,
>
> On Tue, May 15, 2012 at 05:36:18PM +0100, Russell King - ARM Linux wrote:
>> I repeat: what happens in this situation on A9:
>>
>>       - clean cache
>>       - cache speculatively prefetches data from another core
>
> If this prefetching occurs then either:
>
>        (a) The line is clean (no problem)
>
>        (b) Another core has written some data and we end up (speculatively)
>            loading dirty lines
>
> Case (b) is only a problem if we actually commit to using the data later on.
>
>>       - clear SCTLR.C
>>       - _this_ core accesses the address associated with that prefetched
>>         data
>
> Yes. At this point it is cpu-specific whether or not we hit our dirty lines
> from above. On A9, we will get the stale data from memory. However, this is
> exactly the same situation we would find ourselves in if we tried to access
> dirty data held in any cache with our SCTLR.C bit cleared. We're no longer
> coherent at this stage, so need to avoid accessing shared data.
>
>> _That_ is a data corruption issue - as soon as SCTLR.C is cleared, the CPUs
>> view of data in memory _changes_, and is only restored to what it should
>> be when the dirty cache lines are finally flushed out of the cache.  And
>> then, hey presto, the data magically changes again.
>
> Well we still can't see dirty data in any of the other L1 caches, so our view
> of memory is going to be constantly out of date. The tricky bit is ensuring
> that we don't rely on data being written by anybody else (and if we write
> data ourself, we need to make sure it's suitably aligned so as not to get
> clobbered by evictions from the other caches).
>
> Will

how about following the below sequence still cause any possible problems?

1. L1 clean & invalidate
2. L2 clean & invalidate
3. Disable L2
4. L1 clean & invalidate
5. Disable "C" bit
6. WFI

-- 
Regards,
Murali N



More information about the linux-arm-kernel mailing list