summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Voevodin <[email protected]>2026-05-07 18:08:05 +0000
committerAnup Patel <[email protected]>2026-05-09 12:59:43 +0530
commit882b8b081c05516d40eb2e3727721469deff3ee6 (patch)
tree44be57ad86c7f82d31387c6277f9f8deadadb77d
parent00fec20b4976c756ddacedef23a6bf510fa00dad (diff)
lib: sbi: hart: Move device tree features detection before trap-based checks
Smrnmi detection and enablement in the following commits will happen before any trap-based mechanism. As it relies on device tree, move sbi_platform_extensions_init() to the beginning of hart_detect_features(). Signed-off-by: Evgeny Voevodin <[email protected]> Reviewed-by: Anup Patel <[email protected]> Link: https://lore.kernel.org/r/d066935990f12e1f4f21cd709eb20afba618b134.1778176768.git.evvoevod@tenstorrent.com Signed-off-by: Anup Patel <[email protected]>
-rw-r--r--lib/sbi/sbi_hart.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
index 4aefb759..781161e5 100644
--- a/lib/sbi/sbi_hart.c
+++ b/lib/sbi/sbi_hart.c
@@ -522,6 +522,16 @@ static int hart_detect_features(struct sbi_scratch *scratch)
hfeatures->mhpm_mask = 0;
hfeatures->priv_version = SBI_HART_PRIV_VER_UNKNOWN;
+ /*
+ * Parse device tree extensions early, before any trap-based checks.
+ * Needed to detect Smrnmi and install NMI handlers before CSR probes
+ * that may trigger traps.
+ */
+ rc = sbi_platform_extensions_init(sbi_platform_thishart_ptr(),
+ hfeatures);
+ if (rc)
+ return rc;
+
#define __check_hpm_csr(__csr, __mask) \
oldval = csr_read_allowed(__csr, &trap); \
if (!trap.cause) { \
@@ -676,12 +686,6 @@ __pmp_skip:
#undef __check_csr_existence
- /* Let platform populate extensions */
- rc = sbi_platform_extensions_init(sbi_platform_thishart_ptr(),
- hfeatures);
- if (rc)
- return rc;
-
/* Zicntr should only be detected using traps */
__sbi_hart_update_extension(hfeatures, SBI_HART_EXT_ZICNTR,
sbi_hart_has_csr(scratch, SBI_HART_CSR_CYCLE) &&