Hello,
I'm using a C6678 on our custom manufactured board. I'm implementing data transfer between the C6678 and our host (linux) via PCIe and EDMA3. Receiving data (from host to DSP) is no problem, everything works fine. Transmitting data from the DSP to host makes some trouble.
Setup is as follows:
-Using only 1 DMA channel (for transmit / receive), no parallel action
-Use link DMA; all descriptors (or param sets) are prepared before starting DMA; use link update of TCC after one DMA is completed
-end of one DMA is signaled via IRQ; IRQ bit is polled until DMA is finished
-use outbound mapping for address translation
I followed the examples in mcsdk_2_01_02_06\tools\boot_loader\examples\pcie\linux_host_loader\pciedemo.c and pdk_C6678_1_1_2_6\packages\ti\csl\example\edma\edma_test.c.
DMA is done in a simple for-loop regarding how much param sets have been prepared (see code in attachment). Problem is that some times the last package fails. Debugging with PCIe-Analyzer (see picture in attachment) shows that the outbound mapping (OB_INDEX at 0x21800200) has not been used for the last package.
I assume that disabling outbound mapping in the CMD_STATUS is to early. But I wonder about this as the IRQ is setup for normal mode -> IRQ is triggered when data is transfered! So there should be no raise condition or something.
Please have a look at this. Maybe there is some wrong handling for the DMA finish?
Best regards,
Bernd
PS: if a printf is added before the CMD_STATUS is set back (no outbound mapping allowed), then this error not happens. But this is not a sufficient solution...