主题中讨论的其他器件:AM4376
工具/软件:
您好:
我同时使用四核 A53 CPU 和 BCDMA 通过 GPMC 总线读取/写入 ASIC。 我目前在 DMA 运行时看到 CPU 被延缓。 CPU 需要具有 ASIC 的最高优先级、而 DMA 可以在后台运行。 我认为需要设置 QoS 寄存器以提高 CPU 相对于 BCDMA 的优先级。 有人能告诉我要写入哪些寄存器以及要写入什么吗?
谢谢、
Victor
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.
工具/软件:
您好:
我同时使用四核 A53 CPU 和 BCDMA 通过 GPMC 总线读取/写入 ASIC。 我目前在 DMA 运行时看到 CPU 被延缓。 CPU 需要具有 ASIC 的最高优先级、而 DMA 可以在后台运行。 我认为需要设置 QoS 寄存器以提高 CPU 相对于 BCDMA 的优先级。 有人能告诉我要写入哪些寄存器以及要写入什么吗?
谢谢、
Victor
我在 A53 上运行 Linux。
我期望 AM62 上的互连处理从 A53 和 DMA 发送到 GPMC 的流量。 我认为、相应地设置 QoS 会使 A53 具有比 DMA 更高的优先级
当 CPU0 启动 DMA 传输时、不知道何时完成数据吸吮。 此外、CPU 1 至 CPU3 不知道是否正在进行 DMA 传输。 互斥锁 GPMC 相当困难。
我们在 AM4376 中具有相同的功能。 但是、由于 ASIC 容量更高、AM62 上 GPMC 总线上的流量会显著增加。
谢谢、
Victor
您好、Victor、
请参阅 AM62x TRM(修订版 B)表 14-5“QoS、QoS 寄存器“。 A53 读取 QoS 寄存器的地址为 0x45d20500、其写入 QoS 寄存器为 0x45d20900。
默认情况下在复位后、寄存器值为 0x7000、它将优先级设置为 7 — 最低。
您能否尝试将两个寄存器设置为值 0x6000 以查看是否解决了 A53 访问 GPMC 不足的问题?
您好:
最后、我进行了足够的测试、以了解设置 QoS 寄存器不起作用。 我尝试了 0x6000、0x4000 和 0x0000。 我认为问题是、一旦 DMA 开始从 GPMC 总线读取数据、即使具有更高 QoS 读数的 CPU 正在等待、它也不会放弃它、直到它完成读取。
我们正在尝试通过将 DMA 传输分解为较小的块来解决这个问题、这样便可以让 CPU 在 DMA 完成后进入并收回 GPMC 总线。
感谢您的帮助、
Victor
您好、Victor、
当 CPU 和 DMA 同时访问 GPMC 时、您是否可以看到 DMA 访问阻止 CPU 的时间有多长?
我谈到了我们的 SoC 设计、即使应用程序对 DMA 进行编程以传输更多数据、QoS 调度之间 DMA 传输的最大数据大小也可能为 320 字节。
以下是 CPU 延迟估算的粗略数学计算:
假设 FPGA 以 100MHz 运行、即每个周期 0.01us。 还假设 FPGA 数据总线宽度为 16 位。 320 字节将为 320*8/16 = 160 个周期、即 1.6us。 因此、如果 CPU 被几 usec 阻止、这是正常现象。 但如果您看到更长的延迟、则似乎有错误配置... 如果您看到我的数学计算完全关闭、请告诉我。
尊敬的 Bin:
我有好消息和坏消息。
好消息是、如果 CPU 只需要使用 GPMC 总线、我通过确定在下一次中断发生之前还剩多少时间来修复了这个问题。 根据时间、DMA 配置为限制要读取的 U16 数、以便 DMA 将在下一次中断之前完成。
坏消息是、如果我们向系统添加安全启动、DMA 将不起作用。 因此、如果我们使用 CPU 通过 GPMC 接口从 ASIC 读取数据、安全启动将运行良好。 但是、在启用安全启动的情况下使用 DMA 执行相同的功能行不通。 DMA 似乎无法通过 GPMC 访问我们的 ASIC 以读取数据。 希望需要设置一个位或一个寄存器来解决这个问题、然后您就能知道该位或寄存器是什么。
谢谢、
Victor