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.

[参考译文] TDA4VH-Q1:尝试创建共享存储器

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1647108/tda4vh-q1-trying-to-create-shared-memory

器件型号: TDA4VH-Q1

尊敬的团队:

我们正在努力在 J784S4 平台上实现从 R5F 到 A72 的基于共享存储器的数据传输、感谢您针对我们面临的问题提供指导。

用例:

  • 在 R5F 上创建一个虚拟缓冲区 (~1MB)

  • 将数据复制到共享存储器区域

  • 通过 IPC (RPMsg) 并使用共享存储器地址和大小通知 A72

  • A72 读取数据并将其写入 NOR 闪存

当前状态:

  • R5F 端成功:

    • 将数据写入共享内存

    • 向 A72 发送 IPC 通知

  • 但是、在 A72 侧、我们在引导期间观察到以下内容:

OF: reserved mem: node camera-shared-memory@c000a000 compatible matching fail
  • 0xC000A000在 R5F 上的运行时日志中也使用相同的地址 ()。

观察结果:

  • Linux 似乎未正确初始化保留的存储器节点。

  • 因此、我们怀疑 A72 可能无法安全地访问共享存储器区域。

  • 我们目前正在 shared-dma-pool 将 DTS 中的节点与一起使用 no-map

问题:

  1. 为大数据传输 (~1MB) 在 R5F 和 A72 之间定义共享存储器的建议方法是什么?

  2. shared-dma-pool 使用 no-map 正确的方法吗?

  3. compatible matching fail 保留内存节点的原因可能是什么?

  4. 我们是否应该了解任何限制(例如 DMA 堆分割次数)?

  5. 是否有优选机制从 A72 用户空间(mmap、驱动程序或现有 IPC 框架)访问此类共享存储器?

如果有关于在此平台上为 R5F–A72 通信正确配置共享存储器的指导或参考示例、我们将不胜感激。

此致、
Priya

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

    您好 Priya、

    请深入了解常见问题解答。

     【常见问题解答】TDA4AL-Q1:大字节传输 

    此致

    Tarun Mukesh

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

      我已经浏览了常见问题解答、希望您协助在 TDA4 平台上实现以下要求:

      在 R5F 侧创建一个虚拟缓冲区/数据 (~4KB)
      2.增加共享内存大小以容纳缓冲区
      3.将数据从 R5F 转储到共享内存中
      4.通过 IPC 将内容从共享存储器传输到 A72
      5.将接收到的数据从 A72 写入 NOR 闪存

      作为参考、我使用的源是:
      - R5F 侧:degum_coreio_Safety_CEER-TDA4-SC、使用 10.01.00.04 pdk_version
      - A72 侧:degum_CoreIO_Performance_CEER-TDA4-PP

      请您指导我实施方法吗?

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

    您好:

    [quote userid=“672894“ url=“~/support/processors-group/processors/f/processors-forum/1647108/tda4vh-q1-trying-to-create-shared-memory/6352099 在 R5F 侧创建一个虚拟缓冲区/数据 (~4KB)
    2.增加共享内存大小以容纳缓冲区
    3.将数据从 R5F 转储到共享内存中
    4.通过 IPC 将内容从共享存储器传输到 A72
    5.将从 A72 接收到的数据写入 NOR 闪存

    我在上面提供的常见问题解答是否也一样。唯一的偏差是共享存储器的内容不会传输、但共享存储器位置的地址将通过 IPC 从 R5F 共享到 A72、A72 将从共享的地址中读取数据。

    现有驱动程序无法通过 IPC 直接传输 4KB 缓冲区内容、因此 TI 建议使用上述通过的共享存储器地址位置。

    此致

    Tarun Mukesh  

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

    尊敬的 Mukesh:

    感谢确认这一点,我需要澄清在一些更多的事情,目前我正在努力写结束数据在 NOR 闪存

    1. dma-heap-carveout 使用 /dev/mem 访问权限时、是否应始终在不使用的情况下定义共享存储器区域?
      或者是否有一种与 mmap 一起使用 dma-heap 的推荐方法?
    2. 是否需要任何额外的 Linux 配置才能 /dev/mem 访问保留的存储器区域?
      (例如,或类似限制) CONFIG_STRICT_DEVMEM
    3. 在 R5 方面、是否必须将共享存储器的 MPU 区域配置为不可缓存和可共享?
      错误的 MPU 配置是否也会导致 mmap 或数据可见性问题?
    4. 共享存储器地址是否有任何对齐要求?
      当前我正在使用:0xC000B000
      它应该像这样与 1MB 边界对齐 0xC0100000?

    5. 在也不应写入此测试数据的位置中是否有任何固定的偏移/起始地址、以避免损坏引导加载程序/CONFIG 分区?

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

    您好 Priya、

    您可以按照我们在常见问题解答中的方法来完成。

    将/dev/mem 与 dma-heap-carveout 一起使用实际上是相互冲突的。 如果将内存区域配置为 DMA 堆、Linux 内核会通过专用堆驱动程序来管理该区域。 如果绕过此驱动程序并使用该堆的原始物理地址直接将 mmap() 指向/dev/mem、则会在手动用户空间访问和内核的分配跟踪之间创建一个竞争条件。

    架构依赖/dev/mem 进行原始地址映射、必须在器件树中使用无映射将共享存储器区域定义为通用分段、完全独立于 DMA。

    在 R5F 侧、必须保持共享存储器可共享、不可缓存、因为我们不会在该区域上应用任何 Cache 属性。

    是、如果您希望 IPC 与 Linux 通信、对齐至关重要。

    没有此类固定地址、但它取决于启动映像大小、此区域不应与引导加载程序或其他配置冲突。

    此致

    Tarun Mukesh