Skip to content

Commit 771c656

Browse files
SiFiveHollandavpatel
authored andcommitted
lib: sbi: fwft: Use only the provided PMLEN value
As of riscv-sbi-doc commit c7d3d1f7dcaa ("ext-fwft: use the provided value in fwft_set(POINTER_MASKING_PMLEN)"), the SBI implementation must use only the provided PMLEN value or else fail. It may not fall back to a larger PMLEN value. Signed-off-by: Samuel Holland <[email protected]> Reviewed-by: Radim Krčmář <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Anup Patel <[email protected]>
1 parent f30a54f commit 771c656

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

lib/sbi/sbi_fwft.c

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -223,32 +223,32 @@ static int fwft_pmlen_supported(struct fwft_config *conf)
223223
return SBI_OK;
224224
}
225225

226-
static bool fwft_try_to_set_pmm(unsigned long pmm)
227-
{
228-
csr_set(CSR_MENVCFG, pmm);
229-
return (csr_read(CSR_MENVCFG) & ENVCFG_PMM) == pmm;
230-
}
231-
232226
static int fwft_set_pmlen(struct fwft_config *conf, unsigned long value)
233227
{
234-
unsigned long prev;
228+
unsigned long pmm, prev;
235229

236-
if (value > 16)
230+
switch (value) {
231+
case 0:
232+
pmm = ENVCFG_PMM_PMLEN_0;
233+
break;
234+
case 7:
235+
pmm = ENVCFG_PMM_PMLEN_7;
236+
break;
237+
case 16:
238+
pmm = ENVCFG_PMM_PMLEN_16;
239+
break;
240+
default:
237241
return SBI_EINVAL;
242+
}
238243

239244
prev = csr_read_clear(CSR_MENVCFG, ENVCFG_PMM);
240-
if (value == 0)
241-
return SBI_OK;
242-
if (value <= 7) {
243-
if (fwft_try_to_set_pmm(ENVCFG_PMM_PMLEN_7))
244-
return SBI_OK;
245-
csr_clear(CSR_MENVCFG, ENVCFG_PMM);
245+
csr_set(CSR_MENVCFG, pmm);
246+
if ((csr_read(CSR_MENVCFG) & ENVCFG_PMM) != pmm) {
247+
csr_write(CSR_MENVCFG, prev);
248+
return SBI_EINVAL;
246249
}
247-
if (fwft_try_to_set_pmm(ENVCFG_PMM_PMLEN_16))
248-
return SBI_OK;
249-
csr_write(CSR_MENVCFG, prev);
250250

251-
return SBI_EINVAL;
251+
return SBI_OK;
252252
}
253253

254254
static int fwft_get_pmlen(struct fwft_config *conf, unsigned long *value)

0 commit comments

Comments
 (0)