Message ID | 20200828034012.144048-2-anup.patel@wdc.com |
---|---|
State | Accepted |
Headers | show |
Series | PMP and HPM improvements | expand |
On Thu, Aug 27, 2020 at 8:40 PM Anup Patel <anup.patel@wdc.com> wrote: > > The SBI_HART_HAS_PMP feature is redundant because we already > have number of PMP regions returned by sbi_hart_pmp_count(). > > Checking whether PMP is supported for a HART can be simply done > by checking non-zero value returned by sbi_hart_pmp_count(). > > Signed-off-by: Anup Patel <anup.patel@wdc.com> > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > --- > include/sbi/sbi_hart.h | 8 +++----- > lib/sbi/sbi_hart.c | 15 +-------------- > lib/utils/fdt/fdt_fixup.c | 2 +- > 3 files changed, 5 insertions(+), 20 deletions(-) > > diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h > index 51c2c35..c2ea686 100644 > --- a/include/sbi/sbi_hart.h > +++ b/include/sbi/sbi_hart.h > @@ -14,14 +14,12 @@ > > /** Possible feature flags of a hart */ > enum sbi_hart_features { > - /** Hart has PMP support */ > - SBI_HART_HAS_PMP = (1 << 0), > /** Hart has S-mode counter enable */ > - SBI_HART_HAS_SCOUNTEREN = (1 << 1), > + SBI_HART_HAS_SCOUNTEREN = (1 << 0), > /** Hart has M-mode counter enable */ > - SBI_HART_HAS_MCOUNTEREN = (1 << 2), > + SBI_HART_HAS_MCOUNTEREN = (1 << 1), > /** HART has timer csr implementation in hardware */ > - SBI_HART_HAS_TIME = (1 << 3), > + SBI_HART_HAS_TIME = (1 << 2), > > /** Last index of Hart features*/ > SBI_HART_HAS_LAST_FEATURE = SBI_HART_HAS_TIME, > diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c > index fa20bd2..80ed86a 100644 > --- a/lib/sbi/sbi_hart.c > +++ b/lib/sbi/sbi_hart.c > @@ -158,9 +158,6 @@ void sbi_hart_pmp_dump(struct sbi_scratch *scratch) > unsigned long prot, addr, size; > unsigned int i, pmp_count; > > - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) > - return; > - > pmp_count = sbi_hart_pmp_count(scratch); > for (i = 0; i < pmp_count; i++) { > pmp_get(i, &prot, &addr, &size); > @@ -190,9 +187,6 @@ int sbi_hart_pmp_check_addr(struct sbi_scratch *scratch, unsigned long addr, > unsigned long prot, size, tempaddr; > unsigned int i, pmp_count; > > - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) > - return SBI_OK; > - > pmp_count = sbi_hart_pmp_count(scratch); > for (i = 0; i < pmp_count; i++) { > pmp_get(i, &prot, &tempaddr, &size); > @@ -213,7 +207,7 @@ static int pmp_init(struct sbi_scratch *scratch, u32 hartid) > ulong prot, addr, log2size; > const struct sbi_platform *plat = sbi_platform_ptr(scratch); > > - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) > + if (!sbi_hart_pmp_count(scratch)) > return 0; > > /* Firmware PMP region to protect OpenSBI firmware */ > @@ -276,9 +270,6 @@ static inline char *sbi_hart_feature_id2string(unsigned long feature) > return NULL; > > switch (feature) { > - case SBI_HART_HAS_PMP: > - fstr = "pmp"; > - break; > case SBI_HART_HAS_SCOUNTEREN: > fstr = "scounteren"; > break; > @@ -375,10 +366,6 @@ static void hart_detect_features(struct sbi_scratch *scratch) > __detect_pmp(CSR_PMPADDR15); > #undef __detect_pmp > > - /* Set hart PMP feature if we have at least one PMP region */ > - if (hfeatures->pmp_count) > - hfeatures->features |= SBI_HART_HAS_PMP; > - > /* Detect if hart supports SCOUNTEREN feature */ > trap.cause = 0; > val = csr_read_allowed(CSR_SCOUNTEREN, (unsigned long)&trap); > diff --git a/lib/utils/fdt/fdt_fixup.c b/lib/utils/fdt/fdt_fixup.c > index a3bccae..4da7397 100644 > --- a/lib/utils/fdt/fdt_fixup.c > +++ b/lib/utils/fdt/fdt_fixup.c > @@ -199,7 +199,7 @@ int fdt_reserved_memory_fixup(void *fdt) > * With above assumption, we create child nodes directly. > */ > > - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) { > + if (!sbi_hart_pmp_count(scratch)) { > /* > * Update the DT with firmware start & size even if PMP is not > * supported. This makes sure that supervisor OS is always > -- > 2.25.1 > > > -- > opensbi mailing list > opensbi@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/opensbi Reviewed-by: Atish Patra <atish.patra@wdc.com>
> -----Original Message----- > From: Atish Patra <atishp@atishpatra.org> > Sent: 31 August 2020 23:59 > To: Anup Patel <Anup.Patel@wdc.com> > Cc: Atish Patra <Atish.Patra@wdc.com>; Alistair Francis > <Alistair.Francis@wdc.com>; Anup Patel <anup@brainfault.org>; OpenSBI > <opensbi@lists.infradead.org> > Subject: Re: [PATCH v3 1/5] lib: sbi: Remove redundant SBI_HART_HAS_PMP > feature > > On Thu, Aug 27, 2020 at 8:40 PM Anup Patel <anup.patel@wdc.com> wrote: > > > > The SBI_HART_HAS_PMP feature is redundant because we already have > > number of PMP regions returned by sbi_hart_pmp_count(). > > > > Checking whether PMP is supported for a HART can be simply done by > > checking non-zero value returned by sbi_hart_pmp_count(). > > > > Signed-off-by: Anup Patel <anup.patel@wdc.com> > > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > > --- > > include/sbi/sbi_hart.h | 8 +++----- > > lib/sbi/sbi_hart.c | 15 +-------------- > > lib/utils/fdt/fdt_fixup.c | 2 +- > > 3 files changed, 5 insertions(+), 20 deletions(-) > > > > diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h index > > 51c2c35..c2ea686 100644 > > --- a/include/sbi/sbi_hart.h > > +++ b/include/sbi/sbi_hart.h > > @@ -14,14 +14,12 @@ > > > > /** Possible feature flags of a hart */ enum sbi_hart_features { > > - /** Hart has PMP support */ > > - SBI_HART_HAS_PMP = (1 << 0), > > /** Hart has S-mode counter enable */ > > - SBI_HART_HAS_SCOUNTEREN = (1 << 1), > > + SBI_HART_HAS_SCOUNTEREN = (1 << 0), > > /** Hart has M-mode counter enable */ > > - SBI_HART_HAS_MCOUNTEREN = (1 << 2), > > + SBI_HART_HAS_MCOUNTEREN = (1 << 1), > > /** HART has timer csr implementation in hardware */ > > - SBI_HART_HAS_TIME = (1 << 3), > > + SBI_HART_HAS_TIME = (1 << 2), > > > > /** Last index of Hart features*/ > > SBI_HART_HAS_LAST_FEATURE = SBI_HART_HAS_TIME, diff --git > > a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c index fa20bd2..80ed86a > > 100644 > > --- a/lib/sbi/sbi_hart.c > > +++ b/lib/sbi/sbi_hart.c > > @@ -158,9 +158,6 @@ void sbi_hart_pmp_dump(struct sbi_scratch > *scratch) > > unsigned long prot, addr, size; > > unsigned int i, pmp_count; > > > > - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) > > - return; > > - > > pmp_count = sbi_hart_pmp_count(scratch); > > for (i = 0; i < pmp_count; i++) { > > pmp_get(i, &prot, &addr, &size); @@ -190,9 +187,6 @@ > > int sbi_hart_pmp_check_addr(struct sbi_scratch *scratch, unsigned long > addr, > > unsigned long prot, size, tempaddr; > > unsigned int i, pmp_count; > > > > - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) > > - return SBI_OK; > > - > > pmp_count = sbi_hart_pmp_count(scratch); > > for (i = 0; i < pmp_count; i++) { > > pmp_get(i, &prot, &tempaddr, &size); @@ -213,7 +207,7 > > @@ static int pmp_init(struct sbi_scratch *scratch, u32 hartid) > > ulong prot, addr, log2size; > > const struct sbi_platform *plat = sbi_platform_ptr(scratch); > > > > - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) > > + if (!sbi_hart_pmp_count(scratch)) > > return 0; > > > > /* Firmware PMP region to protect OpenSBI firmware */ @@ > > -276,9 +270,6 @@ static inline char *sbi_hart_feature_id2string(unsigned > long feature) > > return NULL; > > > > switch (feature) { > > - case SBI_HART_HAS_PMP: > > - fstr = "pmp"; > > - break; > > case SBI_HART_HAS_SCOUNTEREN: > > fstr = "scounteren"; > > break; > > @@ -375,10 +366,6 @@ static void hart_detect_features(struct sbi_scratch > *scratch) > > __detect_pmp(CSR_PMPADDR15); > > #undef __detect_pmp > > > > - /* Set hart PMP feature if we have at least one PMP region */ > > - if (hfeatures->pmp_count) > > - hfeatures->features |= SBI_HART_HAS_PMP; > > - > > /* Detect if hart supports SCOUNTEREN feature */ > > trap.cause = 0; > > val = csr_read_allowed(CSR_SCOUNTEREN, (unsigned long)&trap); > > diff --git a/lib/utils/fdt/fdt_fixup.c b/lib/utils/fdt/fdt_fixup.c > > index a3bccae..4da7397 100644 > > --- a/lib/utils/fdt/fdt_fixup.c > > +++ b/lib/utils/fdt/fdt_fixup.c > > @@ -199,7 +199,7 @@ int fdt_reserved_memory_fixup(void *fdt) > > * With above assumption, we create child nodes directly. > > */ > > > > - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) { > > + if (!sbi_hart_pmp_count(scratch)) { > > /* > > * Update the DT with firmware start & size even if PMP is not > > * supported. This makes sure that supervisor OS is > > always > > -- > > 2.25.1 > > > > > > -- > > opensbi mailing list > > opensbi@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/opensbi > > > Reviewed-by: Atish Patra <atish.patra@wdc.com> Applied this patch to the riscv/opensbi repo Regards, Anup
diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h index 51c2c35..c2ea686 100644 --- a/include/sbi/sbi_hart.h +++ b/include/sbi/sbi_hart.h @@ -14,14 +14,12 @@ /** Possible feature flags of a hart */ enum sbi_hart_features { - /** Hart has PMP support */ - SBI_HART_HAS_PMP = (1 << 0), /** Hart has S-mode counter enable */ - SBI_HART_HAS_SCOUNTEREN = (1 << 1), + SBI_HART_HAS_SCOUNTEREN = (1 << 0), /** Hart has M-mode counter enable */ - SBI_HART_HAS_MCOUNTEREN = (1 << 2), + SBI_HART_HAS_MCOUNTEREN = (1 << 1), /** HART has timer csr implementation in hardware */ - SBI_HART_HAS_TIME = (1 << 3), + SBI_HART_HAS_TIME = (1 << 2), /** Last index of Hart features*/ SBI_HART_HAS_LAST_FEATURE = SBI_HART_HAS_TIME, diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c index fa20bd2..80ed86a 100644 --- a/lib/sbi/sbi_hart.c +++ b/lib/sbi/sbi_hart.c @@ -158,9 +158,6 @@ void sbi_hart_pmp_dump(struct sbi_scratch *scratch) unsigned long prot, addr, size; unsigned int i, pmp_count; - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) - return; - pmp_count = sbi_hart_pmp_count(scratch); for (i = 0; i < pmp_count; i++) { pmp_get(i, &prot, &addr, &size); @@ -190,9 +187,6 @@ int sbi_hart_pmp_check_addr(struct sbi_scratch *scratch, unsigned long addr, unsigned long prot, size, tempaddr; unsigned int i, pmp_count; - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) - return SBI_OK; - pmp_count = sbi_hart_pmp_count(scratch); for (i = 0; i < pmp_count; i++) { pmp_get(i, &prot, &tempaddr, &size); @@ -213,7 +207,7 @@ static int pmp_init(struct sbi_scratch *scratch, u32 hartid) ulong prot, addr, log2size; const struct sbi_platform *plat = sbi_platform_ptr(scratch); - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) + if (!sbi_hart_pmp_count(scratch)) return 0; /* Firmware PMP region to protect OpenSBI firmware */ @@ -276,9 +270,6 @@ static inline char *sbi_hart_feature_id2string(unsigned long feature) return NULL; switch (feature) { - case SBI_HART_HAS_PMP: - fstr = "pmp"; - break; case SBI_HART_HAS_SCOUNTEREN: fstr = "scounteren"; break; @@ -375,10 +366,6 @@ static void hart_detect_features(struct sbi_scratch *scratch) __detect_pmp(CSR_PMPADDR15); #undef __detect_pmp - /* Set hart PMP feature if we have at least one PMP region */ - if (hfeatures->pmp_count) - hfeatures->features |= SBI_HART_HAS_PMP; - /* Detect if hart supports SCOUNTEREN feature */ trap.cause = 0; val = csr_read_allowed(CSR_SCOUNTEREN, (unsigned long)&trap); diff --git a/lib/utils/fdt/fdt_fixup.c b/lib/utils/fdt/fdt_fixup.c index a3bccae..4da7397 100644 --- a/lib/utils/fdt/fdt_fixup.c +++ b/lib/utils/fdt/fdt_fixup.c @@ -199,7 +199,7 @@ int fdt_reserved_memory_fixup(void *fdt) * With above assumption, we create child nodes directly. */ - if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP)) { + if (!sbi_hart_pmp_count(scratch)) { /* * Update the DT with firmware start & size even if PMP is not * supported. This makes sure that supervisor OS is always