diff --git a/XilinxProcessorIPLib/drivers/scugic/src/xscugic.c b/XilinxProcessorIPLib/drivers/scugic/src/xscugic.c index 64954b9a..a873677e 100644 --- a/XilinxProcessorIPLib/drivers/scugic/src/xscugic.c +++ b/XilinxProcessorIPLib/drivers/scugic/src/xscugic.c @@ -70,6 +70,8 @@ * in function XScuGic_CfgInitialize is removed as it was * a bug. * 3.00 kvn 02/13/14 Modified code for MISRA-C:2012 compliance. +* 3.01 pkp 06/19/15 Added XScuGic_InterruptMaptoCpu API for an interrupt +* target CPU mapping * * * @@ -710,3 +712,31 @@ void XScuGic_GetPriorityTriggerType(XScuGic *InstancePtr, u32 Int_Id, *Trigger = (u8)(RegValue & XSCUGIC_INT_CFG_MASK); } +/****************************************************************************/ +/** +* Sets the target CPU for the interrupt of a peripheral +* +* @param InstancePtr is a pointer to the instance to be worked on. +* @param Cpu_Id is a CPU number for which the interrupt has to be targeted +* @param Int_Id is the IRQ source number to modify +* +* @return None. +* +* @note None +* +*****************************************************************************/ +void XScuGic_InterruptMaptoCpu(XScuGic *InstancePtr, u8 Cpu_Id, u32 Int_Id) +{ + u32 RegValue, Offset; + RegValue = XScuGic_DistReadReg(InstancePtr, + XSCUGIC_SPI_TARGET_OFFSET_CALC(Int_Id)); + + Offset = (Int_Id & 0x3); + + RegValue = (RegValue | (~(0xFF << (Offset*8))) ); + RegValue |= ((Cpu_Id) << (Offset*8)); + + XScuGic_DistWriteReg(InstancePtr, + XSCUGIC_SPI_TARGET_OFFSET_CALC(Int_Id), + RegValue); +} diff --git a/XilinxProcessorIPLib/drivers/scugic/src/xscugic.h b/XilinxProcessorIPLib/drivers/scugic/src/xscugic.h index 86adf7b1..7b738e15 100644 --- a/XilinxProcessorIPLib/drivers/scugic/src/xscugic.h +++ b/XilinxProcessorIPLib/drivers/scugic/src/xscugic.h @@ -292,7 +292,7 @@ void XScuGic_GetPriorityTriggerType(XScuGic *InstancePtr, u32 Int_Id, u8 *Priority, u8 *Trigger); void XScuGic_SetPriorityTriggerType(XScuGic *InstancePtr, u32 Int_Id, u8 Priority, u8 Trigger); - +void XScuGic_InterruptMaptoCpu(XScuGic *InstancePtr, u8 Cpu_Id, u32 Int_Id); /* * Initialization functions in xscugic_sinit.c */