[PATCH] lib: sbi/hart: preserve csr validation value.

Anup Patel anup at brainfault.org
Sun Apr 17 02:20:43 PDT 2022


On Thu, Apr 14, 2022 at 11:42 AM Xiang W <wxjstz at 126.com> wrote:
>
> > The OpenSBI hart init function hart_detect_features() try to read
> > important CSRs but reasign the last read value to the variable that
> > initially contains write probe value. So for series of CSRs (like
> > PMPADDRx) the secong CSR probe value will became the initial value of
> > first probing CSR. To avoid of this issue the CSR read value should be
> > saved in different variable. In this configuration the count of PMP
> > will detect rightly if any PMPADDR is hardwired to zero.
> >
> > Signed-off-by: Dmitry Dunaev <dunaich at mail.ru>

I think this patch was not correctly sent using "git send-email". I am
seeing tabs being converted to spaces. In any case, please use
"git format-patch" to generate patches and "git send-email" to send
them to opensbi at lists.infradead.org

Otherwise, this patch looks good to me.

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

I have taken care of the patch formatting issue at the time of merging
this patch. Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> only change name from val to oldval?
>
> Regards,
> Xiang W
> > ---
> >  lib/sbi/sbi_hart.c | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
> > index 7b602c3..891fa18 100644
> > --- a/lib/sbi/sbi_hart.c
> > +++ b/lib/sbi/sbi_hart.c
> > @@ -478,7 +478,7 @@ static void hart_detect_features(struct sbi_scratch
> > *scratch)
> >  {
> >      struct sbi_trap_info trap = {0};
> >      struct hart_features *hfeatures;
> > -    unsigned long val;
> > +    unsigned long val, oldval;
> >
> >      /* Reset hart features */
> >      hfeatures = sbi_scratch_offset_ptr(scratch, hart_features_offset);
> > @@ -487,14 +487,14 @@ static void hart_detect_features(struct
> > sbi_scratch *scratch)
> >      hfeatures->mhpm_count = 0;
> >
> >  #define __check_csr(__csr, __rdonly, __wrval, __field, __skip)    \
> > -    val = csr_read_allowed(__csr, (ulong)&trap);            \
> > +    oldval = csr_read_allowed(__csr, (ulong)&trap);            \
> >      if (!trap.cause) {                        \
> >          if (__rdonly) {                        \
> >              (hfeatures->__field)++;                \
> >          } else {                        \
> >              csr_write_allowed(__csr, (ulong)&trap, __wrval);\
> >              if (!trap.cause) {                \
> > -                if (csr_swap(__csr, val) == __wrval)    \
> > +                if (csr_swap(__csr, oldval) == __wrval)    \
> >                      (hfeatures->__field)++;        \
> >                  else                    \
> >                      goto __skip;            \
> > --
> > 2.25.1
> >
> > ---
> > BW, Dmitry
>
>
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list