diff --git a/lib/utils/irqchip/imsic.c b/lib/utils/irqchip/imsic.c index f2a35c63..02e3a334 100644 --- a/lib/utils/irqchip/imsic.c +++ b/lib/utils/irqchip/imsic.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -222,6 +223,8 @@ static void imsic_local_eix_update(unsigned long base_id, void imsic_local_irqchip_init(void) { + struct sbi_trap_info trap = { 0 }; + /* * This function is expected to be called from: * 1) nascent_init() platform callback which is called @@ -231,6 +234,11 @@ void imsic_local_irqchip_init(void) * in boot-up path. */ + /* If Smaia not available then do nothing */ + csr_read_allowed(CSR_MTOPI, (ulong)&trap); + if (trap.cause) + return; + /* Setup threshold to allow all enabled interrupts */ imsic_csr_write(IMSIC_EITHRESHOLD, IMSIC_ENABLE_EITHRESHOLD);