Programmers Model
ARM DDI 0363G
Copyright © 2006-2011 ARM Limited. All rights reserved.
3-21
ID073015
Non-Confidential
Asynchronous aborts
An asynchronous abort is one for which the exception is taken on a later instruction than the
instruction that generated the aborting memory access. The abort handler cannot determine
which instruction generated the abort, or the state of the processor when the abort occurred.
Therefore, asynchronous aborts are normally fatal.
Asynchronous aborts can be generated by store instructions to Normal or Device memory.
When the store instruction is committed, the data is normally written into a buffer that holds the
data until the memory system has sufficient bandwidth to perform the write access. This gives
read accesses higher priority. The write data can be held in the buffer for a long period, during
which many other instructions can complete. If an error occurs when the write is finally
performed, this generates an asynchronous abort.
Asynchronous abort masking
The nature of asynchronous aborts means that they can occur while the processor is handling a
different abort. If an asynchronous abort generates a new exception in such a situation, the
r14_abt and SPSR_abt values are overwritten. If this occurs before the data is pushed to the
stack in memory, the state information about the first abort is lost. To prevent this from
happening, the CPSR contains a mask bit, the A-bit, to indicate that an asynchronous abort
cannot be accepted. When the A-bit is set, any asynchronous abort that occurs is held pending
by the processor until the A-bit is cleared, when the exception is actually taken. The A-bit is
automatically set when abort, IRQ or FIQ exceptions are taken, and on reset. You must only
clear the A-bit in an abort handler after the state information has either been stacked to memory,
or is no longer required.
Only one pending asynchronous abort of each asynchronous abort type is supported. The
processor supports the following pending asynchronous aborts:
•
Asynchronous external abort
If a subsequent asynchronous external abort is signaled while another one is pending, the
later one is ignored and only one abort is taken.
•
One TCM write external error for each TCM port.
•
Cache write parity or ECC error.
If a subsequent cache parity or ECC error is signaled while another one is pending, the
later one is normally ignored and only one abort is taken. However, if the pending error
was correctable, and the later one is not correctable, the pending error is ignored, and one
abort is taken for the error that cannot be corrected.
Memory barriers
When a store instruction, or series of instructions is executed to normal-type or device-type
memory, it is sometimes necessary to determine whether any errors occurred because of these
instructions. Because most of these errors are reported imprecisely, they might not generate an
abort exception until some time after the instructions are executed. To ensure that all possible
errors have been reported, you must execute a
DSB
instruction. Abort exceptions are only taken
because of these errors if they are not masked, that is, the CPSR A-bit is clear. If the A-bit is set,
the aborts are held pending.