)\r
{\r
VOID (*secondary_start)(VOID);\r
+ UINTN Interrupt;\r
\r
// The secondary cores will execute the firmware once wake from WFI.\r
secondary_start = (VOID (*)())PcdGet32(PcdFvBaseAddress);\r
ArmCallWFI();\r
\r
// Acknowledge the interrupt and send End of Interrupt signal.\r
- ArmGicAcknowledgeInterrupt (PcdGet32(PcdGicDistributorBase), PcdGet32(PcdGicInterruptInterfaceBase), NULL, NULL);\r
+ Interrupt = ArmGicAcknowledgeInterrupt (PcdGet32 (PcdGicInterruptInterfaceBase));\r
+ // Check if it is a valid interrupt ID\r
+ if ((Interrupt & ARM_GIC_ICCIAR_ACKINTID) < ArmGicGetMaxNumInterrupts (PcdGet32 (PcdGicDistributorBase))) {\r
+ // Got a valid SGI number hence signal End of Interrupt\r
+ ArmGicEndOfInterrupt (PcdGet32 (PcdGicInterruptInterfaceBase), Interrupt);\r
+ }\r
\r
// Jump to secondary core entry point.\r
secondary_start ();\r