From af8728de981e2b1870d71e4fc89f6d36d075b545 Mon Sep 17 00:00:00 2001 From: Kinjal Pravinbhai Patel Date: Fri, 19 Jun 2015 15:59:16 +0530 Subject: [PATCH] drivers: scugic: added XScuGic_InterruptMaptoCpu API to scugic This patch adds API XScuGic_InterruptMaptoCpu for mapping the interrupts to specified cpu Signed-off-by: Kinjal Pravinbhai Patel --- .../drivers/scugic/src/xscugic.c | 30 +++++++++++++++++++ .../drivers/scugic/src/xscugic.h | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) 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 */