S Extension
- Implemented Version
-
1.12.0
Synopsis
This chapter describes the RISC-V supervisor-level architecture, which contains a common core that is used with various supervisor-level address translation and protection schemes.
Supervisor mode is deliberately restricted in terms of interactions with underlying physical hardware, such as physical memory and device interrupts, to support clean virtualization. In this spirit, certain supervisor-level facilities, including requests for timer and interprocessor interrupts, are provided by implementation-specific mechanisms. In some systems, a supervisor execution environment (SEE) provides these facilities in a manner specified by a supervisor binary interface (SBI). Other systems supply these facilities directly, through some other implementation-defined mechanism. |
Instructions
The following instructions are added by this extension in the generic_rv64 configuration:
Machine Exception Return |
|
Wait for interrupt |
|
Supervisor memory-management fence |
|
Supervisor Exception Return |
Parameters
This extension has the following implementation options:
- ASID_WIDTH
-
Number of implemented ASID bits. Maximum is 16 for XLEN==64, and 9 for XLEN==32
- MSTATUS_FS_LEGAL_VALUES
-
The set of values that mstatus.FS will accept from a software write.
- MSTATUS_FS_WRITEABLE
- MSTATUS_TVM_IMPLEMENTED
-
Whether or not mstatus.TVM is implemented.
When not implemented mstatus.TVM will be read-only-zero.
- MSTATUS_VS_LEGAL_VALUES
-
The set of values that mstatus.VS will accept from a software write.
- MSTATUS_VS_WRITEABLE
- MUTABLE_MISA_S
- REPORT_ENCODING_IN_STVAL_ON_ILLEGAL_INSTRUCTION
- REPORT_VA_IN_STVAL_ON_BREAKPOINT
- REPORT_VA_IN_STVAL_ON_INSTRUCTION_ACCESS_FAULT
- REPORT_VA_IN_STVAL_ON_INSTRUCTION_MISALIGNED
-
When true, stval is written with the virtual PC when an instruction fetch is misaligned.
When false, stval is written with 0 when an instruction fetch is misaligned.
Note that when IALIGN=16 (i.e., when the C or one of the
Zc*
extensions are implemented), it is impossible to generate a misaligned fetch, and so this parameter has no effect. - REPORT_VA_IN_STVAL_ON_INSTRUCTION_PAGE_FAULT
- REPORT_VA_IN_STVAL_ON_LOAD_ACCESS_FAULT
- REPORT_VA_IN_STVAL_ON_LOAD_MISALIGNED
- REPORT_VA_IN_STVAL_ON_LOAD_PAGE_FAULT
- REPORT_VA_IN_STVAL_ON_STORE_AMO_ACCESS_FAULT
- REPORT_VA_IN_STVAL_ON_STORE_AMO_MISALIGNED
- REPORT_VA_IN_STVAL_ON_STORE_AMO_PAGE_FAULT
- SATP_MODE_BARE
-
Whether or not satp.MODE == Bare is supported.
- SCOUNTENABLE_EN
-
Indicates which counters can delegated via scounteren
An unimplemented counter cannot be specified, i.e., if HPM_COUNTER_EN[3] is false, it would be illegal to set SCOUNTENABLE_EN[3] to true.
- STVAL_WIDTH
-
The number of implemented bits in stval.
Must be greater than or equal to max(
PHYS_ADDR_WIDTH
,VA_SIZE
) - STVEC_MODE_DIRECT
-
Whether or not stvec.MODE supports Direct (0).
- STVEC_MODE_VECTORED
-
Whether or not stvec.MODE supports Vectored (1).
- SV_MODE_BARE
-
Whether or not writing mode=Bare is supported in the satp register.
- SXLEN
-
Set of XLENs supported in S-mode. Can be one of:
-
32: SXLEN is always 32
-
64: SXLEN is always 64
-
3264: SXLEN can be changed (via mstatus.SXL) between 32 and 64
-
- S_MODE_ENDIANESS
-
Endianess of data in S-mode. Can be one of:
-
little: M-mode data is always little endian
-
big: M-mode data is always big endian
-
dynamic: M-mode data can be either little or big endian, depending on the CSR field mstatus.SBE
-
- TRAP_ON_ECALL_FROM_S
-
Whether or not an ECALL-from-S-mode causes a synchronous exception.
The spec states that implementations may handle ECALLs transparently without raising a trap, in which case the EEI must provide a builtin.
- TRAP_ON_SFENCE_VMA_WHEN_SATP_MODE_IS_READ_ONLY
-
For implementations that make satp.MODE read-only zero (always Bare, i.e., no virtual translation is implemented), attempts to execute an SFENCE.VMA instruction might raise an illegal-instruction exception.
TRAP_ON_SFENCE_VMA_WHEN_SATP_MODE_IS_READ_ONLY indicates whether or not that exception occurs.
TRAP_ON_SFENCE_VMA_WHEN_SATP_MODE_IS_READ_ONLY has no effect when some virtual translation mode is supported.