diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h index c3a7feb7..bce88c59 100644 --- a/include/sbi/sbi_hart.h +++ b/include/sbi/sbi_hart.h @@ -31,7 +31,7 @@ enum sbi_hart_extensions { SBI_HART_EXT_SMAIA = 0, /** HART has Smepmp */ SBI_HART_EXT_SMEPMP, - /** HART has Smstateen CSR **/ + /** HART has Smstateen extension **/ SBI_HART_EXT_SMSTATEEN, /** Hart has Sscofpmt extension */ SBI_HART_EXT_SSCOFPMF, @@ -79,6 +79,8 @@ enum sbi_hart_extensions { SBI_HART_EXT_SMCTR, /** HART has CTR S-mode CSRs */ SBI_HART_EXT_SSCTR, + /** HART has Ssstateen extension **/ + SBI_HART_EXT_SSSTATEEN, /** Maximum index of Hart extension */ SBI_HART_EXT_MAX, diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c index c6a77949..8dc61d6f 100644 --- a/lib/sbi/sbi_hart.c +++ b/lib/sbi/sbi_hart.c @@ -695,6 +695,7 @@ const struct sbi_hart_ext_data sbi_hart_ext[] = { __SBI_HART_EXT_DATA(ssdbltrp, SBI_HART_EXT_SSDBLTRP), __SBI_HART_EXT_DATA(smctr, SBI_HART_EXT_SMCTR), __SBI_HART_EXT_DATA(ssctr, SBI_HART_EXT_SSCTR), + __SBI_HART_EXT_DATA(ssstateen, SBI_HART_EXT_SSSTATEEN), }; _Static_assert(SBI_HART_EXT_MAX == array_size(sbi_hart_ext), @@ -940,6 +941,9 @@ __pmp_skip: /* Detect if hart supports mstateen CSRs */ __check_ext_csr(SBI_HART_PRIV_VER_1_12, CSR_MSTATEEN0, SBI_HART_EXT_SMSTATEEN); + /* Detect if hart supports sstateen CSRs */ + __check_ext_csr(SBI_HART_PRIV_VER_1_12, + CSR_SSTATEEN0, SBI_HART_EXT_SSSTATEEN); /* Detect if hart supports smcntrpmf */ __check_ext_csr(SBI_HART_PRIV_VER_1_12, CSR_MCYCLECFG, SBI_HART_EXT_SMCNTRPMF);