Reading the Vybrid AN4947.pdf, and in 4.2 Dual-core communication and synchronization options,
• Interrupts. Routing options for both cores — none, one, or both cores can be notified for the event.
I wanted for M4 MQX NVIC Interrupt 10 and 11 not to be shared on the A5 Linux.
I use this code to configure the routing.
/* Disable shared interrupt to A5 Core */
_irouter_routing(26,0,0);
_irouter_routing(27,0,0);
However it is not working. A5 Linux could still received and processed the interrupts.
Any ideas what I missed?
I'm using MQX Version 4.1.1
Thanks,
Carlo Val
alejandrolozano are you able to help here?
I'm using Linux version 3.0.15-ts-armv7l .
I saw yesterday in a file init_gic.c routing all interrupts to Core 1.
Ill try it today and see if it will work
Here is my update would be:
volatile uint16_t *ptr26;
volatile uint16_t *ptr27;
ptr26 = &MSCM_IRSPRC26;
*ptr26 = MSCM_IRSPRC_CP1En_MASK; /* route interrupts to core 1*/
ptr27 = &MSCM_IRSPRC27;
*ptr27 = MSCM_IRSPRC_CP1En_MASK; /* route interrupts to core 1*/
Hello alejandrolozano,
No it didn't work :-(
Hi,
On Linux side you could try to disable the interrupt routed to the A5 corresponding to the DMA.
void mvf_init_irq(void)
{
unsigned int i;
void __iomem *int_router_base =
MVF_IO_ADDRESS(MVF_MSCM_INT_ROUTER_BASE);
struct irq_desc *desc;
unsigned short route;
/* start offset if private timer irq id, which is 29.
* ID table:
* Global timer, PPI -> ID27
* A legacy nFIQ, PPI -> ID28
* Private timer, PPI -> ID29
* Watchdog timers, PPI -> ID30
* A legacy nIRQ, PPI -> ID31
*/
gic_init(0, 27, MVF_IO_ADDRESS(MVF_INTD_BASE_ADDR),
MVF_IO_ADDRESS(MVF_SCUGIC_BASE_ADDR + 0x100));
for (i = MXC_INT_START; i <= MXC_INT_END; i++) {
desc = irq_to_desc(i);
desc->irq_data.chip->irq_set_wake = mvf_gic_irq_set_wake;
}
mvf_register_gpios();
int_router_base += 0x80;
for (i = 0; i < 112; i++) {
route = 1 | __raw_readw(int_router_base);
__raw_writew(route, int_router_base);
int_router_base += 2;
}
}
This function is found at vim arch/arm/mach-mvf/irq.c
Let me debug the M4 (MQX side) to verify the possible problem.
Best Regards,
Alejandro