diff --git a/arch/tricore/src/common/tricore_irq.c b/arch/tricore/src/common/tricore_irq.c index d8ef8019ae..d1fec88568 100644 --- a/arch/tricore/src/common/tricore_irq.c +++ b/arch/tricore/src/common/tricore_irq.c @@ -115,6 +115,29 @@ void up_trigger_irq(int irq, cpu_set_t cpuset) #endif +/**************************************************************************** + * Name: up_affinity_irq + * + * Description: + * Set an IRQ affinity by software. + * + ****************************************************************************/ + +void up_affinity_irq(int irq, cpu_set_t cpuset) +{ + volatile Ifx_SRC_SRCR *src = &SRC_CPU_CPU0_SB + irq; + int irq_prio = src->B.SRPN; + + IfxSrc_disable(src); + + /* Only support interrupt routing mode 0, + * so routing to the first cpu in cpuset. + */ + + IfxSrc_init(src, ffs(cpuset) - 1, irq_prio); + IfxSrc_enable(src); +} + /**************************************************************************** * Name: tricore_ack_irq *