User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 69
UG585 (v1.11) September 27, 2016
Chapter 3: Application Processing Unit
Both data cache read misses and write misses are non-blocking, with up to four outstanding
data cache read misses and up to four outstanding data cache write misses being supported.
The APU data caches offer full snoop coherency control using the MESI algorithm.
The data cache in Cortex-A9 contains local load/store exclusive monitor for LDREX/STREX
synchronizations. These instructions are used to implement semaphores. The exclusive monitor
handles one address only, with eight words or one cache line granularity. Therefore, avoid
interleaving LDREX/STREX sequences and always execute a CLREX instruction as part of any
context switch.
D-Cache only supports write-back/write-allocate policy. Write-through and write-back/no
write-allocate policies are not implemented.
L1 D-Cache offers support for exclusive operation with respect to the L2 cache. Exclusive
operation implies that a cache line is valid only in L1 or L2 cache and never in both at the same
time. A line-fill into L1 causes the line to be marked invalid in L2. At the same time, eviction of a
line from L1 causes the line to be allocated in L2, even if it is not dirty. A line-fill into L1 from
dirty L2 line forces eviction of the line to external memory. The exclusive operation, disabled by
default, increases cache utilization and reduces power consumption.
Initialization of L1 Caches
Before using the L1 caches, you must invalidate the instruction cache, the data cache, and the BTAC.
It is not required to invalidate the main TLB, even though it is recommended for safety reasons. This
ensures compatibility with future revisions of the processor. Steps to initialize L1 Caches:
1. Invalidate TLBs:
mcr p15, 0, r0, c8, c7, 0 (r0 = 0)
2. Invalidate I-Cache:
mcr p15, 0, r0, c7, c5, 0 (r0 = 0)
3. Invalidate Branch Predictor Array:
mcr p15, 0, r0, c7, c5, 6 (r0 = 0)
4. Invalidate D-Cache:
mcr p15, 0, r11, c7, c14, 2 (should be done for all the sets/ways)
5. Initialize MMU.
6. Enable I-Cache and D-Cache:
mcr p15, 0, r0, c1, c0, 0 (r0 = 0x1004)
7. Synchronization barriers:
dsb (Allows MMU to start)
isb (Flushes pre-fetch buffer)
(Refer to Memory Barriers, page 72 for more details on memory barriers.)