diff options
author | Clément Léger <cleger@rivosinc.com> | 2024-06-24 12:29:08 +0200 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2024-06-26 18:13:54 +0530 |
commit | e8717d126401435896b0e96c18e187f0b2431d5e (patch) | |
tree | 4ed9906fc450a96bc58dde690166a2e1434a27aa /lib/sbi | |
parent | ecef14d5732f837cbfa4a8cefa8fed7953e7abfb (diff) | |
download | opensbi-e8717d126401435896b0e96c18e187f0b2431d5e.zip opensbi-e8717d126401435896b0e96c18e187f0b2431d5e.tar.gz opensbi-e8717d126401435896b0e96c18e187f0b2431d5e.tar.bz2 |
lib: sbi: fwft: check feature value to be exactly 1 or 0
As stated by the spec and pointed out by Andrew Jones, the value passed
for MISALIGNED_EXC_DELEG and PTE_AD_HW_UPDATING should be either 0 or 1.
Add check for these values and return SBI_EINVAL if not.
Signed-off-by: Clément Léger <cleger@rivosinc.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Diffstat (limited to 'lib/sbi')
-rw-r--r-- | lib/sbi/sbi_fwft.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/sbi/sbi_fwft.c b/lib/sbi/sbi_fwft.c index aff087f..595819b 100644 --- a/lib/sbi/sbi_fwft.c +++ b/lib/sbi/sbi_fwft.c @@ -84,10 +84,12 @@ static int fwft_misaligned_delegation_supported(struct fwft_config *conf) static int fwft_set_misaligned_delegation(struct fwft_config *conf, unsigned long value) { - if (value) + if (value == 1) csr_set(CSR_MEDELEG, MIS_DELEG); - else + else if (value == 0) csr_clear(CSR_MEDELEG, MIS_DELEG); + else + return SBI_EINVAL; return SBI_OK; } @@ -111,18 +113,20 @@ static int fwft_adue_supported(struct fwft_config *conf) static int fwft_set_adue(struct fwft_config *conf, unsigned long value) { - if (value) + if (value == 1) #if __riscv_xlen == 32 csr_set(CSR_MENVCFGH, ENVCFG_ADUE >> 32); #else csr_set(CSR_MENVCFG, ENVCFG_ADUE); #endif - else + else if (value == 0) #if __riscv_xlen == 32 csr_clear(CSR_MENVCFGH, ENVCFG_ADUE >> 32); #else csr_clear(CSR_MENVCFG, ENVCFG_ADUE); #endif + else + return SBI_EINVAL; return SBI_OK; } |