When the BeagleBoard UEFI is started from a 1st (or 2nd stage) boot loader
it is possible there are still some pending IRQ.
Clean the interrupts before starting the BeagleBoard UEFI.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12034
6f19259b-4bc3-4df7-8a09-
765794883524
#include <Library/DebugLib.h>
#include <Library/PcdLib.h>
+#include <Omap3530/Omap3530.h>
+
VOID
PadConfiguration (
VOID
VOID
ArmPlatformNormalInitialize (
VOID
- ) {
+ )
+{
//Set up Pin muxing.
PadConfiguration ();
// Set up system clocking
ClockInit ();
+
+ // Turn off the functional clock for Timer 3
+ MmioAnd32 (CM_FCLKEN_PER, 0xFFFFFFFF ^ CM_ICLKEN_PER_EN_GPT3_ENABLE );
+ ArmDataSyncronizationBarrier ();
+
+ // Clear IRQs
+ MmioWrite32 (INTCPS_CONTROL, INTCPS_CONTROL_NEWIRQAGR);
+ ArmDataSyncronizationBarrier ();
}
/**
\r
// Turn on functional & interface clocks to various Peripherals.\r
MmioOr32(CM_FCLKEN_PER, CM_FCLKEN_PER_EN_UART3_ENABLE\r
- | CM_FCLKEN_PER_EN_GPT3_ENABLE\r
| CM_FCLKEN_PER_EN_GPT4_ENABLE\r
| CM_FCLKEN_PER_EN_GPIO2_ENABLE\r
| CM_FCLKEN_PER_EN_GPIO3_ENABLE\r
Status = gInterrupt->RegisterInterruptSource (gInterrupt, gVector, TimerInterruptHandler);
ASSERT_EFI_ERROR (Status);
+ // Turn on the functional clock for Timer
+ MmioOr32 (CM_FCLKEN_PER, CM_FCLKEN_PER_EN_GPT3_ENABLE);
+
// Set up default timer
Status = TimerDriverSetTimerPeriod (&gTimer, FixedPcdGet32(PcdTimerPeriod));
ASSERT_EFI_ERROR (Status);