The purpose of the Data Fault Status Register (DFSR) is to hold the source of the last data fault. The Data Fault Status Register indicates the domain and type of access being attempted when an abort occurred.
The Data Fault Status Register is:
in CP15 c5
a 32-bit read/write register
accessible in privileged mode only.
Figure 3.33 shows the arrangement of bits in the register.
Table 3.61shows the bit functions of the Data Fault Status Register.
Indicates which type of access caused the abort:
0 = Read
1 = Write
When a CP15 cache maintenance operation fault causes an abort, the value returned is 1.
Part of the Status field, see Bits[3:0] in this table.
Always read as 0. Writes to these bits are ignored.
Specifies which of the 16 domains (D15-D0) was being accessed when a data fault occurred. Possible values are 0 to 15. Reset value is 0.
The fault status field bit encodings are shown in Table 3.62.
|b00000||No function, reset value|
|b00010||Debug event fault|
|b00011||Access Flag fault on Section|
|b00100||Cache maintenance operation fault[b]|
|b00101||Translation fault on Section|
|b00110||Access Flag fault on Page|
|b00111||Translation fault on Page|
|b01000||Precise External Abort|
|b01001||Domain fault on Section|
|b01011||Domain fault on Page|
|b01100||External abort on translation, first level|
|b01101||Permission fault on Section|
|b01110||External abort on translation, second level|
|b01111||Permission fault on Page|
|b10110||Imprecise External Abort|
[a] Bits[10,3:0] of the DFSR register.
[b] Can only occur on the Data side. On the IFSR, the corresponding encoding (b0100) has no function.
Table 3.63 shows the results of attempted accesses to the Data Fault Status Register for each mode.
|Privileged read||Privileged write||User read or write|
|Data read||Data write||Undefined Instruction exception|
To access the Data Fault Status Register you read or write CP15 with:
Opcode_1 set to 0
CRn set to c5
CRm set to c0
Opcode_2 set to 0.
MRC p15, 0, <Rd>, c5, c0, 0 ; Read Data Fault Status Register
MCR p15, 0, <Rd>, c5, c0, 0 ; Write Data Fault Status Register
Reading CP15 c5 with Opcode_2 set to 0 returns the value of the Data Fault Status Register.
Writing CP15 c5 with Opcode_2 set to 0 sets the Data Fault Status Register to the value of the data written, ignoring any value written to bits[9:8]. This is useful for a debugger to restore the value of the Data Fault Status Register.