5.9.2. Store buffer

The memory system includes a store buffer to hold data before it is written to the cache RAMs or passed to the AXIM 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 the AHBP 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 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.

  • AXIM interface:

    • For Non-cacheable, Write-Through Cacheable, Write-Back no Write-Allocate Cacheable stores that miss in the data cache, a write access is performed on the AXIM 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 external memory system, the data in the store buffer is merged into the linefill buffer and 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 is Non-cacheable or Write-Through and has been waiting for merge data for too long.

The store buffer is completely drained when:

  • An explicit drain request is done for:

    • Cache maintenance operations.

    • A DMB or DSB instruction.

    • An exclusive store to Shared memory.

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

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

Copyright © 2014-2016, 2018 Arm. All rights reserved.ARM DDI 0489F