Tool/software: Linux
Hello,
I can not get DMA transfers to get triggered with GPIO pin or XDMA pin. We use kernel 4.4.41 from TI SDK. We have external device which should trigger DMA transfers. It works if we register interrupt handler for GPIO in Linux and in the interrupt handler DMA transfers are software triggered as memory to memory transfers. But interrupt handling takes to much and jitter is unacceptable so we want to trigger DMA directly. There are some related threads on e2e :
https://e2e.ti.com/support/arm/sitara_arm/f/791/p/593810/2203586
abcd {
compatible = "abcd";
status = "okay";
dmas = <0x34 20 0 29>;
dma-names = "dma_test";
};
0x34 is reference to crossbar (in this config we wanted to trigger DMA with XDMA_EVENT_INTR1 pin)
we also tried with
dmas = <0x2d 22 0>;
where 0x2d is reference to edma (in this config we wanted to trigger DMA with GPIO0_7 pin)
we get the channel, for which we have interfaces for device_prep_slave_sg (no reference to mem2mem copy interface - as in the thread mentioned above). So we configure transaction for dma with prep_slave_sg, then we submit transaction but it is never executed. We would like to trigger it with external pin but it seems that something is missing.
Pins are configured in appriopriate mode for XDMA and GPIO but it seems that events are never registered. When I dump ER register of EDMA3CC I do not see any changes in corresponding bits for events. TRM says that events are registered even if they are not enabled - should I see status change in ER register for any GPIO change? . Is there some configuration that I am missing to trigger DMA from external device?
Best regards.