This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/OMAP-L138: shared EDMA between ARM and DSP

Part Number: OMAP-L138
Other Parts Discussed in Thread: OMAPL138

Tool/software: Linux

Hi there,

I use Linux and RTOS SDKs 5.0.0.15 on OMAPL138LCDK.

I read much info about EDMA3 and have the undersnanding of sharing steps:

  • must be no conflicts in Linux device tree and DSP peripherals used
  • DSP firmware must have remoteproc resource table 
  • sampleInstInitConfig must be configured (shadow region 0 and 1) according to used on ARM and DSP DMA channels, PaRAMs etc. in sample_omapl138_cfg.c After that RTOS EDMA3 libs must be rebuilt.

Please, correct me if I'm wrong.

Thanks.

  • Hi, Petr,

    True for 1 and 2, and it applies to all Linux/ARM and RTOS/DSP applications. I'll have DSP expert to answer 3.

    Rex
  • Hello Petr,

    That sounds correct. You may also refer to Appendix B of the EDMA User's Guide for a quick guide on setting up a transfer.

    www.ti.com/.../sprugp9b.pdf

    Please let us know if run into any issues or have any other questions.
  • Hi, thanks for replies

    I explored sources and understand that sampleInstInitConfig structure can be modified before calling edma3init(). Therefore RTOS EDMA3 libs need not to be rebuilt.

    It tested for shared EDMA0 using with McASP on DSP and mmc (Linux) on ARM and seems to be working:

    extern EDMA3_RM_InstanceInitConfig sampleInstInitConfig[EDMA3_MAX_EDMA3_INSTANCES][EDMA3_MAX_REGIONS];
    
    //...
    
        sampleInstInitConfig[EDMACC_NUM][0].ownPaRAMSets[0] = 0xFFFFFFFC;
        sampleInstInitConfig[EDMACC_NUM][0].ownPaRAMSets[1] = 0xFFFFFFFF;
        sampleInstInitConfig[EDMACC_NUM][0].ownPaRAMSets[2] = 0xFFFFFFFF;
        sampleInstInitConfig[EDMACC_NUM][0].ownPaRAMSets[2] = 0x00000000;
    
        sampleInstInitConfig[EDMACC_NUM][1].ownPaRAMSets[0] = 0x00000003;
        sampleInstInitConfig[EDMACC_NUM][1].ownPaRAMSets[1] = 0x00000000;
        sampleInstInitConfig[EDMACC_NUM][1].ownPaRAMSets[2] = 0x00000000;
        sampleInstInitConfig[EDMACC_NUM][1].ownPaRAMSets[3] = 0xFFFFFFFF;
    
    //...
    
        hEdma = edma3init(EDMACC_NUM, &edmaResult);

    Thanks.