diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h index d48940d2..938248f3 100644 --- a/include/sbi/sbi_hart.h +++ b/include/sbi/sbi_hart.h @@ -36,6 +36,8 @@ enum sbi_hart_extensions { SBI_HART_EXT_SMSTATEEN, /** HART has Sstc extension */ SBI_HART_EXT_SSTC, + /** HART has Zihpm extension */ + SBI_HART_EXT_ZIHPM, /** Maximum index of Hart extension */ SBI_HART_EXT_MAX, diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c index c4704828..ff6f5826 100644 --- a/lib/sbi/sbi_hart.c +++ b/lib/sbi/sbi_hart.c @@ -453,6 +453,9 @@ static inline char *sbi_hart_extension_id2string(int ext) case SBI_HART_EXT_SMSTATEEN: estr = "smstateen"; break; + case SBI_HART_EXT_ZIHPM: + estr = "zihpm"; + break; default: break; } @@ -706,6 +709,11 @@ __mhpm_skip: if (rc) return rc; + /* Extensions implied by other extensions and features */ + if (hfeatures->mhpm_count) + __sbi_hart_update_extension(hfeatures, + SBI_HART_EXT_ZIHPM, true); + /* Mark hart feature detection done */ hfeatures->detected = true;