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:加载 Linux 和 SYSBIOS 时、EDMA 未正确配置

Guru**** 2583825 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/592714/linux-omap-l138-edma-not-configured-properly-when-linux-and-sysbios-loaded

器件型号:OMAP-L138
Thread 中讨论的其他器件:OMAPL138

工具/软件:Linux

您好!

我尝试通过 DSP 使用 McASP、同时在 GPP 上运行 Linux。  我正在使用 PDK 中提供的 McASP 示例工程。 版本如下:

  • MCSDK 1.01.00.02
  • PDK OMAPL138 1.01.00.02
  • BIOS 6.34.03.19
  • Syslink 2.21.01.05
  • XDC 工具3.24.03.33

当我不加载 Linux 时、我发现 DMA 参数配置正确、程序运行、按预期传输音频。  但是、当我在开始加载 DSP 之前加载 Linux 时、EDMA 参数集似乎未正确配置。  例如、由 McASP 使用的参数集0和1加载如下所示的值:

Linux 引导、DSP 加载/运行:

OPT0      0x00000000
SRC0      0x00000000
A_B_CNT0   0x00000000
DST0      0x00000000
SRC_DST_BIDX0 0x00000000
LINK_BCNTRLD0 0x0000FFFF
SRC_DST_CIDX0 0x00000000
CCNT0     0x00000000

OPT1      0x81001804
SRC1      0x00000000
A_B_CNT1   0x00010004
DST1      0x01D02000
SRC_DST_BIDX1 0x00000000
LINK_BCNTRLD1 0x00010000
SRC_DST_CIDX1 0x00000000
CCNT1     0x00000000

无 Linux、加载 GEL、唤醒 DSP、加载代码

OPT0      0x81100804
SRC0      0x01D02000
A_B_CNT0   0x00010004
DST0      0xC3001F1C
SRC_DST_BIDX0 0x10000000
LINK_BCNTRLD0 0x00014400
SRC_DST_CIDX0 0x00040000
CCNT0     0x000000F3

OPT1      0x81101804
SRC1      0xC3002224
A_B_CNT1   0x00010004
DST1      0x01D02000
SRC_DST_BIDX1 0x00001000
LINK_BCNTRLD1 0x00014440
SRC_DST_CIDX1 0x00000004
CCNT1     0x000002EF

第二组(正常工作)显示 DDR 存储器空间中的源地址和目标地址。

我有:

  • 在 board-omapl138-lcdk.c (arm)中保留 EDMA 通道0、1
  • 修改 SAMPLE_Omapl138_cfg.c (DSP)以显示 EMDMACC0影子区域1拥有 CHANNELS 0和 PARAMS 1。
  • 禁用 ALSA (ARM)
  • 在 Linux 内核(ARM)中取消注册 McASP
  • 已确保 McASP PSC 处于活动状态

DSP 代码中的 EDMA LLD 实例似乎没有对 DMA 配置进行任何更改。  有什么想法、这可能是什么原因?

Jeff

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

    我已将此事转交给专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有更新吗? 也许可以提供更多信息?

    我已经深入研究了这个位、发现参数集似乎由驱动程序设置、但随后在 RX 状态机启用时被清除(当位掩码= 0x8时、McASP_drv.c:3425)。 RSTAT 寄存器指示溢出和数据存在。 奇怪的是、只有在加载 Linux 时才会发生这种情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jeff、

    n`t 在 Linux 运行后加载 DSP、DSP 代码应覆盖 Linux 完成的设置。 我怀疑还有其他一些 Linux 驱动程序可能正在使用 EDMA 资源、这就是 DSP 可能无法使用相同资源的原因。

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

    我认为情况可能是这样。 我在仅加载 Linux 时检查了参数集、唯一不是内核设置的默认值的参数集是与 SD 卡接口关联的参数集、如果我记得正确的话、这类似于15/16。 我已经知道完全禁用 DMA 驱动程序会中断 Linux 安装、因此我还没有尝试。

    我目前不理解的行为是、正确设置参数集后、为什么要重置参数集。 不过、我刚刚遇到了参数在 CCNT 已耗尽且未加载链接参数后重置的情况、因此链接参数可能未正确设置? 我将在接下来的几天中对此进行检查。

    Jeff
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    似乎示例代码最初将 DMA Param link 字段设置为空链接(0xFFFF)并启动接收器。 除非挂起的提交调用数大于1、否则似乎不使用链接的参数集、因此即使我自己运行代码(无 Linux)、参数0也会被清除。 如果未加载 Linux、"Param link"字段最终会被设置、但代码似乎是在每个通道提交请求上手动加载参数。 加载 Linux 时、不会触发在设置链接参数地址的函数上设置的断点。

    我假设如果我继续比较加载和未加载 Linux 时发生的情况、我最终会发现导致代码中断的差异。 不过、这种感觉有点像尝试用一盒匹配的匹配物熔化冰山一角。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在深入探究之后、我发现了 Linux 启动序列停止 DSP 代码运行的时间点、而 Linux DMA 写入它的所有参数也是不足为奇的。

    当我在电路板配置文件中为 DSP 保留 DMA 通道时、我查看了该驱动程序、它看起来就像是预留了什么。 嗯、它看起来不是。 我找到了:
    "不支持的功能
    不支持 QDMA。
    不支持从 DSP 预留资源(通道和参数)以供使用。"
    在 PSP 的 wiki 页面上。 processors.wiki.ti.com/.../DaVinci_PSP_03.22.00.06_Device_Driver_Features_and_Performance_Guide
    因此、在我看来、Linux 占用了 DMA、DSP 将不允许使用它。 为什么保留结构不起作用对我来说毫无意义、但我想这就是它的原因。 我真的希望我在这里错了、因为我不期待重新编写 DMA 驱动程序。

    Jeff