I work on zynq 7000 soc whose the DMA component is the pl330.I am trying to do a "scatter-gather" dma transfer, in a channel thread by programming the debug instruction registers via the APB bus.For example, I load from the source, an entire bloc of 64 bytes using one DMALD instruction.After that, I would like to scatter the data in a custom mapping in the destination buffer.For that I use DMAADDH/DMADNH before DMAST instructions.
Let's take an simple example :
DMAMOV SAR ... ;; address aligned on 64 bytesDMAMOV DAR ... ;; address aligned on 64 bytesDMAMOV CCR SB8 SS8 DB1 DS32 ;; with src_inc = 1 and dst_inc = 1
DMALDDMAST ;; store one 32b wordDMAST ;; store the second 32b wordDMAADDH DAR, 4DMAST ;; KO : this word is not stored and an error occurs DMAWMB DMASEV e3DMAEND
My problem is the third word is not stored and the DMAC raise the error "st_data_unavailable" (bit 13 in the XDMAPS_FTCx_OFFSET register).
The third store works if the offset added to the destination address is a multiple of 8 : DMAADDH DAR, 8 is ok for example.
I think something is unclear for me about mfifo usage.
Thank you for your help.
Hello
This forum is for questions about using our community platform. Please could you take a look at https://community.arm.com/support-forums/ and let me know which forum is best to move this question to?
Many thanks
Oli
Arm Community team
Hello,
Thank you for your reply. So, could you move my question to the forum " Architectures and Processors forum" please ?
Many thanks.
Guillaume