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.

[参考译文] TDA2SX/TDA2XX:PCIe 子系统2利用率

Guru**** 2979400 points

Other Parts Discussed in Thread: TDA2SX

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/675053/tda2sx-tda2xx-pcie-subsystem-2-utilization

主题中讨论的其他器件:TDA2Sx

您好!

通过阅读 TDA2XX 技术参考手册、我了解到 PCIe 控制器实例化了2个子系统、这些子系统可以在以下用例中运行:

1)只有子系统1在 x1模式下工作

2)仅子系统2在 x1模式下工作

3)子系统1和子系统2同时在 x1模式下工作

4)子系统1在 x2模式下工作、而子系统2无法使用

我正在处理 processor_sdk_vision_03_02_00_00、并已成功尝试用例1和4。 但是、我现在尝试变体2和3。 当我对 PCIe 子系统进行编程时、我参考包含典型编程序列的表、这些序列可在 TDA2XX 的技术参考手册中找到。 该测试使用 PDK 中的 PCIe 示例完成。

首先、我将仅在 x1模式下使用子系统2。 时钟和 PHY 的初始化正确通过、但在选择 PCIe 的类型时、子系统将是(RC 或 EP)执行挂起。 重要的是、这是首次对 SS2进行编程、对 SS1没有这些问题。

因此,我有几个问题:

1) 1)我使用的 SoC 是 TDA2SX、而我参考的文档是 TDA2XX 的。 这两者是否相同、我能否假设 SoC 中确实有两个 PCIe 子系统?

2) 2)如果有2个 PCIe 子系统、为什么在选择 RC/EP 模式期间执行挂起? 我模仿了 SS1测试中存在的代码、但也遵循了 TRM (即 PCIe_app.c)中的编程序列表。 在测试的 RC 和 EP 部分、我将"SS1"的每个周期替换为"SS2"(当然代码会编译和构建、我能够运行)。

提前感谢您。

此致、

Nick

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

    TDA2SX SoC 属于 TDA2xx 系列、实际上具有两个 PCIe 子系统。
    2.您对 SS2的 PCIe_app.c 所做的更改不是很清楚。 您能否查看 pcie_app.c 的 API 并检查是否错过了任何所需的更改? 如果找不到、请共享修改过的 PCIe_app.c

    此致、
    Rishabh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nick、
    我想您在第一次访问 PCIe 寄存器时会遇到挂起情况。 如果我是对的、原因可能是无法从 PRCM 启用时钟。 您可以读取 CM_PCIe_PCIESS2_CLKCTRL 寄存器以检查 PCIe2是否已启用。

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

    您好 Rishabh 和 Stanislav、

    CM_PCIe_PCIESS2_CLKCTRL 在等待 SS2完全正常工作时被读取、其 IDLEST 位将进行轮询、正如您将在与此帖子关联的源中看到的那样。 我尝试尽可能少地更改代码,但也更改了 PCIEAppPrcmConfig()中的初始化函数调用顺序,以填充表24-644。 TRM 中的"主序列 PCIe 控制器全局初始化"。 说实话、TRM 中的编程顺序有点混乱、因为表26-61中都包含了第1点和第4点。 "PCIePHY 子系统低级编程序列"、它们之间有一个 SS1/2软件复位。

    让我更详细地解释一下行为是什么。 当我对 SS2执行软件复位时、它会卡在那里、我在原始帖子中没有提到(对 SS1的复位通过了正常操作)。 但是、当我注释掉该部分时、执行会继续、但会一直停留在"EP_WRITE_Roopback _app_main.c"和"RC_WRITE_Roopback _app_main.c"中为 SS2选择 RC/EP 模式。

    正如我说过的、您会发现此帖子附加了修改后的"pcie_app.c"、而"ep_write_loopback_app_main.c"和"rc_write_loopback_app_main.c"被修改、这样"ss1"的每次出现都将替换为"ss2"、而不是其他内容。

    提前感谢您。

    此致、
    Nick

    附件: e2e.ti.com/.../pcie_5F00_app.c

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

    您使用的是23x23封装还是17x17封装?

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

    还有一个问题。 当两个通道正常工作时、CTRL_CORE_CONTRAL_IO_2寄存器的 PCIe_1LANE_2LANE_SELECTION 字段的值是多少。

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

    我不记得写入该寄存器、现在我在 TRM 的第4582页看到 PCIe_1LANE_2LANE_SELECTION 域是保留的。
    至于我使用的 SoC、它是23x23。

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

    您能否从 CCS 的存储器浏览器窗口中读取同一位并确认该值?
    我还假设您仍在使用您的定制板、而不是 EVM。
    这里似乎缺少一些基本的东西。
    当您将 RM_PCIESS_RSTCTRL[1]设置为0时、无论 PHY/控制模块设置如何、RM_PCIESS_RSTST[1]都应更新。

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

    我刚刚在 CCS 中运行示例、并在分步调试时观察 RM_PCIESS_RSTCTRL 和 RM_PCIESS_RSTST 寄存器(我在调试配置文件中构建了示例)。 即使 PCIeSS1发生复位、成功轮询 RM_PCIESS_RSTST[0]、它们看起来根本没有变化。 我将从下面的存储器视图中复制它们的值:

    0x4AE07310L3INIT_PRM_RM_PCIESS_RSTCTRL
    0x4AE0731000000000
    0x4AE07314L3INIT_PRM_RM_PCIESS_RSTST
    0x4AE073140000000300000000000000000000000000000000

    我启用了连续存储器刷新、我可以确认它是否正常工作、因为我可以看到 DSPEVE 温度传感器寄存器始终更改其值。 PCIe_1LANE_2LANE_SELECTION 也保持不变、其值为0。

    0x4A002558CTRL_MODULE_CORE_CTRL_CORE_CONTRAL_IO_2
    0x4A00255800000001

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

    您好、Nick、

    根据您在 RM_PCIESS_RSTCTRL (0x0000_0000)和 RM_PCIESS_RSTST (0x0000_0003)上方共享的值是正确的。

    请参阅 TRM 中这两个寄存器的说明。

    为了使复位起升/失效、您必须写入0、并且状态位应设置为1。

    您正在观察到代码中的错误导致的挂起。 您应该使用>>而不是<<

    /*重置 PCIeSS1*/
    HW_WR_FIELD32 (SOC_L3INIT_PRM_BASE + RM_PCIESS_RSTCTRL、
    RM_PCIESS_RSTCTRL_RST_LOCAL_PCIE1、
    RM_PCIESS_RSTCTRL_RST_LOCAL_PCIE1_CLEAR);
    
    //等待 PCIeSS1复位结束*/
    while (((HW_RD_REG32 (SOC_L3INIT_PRM_BASE + RM_PCIESS_RSTST)和
    RM_PCIESS_RST_RST_LOCAL_PCIE1_MASK)>>
    rm_PCIESS_RST_RST_LOCAL_PCIE1_SHIFT)!=
    RM_PCIESS_RST_RST_LOCAL_PCIE1_RESET_YES)
    {
    ;
    }
    
    /*重置 PCIeSS2*/
    HW_WR_FIELD32 (SOC_L3INIT_PRM_BASE + RM_PCIESS_RSTCTRL、
    RM_PCIESS_RSTCTRL_RST_LOCAL_PCIe2、
    RM_PCIESS_RSTCTRL_RST_LOCAL_PCIe2_CLEAR);
    
    //等待 PCIeSS2复位结束*/
    while (((HW_RD_REG32 (SOC_L3INIT_PRM_BASE + RM_PCIESS_RSTST)和
    RM_PCIESS_RST_RST_LOCAL_PCIe2_MASK)>>
    RM_PCIESS_RST_RST_LOCAL_PCIe2_SHIFT)!=
    RM_PCIESS_RST_RST_LOCAL_PCIe2_RESET_YES)
    {
    ;
    } 

    此致、

    Rishabh

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

    是的、这似乎已经解决了我的问题、并且我已经成功地通过 PCIeSS2传输了数据。 我进一步调查了、并在示例中的其他几个地方看到了相同的错误。
    如果可以为下一个版本的 PDK 修补该修补程序、那将非常棒。

    感谢您在我利用 PCIe 的过程中提供的帮助。 我希望这将是我的最后一个问题。

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

    感谢您的确认。 我们将在应用程序中进行必要的更改。

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

    我还需要一个信息。
    根据硬件团队的规定、需要将 PCIe_1LANE_2LANE_SELECTION 位设置为0x1、子系统1才能在 x2模式下工作、并将子系统1和子系统2设置为0x0、以便在 x1模式下同时工作。
    根据您的观察结果、当您的示例在两种情况下都正常工作时、该位设置为0x0。
    您能否将此位更改为0x1并再次尝试这两种情况。
    这将有助于我们了解正确的配置、以便对 TRM 进行必要的更改。

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

    您好、Rishabh、

    我对延迟回复表示歉意。 下面是我所做的:我从 我在前一个 PCIe 线程(e2e.ti.com/.../2474480 )中共享的代码片段中注释出了选择 x1或 x2模式的代码、并设置 PCIe_1LANE_2LANE_SELECTION、现在的代码如下所示:

    void PlatformPCIECtrlConfig (void)
    {
    uint32_t regVal;
    
    /*通过设置 PCIe_1LANE_2LANE_SELECTION *将 PCIe PHY 配置为 x1或 x2模式
    regVal = HW_RD_REG32 (
    SoC_CTRL_MODULE_CORE_CORE_REGISTER_BASE + CTRL_CORE_CONTRAL_IO_2);
    
    HW_SET_FIELD32 (regVal、CTRL_CORE_CONTRAL_IO_2_PCIe_1LANE_2LANE_SELECTION、
    CTRL_CORE_CONTRAL_IO_2_PCIe_1LANE_2LANE_SELECING_2_LANE);
    
    HW_WR_REG32 (SOC_CTRL_MODULE_CORE_CORE_REGISTER_BASE + CTRL_CORE_IO_2、
    regVal);
    
    /* PCIeSS1*的控制模块 PWR CTL REG 状态*/
    regVal = HW_RD_REG32 (
    SoC_SEC_EFUSE_REGISTER_BASE + CTRL_CORE_PHY_POWER_PCIESS1);
    
    HW_SET_FIELD32 (regVal、CTRL_CORE_PHY_POWER_PCIESS1_PCIESS1_PWRCTL_CMD、
    0x03U);
    
    HW_SET_FIELD32 (regVal、CTRL_CORE_PHY_POWER_PCIESS1_PCIESS1_PWRCTL_CLKFREQ、
    0x1AU);
    
    HW_WR_REG32 (SOC_SEC_EFUSE_REGISTER_BASE + CTRL_CORE_PHY_POWER_PCIESS1、
    regVal);
    
    /* PCIeSS2*/的控制模块 PWR CTL REG 状态
    regVal = HW_RD_REG32 (
    SoC_SEC_EFUSE_REGISTER_BASE + CTRL_CORE_PHY_POWER_PCIESS2);
    
    HW_SET_FIELD32 (regVal、CTRL_CORE_PHY_POWER_PCIESS2_PCIESS2_PWRCTL_CMD、
    0x03U);
    
    HW_SET_FIELD32 (regVal、CTRL_CORE_PHY_POWER_PCIESS2_PCIESS2_PWRCTL_CLKFREQ、
    0x1AU);
    
    HW_WR_REG32 (SOC_SEC_EFUSE_REGISTER_BASE + CTRL_CORE_PHY_POWER_PCIESS2、
    regVal);
    
    /*设置 PCIeSS1延迟计数*/
    HW_WR_FIELD32 (SOC_SEC_EFUSE_REGISTER_BASE + CTRL_CORE_PCIe_PCS、
    CTRL_CORE_PCIe_PCS_PCIESS1_PCS_RC_DELAY_COUNT、0xF1U);
    
    
    /*设置 PCIeSS2延迟计数*/
    HW_WR_FIELD32 (SOC_SEC_EFUSE_REGISTER_BASE + CTRL_CORE_PCIe_PCS、
    CTRL_CORE_PCIe_PCS_PCIESS2_PCS_RC_DELAY_COUNT、0xF1U);
    } 

    测试结果如下:

    -当在 RC 和 EP 端的代码(PCIEConfigLink()调用)中将 PCIeSS1的链路配置为2通道时,我将获得对应于单通道使用情况的370MBps 的传输速度-->结论:PCIe_1LANE_2LANE_SELECTION 不影响配置,默认情况下选择1通道

    -当我同时使用 PCIeSS1和 PCIeSS2并使用一个通道时,示例预期每个通道的工作电压为370MBps。 为什么? 由于 CTRL_CORE_PCIe_CONTRAL_PCIe_B1C0_MODE_SEL 的值看起来很重要、默认值为0 (请注意、我不会更改上面代码中的值)、这意味着每个 PCIe 子系统1个通道、PCIe_1LANE_2LANE_SELECTION 不会影响任何内容。

    最后、正如我说过的、我遵循了当前版本的 PRM (我有 SPRUI29D)的 PCIe 编程顺序、一切都正常。 此外、在寄存器规范中、PCIe_1LANE_2LANE_SELECTION 表示为保留、这是有道理的、因为它似乎不会影响任何内容。

    我希望我的解释是清楚的。 我期待收到你的回复。 我对这个问题很感兴趣。

    此致、

    Nick

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

    感谢您的确认。
    我将与硬件团队联系、了解这一观察结果、让我们看看他们的回应。
    此问题的周转时间可能是几天、因此请提前道歉。
    现在、您可以使用适合您的代码继续进行开发。

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

    我已经与硬件团队进行了检查。
    PCIe_1LANE_2LANE_SELECTION 字段不应影响您观察到的选择。
    这是一个造成混乱的旧信息。
    感谢您的耐心等待。

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

    很高兴我能提供帮助:)

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

    让我们关闭这个线程。
    请将回答您问题的帖子标记为"这解决了我的问题"。

    此致、
    Rishabh