X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=BeagleBoardPkg%2FInterruptDxe%2FHardwareInterrupt.c;h=c87d56406391935897906655b267d9f1b7f72b36;hp=3e69515dfe5fd20ca8e1c5513de21825387336d8;hb=d213712d4f858efd5cb43faa39c6d940829c9363;hpb=db5c4f9e1523964ff1dd4139513d84e58d3f1d80;ds=sidebyside diff --git a/BeagleBoardPkg/InterruptDxe/HardwareInterrupt.c b/BeagleBoardPkg/InterruptDxe/HardwareInterrupt.c index 3e69515dfe..c87d564063 100644 --- a/BeagleBoardPkg/InterruptDxe/HardwareInterrupt.c +++ b/BeagleBoardPkg/InterruptDxe/HardwareInterrupt.c @@ -234,12 +234,16 @@ IrqInterruptHandler ( Vector = MmioRead32(INTCPS_SIR_IRQ) & INTCPS_SIR_IRQ_MASK; + // Needed to prevent infinite nesting if Time Driver lowers TPL + MmioWrite32(INTCPS_CONTROL, INTCPS_CONTROL_NEWIRQAGR); + InterruptHandler = gRegisteredInterruptHandlers[Vector]; if (InterruptHandler != NULL) { // Call the registered interrupt handler. InterruptHandler(Vector, SystemContext); } + // Needed to clear after running the handler MmioWrite32(INTCPS_CONTROL, INTCPS_CONTROL_NEWIRQAGR); }