• Samuel Holland's avatar
    riscv: Add a custom ISA extension for the [ms]envcfg CSR · 4774848f
    Samuel Holland authored
    The [ms]envcfg CSR was added in version 1.12 of the RISC-V privileged
    ISA (aka S[ms]1p12). However, bits in this CSR are defined by several
    other extensions which may be implemented separately from any particular
    version of the privileged ISA (for example, some unrelated errata may
    prevent an implementation from claiming conformance with Ss1p12). As a
    result, Linux cannot simply use the privileged ISA version to determine
    if the CSR is present. It must also check if any of these other
    extensions are implemented. It also cannot probe the existence of the
    CSR at runtime, because Linux does not require Sstrict, so (in the
    absence of additional information) it cannot know if a CSR at that
    address is [ms]envcfg or part of some non-conforming vendor extension.
    
    Since there are several standard extensions that imply the existence of
    the [ms]envcfg CSR, it becomes unwieldy to check for all of them
    wherever the CSR is accessed. Instead, define a custom Xlinuxenvcfg ISA
    extension bit that is implied by the other extensions and denotes that
    the CSR exists as defined in the privileged ISA, containing at least one
    of the fields common between menvcfg and senvcfg.
    
    This extension does not need to be parsed from the devicetree or ISA
    string because it can only be implemented as a subset of some other
    standard extension.
    
    Cc: <stable@vger.kernel.org> # v6.7+
    Signed-off-by: default avatarSamuel Holland <samuel.holland@sifive.com>
    Reviewed-by: default avatarConor Dooley <conor.dooley@microchip.com>
    Reviewed-by: default avatarAndrew Jones <ajones@ventanamicro.com>
    Link: https://lore.kernel.org/r/20240228065559.3434837-3-samuel.holland@sifive.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    4774848f
cpufeature.c 29.8 KB