ID_DFR0_EL1, AArch32 Debug Feature Register 0
The ID_DFR0_EL1 characteristics are:
Purpose
Provides top level information about the debug system in AArch32 state.
Must be interpreted with the Main ID Register, MIDR_EL1.
For general information about the interpretation of the ID registers see 'Principles of the ID scheme for fields in ID registers'.
Configuration
AArch64 System register ID_DFR0_EL1 bits [31:0] are architecturally mapped to AArch32 System register ID_DFR0[31:0] .
Attributes
ID_DFR0_EL1 is a 64-bit register.
Field descriptions
The ID_DFR0_EL1 bit assignments are:
When AArch32 is supported at any Exception level:
Bits [63:32]
Reserved, RES0.
TraceFilt, bits [31:28]
Armv8.4 Self-hosted Trace Extension version. Defined values are:
TraceFilt | Meaning |
---|---|
0b0000 |
Armv8.4 Self-hosted Trace Extension not implemented. |
0b0001 |
Armv8.4 Self-hosted Trace Extension implemented. |
All other values are reserved.
FEAT_TRF implements the functionality added by the value 0b0001.
From Armv8.3, the permitted values are 0b0000 and 0b0001.
PerfMon, bits [27:24]
Performance Monitors Extension version.
This field does not follow the standard ID scheme, but uses the alternative ID scheme described in 'Alternative ID scheme used for the Performance Monitors Extension version'
Defined values are:
PerfMon | Meaning |
---|---|
0b0000 |
Performance Monitors Extension not implemented. |
0b0001 |
Performance Monitors Extension, PMUv1 implemented. |
0b0010 |
Performance Monitors Extension, PMUv2 implemented. |
0b0011 |
Performance Monitors Extension, PMUv3 implemented. |
0b0100 |
PMUv3 for Armv8.1. As 0b0011, and also includes support for:
|
0b0101 |
PMUv3 for Armv8.4. As 0b0100, and also includes support for the PMMIR register. |
0b0110 |
PMUv3 for Armv8.5. As 0b0101, and also includes support for: |
0b1111 |
IMPLEMENTATION DEFINED form of performance monitors supported, PMUv3 not supported. Arm does not recommend this value for new implementations. |
All other values are reserved.
FEAT_PMUv3 implements the functionality identified by the value 0b0011.
FEAT_PMUv3p1 implements the functionality identified by the value 0b0100.
FEAT_PMUv3p4 implements the functionality identified by the value 0b0101.
FEAT_PMUv3p5 implements the functionality identified by the value 0b0110.
In any Armv8 implementation, the values 0b0001 and 0b0010 are not permitted.
From Armv8.1, if FEAT_PMUv3 is implemented, the value 0b0011 is not permitted.
From Armv8.4, if FEAT_PMUv3 is implemented, the value 0b0100 is not permitted.
From Armv8.5, if FEAT_PMUv3 is implemented, the value 0b0101 is not permitted.
In Armv7, the value 0b0000 can mean that PMUv1 is implemented. PMUv1 is not permitted in an Armv8 implementation.
MProfDbg, bits [23:20]
M Profile Debug. Support for memory-mapped debug model for M profile processors. Defined values are:
MProfDbg | Meaning |
---|---|
0b0000 |
Not supported. |
0b0001 |
Support for M profile Debug architecture, with memory-mapped access. |
All other values are reserved.
In Armv8-A, the only permitted value is 0b0000.
MMapTrc, bits [19:16]
Memory Mapped Trace. Support for memory-mapped trace model. Defined values are:
MMapTrc | Meaning |
---|---|
0b0000 |
Not supported. |
0b0001 |
Support for Arm trace architecture, with memory-mapped access. |
All other values are reserved.
In Armv8-A, the permitted values are 0b0000 and 0b0001.
See the ETM Architecture Specification for more information.
CopTrc, bits [15:12]
Support for System registers-based trace model, using registers in the coproc == 0b1110 encoding space. Defined values are:
CopTrc | Meaning |
---|---|
0b0000 |
Not supported. |
0b0001 |
Support for Arm trace architecture, with System registers access. |
All other values are reserved.
In Armv8-A, the permitted values are 0b0000 and 0b0001.
See the ETM Architecture Specification for more information.
MMapDbg, bits [11:8]
Memory Mapped Debug. Support for v7 memory-mapped debug model, for A and R profile processors.
In Armv8-A, this field is RES0.
The optional memory map defined by Armv8 is not compatible with Armv7.
CopSDbg, bits [7:4]
Support for a System registers-based Secure debug model, using registers in the coproc = 0b1110 encoding space, for an A profile processor that includes EL3.
If EL3 is not implemented and the implemented Security state is Non-secure state, this field is RES0. Otherwise, this field reads the same as bits [3:0].
CopDbg, bits [3:0]
Support for System registers-based debug model, using registers in the coproc == 0b1110 encoding space, for A and R profile processors. Defined values are:
CopDbg | Meaning |
---|---|
0b0000 |
Not supported. |
0b0010 |
Support for Armv6, v6 Debug architecture, with System registers access. |
0b0011 |
Support for Armv6, v6.1 Debug architecture, with System registers access. |
0b0100 |
Support for Armv7, v7 Debug architecture, with System registers access. |
0b0101 |
Support for Armv7, v7.1 Debug architecture, with System registers access. |
0b0110 |
Support for Armv8 debug architecture, with System registers access. |
0b0111 |
Support for Armv8 debug architecture, with System registers access, and Virtualization Host Extensions. |
0b1000 |
Support for Armv8.2 debug architecture. |
0b1001 |
Support for Armv8.4 debug architecture. |
All other values are reserved.
FEAT_Debugv8p2 adds the functionality identified by the value 0b1000.
FEAT_Debugv8p4 adds the functionality identified by the value 0b1001.
In Armv8.0, the only permitted value is 0b0110.
In Armv8.1, the only permitted value is 0b0111.
In Armv8.2, the only permitted value is 0b1000.
From Armv8.4, the only permitted value is 0b1001.
Otherwise:
Bits [63:0]
Reserved, UNKNOWN.
Accessing the ID_DFR0_EL1
Accesses to this register use the following encodings:
MRS <Xt>, ID_DFR0_EL1
op0 | op1 | CRn | CRm | op2 |
---|---|---|---|---|
0b11 | 0b000 | 0b0000 | 0b0001 | 0b010 |
if PSTATE.EL == EL0 then if IsFeatureImplemented("FEAT_IDST") then if EL2Enabled() && HCR_EL2.TGE == '1' then AArch64.SystemAccessTrap(EL2, 0x18); else AArch64.SystemAccessTrap(EL1, 0x18); else UNDEFINED; elsif PSTATE.EL == EL1 then if EL2Enabled() && HCR_EL2.TID3 == '1' then AArch64.SystemAccessTrap(EL2, 0x18); else return ID_DFR0_EL1; elsif PSTATE.EL == EL2 then return ID_DFR0_EL1; elsif PSTATE.EL == EL3 then return ID_DFR0_EL1;