dear programmer:
I bought a i.MX6Q board, Android version:4.4.2, Kernel version:3.0.35.
Now, i test the DMA function and i found a question.
After i finish the DMA init, i start DMA transfer. But i found the function(static void imxdma_issue_pending(struct dma_chan *chan)) is not be finished. It is a null function!
How can i do it?
Thank you.
Hi yunteng
please check Chapter 3 Smart Direct Memory Access (SDMA) API
attached Linux Manual. Also may be useful to read
Chapter 29 Configuring the SDMA Driver iMX6_Firmware_Guide.pdf
included in baremetal sdk, which may be found on SMP Enable in IMX6
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Hi igor,
Thank you for your reply.
I think i configured the SDMA driver correctly.
I want to make my SDMA work as external memory to internal memory. But i can not found it via the source codes except DMA_DEV_TO_MEM and DMA_MEM_TO_DEV.
Then i read its datasheet, i found that it may be work through reusing Transfer Between Peripheral and External Memory.
And it should be programmed in increamented mode.
So i programed to set PSA register value 11000110 at address (0x0800 + 32 * channel + offset), to work at increamented mode. At the
same time, i set direction = DMA_DEV_TO_MEM.
But it does not work after i programmed like that.
Would you give me some suggestions please? Thank you very much.
Best Regards
for memory to memory one can look at mxc_sdma_memcopy_test.c example
Index of /buildsources/i/imx-test/imx-test-3.0.35-4.0.0
Best regards
igor
Hi igor,
Thank you for your reply very much.
I have test mxc_sdma_memcopy_test.c example. It is useful for transfer between internal memory and internal memory.
But I want it work as copy data from EIM to Memory. I think the mode is the same sa transfer between external memory and
internal memory.
I have mapped eim address like below:
s_armaddr = ioremap_nocache(WEIM_ARB_BASE_ADDR, SDMA_BUF_SIZE );
And then i set the source buf like below:
sg_set_buf(&sg[0], s_armaddr + 0x16, SDMA_BUF_SIZE );
But the data i read form eim is not what i want.
Any other suggestions please? Thank you very much.
Best Regards
Hi,yunteng long:
I am also working on the DMA driver. I am carrying the SSI data into the memory. Can you refer to your code?
There is no idea now.
thank you very much!
Hi, H SL:
I have deleted the SSI case in audio code.