X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=BeagleBoardPkg%2FInterruptDxe%2FHardwareInterrupt.c;h=c87d56406391935897906655b267d9f1b7f72b36;hp=97361ffbc1d0c0ec4a0249d9f7145f5bfb0389e8;hb=d213712d4f858efd5cb43faa39c6d940829c9363;hpb=2ef2b01e07c02db339f34004445734a2dbdd80e1;ds=sidebyside diff --git a/BeagleBoardPkg/InterruptDxe/HardwareInterrupt.c b/BeagleBoardPkg/InterruptDxe/HardwareInterrupt.c index 97361ffbc1..c87d564063 100644 --- a/BeagleBoardPkg/InterruptDxe/HardwareInterrupt.c +++ b/BeagleBoardPkg/InterruptDxe/HardwareInterrupt.c @@ -93,7 +93,6 @@ RegisterInterruptSource ( } gRegisteredInterruptHandlers[Source] = Handler; - return This->EnableInterruptSource(This, Source); } @@ -235,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); }