[PATCH] platform: generic: andes: Add support for RV32 to set up PMA

Anup Patel anup at brainfault.org
Tue Jun 18 03:52:28 PDT 2024


On Fri, May 31, 2024 at 10:51 AM Ben Zong-You Xie <ben717 at andestech.com> wrote:
>
> Like PMP, the behaviors to configure PMA will be different from
> RV64 and RV32. RV64 uses two Andes custom CSRs, pmacfg0 and pmacfg2,
> but RV32 uses four Andes custom CSRs, pmacfg0 ~ pmacfg3. This patch
> adds support to PMA for RV32.
>
> Signed-off-by: Ben Zong-You Xie <ben717 at andestech.com>

LGTM.

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

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>  platform/generic/andes/andes_pma.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/platform/generic/andes/andes_pma.c b/platform/generic/andes/andes_pma.c
> index 321074a..9c37720 100644
> --- a/platform/generic/andes/andes_pma.c
> +++ b/platform/generic/andes/andes_pma.c
> @@ -109,10 +109,17 @@ static unsigned long andes_pma_setup(const struct andes_pma_region *pma_region,
>             !(pma_region->flags & ANDES_PMACFG_ETYP_NAPOT))
>                 return SBI_EINVAL;
>
> +#if __riscv_xlen == 64
>         pma_cfg_addr = CSR_PMACFG0 + ((entry_id / 8) ? 2 : 0);
>         pmacfg_val = andes_pma_read_num(pma_cfg_addr);
>         pmaxcfg = (char *)&pmacfg_val + (entry_id % 8);
> -       *pmaxcfg = 0;
> +#elif __riscv_xlen == 32
> +       pma_cfg_addr = CSR_PMACFG0 + (entry_id / 4);
> +       pmacfg_val = andes_pma_read_num(pma_cfg_addr);
> +       pmaxcfg = (char *)&pmacfg_val + (entry_id % 4);
> +#else
> +#error "Unexpected __riscv_xlen"
> +#endif
>         *pmaxcfg = pma_region->flags;
>
>         andes_pma_write_num(pma_cfg_addr, pmacfg_val);
> --
> 2.34.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list