Omap35xxPkg/InterruptDxe: Fix dependency chain with the Arch Cpu Dxe

The CPU Dxe should be loaded before the Interrupt Dxe.




git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11969 6f19259b-4bc3-4df7-8a09-765794883524
diff --git a/Omap35xxPkg/InterruptDxe/HardwareInterrupt.c b/Omap35xxPkg/InterruptDxe/HardwareInterrupt.c
index 0ddedb4..5040c4b 100644
--- a/Omap35xxPkg/InterruptDxe/HardwareInterrupt.c
+++ b/Omap35xxPkg/InterruptDxe/HardwareInterrupt.c
@@ -31,8 +31,6 @@
 //

 // Notifications

 //

-VOID      *CpuProtocolNotificationToken = NULL;

-EFI_EVENT CpuProtocolNotificationEvent  = (EFI_EVENT)NULL;

 EFI_EVENT EfiExitBootServicesEvent      = (EFI_EVENT)NULL;

 

 

@@ -298,37 +296,6 @@
   EndOfInterrupt

 };

 

-//

-// Notification routines

-//

-VOID

-CpuProtocolInstalledNotification (

-  IN EFI_EVENT   Event,

-  IN VOID        *Context

-  )

-{

-  EFI_STATUS              Status;

-  EFI_CPU_ARCH_PROTOCOL   *Cpu;

-  

-  //

-  // Get the cpu protocol that this driver requires.

-  //

-  Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&Cpu);

-  ASSERT_EFI_ERROR(Status);

-

-  //

-  // Unregister the default exception handler.

-  //

-  Status = Cpu->RegisterInterruptHandler (Cpu, EXCEPT_ARM_IRQ, NULL);

-  ASSERT_EFI_ERROR(Status);

-

-  //

-  // Register to receive interrupts

-  //

-  Status = Cpu->RegisterInterruptHandler (Cpu, EXCEPT_ARM_IRQ, IrqInterruptHandler);

-  ASSERT_EFI_ERROR(Status);

-}

-

 /**

   Initialize the state information for the CPU Architectural Protocol

 

@@ -347,6 +314,7 @@
   )

 {

   EFI_STATUS  Status;

+  EFI_CPU_ARCH_PROTOCOL   *Cpu;

 

   // Make sure the Interrupt Controller Protocol is not already installed in the system.

   ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gHardwareInterruptProtocolGuid);

@@ -362,11 +330,22 @@
                                                   NULL);

   ASSERT_EFI_ERROR(Status);

   

-  // Set up to be notified when the Cpu protocol is installed.

-  Status = gBS->CreateEvent(EVT_NOTIFY_SIGNAL, TPL_CALLBACK, CpuProtocolInstalledNotification, NULL, &CpuProtocolNotificationEvent);    

+  //

+  // Get the CPU protocol that this driver requires.

+  //

+  Status = gBS->LocateProtocol(&gEfiCpuArchProtocolGuid, NULL, (VOID **)&Cpu);

   ASSERT_EFI_ERROR(Status);

 

-  Status = gBS->RegisterProtocolNotify(&gEfiCpuArchProtocolGuid, CpuProtocolNotificationEvent, (VOID *)&CpuProtocolNotificationToken);

+  //

+  // Unregister the default exception handler.

+  //

+  Status = Cpu->RegisterInterruptHandler(Cpu, EXCEPT_ARM_IRQ, NULL);

+  ASSERT_EFI_ERROR(Status);

+

+  //

+  // Register to receive interrupts

+  //

+  Status = Cpu->RegisterInterruptHandler(Cpu, EXCEPT_ARM_IRQ, IrqInterruptHandler);

   ASSERT_EFI_ERROR(Status);

 

   // Register for an ExitBootServicesEvent

diff --git a/Omap35xxPkg/InterruptDxe/InterruptDxe.inf b/Omap35xxPkg/InterruptDxe/InterruptDxe.inf
index f614241..16caa2e 100644
--- a/Omap35xxPkg/InterruptDxe/InterruptDxe.inf
+++ b/Omap35xxPkg/InterruptDxe/InterruptDxe.inf
@@ -53,5 +53,5 @@
 [FixedPcd.common]

   gEmbeddedTokenSpaceGuid.PcdInterruptBaseAddress

 

-[depex]

-  TRUE

+[Depex]

+  gEfiCpuArchProtocolGuid