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:
		@@ -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);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user