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);