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.

[参考译文] TDA4VM:在 TDA4 启动后将 PCIe 速度从第 2 代修改为第 3 代

Guru**** 2489685 points
Other Parts Discussed in Thread: TDA4VM, AM69

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1544420/tda4vm-modify-pcie-speed-from-gen2-to-gen3-after-tda4-startup

器件型号:TDA4VM
Thread 中讨论的其他器件:AM69

工具/软件:

您好、

  因为如果在启动期间配置为 Gen3、则可能无法识别外部开关芯片、从而导致驱动器加载失败。 因此、Gen2 在启动期间默认为高电平。 是否有办法在 TDA4 启动后将 PCIe 速率从第 2 代修改为第 3 代?

此致、

Yang

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

    您好、

      请问是否有一个相应的解决办法来解决上述问题?

    此致、

    Yang

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

    您好、

    感谢您抽出宝贵的时间发布您的问题! 我会研究这个 ,并 在接下来的几天内回复你。

    此致、

    Jeff

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

    您好、

    感谢您的耐心。 答案很简单:是的、PCIe 控制器支持在启动后将链路重新训练至不同的速度。 这可以通过写入某些寄存器来完成、例如 pcie_core_RP_I_LINKWIDTH_CONTROL_REG 或 pcie_core_LM_I_LINKWIDTH_REG_REG(取决于您访问 PCIe 控制器的方式以及控制器所处的角色)。

    有关这些寄存器的信息可以在 TDA4 DRA829TDA4VM_DRA829TDA4VM_CCS Registers_Part4.pdf(可以在此处下载 www.ti.com/.../TDA4VM 4 部分中找到 。 有关上述这些特定寄存器的信息、可在以下 pdf 中找到:第 1725 页的 LM 寄存器和第 2254 页的 RP 寄存器。  

    我希望这对您有所帮助! 如果您有任何其他问题、请告知我们。

    此致、

    Jeff

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

    您好、

      我已经检查了寄存器指令、它似乎被设置为 EP 节点。 我目前正在使用 PCIe3 RP 函数。 我应该设置哪些寄存器?

    此致、

    Yang

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

    您好、

    这还取决于您所操作的系统。 例如、如果您使用 Linux、以下顺序应该适用:


    setpci -s 0000:00:00.0 CAP_EXP+0x30.W=0x3 — 通过设置链路控制 2 寄存器、可将目标链路速度更改为第 3 代速度
    setpci -s 0000:00:00.0 CAP_EXP+0x10.0.W=0x20 — 这通过设置链路控制寄存器的位 5 来重新训练链路
    lspci -vv -s 0000:00:00.0 | grep -i speed — 读取设置为目标速度和实际速度的速度

    总线号“0000:00:0.0"将“将取决于您的硬件。 您可以使用 lspci 命令检查枚举的内容。

    请告诉我们这是否有帮助、或者您用于操作控制器的系统。 谢谢!

    此致、

    Jeff

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

    您好、

      我们当前使用的是 Linux、我已经尝试了您发送的命令。 它可以将 PCIe 速度修改为 Gen3、但有时需要多次执行

    成功。 为什么会这样?

    下图显示了开机后的默认属性:

    以下是我多次修改的日志:

    此致、
    Yang

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

    您好、

    LnkCap 应该是器件能够运行的程度。 在第一张图片中、GT 对于您打印出的 TI 器件、5 Mb/s 的 LnkCap 可能是您设置的软限制、因为在硬件方面、J7 能够达到第 3 代速度。 您能否查看 Linux 器件树并查看最大链路速度设置为多少?

    最大链路速度=<3>;

    ^这就是你想要的。 <3>(对于第 3 代)。

    此致、
    Jeff

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

    您好、

     由于当前的功能限制、我必须在启动期间将 PCIe 保持在第 2 代。 因此、我在代码中手动将 PCIe 设置为 Gen2、从而产生 Lnkcap

    在系统启动期间仅为 5GT/s。 是否有任何方法可以修改此属性?

    此致、

    Yang

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

    您好、

    我刚刚在 AM69 上进行了实验、想看看我是否可以将链路重新训练到比 lnkcap 寄存器中广播的速度更高的速度。 初次尝试时、似乎链接速度高达 8GT/s。 问题可能在其他地方。

    在再培训期间、这可能是一个均衡阶段问题。 您能否检查 PCIe 配置空间中的 LnkSta2 寄存器以判断某些均衡相位是否通过。

    此外、许多 PCIe 问题源自时钟问题、因为根端口和端点都需要正确同步以避免问题。

    什么是时钟配置、即 REFCLK?

    J7 和 PCIe 端点的源是什么?

    他们有共享时钟吗?

    是外部时钟、还是由 J7 通过其 PLL 在内部配置?

    此致、

    Jeff

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

    您好、

      以下是关于 LnkSta2 的信息:

    什么是时钟配置、refclk?

      是、当前 REFCLK 是 TDA4 中的默认 REFCLK。

    J7 和 PCIe 端点的源代码是什么?

      EP 是一种 MVL 开关。

    [报价 userid=“656581" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1544420/tda4vm-modify-pcie-speed-from-gen2-to-gen3-after-tda4-startup/5978736

    他们有共享时钟吗?

    是外部时钟、还是由 J7 通过其 PLL 在内部配置?

    [/报价]

     J7 内的 PLL 配置的时钟。

    此致、

    Yang

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

    您好、

    嗯、链路均衡似乎失败、或者甚至可能从未启动。 均衡开始时、链路必须处于 L0 状态。 您是否熟悉 PCIe 控制器的 TI 寄存器读数? 如果是、则有一个寄存器保存 LTSSM 所处状态的值。 我很想知道在均衡开始时链路是否处于正确的 L0 状态。 如果您可以找到控制器基地址、LTSSM 寄存器偏移位于该寄存器的位 29:24 中。 这将告诉您链路的状态。 设置新速度后、设置再训练位之前、能否读取该寄存器/存储器?

    此致、

    Jeff

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

    您好、

      从下图可以看出、设置新速度后、寄存器值没有改变、但寄存器低位在重新训练后发生了变化。

      

     下图显示、即使速度修改失败、寄存器值也保持不变。

    此致、

    Yang

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

    您好、

    感谢您的屏幕截图。 我想更深入地探讨猛虎组织的状况。 您能否以足够高的频率轮询 LTSSM 字段 (PL_CONFIG_0 的位 29:24)、以便在重新训练初始化后捕获 LTSSM 的所有瞬态状态变化?

    此外、如果可以屏蔽这些寄存器位(移位并清零不需要的位)、那么更容易看到实际的 LTSSM 状态位域结果。  

    基本上、一旦您初始化为 Gen3、就开始轮询 LTSSM 状态寄存器来查看它是如何从状态转换到状态的。

    此致、

    Jeff

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

    您好、

      我想知道您预计使用多高的频率来读取该寄存器值?

    此致、

    Yang

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

    您好、

    如果您可以每~1ms 轮询一次、那是一个很好的开始之处。 5 毫秒的间隔可能是可以接受的。  在链路均衡过程中、您将进入不同的恢复状态。 另外、继续检查 LnkSta2、因为它将显示已成功完成的均衡阶段(如果有)。  

    我们 TRM 的下表显示了不同的状态以及在寄存器位字段中表示它们的值。

    此致、

    Jeff

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

    您好、

     我稍后会尝试内容。

    此致

    Yang

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

    您好、

    下面是指向具有轮询 LTSSM 状态的详细信息的线程的链接。 它还包含一个 bash 脚本来执行此操作。

     【常见问题解答】AM69:TDA4VH 如何检查当前 PCIe LTSSM 状态? 

    此致、

    Jeff