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.

[参考译文] TDA4AH-Q1:PCIe LTSSM 状态编码

Guru**** 2476325 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1463007/tda4ah-q1-pcie-ltssm-state-encoding

器件型号:TDA4AH-Q1

工具与软件:

您好、TI:

能否提供 LINKSTATUS 寄存器的 LTSSM_STATE 字段的实际编码?

我有 gen3x2链路建立并处于活动状态(TDA4AH 是 RC、PCIe 实例0)、但 LTSSM_STATE 读取0x10 (恢复、 Idle)、其中我应该根据 PCIe 规范读取0x11 (L0)。 我还在 LINK_POWER_STATE 中读取4b0001、指示 L0状态。

Linux SDK 从不检查 LTSSM 状态、仅检查 LINK_STATUS、因此我在这里要问。

LTSSM 状态值编码是否与标准不同?

提前感谢您投入宝贵的时间给予解答。

此致

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

    您好、Arthur、

    我的理解是、 PCIe 块遵循 PCI-SIG 的 PCI Express 基本规范修订版4.0、LTSSM_STATE 编码值0x10对应 L0、而0x11对应 Rx_L0S.entry 。 编码从检测开始。 位于0x0处静默、并针对规范中定义的每个状态递增、恢复除外。 在0x2X 范围内编码的均衡状态和无法到达轮询。 速度状态。

    您能否链接 LTSSM_STATE 0x10对应于恢复的规范。 空闲以供将来参考? 到目前为止、我只能找到添加 PreDetect 的英特尔编码。 安静且可 检测。 PCI-SIG 规范中未定义的等待状态、偏移使 L0对应于0x11: https://www.intel.com/content/www/us/en/docs/programmable/683111/21-1/ltssm-monitor-registers.html 的编码值 

    此致、

    Takuma

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

    你好、Takuma、

    感谢您的回答、希望您做得好。

    PCI-SIG PCI Express 4.0基本规范(您现在可以在网上自由找到)没有指定 LTSSM 状态的任何正确编码(除非我不能读取它,这是非常可能的 )。

    仔细查看 Linux SDK 中 Linux 内核内的 PCIe 驱动程序、我可以找到的唯一 L0状态值被定义为0x11 (如 PCIe-designware.h 中的值)、但从不在特定于 Cadence 的驱动程序中的任何位置定义。 为什么内核中的 PCIe 驱动程序都不符合基本规范?

    当带走 PreDetect 时。 安静、检测、 等待、轮询。 速度和恢复。 均衡状态/子状态、当严格递增时、我们会达到0x0F、因此在某个位置必须有一个 catch。

    再次提前感谢回答我(可能)无意义的问题、但我现在有点困惑。

    此致

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

    您好、Arthur、

    您认为 PCI-SIG 的规范没有指定 LTSSM 状态编码是正确的。 当您提到规范0x11是 L0时、我感到困惑。 我也希望向您了解是否有我不知道的规格文档、因此如果您找到一些内容、请告诉我。

    Cadence 没有公共文档说明状态 L0为0x10、但我可以向您保证、对于 TDA4AH 中使用的该特定 Cadence IP、L0为0x10。 如果您非常好奇、可以联系 Cadence 获取其寄存器和 LTSSM 编码。  对于用于 TDA4AH 的 Cadence IP、 0x1X 看起来是为 L0/L1/L2状态保留的、其中 L0为0x10、Rx_L0s.Entry 为0x11、等等。 、因此会跳过0x0F。 然后、0x2X 从禁用状态开始并递增、直到热复位、然后进入恢复均衡状态。  

    我认为、由于我可以在英特尔网站上找到的规范增加了两个额外的状态(PreDetect. 安静且可检测。 等待)、0x00~0x10全部使用。 这就是 L0为 0x11而不是0x10的原因。 如果 PCI-SIG 提供了关于这些额外状态的规范、那就解释了编码差异。

    此致、

    Takuma

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

    感谢 Takuma 确认实际编码。

    我会将您的答案标记为解决此问题、如果我找到任何相关文档、我会随时向您通报最新情况。

    一个很棒的周末!