[PATCH v2 3/8] lib: sbi_domain: print unsupported SmePMP permissions

Anup Patel anup at brainfault.org
Sun Nov 2 02:40:45 PST 2025


On Wed, Oct 8, 2025 at 2:14 PM Yu-Chien Peter Lin <peter.lin at sifive.com> wrote:
>
> The reg->flag is encoded with 6 bits to specify RWX
> permissions for M-mode and S-/U-mode. However, only
> 16 of the possible encodings are valid on SmePMP.
>
> Add a warning message when an unsupported permission
> encoding is detected.
>
> Signed-off-by: Yu-Chien Peter Lin <peter.lin at sifive.com>
> ---
>  lib/sbi/sbi_domain.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/lib/sbi/sbi_domain.c b/lib/sbi/sbi_domain.c
> index 89250d4c..798e68b3 100644
> --- a/lib/sbi/sbi_domain.c
> +++ b/lib/sbi/sbi_domain.c
> @@ -125,6 +125,7 @@ void sbi_domain_memregion_init(unsigned long addr,
>  unsigned int sbi_domain_get_smepmp_flags(struct sbi_domain_memregion *reg)
>  {
>         unsigned int pmp_flags = 0;
> +       unsigned long rstart, rend;
>
>         if ((reg->flags & SBI_DOMAIN_MEMREGION_ACCESS_MASK) == 0) {
>                 /*
> @@ -185,6 +186,13 @@ unsigned int sbi_domain_get_smepmp_flags(struct sbi_domain_memregion *reg)
>                         pmp_flags |= PMP_W;
>                 if (reg->flags & SBI_DOMAIN_MEMREGION_SU_EXECUTABLE)
>                         pmp_flags |= PMP_X;
> +       } else {
> +               rstart = reg->base;
> +               rend = (reg->order < __riscv_xlen) ?
> +                       rstart + ((1UL << reg->order) - 1) : -1UL;
> +               sbi_printf("%s: Unsupported Smepmp permissions "
> +                          "on region 0x%" PRILX "-0x%" PRILX "\n",
> +                          __func__, rstart, rend);

It's okay to us upto 100 characters per-line otherwise
it looks good to me. I will take care of this at the time
of merging this patch.

Reviewed-by: Anup Patel <anup at brainfault.org>

Thanks,
Anup



More information about the opensbi mailing list