forked from Mirrors/opensbi
lib: sbi: Remove redundant SBI_HART_HAS_PMP feature
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> Reviewed-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
@@ -14,14 +14,12 @@
|
|||||||
|
|
||||||
/** Possible feature flags of a hart */
|
/** Possible feature flags of a hart */
|
||||||
enum sbi_hart_features {
|
enum sbi_hart_features {
|
||||||
/** Hart has PMP support */
|
|
||||||
SBI_HART_HAS_PMP = (1 << 0),
|
|
||||||
/** Hart has S-mode counter enable */
|
/** Hart has S-mode counter enable */
|
||||||
SBI_HART_HAS_SCOUNTEREN = (1 << 1),
|
SBI_HART_HAS_SCOUNTEREN = (1 << 0),
|
||||||
/** Hart has M-mode counter enable */
|
/** 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 */
|
/** HART has timer csr implementation in hardware */
|
||||||
SBI_HART_HAS_TIME = (1 << 3),
|
SBI_HART_HAS_TIME = (1 << 2),
|
||||||
|
|
||||||
/** Last index of Hart features*/
|
/** Last index of Hart features*/
|
||||||
SBI_HART_HAS_LAST_FEATURE = SBI_HART_HAS_TIME,
|
SBI_HART_HAS_LAST_FEATURE = SBI_HART_HAS_TIME,
|
||||||
|
@@ -158,9 +158,6 @@ void sbi_hart_pmp_dump(struct sbi_scratch *scratch)
|
|||||||
unsigned long prot, addr, size;
|
unsigned long prot, addr, size;
|
||||||
unsigned int i, pmp_count;
|
unsigned int i, pmp_count;
|
||||||
|
|
||||||
if (!sbi_hart_has_feature(scratch, SBI_HART_HAS_PMP))
|
|
||||||
return;
|
|
||||||
|
|
||||||
pmp_count = sbi_hart_pmp_count(scratch);
|
pmp_count = sbi_hart_pmp_count(scratch);
|
||||||
for (i = 0; i < pmp_count; i++) {
|
for (i = 0; i < pmp_count; i++) {
|
||||||
pmp_get(i, &prot, &addr, &size);
|
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 long prot, size, tempaddr;
|
||||||
unsigned int i, pmp_count;
|
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);
|
pmp_count = sbi_hart_pmp_count(scratch);
|
||||||
for (i = 0; i < pmp_count; i++) {
|
for (i = 0; i < pmp_count; i++) {
|
||||||
pmp_get(i, &prot, &tempaddr, &size);
|
pmp_get(i, &prot, &tempaddr, &size);
|
||||||
@@ -213,7 +207,7 @@ static int pmp_init(struct sbi_scratch *scratch, u32 hartid)
|
|||||||
ulong prot, addr, log2size;
|
ulong prot, addr, log2size;
|
||||||
const struct sbi_platform *plat = sbi_platform_ptr(scratch);
|
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;
|
return 0;
|
||||||
|
|
||||||
/* Firmware PMP region to protect OpenSBI firmware */
|
/* Firmware PMP region to protect OpenSBI firmware */
|
||||||
@@ -276,9 +270,6 @@ static inline char *sbi_hart_feature_id2string(unsigned long feature)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
switch (feature) {
|
switch (feature) {
|
||||||
case SBI_HART_HAS_PMP:
|
|
||||||
fstr = "pmp";
|
|
||||||
break;
|
|
||||||
case SBI_HART_HAS_SCOUNTEREN:
|
case SBI_HART_HAS_SCOUNTEREN:
|
||||||
fstr = "scounteren";
|
fstr = "scounteren";
|
||||||
break;
|
break;
|
||||||
@@ -375,10 +366,6 @@ static void hart_detect_features(struct sbi_scratch *scratch)
|
|||||||
__detect_pmp(CSR_PMPADDR15);
|
__detect_pmp(CSR_PMPADDR15);
|
||||||
#undef __detect_pmp
|
#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 */
|
/* Detect if hart supports SCOUNTEREN feature */
|
||||||
trap.cause = 0;
|
trap.cause = 0;
|
||||||
val = csr_read_allowed(CSR_SCOUNTEREN, (unsigned long)&trap);
|
val = csr_read_allowed(CSR_SCOUNTEREN, (unsigned long)&trap);
|
||||||
|
@@ -199,7 +199,7 @@ int fdt_reserved_memory_fixup(void *fdt)
|
|||||||
* With above assumption, we create child nodes directly.
|
* 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
|
* Update the DT with firmware start & size even if PMP is not
|
||||||
* supported. This makes sure that supervisor OS is always
|
* supported. This makes sure that supervisor OS is always
|
||||||
|
Reference in New Issue
Block a user