8.5.1. Store buffer

The cache controller includes a store buffer to hold data before it is written to the cache RAMs or passed to the AXI master interface. The store buffer has four entries. Each entry can contain up to 64 bits of data and a 32-bit address. All write requests from the data-side that are not to a TCM or peripheral interface are stored in the store buffer.

Store buffer merging

The store buffer has merging capabilities. If a previous write access has updated an entry, other write accesses on the same line can merge into this entry. Merging is only possible for stores to Normal memory.

Merging is possible between several entries that can be linked together if the data inside the different entries belong to the same cache line.

No merging occurs for writes to Strongly Ordered or Device memory. The processor automatically drains the store buffer as necessary before performing Strongly Ordered accesses or Device reads.

Store buffer behavior

The store buffer directs write requests to the following blocks:

  • Cache controller for Cacheable write hits:

    The store buffer sends a cache lookup to check that the cache hits in the specified line, and if so, the store buffer merges its data into the cache when the entry is drained.

  • AXI master interface:

    • For Non-cacheable stores or write-through Cacheable stores, a write access is performed on the AXI master interface.

    • For write-back, write-allocate stores that miss in the data cache, a linefill is started using either of the two linefill buffers. When the linefill data is returned from the L2 memory system, the data in the store buffer is merged into the linefill buffer to be subsequently written into the cache.

Store buffer draining

A store buffer entry is drained if:

  • All bytes in the entry have been written. This might result from merging.

  • The entry can be merged into a linefill buffer.

  • The entry contains a store to Device or Strongly Ordered memory.

  • The entry has been waiting for merge data for too long.

The store buffer is completely drained when:

  • An explicit drain request is done for:

    • system control coprocessor cache maintenance operations

    • a DMB or DSB instruction

    • a load or store to Strongly Ordered memory

    • an exclusive load or store to Shared memory

    • a SWP or SWPB to Non-cacheable memory.

  • The store buffer is full or likely to become full.

The store buffer is drained of all stores to Device memory before a load is performed from Device memory.

Copyright © 2010-2011 ARM. All rights reserved.ARM DDI 0460C