Please note: We are aware of an issue affecting replies on the Arm Community forums, which may not be loading as expected.
We apologize for any inconvenience and appreciate your patience while we investigate and work to resolve the issue.
Thank you for your understanding.
Is there any use case where this register (ICH_EISR_EL2) can report more than one outstanding EOI?I don't really understand why we have 16-bit wide register (one bit per LR) if there is no use-case. I'm sure I'm missing something.
Sharing some experiments:
do { u32 irqstat = gic_read_iar(); u32 irqnr = gic_iar_irqnr(irqstat); if (irqnr != GICC_INT_SPURIOUS) { ... delay ... gic_write_eoir(irqstat); } else { break; } } while (1);
do { u32 irqstat = gic_read_iar(); u32 irqnr = gic_iar_irqnr(irqstat); if (irqnr != GICC_INT_SPURIOUS) { < IRQ Handling > gic_write_eoir(irqstat); } else { break; } } while (1); MSR(ICC_DIR_EL1, 7); MSR(ICC_DIR_EL1, 6); MSR(ICC_DIR_EL1, 5); MSR(ICC_DIR_EL1, 4);