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.

[参考译文] AM625-Q1:DMA 传输到 Linux 内核模块中的 GPMC 总线以及从该总线传输 DMA

Guru**** 2337880 points
Other Parts Discussed in Thread: AM625, SK-AM62
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1511788/am625-q1-dma-transfers-to-and-from-gpmc-bus-in-linux-kernel-module

器件型号:AM625-Q1
Thread 中讨论的其他器件:AM625SK-AM62

工具/软件:

您好:

我想收到一些有关如何在 Linux 内核6.12.x 模块的上下文中执行 GPMC 总线之间的 DMA 传输的指导。

我在 FPGA 中合成了一个 DPRAM、它通过 GPMC 总线连接到 AM625。 因此、我需要开发一个内核模块、使我能够在存储器缓冲区和 GPMC 总线之间执行 DMA 传输、以进行写入和读取。

我一直在 SK-AM62 EVM 板中测试附加的模块(dmatest.c)、结果不佳、随附的"issue_description.md"文件中对此进行了描述。  请您提供有关正确方法的指导。

如需更多信息、请随时与我联系。

此致、

Iker

e2e.ti.com/.../issue_5F00_decription.zip

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

    尊敬的 Iker:

    感谢您提供详细的报告。 这是非常有帮助的!

    需要获取补丁的测试结果、因为补丁只会启用从 GPMC 的 DMA_DEV_TO_MEM 传输、因此对 GPMC 的写入不会正常工作。

    我可以帮助实现到 GPMC 的 DMA_MEM_TO_DEV 传输。 您的项目的日程安排是什么? 我目前没有太多的带宽,直到6月中旬。

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

    尊敬的 Bin:

    非常感谢您的快速高效响应。 我真的很感激。

    在进行任何开发之前、我想确认您所提议的该补丁是否是使用 DMA 传输从存储器缓冲区读取和写入 GPMC 总线的唯一和/或最合适的解决方案。

    我之所以提到这一点、是因为我必须保持内核未安装修补程序、以保证我的模块与将来的内核更新的兼容性。

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

    尊敬的 Iker:

    这取决于数据如何移入/移出连接到 GPMC 的器件。 内核 dmaegine API 基本上支持两种类型:

    1. dma_dev_to_MEM 和 dma_MEM_to_Dev;

    2. DMA_MEM_TO_MEM。

    如果不修补内核 K3 UDMA 驱动程序、则不支持#1使用 GPMC 传输数据。 (您使用的补丁会启用 dma_dev_to_MEM。)

    未打补丁的内核应该已经支持#2、使用 dmaengine_prep_DMA_memcpy ()。

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

    尊敬的 Bin:

    您能详细说明一下"这取决于数据移动方式"的情况吗?

    关于"DMA_MEM_TO_MEM"的内容应该能与未打补丁的内核搭配使用、这听起来很有趣。 在附加测试中、有一个测试用例、我尝试使用dmaengine_prep_dma_memcpy() API 写入 GPMC 总线、但没有良好结果(请参阅"2_1_8_dmatest_result.log")。 我在 SK-AM62评估板上执行这个测试用例、这是否不起作用? 我仍处于概念验证阶段、没有完整的硬件板可用(AM62连接到 FPGA)。

    非常感谢您的帮助。

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

    尊敬的 Iker:

    您能详细说明"这取决于数据移动方式"的条件吗?

    我提到了两种类型的传输、dev_to_mem 和 mem_to_dev 将基于"FIFO"的器件连接到 GPMC、而 mem_to_mem 将存储器映射器件连接到 GPMC。

    我在 SK-AM62评估板上执行此测试用例是否不起作用?

    我实际上不知道该测试是否有效、该测试尝试使用 mem_to_mem 写入 GPMC 地址0x51000000、但 SK-AM62板上的 GPMC 接口上没有连接任何内容、对吗?

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

    BTY、OSPI 驱动程序(drivers/spi/spi-cadence -quadspi.c)用于 dmaengine_prep_dma_memcpy()访问 OSPI 存储器。 它应与 GPMC 上的存储器映射器件相同。

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

    尊敬的 Bin:

    我提到了两种类型的传输、dev_to_mem 和 mem_to_dev 将基于"FIFO"的器件连接到 GPMC、而 mem_to_mem 将存储器映射器件连接到 GPMC。

    我肯定想使用"mem_to_mem"模式。


    我实际上不知道该测试是否有效、该测试尝试使用 mem_to_mem 写入 GPMC 地址0x51000000、但 SK-AM62板上的 GPMC 接口上没有连接任何内容、对吗?

    正确的是、SK-AM62板上的 GPMC 接口没有连接任何内容(请参阅下图)。 如果您可以确认dmaengine_prep_dma_memcpy()在没有任何东西连接到 GPMC 总线时、"mem_to_dev"传输的 API 失败、我将等待完整的硬件设置可用、以验证"写入"操作是否成功完成。

    BTY、OSPI 驱动程序(drivers/spi/spi-cadence -quadspi.c)用于 dmaengine_prep_dma_memcpy()访问 OSPI 存储器。 它应与 GPMC 上的存储器映射器件相同。

    这些信息非常有用。 我已经看到使用dmaengine_prep_dma_memcpy() API 执行读取、而写入是通过 OSPI 外设内部的一种 DMA 引擎"间接"完成的。 但是、您能否确认使用dmaengine_prep_dma_memcpy() API 可以可靠地读取和写入存储器映射 I/O?

    非常感谢您抽出宝贵的时间并提供详细的见解。

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

    尊敬的 Iker:

    如果您可以确认dmaengine_prep_dma_memcpy()在没有任何东西连接到 GPMC 总线时、"mem_to_dev"传输的 API 失败、我将等待完整的硬件设置完成、以验证"写入"操作是否成功完成。

    我认为我无法轻松确认此信息、因为我们没有一个将存储器映射器件连接到 GPMC 接口来测试此功能的平台。

    我看到读取是使用dmaengine_prep_dma_memcpy() API 执行的、而写入是通过 OSPI 外设内部的一种 DMA 引擎"间接"完成的。 [/报价]

    我通常不支持 SPI 接口、所以不太熟悉它、但我想您是对的、我刚回顾了 OSPI 驱动程序(spi-cadence-quadspi.c)、它只使用 DMA 从 OSPI 读取、但写入 OSPI 不使用 DMA。

    无论如何、此时我无法确认 GPMC 存储器映射器件上的 DMA MEM_TO_MEM、但我没有看到任何问题、为什么它不应该工作。

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

    尊敬的 Bin:

    我将等待整个硬件板可用、然后使用 MEM_TO_MEM DMA 测试读取和写入。

    如果我在测试时遇到任何问题、我会再次与您联系。

    非常感谢您的帮助!

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

    尊敬的 Iker:

    好的。

    您可能知道、如果在30天内没有活动、e2e 线程将被锁定、然后您无法再回复线程。

    因此、如果此主题已在30天内锁定、您仍可以点击 本页面右上角的黄色"+ Ask a related question"按钮来创建新的 e2e 主题、在此将参考本页面来提供上下文信息。