MSMC:在 NRT 访问结束时设置冲突逻辑阻止 RT 访问等待
详细信息:
DDR 控制器优先执行对同一页面的写入操作,然后才是读取操作。此外,无论实时属性如何,MSMC 都会为同一组的事务设置冲突。由于这两个事实,同一页面的写入流及随后的同一页面的非实时读取能够有效地无限期阻止实时访问命令。
示例序列:
- MSMC 向 DDR 控制器发送的 A 页面的写入流
- MSMC 向 DDR 控制器发送的 A 页面的非实时读取操作
- 在 1) 中的写入流完成后,此命令将在 DDR 控制器中阻塞
- 对 2) 中非实时读取操作针对的组进行的实时访问将由于设置冲突在 MSMC 内阻塞
权变措施:
软件应按照对软件的影响从最小到最大的顺序尝试以下权变措施。
- Cadence DDR 控制器将优先执行对同一页面的写入操作,然后再执行另一页面的读取操作,导致返回读取结果的延迟。尝试将 DDR 控制器 command_age_count 从 0x 减小到 0xF,对应于将命令周期计数从 16 个 DDR 刷新周期 (62us) 减少到 1 个刷新周期 (3.9us)。在大多数情况下,此设置解决了问题,但在某些情况下仍存在一些下溢。在这种情况下,软件可能需要第 2 或第 3 种权变措施。
- 如果可能,设置 ARM MMU 属性,以将 DDR 配置为“正常存储器”而不是“器件存储器”类型。这使得从 ARM 到 DDR 的访问更加高效并有助于缓解问题。这是根据到目前为止的测试结果得出的观测,但可能需要进行更多分析和进一步的系统测试。如果系统中无法实现此权变措施,则软件可能需要权变措施 3)。
- 如果可能,将实时访问设置为非 IO 一致。对于非虚拟化案例,设置 RT 访问 ATYPE = 3;对于 PVU 特定案例,设置 ATYPE = 1 和 MEMTYPE = 0。这会强制 RT 流量绕过 MSMC 设置冲突逻辑。软件必须执行缓存操作。