作者:Yang Iris,AMD工程师;来源:AMD开发者社区
概述
本文提供了针对 PCIe 系统中 ATS(地址翻译服务)失效消息问题 (ATS Invalidation message)的排查指南,特别是主机发送消息但未在 CQ接口中接收到消息的情况。
ATS 失效消息的使用
ATS(地址翻译服务)失效消息( ATS invalidation message)对于管理支持 ATS 的 PCIe 系统中的地址翻译表至关重要。这在设备执行地址翻译(如使用 IOMMU 的系统)时尤为重要。ATS 失效消息通知 PCIe 设备其地址翻译缓存中的某些条目(即设备地址与系统地址之间的映射)不再有效。
如果您遇到主机发送 ATS 失效消息但 CQ 端未收到的情况,请按照以下步骤排查问题:
验证 CQ 接口是否接收到 ATS 失效消息
检查 CQ 接口,验证 ATS invalidation message是否存在。
可以使用 CQ_tvalid 作为 ILA触发条件,特别是传输中仅有 ATS invalidation message 或者 TLP数量有限的时候。下图是没有收到消息的一个例子。
下面是CQ 接口在接收ATS message 时候的正确格式:
验证主机是否发送消息
使用link analyzer 检查 消息代码为“ATS_Invalidation_request”的消息是否已从主机传输。链路分析仪的结果应明确显示该消息已被发送。当您发现消息丢失时,建议进行此验证。如果您没有链路分析仪,可以跳过此部分。
以下是链路分析仪中应看到的内容。
确保系统中启用了 ATS 功能
在 Vivado 中,在 CIPS-DMA/PCIe IP 的高级选项下,验证 ATS 功能是否已启用。
验证主机已经使能了ATS
确保通过主机的控制寄存器启用了 ATS。这可以使用 lspci 命令检查,该命令列出 PCI 设备的属性如下
验证 CPM 中的 ATS 支持寄存器
验证 ATS_cap_glbl_inv_support_x 寄存器是否已启用。这可以通过 .cdo 文件或通过 xsdb进行检查,如下所示。有关使用 xsdb 的更多信息,可以参考 Xilinx 知识库文章 66370,该文章解释了如何将 JTAG UART 终端与系统调试器一起使用。66370 - XSDB: Using JTAG UART Terminal on System Debugger |
确保消息路由寄存器配置正确(AXISTEN_IF_ENABLE_MSG_ROUTE)
确保消息路由寄存器 ATS ROUTING 已正确设置。通过设置 AXISTEN_IF_ENABLE_MSG_ROUTE 寄存器来启用 MSG_ROUTE。为了便于调试,可以将该寄存器设置为 0xFFFFFFFF。每个位的定义可以在相关寄存器文档中找到。
以上是详细排查ATS invalidation message 是否收到的一些方法,供参考。
【直播预告】