CNTHCTL, Counter-timer Hyp Control register
The CNTHCTL characteristics are:
Purpose
Controls the generation of an event stream from the physical counter, and access from Non-secure EL1 modes to the physical counter and the Non-secure EL1 physical timer.
Configuration
AArch32 System register CNTHCTL bits [31:0] are architecturally mapped to AArch64 System register CNTHCTL_EL2[31:0] .
This register is present only when AArch32 is supported at any Exception level. Otherwise, direct accesses to CNTHCTL are UNKNOWN.
If EL2 is not implemented, this register is RES0 from EL3.
Attributes
CNTHCTL is a 32-bit register.
Field descriptions
The CNTHCTL bit assignments are:
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RES0 | EVNTIS | RES0 | EVNTI | EVNTDIR | EVNTEN | PL1PCEN | PL1PCTEN |
Bits [31:18]
Reserved, RES0.
EVNTIS, bit [17]
When ARMv8.6-ECV is implemented:
When ARMv8.6-ECV is implemented:
Controls the scale of the generation of the event stream.
EVNTIS | Meaning |
---|---|
0b0 |
The CNTHCTL.EVNTI field applies to CNTPCT[15:0]. |
0b1 |
The CNTHCTL.EVNTI field applies to CNTPCT[23:8]. |
This field resets to an architecturally UNKNOWN value.
Otherwise:
Otherwise:
Reserved, RES0.
Bits [16:8]
Reserved, RES0.
EVNTI, bits [7:4]
Selects which bit of the counter register CNTPCT is the trigger for the event stream generated from that counter, when that stream is enabled.
If ARMv8.6-ECV is implemented, and CNTHCTL.EVNTIS is 1, this field selects a trigger bit in the range 8 to 23 of the counter register CNTPCT is the trigger.
Otherwise, this field selects a trigger bit in the range 0 to 15 of the counter register.
This field resets to an architecturally UNKNOWN value.
EVNTDIR, bit [3]
Controls which transition of the counter register CNTPCT trigger bit, defined by EVNTI, generates an event when the event stream is enabled:
EVNTDIR | Meaning |
---|---|
0b0 |
A 0 to 1 transition of the trigger bit triggers an event. |
0b1 |
A 1 to 0 transition of the trigger bit triggers an event. |
This field resets to an architecturally UNKNOWN value.
EVNTEN, bit [2]
Enables the generation of an event stream from the counter register CNTPCT:
EVNTEN | Meaning |
---|---|
0b0 |
Disables the event stream. |
0b1 |
Enables the event stream. |
This field resets to an architecturally UNKNOWN value.
PL1PCEN, bit [1]
Traps Non-secure EL0 and EL1 accesses to the physical timer registers to Hyp mode.
PL1PCEN | Meaning |
---|---|
0b0 |
Non-secure EL0 and EL1 accesses to the CNTP_CTL, CNTP_CVAL, and CNTP_TVAL are trapped to Hyp mode, unless the it is trapped by CNTKCTL.PL0PTEN. |
0b1 |
This control does not cause any instructions to be trapped. |
If EL3 is implemented and EL2 is not implemented, behavior is as if this bit is 1 other than for the purpose of a direct read.
This field resets to an architecturally UNKNOWN value.
PL1PCTEN, bit [0]
Traps Non-secure EL0 and EL1 accesses to the physical counter register to Hyp mode.
PL1PCTEN | Meaning |
---|---|
0b0 |
Non-secure EL0 and EL1 accesses to the CNTPCT are trapped to Hyp mode, unless it is trapped by CNTKCTL.PL0PCTEN. |
0b1 |
This control does not cause any instructions to be trapped. |
If EL3 is implemented and EL2 is not implemented, behavior is as if this bit is 1 other than for the purpose of a direct read.
This field resets to an architecturally UNKNOWN value.
Accessing the CNTHCTL
Accesses to this register use the following encodings:
MRC{<c>}{<q>} <coproc>, {#}<opc1>, <Rt>, <CRn>, <CRm>{, {#}<opc2>}
coproc | opc1 | CRn | CRm | opc2 |
---|---|---|---|---|
0b1111 | 0b100 | 0b1110 | 0b0001 | 0b000 |
if PSTATE.EL == EL0 then UNDEFINED; elsif PSTATE.EL == EL1 then UNDEFINED; elsif PSTATE.EL == EL2 then return CNTHCTL; elsif PSTATE.EL == EL3 then return CNTHCTL;
MCR{<c>}{<q>} <coproc>, {#}<opc1>, <Rt>, <CRn>, <CRm>{, {#}<opc2>}
coproc | opc1 | CRn | CRm | opc2 |
---|---|---|---|---|
0b1111 | 0b100 | 0b1110 | 0b0001 | 0b000 |
if PSTATE.EL == EL0 then UNDEFINED; elsif PSTATE.EL == EL1 then UNDEFINED; elsif PSTATE.EL == EL2 then CNTHCTL = R[t]; elsif PSTATE.EL == EL3 then CNTHCTL = R[t];