Other Parts Discussed in Thread: SYSBIOS
Tool/software: TI-RTOS
Hello,
I'm have the same issue as described a year ago in this thread:
https://e2e.ti.com/support/arm/sitara_arm/f/791/t/573071
I'm using GPIO8 (bit 20) to trigger the ISR in the IPU.
By default GPIO8 is routed to the A15 running Linux, I've disabled it in the device tree by setting the status of the entire gpio8 node to disabled:
&gpio8 {
status = "disabled";
};
This deletes the IRQ from the IRQ_CROSSBAR map for the A15.
GPIO8 has two IRQs: 116 and 348. None of them is routed to the A15, IRQ1 (116) is routed to the IPU1 and triggers there a Hwi ISR.
The ISR on the IPU should then do four transfers on I2C bus 3 (also disabled in the DT, so the A15 does not see it).
The interrupt latency of the GPIO8 ISR on the IPU is around 500uS to 700uS which is way to long. Enabling IRQ1 and IRQ2 of the GPIO8 as described as workaround in the e2e thread linked above does solve the latency issue but causes the I2C transfers to be very slow: after (almost!) each transfer there's an additional delay. Some transfers are still fast back to back. I've got one on the scope screen shot below. Most of them are slow. A mix of slow/fast also happens.
My workaround for now is: enable IRQ1 and IRQ2 of GPIO8 and write my own I2C transfer routines in C using polling instead of interrupts.
- Why do I have the enable IRQ1 and IRQ2 for GPIO8 to get a low latency response? Is this a wrong config or a silicon bug?
- Why does the (pdk-) I2C transfer take such a long time?
I measured the I2C transfers:
Channel 1: trigger on GPIO8_20
Channel 2+3: I2C bus 3
Channel 4: GPIO4_4 to measure the time of a single i2c transfer
SLOW:
FAST:
The IPU1 and DSP1 both run sysbios, the DSP1, IPU1 and the A15 communicate over IPC.
IPU2 and DSP2 are not used.
Best regards,
Lo