UINT32 CoreId;\r
VOID (*SecondaryStart)(VOID);\r
UINTN SecondaryEntryAddr;\r
+ UINTN Interrupt;\r
\r
ClusterId = GET_CLUSTER_ID(MpId);\r
CoreId = GET_CORE_ID(MpId);\r
SecondaryEntryAddr = MmioRead32 (ArmCoreInfoTable[Index].MailboxGetAddress);\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
} while (SecondaryEntryAddr == 0);\r
\r
// Jump to secondary core entry point.\r