PCIE c5 连接wifi芯片,无法link up

**描述:**使用jetpack5.0.2,在定制板用PCIE C5作为root(使用lane)连接quectel AF50T(作为EP)。按照AF50T开始时序配置了tegra234-p3737-pcie.dtsi和tegra234-mb1-bct-gpio-p3701-0000-a04.dtsi,但是AF50T没有link up,同时pci初始化时连pcie默认的tegra234-p3737-pcie.dtsi 中pcie_ep的节点也无法解析。
具体配置:
(1)AF50T开机时序图


板子上电时,WKAN_EN为输出低电平、PCIE_RST_N为输出低电平、PCIE_CLKREQ_N时输入高电平
pci识别时,WKAN_EN先输出高电平,15ms以后PCIE_RST_N输出高电平,此时PCIE_CLKREQ_N变为输出低电平。
上述时序是AF50T要求,但是目前测量结果不是这样的。
(2)hardware/nvidia/platform/t23x/concord/kernel-dts/cvb/tegra234-p3737-pcie.dtsi 修改后为

(3)bootloader/tegra234-mb1-bct-gpio-p3701-0000-a04.dtsi修改后为
TEGRA234_MAIN_GPIO(Q, 4)设置gpio-output-low
TEGRA234_MAIN_GPIO(AF, 1)设置gpio-output-low
(4)OMDATA采用默认配置 p3701.conf.common
ODMDATA=“gbe-uphy-config-22,hsstp-lane-map-3,nvhs-uphy-config-0,hsio-uphy-config-0,gbe0-enable-10g”;
(5)现象

问题:
(1)请问修改上述地方是否满足对AF50T的识别?如果不是还需要配置哪些?tegra的pcie驱动是否满足要求?
(2)pcie的识别使用Linux_for_Tegra/source/public/kernel/kernel-5.10/drivers/pci/controller/dwc/pcie-tegra194.c文件,该文件加入判断orin作为root时,为什么rst引脚要设置为输入模式?通过对这个源文件增加打印,发现根本无法解析 reset-gpios = <&tegra_main_gpio
TEGRA234_MAIN_GPIO(AF, 1)
GPIO_ACTIVE_HIGH>;

            nvidia,refclk-select-gpios = <&tegra_main_gpio
                                         TEGRA234_MAIN_GPIO(Q, 4)
                                          GPIO_ACTIVE_HIGH>;

Jetpack5.0.2 is too old… Even some board config setting for pinmux are wrong.

Please upgrade to later BSP.

项目需要jetpack5.0.2,无法升级BSP。请协助分析一下,谢谢

Just upgrade your BSP first. We don’t check on such version.

我们主要使用jetpack5.0.2和jetpack5.1.2,在jetpack5.1.2上也试过报同样的问题。jetpack5.1.2可以吧

  1. 可以, 但請你在jp5.1.2完整重新量一次所有結果, log也請附上完整文字擋. 不要用截圖這種模式.

  2. 我不確定你鑽研pcie_ep在做什麼. pcie_ep是給Jetson PCIe 跑在EP mode使用的. 跟你的case完全無關

  3. PCIe C5在JP5.1.2/5.1.3就是完全不用改 device tree或是pinmux.
    NV devkit上面這東西預設就是開著的. 如果是個別裝置偵測不到, 就是特殊個案需要其他方法debug. 請先不要動任何這部份的pinmux或是DT.

(1)
新建会话 - 副本_2024-08-05_16-43-04.log (161.6 KB)
这是在jetpack5.1.2上,默认没有改动情况。141a0000.pcie: Phy link never came up
(2)
在pcie接口中,orin作为root,AF50T作为EP,正常pcie节点设备树中应该含有reset引脚定义,但是hardware/nvidia/platform/t23x/concord/kernel-dts/cvb/tegra234-p3737-pcie.dtsi中没有,只有pcie_ep节点含有,所有在这个方面有疑惑orin自带的pcie驱动是否含有缺陷。

  1. 請參考文件上的debug tips做確認

https://docs.nvidia.com/jetson/archives/r35.5.0/DeveloperGuide/HR/JetsonModuleAdaptationAndBringUp/JetsonAgxOrinSeries.html?highlight=pcie%20debug#debug-pcie-link-up-failure

  1. 沒有缺陷… 因為PCIe RP的時候reset pin是直接做SFIO使用, 不是GPIO. 不需要特別用一個欄位來告訴controller reset是誰…


在jetpack5.1.2的bootloader/tegra234-mb1-bct-gpio-p3701-0000-a04.dtsi中没有对pex_l5_rst_n_paf1配置方向,请问默认pex_l5_rst_n_paf1 是out吗?

tegra234-mb1-bct-gpio-p3701-0000-a04.dtsi

這個檔名就已經講明了是給gpio用的設定. 前面已經說過了, 現在這個pin是作為SFIO使用.
所以這個檔案不應該有任何跟pex_l5_rst_n_paf1有關的設定…

你應該要確認的是 tegra234-mb1-bct-pinmux-p3701-0000-a04.dtsi裡面pinmux的設定
我這裡看預設是nvidia,enable-input = <TEGRA_PIN_DISABLE>;

如同我前面說的, 這東西在NV devkit上的pcie slot就已經設定成能動了. 請你不用更改它

如果是wifi卡, 我比較傾向你可以檢查第六點提到的項目…

正如你说的,wifi AF50T满足第六点中gpio的时序,需要在pcie枚举时,将soc_gpio31_pq4由低拉高,我需要在Linux_for_Tegra/source/public/kernel/kernel-5.10/drivers/pci/controller/dwc/pcie-tegra194.c文件中增加对soc_gpio31_pq4操作。可是如何判断是PCIE C5才操作该gpio?请问有解决方法吗?

通常是直接在device tree裡面寫一個gpio-hog然後把gpio pull high.
沒有在pcie driver裡面增加這個gpio操作.

请问nvidia中gpio-hog怎么写,我按照如下两种方法设置都是无效的。

寫在gpio controller底下

類似這樣

1、soc_gpio31_pq4控制没有在设备树中使用gpio-hog方式,直接在Linux_for_Tegra/source/public/kernel/kernel-5.10/drivers/pci/controller/dwc/pcie-tegra194.c中控制soc_gpio31_pq4,可以识别AF50T


非常感谢。现在我要将gpio控制写在设备树中,有如下两个问题:
(1)jetson agx orin的gpio controller是否是hardware/nvidia/soc/t23x/kernel-dts/tegra234-soc/tegra234-soc-base.dtsi文件,是的话,如下写法是否正确:

(2)soc_gpio31_pq4拉高后,需要在大于14ms时拉高pex_l5_rst_n_paf1,请问在设备树中怎么使用gpio-hog延时拉高电平?

是的话,如下写法是否正确:

看起來正確, 你可以去/sys/kernel/debug/gpio去確認到底有沒有寫進去

soc_gpio31_pq4拉高后,需要在大于14ms时拉高pex_l5_rst_n_paf1,请问在设备树中怎么使用gpio-hog延时拉高电平?

請問你現在是在問soc_gpio31_pq4還是pex_l5_rst_n_paf1?

soc_gpio31_pq4和pex_l5_rst_n_paf1两个引脚在初始都是低电平,系统启动后,pex_l5_rst_n_paf1输出的高电平要比soc_gpio31_pq4输出高电平要晚14毫秒,请问gpio-hog结构的设备树是否可以加delay类似的字段?

我的理解是你的soc_gpio31_pq4要在PCIe reset 之前準備好, 所以現在的結果聽起來是ok的…
不太確定你為何要加delay在gpio-hog?

gpio-hog會一直維持output high… 並不會自己掉下去

我现在明白你的意思了。刚才我的疑惑是PCIe reset需要晚于soc_gpio31_pq4拉高14毫秒,所以尝试自己配置。现在将PCIe reset使用系统默认配置,发现它确实满足时许要求,也可以识别AF50T。
同时在jetpack5.0.2上使用相同配置同样可以识别AF50T。
非常感谢

1 Like

你好,目前orin上电的PCIe reset和soc_gpio31_pq4时序与AT50T有两个差异,该差异可能导致目前AF50T无法正常工作的原因。
(1)PCIe reset在UEFI启动阶段一直是3.3V的高电平(orin内部有上拉电阻),进入系统后会变成低电平。请问有方法让PCIe reset在uefi阶段处于低电平吗?修改bootloader/tegra234-mb1-bct-gpio-p3701-0000-a04.dtsi将TEGRA234_MAIN_GPIO(AF, 1)添加在gpio-output-low中的方法已验证不可行。
(2)soc_gpio31_pq4和PCIe reset拉高间隔按照AT50T时序图需要大于等于14毫秒,实际情况是间隔了2秒~6秒,请问这个时间间隔可以实现毫秒级别吗?