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>
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;
}
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;
}