lib: sbi: Allow specifying mode in sbi_hart_pmp_check_addr() API

We extend sbi_hart_pmp_check_addr() API so that users can specify
privilege mode of the address for checking PMP access permissions.

To achieve this, we end-up converting "unsigned long *size" parameter
to "unsigned long *log2len" for pmp_get() implementation so that we
can deal with regions of "1UL << __riscv_xlen" size in a special case
in sbi_hart_pmp_check_addr() implementation.

Signed-off-by: Anup Patel <anup.patel@wdc.com>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
Anup Patel
2020-09-07 15:50:33 +05:30
committed by Anup Patel
parent 6734304f8c
commit 7ccf6bf54c
5 changed files with 33 additions and 20 deletions

View File

@@ -231,7 +231,7 @@ int sbi_hsm_hart_start(struct sbi_scratch *scratch, u32 hartid,
if (hstate != SBI_HART_STOPPED)
return SBI_EINVAL;
rc = sbi_hart_pmp_check_addr(scratch, saddr, PMP_X);
rc = sbi_hart_pmp_check_addr(scratch, saddr, smode, PMP_X);
if (rc)
return rc;
//TODO: We also need to check saddr for valid physical address as well.