hstateen0
Hypervisor State Enable 0 Register
Each bit of a stateen CSR controls less-privileged access to an extension’s state,
for an extension that was not deemed "worthy" of a full XS field in sstatus like the
FS and VS fields for the F and V extensions.
The number of registers provided at each level is four because it is believed that 4 * 64 = 256 bits for machine and hypervisor levels, and 4 * 32 = 128 bits for supervisor level, will be adequate for many years to come, perhaps for as long as the RISC-V ISA is in use. The exact number four is an attempted compromise between providing too few bits on the one hand and going overboard with CSRs that will never be used on the other.
The stateen registers at each level control access to state at all less-privileged
levels, but not at its own level.
When a stateen CSR prevents access to state for a privilege mode, attempting to execute
in that privilege mode an instruction that implicitly updates the state without reading
it may or may not raise an illegal instruction or virtual instruction exception.
Such cases must be disambiguated by being explicitly specified one way or the other.
In some cases, the bits of the stateen CSRs will have a dual purpose as enables for the
ISA extensions that introduce the controlled state.
With the hypervisor extension, the hstateen CSRs have identical encodings to the mstateen CSRs,
except controlling accesses for a virtual machine (from VS and VU modes).
For every bit in an hstateen CSR that is zero (whether read-only zero or set to zero),
the same bit appears as read-only zero in sstateen when accessed in VS-mode.
A bit in an hstateen CSR cannot be read-only one unless the same bit is read-only one
in the matching mstateen CSR.
Fields
SE0
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
- Software write
-
This field has special behavior when written by software (e.g., through csrrw).
When software tries to write
csr_value, the field will be written with the return value of the function below.
ENVCFG
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
- Software write
-
This field has special behavior when written by software (e.g., through csrrw).
When software tries to write
csr_value, the field will be written with the return value of the function below.
AIA
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
- Software write
-
This field has special behavior when written by software (e.g., through csrrw).
When software tries to write
csr_value, the field will be written with the return value of the function below.
IMSIC
- Location
-
hstateen0[58] - Description
-
The IMSIC bit in hstateen0 controls access to the guest IMSIC state, including CSRs
stopei(reallyvstopei), provided by the Ssaia extension. - Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
- Software write
-
This field has special behavior when written by software (e.g., through csrrw).
When software tries to write
csr_value, the field will be written with the return value of the function below.
CTR
- Location
-
hstateen0[54] - Description
-
If the H extension is implemented and
mstateen0.CTR=1, the hstateen0.CTR bit controls access to supervisor CTR state when V=1. This state includessctrctl(reallyvsctrctl),sctrstatus, andsireg*(reallyvsireg*) whensiselect(reallyvsiselect) is in 0x200..0x2FF. hstateen0.CTR is read-only 0 whenmstateen0.CTR=0. - Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
FCSR
- Location
-
hstateen0[1] - Description
-
The FCSR bit controls access to fcsr for the case when floating-point instructions operate on
xregisters instead offregisters as specified by the Zfinx and related extensions (Zdinx, etc.). Whenever misa.F = 1, FCSR bit of mstateen0 is read-only zero (and hence read-only zero in hstateen0 and sstateen0 too). For convenience, when thestateenCSRs are implemented and misa.F = 0, then if the FCSR bit of a controllingstateen0CSR is zero, all floating-point instructions cause an illegal instruction trap (or virtual instruction trap, if relevant), as though they all access fcsr, regardless of whether they really do. - Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
- Software write
-
This field has special behavior when written by software (e.g., through csrrw).
When software tries to write
csr_value, the field will be written with the return value of the function below.
C
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
Software read
This CSR may return a value that is different from what is stored in hardware.
-
Pruned
-
Original
Bits<64> mstateen0_mask = $bits(CSR[CSR[mstateen0]]);
Bits<64> hstateen0_value = $bits(CSR[CSR[hstateen0]]) & mstateen0_mask;
return hstateen0_value;
Bits<64> mstateen0_mask = $bits(CSR[CSR[mstateen0]]);
Bits<64> hstateen0_value = $bits(CSR[CSR[hstateen0]]) & mstateen0_mask;
return hstateen0_value;