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>
This commit is contained in:
parent
ecef14d573
commit
e8717d1264
|
@ -84,10 +84,12 @@ static int fwft_misaligned_delegation_supported(struct fwft_config *conf)
|
||||||
static int fwft_set_misaligned_delegation(struct fwft_config *conf,
|
static int fwft_set_misaligned_delegation(struct fwft_config *conf,
|
||||||
unsigned long value)
|
unsigned long value)
|
||||||
{
|
{
|
||||||
if (value)
|
if (value == 1)
|
||||||
csr_set(CSR_MEDELEG, MIS_DELEG);
|
csr_set(CSR_MEDELEG, MIS_DELEG);
|
||||||
else
|
else if (value == 0)
|
||||||
csr_clear(CSR_MEDELEG, MIS_DELEG);
|
csr_clear(CSR_MEDELEG, MIS_DELEG);
|
||||||
|
else
|
||||||
|
return SBI_EINVAL;
|
||||||
|
|
||||||
return SBI_OK;
|
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)
|
static int fwft_set_adue(struct fwft_config *conf, unsigned long value)
|
||||||
{
|
{
|
||||||
if (value)
|
if (value == 1)
|
||||||
#if __riscv_xlen == 32
|
#if __riscv_xlen == 32
|
||||||
csr_set(CSR_MENVCFGH, ENVCFG_ADUE >> 32);
|
csr_set(CSR_MENVCFGH, ENVCFG_ADUE >> 32);
|
||||||
#else
|
#else
|
||||||
csr_set(CSR_MENVCFG, ENVCFG_ADUE);
|
csr_set(CSR_MENVCFG, ENVCFG_ADUE);
|
||||||
#endif
|
#endif
|
||||||
else
|
else if (value == 0)
|
||||||
#if __riscv_xlen == 32
|
#if __riscv_xlen == 32
|
||||||
csr_clear(CSR_MENVCFGH, ENVCFG_ADUE >> 32);
|
csr_clear(CSR_MENVCFGH, ENVCFG_ADUE >> 32);
|
||||||
#else
|
#else
|
||||||
csr_clear(CSR_MENVCFG, ENVCFG_ADUE);
|
csr_clear(CSR_MENVCFG, ENVCFG_ADUE);
|
||||||
#endif
|
#endif
|
||||||
|
else
|
||||||
|
return SBI_EINVAL;
|
||||||
|
|
||||||
return SBI_OK;
|
return SBI_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue