lib: sbi: detect features before everything else in sbi_hart_init()
authorAnup Patel <anup.patel@wdc.com>
Sun, 10 May 2020 05:43:00 +0000 (11:13 +0530)
committerAnup Patel <anup@brainfault.org>
Tue, 19 May 2020 03:49:32 +0000 (09:19 +0530)
We should detect HART features in sbi_hart_init() before
mstatus_init(), delegate_traps() and pmp_init().

Signed-off-by: Anup Patel <anup.patel@wdc.com>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
lib/sbi/sbi_hart.c

index 28cfeaa..2a284fd 100644 (file)
@@ -247,7 +247,7 @@ static inline char *sbi_hart_feature_id2string(unsigned long feature)
                fstr = "pmp";
                break;
        case SBI_HART_HAS_SCOUNTEREN:
-               fstr = "scountern";
+               fstr = "scounteren";
                break;
        case SBI_HART_HAS_MCOUNTEREN:
                fstr = "mcounteren";
@@ -371,8 +371,10 @@ int sbi_hart_init(struct sbi_scratch *scratch, u32 hartid, bool cold_boot)
                if (!hart_features_offset)
                        return SBI_ENOMEM;
        }
+
        hart_features = sbi_scratch_offset_ptr(scratch, hart_features_offset);
        *hart_features = 0;
+       sbi_hart_detect_features(hartid);
 
        mstatus_init(scratch, hartid);
 
@@ -384,8 +386,6 @@ int sbi_hart_init(struct sbi_scratch *scratch, u32 hartid, bool cold_boot)
        if (rc)
                return rc;
 
-       sbi_hart_detect_features(hartid);
-
        return pmp_init(scratch, hartid);
 }