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/AM3352:从 XDMA 引脚触发 DMA

Guru**** 2587345 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633610/linux-am3352-triggering-dma-from-xdma-pin

器件型号:AM3352

工具/软件:Linux

您好!

我无法获得 DMA 传输、而是被 GPIO 引脚或 XDMA 引脚触发。 我们使用 TI SDK 中的内核4.4.41。 我们有外部器件、应触发 DMA 传输。 如果我们在 Linux 中为 GPIO 注册中断处理程序、并且在中断处理程序中、DMA 传输是软件触发的、作为内存到内存的传输。 但中断处理需要花费太多、抖动是不可接受的、因此我们希望直接触发 DMA。 e2e 上有一些相关的线程:

https://e2e.ti.com/support/arm/sitara_arm/f/791/p/593810/2203586 

ABCD{
兼容="abcd";
状态="正常";
DMA =<0x34 20 0 29>;
dma-names ="dma_test";
};

0x34是对交叉开关的引用(在此配置中、我们希望使用 XDMA_EVENT_INTR1引脚触发 DMA)

我们还尝试了  

DMA =<0x2D 22 0>;

其中0x2D 是对 EDMA 的引用(在此配置中、我们希望使用 GPIO0_7引脚触发 DMA)

我们获得了通道、我们为其提供了 device_prep_slave_sg 接口(不引用 mem2mem 复制接口、如上面提到的线程所示)。 因此、我们使用 PRE_SLAVE_SG 为 DMA 配置事务、然后提交事务、但从未执行。 我们希望使用外部引脚触发它、但似乎缺少了一些东西。  

针对 XDMA 和 GPIO、引脚被配置为优先模式、但是事件似乎从未被记录。 当我转储 EDMA3CC 的 ER 寄存器时、我看不到事件对应位的任何变化。 TRM 表示即使未启用事件也会进行记录-是否应该在 ER 寄存器中看到 GPIO 发生变化时的状态变化? 。 是否缺少一些配置来从外部器件触发 DMA?  

此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我注意到的另一点是:如果我配置纵横制以将 xdma intr1引脚映射到通道20 (通道20、21在默认 TI DTS 中配置为 memcpy 传输)
    DMA =<0x34 20 0 29>;
    然后、我不是 DEVICE_PRE_SLAVE_SG、而是获取 DEVICE_PRE_DMA_memcpy 的指针。 这是可以的、但传输仍然没有触发。 在交叉开关配置下、DMA 传输未完成。 相同的配置,但在请求 dma_memcpy 之后:传输可以在软件中触发。 无论如何、无论我使用哪种配置、我都无法从某些外部引脚触发 DMA 传输。 对于 XDMA 引脚、我只需在模式0中将其配置为输入。 对于 GPIO0引脚、我将其配置为 MODE7 (GPIO0_7)中的输入。

    我可以看到、在 EER 寄存器中、EVENT20的位未启用、对于其他配置(如从 GPIO0触发)、事件也未启用。 我只能看到启用 URXEVT0的位...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jacek:

    GPIO0 EDMA 事件(GPIOEVT0、#22)已直接映射、无需配置交叉开关、请参阅 AM335x TRM 第11.3.19节 EDMA 事件

    您要将哪个物理引脚用于 GPIO0 EDMA? 是否使用 B15 (ZCE)/D14 (ZCZ) XDMA_EVENT_INTR1.GPIO0_20? 或 E18 (ZCE)/C18 (ZCZ) ECAP0_IN_PWM0_OUT.GPIO0_7引脚?

    查看以下 e2e 线程是否将提供帮助:

    e2e.ti.com/.../209013
    e2e.ti.com/.../178492
    e2e.ti.com/.../188447

    e2e.ti.com/.../581725
    e2e.ti.com/.../580713

    github.com/.../9b5005a521290d3cb3725b5801a85a4dac13d174
    github.com/.../01b5e914e58e8bdfce2244e6a38578f041f9702d

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

    您好!

    感谢您提供的链接。 我知道 GPIO0的直接映射-遗憾的是、我无法使用该引脚触发 DMA 传输。 这就是为什么我还尝试了必须配置交叉开关的 XDMA_EVENT_INTR1。 我将 D14用于 XDMA_EVENT_INTR1测试、将 C18用于 GPIO 测试。 现在、似乎响应迅速的配置是  

      DMA =<0x34 20 0 29>;

    哪个是间接 XDMA_EVENT_INTR1到 Open 20事件的映射(在 TI DTS 中定义用于存储器传输、对吧?)。 这使得 TPCC_EVT_MUX_20_23包含符合配置的0x0000001d。 将 XINTR1引脚配置为 MODE0输入后- DMA 存储器到存储器的传输被触发。 通过此配置、请求驱动程序中的 dma_slave 会返回指向 device_prep_dma_memcpy 的指针。 好的。 因此、通过这种方式、我似乎能够使用 XINTR1外部引脚触发 DMA 传输。 对于此配置、我还有其他问题:在为 memcpy 获取 DMA 通道后-只要我不释放它、我可以将它专门用于传输吗?

    我仍然无法使用 GPIO 引脚触发 DMA 传输-这个方法是否足够:

    -将设备树配置为使用 DMA =<0x2D 22 0>;(0x2D 是 EDMA 的相位)。 22表示 GPIOEVT0
    - GPIO0_7被配置为输入 GPIO (MODE7)


    在驱动程序中:
    -请求 DMA_slave 通道
    -对于此类配置、我希望返回 device_prep_slave_sg 和_cyclic 接口-这正是我真正得到的-在 DTS 中使用此类配置时、我获得的通道没有 MEM2MEM 属性集-因此没有内存到内存接口可用。
    -准备 DMA 传输-这应该等待 GPIO0_7引脚上的事件、在它被触发后、DMA 应该启动并且应该调用回调。

    这是正确的方法、还是缺少什么? 现在,使用上述配置,我无法使用 GPIO0_7引脚来触发 DMA 传输:-)(您链接的 GPEVT 驱动程序似乎是这样工作的,所以我想我在这里必须缺少一些基本的东西。 无论如何、如果您看到一些配置错误或有任何其他提示、我们将不胜感激。

     

     

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

    我从 gpevt 采样驱动器应用了配置、并且能够从 GPIO0_7引脚触发 DMA 传输。 由于某种原因、GPIO2事件的映射不成功:

    DMA 路由器:无效 XBAR 事件编号:32

    您知道原因吗? 如果我打开另一个线程来回答这个问题、如果是、我会将这个线程标记为已解决、因为它看起来现在能够从 GPIO (尽管 GPIO2现在似乎不可用)和 XINTR 引脚触发 DMA 传输。

    感谢您提供的链接-它们非常有帮助。

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

    尊敬的 Jacek:

    请参阅 AM335x TRM 第11.3.19节 EDMA 事件

    GPIO0 EDMA 事件(GPIOEVT0、#22)被直接映射、无需配置交叉开关-表11-23。 直接映射

    GPIO2 EDMA 事件(GPIOEVT2、#32)通过交叉开关映射-表11-24。 已映射纵横制

    请关闭/验证/解析此线程并打开有关 GPIOEVT2交叉开关(XBAR)事件配置的新线程。

    此致、
    帕维尔