On Wed, Oct 7, 2026 at 6:25 PM Philippe Mathieu-Daudé
<[email protected]> wrote:
>
> On 7/10/26 10:43, Anton Johansson wrote:
> > Reviewed-by: Pierrick Bouvier <[email protected]>
> > Signed-off-by: Anton Johansson <[email protected]>
> > ---
> >   target/riscv/tcg/pmp.c       | 5 +++--
> >   target/riscv/tcg/meson.build | 2 +-
> >   2 files changed, 4 insertions(+), 3 deletions(-)
> >
> > diff --git a/target/riscv/tcg/pmp.c b/target/riscv/tcg/pmp.c
> > index 99345d63dc..2d7194de10 100644
> > --- a/target/riscv/tcg/pmp.c
> > +++ b/target/riscv/tcg/pmp.c
> > @@ -638,19 +638,20 @@ uint64_t pmpaddr_csr_read(CPURISCVState *env, 
> > uint32_t addr_index)
> >       if (addr_index < pmp_regions) {
> >           val = env->pmp_state.pmp[addr_index].addr_reg;
> >           int g = pmp_get_granularity_g(env);
> > +        const unsigned long_bits = target_long_bits();
>
> We need to fetch this information from @env. Maybe riscv_cpu_mxl_bits()?

discussed before, there is possible be 128bits

> >           switch (pmp_get_a_field(env->pmp_state.pmp[addr_index].cfg_reg)) {
> >           case PMP_AMATCH_OFF:
> >               /* fallthrough */
> >           case PMP_AMATCH_TOR:
> >               /* Bit [g-1:0] read all zero */
> > -            if (g >= 1 && g < TARGET_LONG_BITS) {
> > +            if (g >= 1 && g < long_bits) {
> >                   uint64_t granule = 1ULL << g;
> >                   val = ROUND_DOWN(val, granule);
> >               }
> >               break;
> >           case PMP_AMATCH_NAPOT:
> >               /* Bit [g-2:0] read all one */
> > -            if (g >= 2 && g < TARGET_LONG_BITS) {
> > +            if (g >= 2 && g < long_bits) {
> >                   val = deposit64(val, 0, g - 1, -1ULL);
> >               }
> >               break;
>


-- 
         此致
礼
罗勇刚
Yours
    sincerely,
Yonggang Luo

Reply via email to