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/AM5728:EDMA 使用 DSP L2SRAM

Guru**** 2538955 points
Other Parts Discussed in Thread: SYSBIOS, AM5728

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/693742/linux-am5728-edma-use-of-dsp-l2sram

器件型号:AM5728
Thread 中讨论的其他器件:SYSBIOS

工具/软件:Linux

你(们)好

使我们复杂化 的是、DSP (c66x)将堆复制 Linux 的共享 memoy (CMEM)到 McASP。

我们知道 EDMA 会将堆 内存发送到上述进程的 McASP。

但是、当我们运行视频解码、去花边、GPU (vivante、SGX)时、EDMA 会出现问题。

我知道 Sillicon Errat 说"i868—McASP 到 EDMA 同步级别事件可能会丢失。"。

然后、我们尝试将堆内存修改 为 DSP 的 L2SRAM。 但我们有运行时错误。

DSP.cfg

VAR HeapMem     = xdc.useModule('ti.sysbios.heaps.HeapMem');
var l2sramheapMemParams  = new HeapMem.Params;
l2sramheapMemParams.size  = 2560;
l2sramheapMemParams.sectionName ="L2SRAM"
program.global.myHeap   = HeapMem.create (l2sramheapMemParams);  

audioSample_io.c

静态空灌注(空)

{  

#define L2SRAM_support

 IHeap_handle iheap;

(笑声)

#ifdef L2SRAM_support
   iheap = HeapMem_Handle_TO_XDC_Runtime_IHeap (myHeap);
其他
  iheap = NULL;  //默认堆 */    
#endif

 (笑声)

 rxbuf[count]= Memory_calloc (iheap、Rx_FRAME_SIZE、BUFALIGN、&EB);

 …

 /* rxbuf[0] addr (@00800000) rxbuf[1] addr (@00800200)*/
 log_info2 (" rxbuf[%d] addr (%p)\n"、count、rxbuf[count]);         

(笑声)

状态= mcaspSubmitChan (hMcaspRxChan、&(rxFram[count]));

TI-processor-sdk-rtos\ipc_3_46_00_02\packages/ti\ipc\remoteproc\rsc_table_vayu_dsp.h

(笑声)

struct my_resource_table ti_ipc_remoteproc_ResourceTable ={


  TYPE_DEVMEM、
  DSP_Peripheral_L2SRAM、L3_Peripheral_L2SRAM、
  L2SRAM_SIZE、0、"DSP_L2SRAM"、
   }、

};

1. 我们发现** 2761 printk 消息被丢弃**[10.377149]  440000.OCP:L3标准错误:Master DSP1_DMA target GPMC (read):AT Address:0x40800308:Data Access in Supervisor mode during functional access */

  如下所示。

#define DSP_PERFICE_L2SRAM    0x40800000
#define L3_peripheral_L2SRAM    0x40800000
#define L2SRAM_SIZE       0x40000

2. 我们找到  OMAP-iommu 40d01000.MMU:IOMMU 故障:DA 0x408001c0标志0x0

#define DSP_Peripheral_L2SRAM    0x800000
#define L3_peripheral_L2SRAM    0x40800000
#define L2SRAM_SIZE       0x40000

2. 我们找到  OMAP-iommu 40d01000.MMU:IOMMU 故障:DA 0x408001c0标志0x0

#define DSP_Peripheral_L2SRAM    0x800000
#define L3_peripheral_L2SRAM    0x800000
#define L2SRAM_SIZE       0x40000

EDMA 如何使用 DSP (c66x)的 L2SRAM?

非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="JOONHO LEE"]

    1. 我们发现** 2761 printk 消息被丢弃**[10.377149]  440000.OCP:L3标准错误:Master DSP1_DMA target GPMC (read):AT Address:0x40800308:Data Access in Supervisor mode during functional access */

    [/报价]

    通常、此错误表示在 L3桥上进行了非法访问。 这可能是由尝试访问时钟门控模块或错误地址导致的。 这可能是由 DTS 文件的错误更改、硬件/时钟设计不正确、软件错误等引起的 在这种情况下、日志指示 DSP1 DMA 尝试访问 L2SRAM 时出现错误。

    [引用用户="JOONHO LEE"]

    2. 我们找到  OMAP-iommu 40d01000.MMU:IOMMU 故障:DA 0x408001c0标志0x0

    [/报价]

    此错误表示资源表中缺少 DSP 地址0x408001c0。  

    是否可以附加完整的引导日志? 您是否对 DTS 文件进行了任何修改?

    此外、请查看以下主题是否有助于解决您的问题:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../session.logHi。

    我们在 您指示与 URL 相关的 L3互连时修改 dra7.dtsi。

    < dra7.dtsi >

    dsp1:DSP@40800000{

    兼容="ti、dra7-dsp";

    REG =<0x40800000 0x40000>、

       0x40e00000 0x8000>、

       0x40f00000 0x8000>;

    reg-names ="l2ram"、"l1pram"、"l1dram";

    ti、hwmods ="dsp1";

    SYSCON-bootreg =<&SCM_conf 0x55c>;

    iommus =<&mu0_dsp1>、<&mu1_dsp1>;

    ti、rproc-standby-info =<0x4a005420>;

    状态="正常";

    };

    每当 c66x 运行高于 source (status = mcaspSubmitChan (hMcaspRxChan、&(rxFrame [count]))的 audioSample_io.c 的 mcaspSubmitChan 时、它始终会出现错误(您可以看到 Session.log (附加文件));)

    如果我在调用 mcaspSubmitChan 之前添加无限睡眠、则没有错误。

    然后、我想知道当 EDMA 具有此 src 地址(dsp1的 l2sram)时、EDMA 是否可以访问 dsp1的 l2sram。

    静态空灌注(空)

    (笑声)

    /* rxbuf[0] addr (@00800000) rxbuf[1] addr (@00800200)*/

     log_info2 (" rxbuf[%d] addr (%p)\n"、count、rxbuf[count]);     

    (笑声)

    rxFrame [count].addr =(void*)(getGlobalAddr ((uint32_t) rxbuf[count]);//////* rxFrame [0] addr (@40800000)  */

    Task_sleep (999999999);//无限睡眠

    状态= mcaspSubmitChan (hMcaspRxChan、&(rxFram[count]));

    (笑声)

    我们的 dsp1 (c66x)资源信息如下所示。

    #define DSP_PERFICE_L2SRAM 0x40800000
    #define L3_peripheral_L2SRAM 0x40800000
    #define L2SRAM_SIZE    0x40000

    我们的 dsp1.map 如下所示。

    输出文件名:   
    入口点符号:"TI_SYSBIOS_family_c64p_Hwi0" 地址:950fe400


    存储器配置

            名称           源   长度     使用    未使用  的属性   填充
    ------------  ----  ------  ----  ----  --------  
     L2SRAM               00800000  00040000 00000a00 0003f600 RW X
     OCMC_RAM1            40300000  00080000 00000000 00080000 RW X
     OCMC_RAM2            40400000  00100000 00000000 00100000 RW X
     OCMC_RAM3            40500000  00100000 00002580 000fda80 RW X
     EXT_CODE             95000000  03000000 0150137e 01afec82 RW X
     EXT_DATA             98000000  00200000 0000FE42 001f01be RW X
     EXT_HEAP             98200000  00200000 00000000 00200000 RW X
     TRACE_BUF            9f000000  00060000 00010004 0004fffc RW X
     EXC_DATA             9f060000  00010000 00000000 00010000 RW X
     PM_DATA              9f070000  00020000 00000000 00020000 RW X

    我们发现 EDMA 可以在 https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/t/109418上访问 DSP 的 l2sram

    我们知道 EDMA 是否访问 DSP1的 l2sram、该地址来自0x40800000。

    但 我们在我们的 soue/config 和 https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/t/109418之间没有发现什么不同

    非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    AM5728总共有3个 EDMA、每个 DSP 一个、以及一个 SoC EDMA。 您是否知道您使用的是哪种 EDMA?

    默认情况下、McASP 示例使用与 SoC EDMA 相对应的 EDMA 实例0。 您可以在 mcasp_cfg.h 中看到此定义为"EDMACC_NUM"。 ARM 可能也在使用 SoC EDMA、这会导致冲突。

    最简单的解决方案是将 EDMA 实例更改为1、以便使用本地 DSP EDMA 而不是 SoC EDMA。 请尝试一下、让我知道它是怎么发生的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    我们可以解决它、就像您谈到 EDMA 实例0和1时一样。
    我可以说、EDMA 如何访问 DSP 的 L2SRAM、如下所示。
    mcasp_cfg.h 上的#define EMDMACC_NUM 1
    2. rxFram[count].addr 必须为00800000而非0x40800000、因为它使用 DSP 的 EDMA。

    非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提供更新。 我很高兴听到这个问题得到解决。