Cache and store buffer maintenance in cortex-a8!

Dear All,

Technical data sheets for the ARM7500FE  and ARM7100 say that:

"In the ARM Processor the cache will be searched regardless of the state of the C bit, only reads that miss the cache will be affected."

Now the question is that whether it holds for the Cortex-A8 processors family or not?

The other question is that when switching the ARM domains whether the store buffer gets automatically drained or we have to use the barriers for this?

Many thanks in advance.

Parents
  • The behaviour of the SCTLR.C bit is essentially flexible per the architecture specification. Some core implementations may use it only to control allocation into the cache, some cores may use it to control both allocation and the ability to perform cache lookups altogether (effectively disabling the ability to cache data and instructions completely, except to perform maintenance operations).

    Particularly in the Cortex-A8, setting SCTLR.C = 0 will disable both allocation and lookups at L1I, L1D and cause the core to disregard ACTLR.L2EN. Whether data is valid in the cache or not, the core will access the next level of memory, so it is as if the caches don't exist except to maintenance operations.

    As an example on the Cortex-A7 and Cortex-A15, however, SCTLR.C only affects allocation into the caches. That is to say that with SCTLR.C = 0 on the Cortex-A15, a load/store instruction which hits in any cache level will still be serviced from that cache. A load /store instruction that misses in the caches will be serviced from the next level of memory, but that data will not then be placed into the cache for further use.

    Your second question is a little less clear to answer. What exactly do you mean by "switching the ARM domains?"

Reply
  • The behaviour of the SCTLR.C bit is essentially flexible per the architecture specification. Some core implementations may use it only to control allocation into the cache, some cores may use it to control both allocation and the ability to perform cache lookups altogether (effectively disabling the ability to cache data and instructions completely, except to perform maintenance operations).

    Particularly in the Cortex-A8, setting SCTLR.C = 0 will disable both allocation and lookups at L1I, L1D and cause the core to disregard ACTLR.L2EN. Whether data is valid in the cache or not, the core will access the next level of memory, so it is as if the caches don't exist except to maintenance operations.

    As an example on the Cortex-A7 and Cortex-A15, however, SCTLR.C only affects allocation into the caches. That is to say that with SCTLR.C = 0 on the Cortex-A15, a load/store instruction which hits in any cache level will still be serviced from that cache. A load /store instruction that misses in the caches will be serviced from the next level of memory, but that data will not then be placed into the cache for further use.

    Your second question is a little less clear to answer. What exactly do you mean by "switching the ARM domains?"

Children
More questions in this forum