diff options
Diffstat (limited to 'ArmPkg/Drivers')
-rw-r--r-- | ArmPkg/Drivers/CpuDxe/CpuDxe.inf | 4 | ||||
-rw-r--r-- | ArmPkg/Drivers/CpuDxe/Exception.c | 1 | ||||
-rw-r--r-- | ArmPkg/Drivers/PL390Gic/PL390GicDxe.c | 89 | ||||
-rw-r--r-- | ArmPkg/Drivers/PL390Gic/PL390GicDxe.inf | 4 |
4 files changed, 38 insertions, 60 deletions
diff --git a/ArmPkg/Drivers/CpuDxe/CpuDxe.inf b/ArmPkg/Drivers/CpuDxe/CpuDxe.inf index e74de5b3e0..94e91c1ebd 100644 --- a/ArmPkg/Drivers/CpuDxe/CpuDxe.inf +++ b/ArmPkg/Drivers/CpuDxe/CpuDxe.inf @@ -76,5 +76,5 @@ gArmTokenSpaceGuid.PcdDebuggerExceptionSupport
gArmTokenSpaceGuid.PcdEfiUncachedMemoryToStronglyOrdered
-[depex]
- gHardwareInterruptProtocolGuid
+[Depex]
+ TRUE
diff --git a/ArmPkg/Drivers/CpuDxe/Exception.c b/ArmPkg/Drivers/CpuDxe/Exception.c index 659b7137e1..eef76644f7 100644 --- a/ArmPkg/Drivers/CpuDxe/Exception.c +++ b/ArmPkg/Drivers/CpuDxe/Exception.c @@ -92,7 +92,6 @@ CommonCExceptionHandler ( IN OUT EFI_SYSTEM_CONTEXT SystemContext
)
{
-
if (ExceptionType <= MAX_ARM_EXCEPTION) {
if (gExceptionHandlers[ExceptionType]) {
gExceptionHandlers[ExceptionType] (ExceptionType, SystemContext);
diff --git a/ArmPkg/Drivers/PL390Gic/PL390GicDxe.c b/ArmPkg/Drivers/PL390Gic/PL390GicDxe.c index d9d9b5f718..8bf818768e 100644 --- a/ArmPkg/Drivers/PL390Gic/PL390GicDxe.c +++ b/ArmPkg/Drivers/PL390Gic/PL390GicDxe.c @@ -54,8 +54,6 @@ extern EFI_HARDWARE_INTERRUPT_PROTOCOL gHardwareInterruptProtocol; // // Notifications // -VOID *CpuProtocolNotificationToken = NULL; -EFI_EVENT CpuProtocolNotificationEvent = (EFI_EVENT)NULL; EFI_EVENT EfiExitBootServicesEvent = (EFI_EVENT)NULL; HARDWARE_INTERRUPT_HANDLER gRegisteredInterruptHandlers[FixedPcdGet32(PcdGicNumInterrupts)]; @@ -303,19 +301,19 @@ ExitBootServicesEvent ( IN VOID *Context ) { - UINTN i; + UINTN Index; - for (i = 0; i < PcdGet32(PcdGicNumInterrupts); i++) { - DisableInterruptSource (&gHardwareInterruptProtocol, i); + for (Index = 0; Index < PcdGet32(PcdGicNumInterrupts); Index++) { + DisableInterruptSource (&gHardwareInterruptProtocol, Index); } // Acknowledge all pending interrupts - for (i = 0; i < PcdGet32(PcdGicNumInterrupts); i++) { - DisableInterruptSource (&gHardwareInterruptProtocol, i); + for (Index = 0; Index < PcdGet32(PcdGicNumInterrupts); Index++) { + DisableInterruptSource (&gHardwareInterruptProtocol, Index); } - for (i = 0; i < PcdGet32(PcdGicNumInterrupts); i++) { - EndOfInterrupt (&gHardwareInterruptProtocol, i); + for (Index = 0; Index < PcdGet32(PcdGicNumInterrupts); Index++) { + EndOfInterrupt (&gHardwareInterruptProtocol, Index); } // Disable Gic Interface @@ -326,37 +324,6 @@ ExitBootServicesEvent ( MmioWrite32 (PcdGet32(PcdGicDistributorBase) + GIC_ICDDCR, 0x0); } -// -// 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 @@ -374,20 +341,21 @@ InterruptDxeInitialize ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - UINTN i; - UINT32 RegOffset; - UINTN RegShift; + EFI_STATUS Status; + UINTN Index; + UINT32 RegOffset; + UINTN RegShift; + EFI_CPU_ARCH_PROTOCOL *Cpu; // Make sure the Interrupt Controller Protocol is not already installed in the system. ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gHardwareInterruptProtocolGuid); - for (i = 0; i < PcdGet32(PcdGicNumInterrupts); i++) { - DisableInterruptSource (&gHardwareInterruptProtocol, i); + for (Index = 0; Index < PcdGet32(PcdGicNumInterrupts); Index++) { + DisableInterruptSource (&gHardwareInterruptProtocol, Index); // Set Priority - RegOffset = i / 4; - RegShift = (i % 4) * 8; + RegOffset = Index / 4; + RegShift = (Index % 4) * 8; MmioAndThenOr32 ( PcdGet32(PcdGicDistributorBase) + GIC_ICDIPR + (4*RegOffset), ~(0xff << RegShift), @@ -396,8 +364,8 @@ InterruptDxeInitialize ( } // Configure interrupts for cpu 0 - for (i = 0; i < GIC_NUM_REG_PER_INT_BYTES; i++) { - MmioWrite32 (PcdGet32(PcdGicDistributorBase) + GIC_ICDIPTR + (i*4), 0x01010101); + for (Index = 0; Index < GIC_NUM_REG_PER_INT_BYTES; Index++) { + MmioWrite32 (PcdGet32(PcdGicDistributorBase) + GIC_ICDIPTR + (Index*4), 0x01010101); } // Set binary point reg to 0x7 (no preemption) @@ -421,12 +389,23 @@ InterruptDxeInitialize ( ); 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); - ASSERT_EFI_ERROR (Status); + // + // 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); - 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); // Register for an ExitBootServicesEvent Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_NOTIFY, ExitBootServicesEvent, NULL, &EfiExitBootServicesEvent); diff --git a/ArmPkg/Drivers/PL390Gic/PL390GicDxe.inf b/ArmPkg/Drivers/PL390Gic/PL390GicDxe.inf index 907756542a..3baa902a63 100644 --- a/ArmPkg/Drivers/PL390Gic/PL390GicDxe.inf +++ b/ArmPkg/Drivers/PL390Gic/PL390GicDxe.inf @@ -51,5 +51,5 @@ gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase gArmTokenSpaceGuid.PcdGicNumInterrupts -[depex] - TRUE +[Depex] + gEfiCpuArchProtocolGuid |