mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg/SP804Timer: Fix IRQ handler when the Timer IRQ is shared
The handler must check if the raised interrupt belongs to the SP804 Timer controller. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11473 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
1e6a5cfcec
commit
e100fa8c1e
|
@ -74,15 +74,17 @@ TimerInterruptHandler (
|
||||||
//
|
//
|
||||||
OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL);
|
OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL);
|
||||||
|
|
||||||
// clear the periodic interrupt
|
// If the interrupt is shared then we must check if this interrupt source is the one associated to this Timer
|
||||||
|
if (MmioRead32 (SP804_TIMER0_BASE + SP804_TIMER_MSK_INT_STS_REG) != 0) {
|
||||||
|
// clear the periodic interrupt
|
||||||
|
MmioWrite32 (SP804_TIMER0_BASE + SP804_TIMER_INT_CLR_REG, 0);
|
||||||
|
|
||||||
MmioWrite32 (SP804_TIMER0_BASE + SP804_TIMER_INT_CLR_REG, 0);
|
// signal end of interrupt early to help avoid losing subsequent ticks from long duration handlers
|
||||||
|
gInterrupt->EndOfInterrupt (gInterrupt, Source);
|
||||||
|
|
||||||
// signal end of interrupt early to help avoid losing subsequent ticks from long duration handlers
|
if (mTimerNotifyFunction) {
|
||||||
gInterrupt->EndOfInterrupt (gInterrupt, Source);
|
mTimerNotifyFunction (mTimerPeriod);
|
||||||
|
}
|
||||||
if (mTimerNotifyFunction) {
|
|
||||||
mTimerNotifyFunction (mTimerPeriod);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gBS->RestoreTPL (OriginalTPL);
|
gBS->RestoreTPL (OriginalTPL);
|
||||||
|
|
Loading…
Reference in New Issue