[PATCH 4/7] lib: sbi: probe PMP allowed addr from first usable PMP
Anup Patel
anup at brainfault.org
Tue Dec 12 00:18:11 PST 2023
On Fri, Dec 8, 2023 at 3:34 AM Yangyu Chen <cyy at cyyself.name> wrote:
>
> Some PMPs may be locked before OpenSBI starts. Probe allowed addr only
> from pmpaddr0 may get the wrong result since it may be locked thus the
> value can not be changed.
>
> Signed-off-by: Yangyu Chen <cyy at cyyself.name>
> ---
> lib/sbi/sbi_hart.c | 29 +++++++++--------------------
> 1 file changed, 9 insertions(+), 20 deletions(-)
>
> diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
> index f18a6bc..f8f7b82 100644
> --- a/lib/sbi/sbi_hart.c
> +++ b/lib/sbi/sbi_hart.c
> @@ -784,23 +784,10 @@ static unsigned long hart_pmp_probe_reserved(unsigned int nr_pmps)
> return pmpcfg_locked;
> }
>
> -static unsigned long hart_pmp_get_allowed_addr(void)
> +static unsigned long hart_pmp_get_allowed_addr(unsigned int n)
> {
> - unsigned long val = 0;
> - struct sbi_trap_info trap = {0};
> -
> - csr_write_allowed(CSR_PMPCFG0, (ulong)&trap, 0);
> - if (trap.cause)
> - return 0;
> -
> - csr_write_allowed(CSR_PMPADDR0, (ulong)&trap, PMP_ADDR_MASK);
> - if (!trap.cause) {
> - val = csr_read_allowed(CSR_PMPADDR0, (ulong)&trap);
> - if (trap.cause)
> - val = 0;
> - }
> -
> - return val;
> + csr_write_num(CSR_PMPADDR0 + n, PMP_ADDR_MASK);
> + return csr_read_num(CSR_PMPADDR0 + n);
> }
>
> static int hart_mhpm_get_allowed_bits(void)
> @@ -926,10 +913,12 @@ __pmp_count_probed:
> * Detect the allowed address bits & granularity. At least PMPADDR0
> * should be implemented.
> */
> - val = hart_pmp_get_allowed_addr();
> - if (val) {
> - hfeatures->pmp_gran = 1 << (sbi_ffs(val) + 2);
> - hfeatures->pmp_addr_bits = sbi_fls(val) + 1;
> + if (hfeatures->pmp_reserved != hfeatures->pmp_count) {
This must check "hfeatures->pmp_reserved < hfeatures->pmp_count".
> + val = hart_pmp_get_allowed_addr(hfeatures->pmp_reserved);
> + if (val) {
> + hfeatures->pmp_gran = 1 << (sbi_ffs(val) + 2);
> + hfeatures->pmp_addr_bits = sbi_fls(val) + 1;
> + }
> }
> /* Detect number of MHPM counters */
> __check_hpm_csr(CSR_MHPMCOUNTER3, mhpm_mask);
> --
> 2.43.0
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
Regards,
Anup
More information about the opensbi
mailing list