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.

[参考译文] AM6422:定制电路板上的 icssg 故障排除

Guru**** 2652575 points

Other Parts Discussed in Thread: AM6422, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1578251/am6422-troubleshooting-icssg-on-custom-board

器件型号: AM6422
主题: SysConfig 中讨论的其他器件

尊敬的团队:

代表我们的客户发帖。

我们在我们的定制电路板上使用 TI SDK 在 AM6422 上启用 ICSSG 以太网时遇到问题。

我们已对`k3-am642-evm.dts`进行了以下更改、简单地禁用了以太网 1/2 和多路复用器控制器、因为我们不使用它、并修改了引脚以匹配我们的 SysConfig 导出。

diff --git a/arch/arm64/boot/dts/ti/k3-am642-evm.dts b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
index 0bc42c8f1..b6e99df57 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-evm.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
@@ -206,6 +206,7 @@ led-0 {
 	};
 
 	mdio_mux: mux-controller {
+		status = "disabled";
 		compatible = "gpio-mux";
 		#mux-control-cells = <0>;
 
@@ -218,6 +219,7 @@ mdio_mux_1: mdio-mux-1 {
 		mdio-parent-bus = <&cpsw3g_mdio>;
 		#address-cells = <1>;
 		#size-cells = <0>;
+		status = "disabled";
 
 		mdio@1 {
 			reg = <0x1>;
@@ -460,25 +462,25 @@ AM64X_IOPAD(0x0030, PIN_OUTPUT_PULLUP, 7) /* (L18) OSPI0_CSN1.GPIO0_12 */
 
 	icssg1_mdio1_pins_default: icssg1-mdio1-default-pins {
 		pinctrl-single,pins = <
-			AM64X_IOPAD(0x015c, PIN_OUTPUT, 0) /* (Y6) PRG1_MDIO0_MDC */
-			AM64X_IOPAD(0x0158, PIN_INPUT, 0) /* (AA6) PRG1_MDIO0_MDIO */
+			AM64X_IOPAD(0x015c, PIN_OUTPUT_PULLUP, 0) /* (Y6) PRG1_MDIO0_MDC */
+			AM64X_IOPAD(0x0158, PIN_INPUT_PULLUP, 0) /* (AA6) PRG1_MDIO0_MDIO */
 		>;
 	};
 
 	icssg1_rgmii1_pins_default: icssg1-rgmii1-default-pins {
 		pinctrl-single,pins = <
-			AM64X_IOPAD(0x00b8, PIN_INPUT, 2) /* (Y7) PRG1_PRU0_GPO0.PRG1_RGMII1_RD0 */
-			AM64X_IOPAD(0x00bc, PIN_INPUT, 2) /* (U8) PRG1_PRU0_GPO1.PRG1_RGMII1_RD1 */
-			AM64X_IOPAD(0x00c0, PIN_INPUT, 2) /* (W8) PRG1_PRU0_GPO2.PRG1_RGMII1_RD2 */
-			AM64X_IOPAD(0x00c4, PIN_INPUT, 2) /* (V8) PRG1_PRU0_GPO3.PRG1_RGMII1_RD3 */
-			AM64X_IOPAD(0x00d0, PIN_INPUT, 2) /* (AA7) PRG1_PRU0_GPO6.PRG1_RGMII1_RXC */
-			AM64X_IOPAD(0x00c8, PIN_INPUT, 2) /* (Y8) PRG1_PRU0_GPO4.PRG1_RGMII1_RX_CTL */
-			AM64X_IOPAD(0x00e4, PIN_INPUT, 2) /* (AA8) PRG1_PRU0_GPO11.PRG1_RGMII1_TD0 */
-			AM64X_IOPAD(0x00e8, PIN_INPUT, 2) /* (U9) PRG1_PRU0_GPO12.PRG1_RGMII1_TD1 */
-			AM64X_IOPAD(0x00ec, PIN_INPUT, 2) /* (W9) PRG1_PRU0_GPO13.PRG1_RGMII1_TD2 */
-			AM64X_IOPAD(0x00f0, PIN_INPUT, 2) /* (AA9) PRG1_PRU0_GPO14.PRG1_RGMII1_TD3 */
-			AM64X_IOPAD(0x00f8, PIN_INPUT, 2) /* (V9) PRG1_PRU0_GPO16.PRG1_RGMII1_TXC */
-			AM64X_IOPAD(0x00f4, PIN_INPUT, 2) /* (Y9) PRG1_PRU0_GPO15.PRG1_RGMII1_TX_CTL */
+			AM64X_IOPAD(0x0108, PIN_INPUT, 2) /* (W11) PRG1_PRU1_GPO0.PRG1_RGMII2_RD0 */
+			AM64X_IOPAD(0x010c, PIN_INPUT, 2) /* (V11) PRG1_PRU1_GPO1.PRG1_RGMII2_RD1 */
+			AM64X_IOPAD(0x0110, PIN_INPUT, 2) /* (AA12) PRG1_PRU1_GPO2.PRG1_RGMII2_RD2 */
+			AM64X_IOPAD(0x0114, PIN_INPUT, 2) /* (Y12) PRG1_PRU1_GPO3.PRG1_RGMII2_RD3 */
+			AM64X_IOPAD(0x0120, PIN_INPUT, 2) /* (U11) PRG1_PRU1_GPO6.PRG1_RGMII2_RXC */
+			AM64X_IOPAD(0x0118, PIN_INPUT, 2) /* (W12) PRG1_PRU1_GPO4.PRG1_RGMII2_RX_CTL */
+			AM64X_IOPAD(0x0134, PIN_INPUT, 2) /* (AA10) PRG1_PRU1_GPO11.PRG1_RGMII2_TD0 */
+			AM64X_IOPAD(0x0138, PIN_INPUT, 2) /* (V10) PRG1_PRU1_GPO12.PRG1_RGMII2_TD1 */
+			AM64X_IOPAD(0x013c, PIN_INPUT, 2) /* (U10) PRG1_PRU1_GPO13.PRG1_RGMII2_TD2 */
+			AM64X_IOPAD(0x0140, PIN_INPUT, 2) /* (AA11) PRG1_PRU1_GPO14.PRG1_RGMII2_TD3 */
+			AM64X_IOPAD(0x0148, PIN_INPUT, 2) /* (Y10) PRG1_PRU1_GPO16.PRG1_RGMII2_TXC */
+			AM64X_IOPAD(0x0144, PIN_INPUT, 2) /* (Y11) PRG1_PRU1_GPO15.PRG1_RGMII2_TX_CTL */
 		>;
 	};
 
@@ -636,7 +638,7 @@ &cpsw3g {
 	bootph-all;
 	pinctrl-names = "default";
 	pinctrl-0 = <&rgmii1_pins_default>, <&rgmii2_pins_default>;
-	status = "okay";
+	status = "disabled";
 
 	/* Map HW8_TS_PUSH to GENF1 */
 	cpts@3d000 {
@@ -648,18 +650,18 @@ &cpsw_port1 {
 	bootph-all;
 	phy-mode = "rgmii-rxid";
 	phy-handle = <&cpsw3g_phy0>;
-	status = "okay";
+	status = "disabled";
 };
 
 &cpsw_port2 {
 	phy-mode = "rgmii-rxid";
 	phy-handle = <&cpsw3g_phy3>;
-	status = "okay";
+	status = "disabled";
 };
 
 &cpsw3g_mdio {
 	bootph-all;
-	status = "okay";
+	status = "disabled";
 	pinctrl-names = "default";
 	pinctrl-0 = <&mdio1_pins_default>;
 
@@ -878,10 +880,10 @@ &icssg1_mdio {
 	pinctrl-names = "default";
 	pinctrl-0 = <&icssg1_mdio1_pins_default>;
 
-	icssg1_phy1: ethernet-phy@f {
-		reg = <0xf>;
-		tx-internal-delay-ps = <250>;
-		rx-internal-delay-ps = <2000>;
+	icssg1_phy1: ethernet-phy@0 {
+		reg = <0x0>;
+		ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
+		ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
 	};
 };

我们目前正是 TI DP83867 链接到 icssg1-eth 并初始化以太网驱动程序的时间点、加载 Remoteproc 固件后、PHY 链路会按 LED 指示关闭、我无法启动它。

我们使用 thinlinux 预构建 fs、仅修改 DTB。  
我们在 AM6422 EVM 上尝试了此图像、这些图像确实适用于 icssg。

此致、

Danilo

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

    您好 Danilo、

    对此处延迟的回复表示歉意。

    1) 使用的是哪个版本的 Linux SDK?

    2) 我们确保这里没有 pinmux 冲突。 如果没有引用“rgmii1_pins_default"和“和“rgmii2_pins_default"的“的驱动程序探头、则我预计不会应用这些引脚多路复用设置(并且可能会覆盖完全相同引脚的 ICSSG 设置)。 但我们可以通过从器件树文件中删除这些 pinmux 设置来确保。

    3) 请附加引导日志,以便我们可以检查错误

    4) 客户是否已经阅读了应用手册“基本以太网接口调试“?

    此致、

    Nick

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

    感谢您发送编修

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

    您好 Jordy、

    请提供有关您所使用的 Linux 版本的更多信息。

    在随附的器件树文件中、我未看到通过 PRU 以太网进行通信所需的 PRU 以太网器件树节点。 如果没有这些器件树节点、我就不会期望以太网正确初始化。

    此致、

    Nick

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

    您好、

    对不起,我忘记添加信息,我是在 Linux 6.12.51 上的建模环境。

    我们已经决定将这两个 PHY 连接到 Y6 和 AA6 上的同一 MDIO 接口 (PRG1_MDIO0_MDC 和 PRG1_MDIO0_MDIO)、现在检测到该 PHY、我们的硬件开发人员也将在设计中对此进行更改。

    我还验证了 TD0 线路由 DP83822 PHY 驱动、但 ping 仍不起作用。 我将学习您现在分享的以太网调试指南、然后在此处进行更新。

    CPSW 是否需要 PRU 以太网节点? SK 在中也没有任何 PRU 的定义 k3-am642-sk.dts

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

    您好 Jordy、

    您使用的是 Linux 的哪个分支? 例如、这是基于 TI SDK 还是 ti-linux-kernel 分支? 主线 Linux? 或其他什么吗?

    为了进行澄清、PRU_ICSSG 是 PRU 子系统。 可以对 PRU 内核进行编程以实现多种网络接口、包括通用以太网。 另一方面、CPSW 是一种专用网络接口、由通过寄存器写入进行编程的硬件电路组成、与传统外设更类似。 您可以通过 CPSW 外设执行以太网、也可以通过 PRU 子系统(6 个潜在的以太网端口、最多可同时使用 5 个)执行以太网。

    您是否尝试通过 PRU 子系统或 CPSW 调试以太网? 您尝试实现多少个端口?

    FYI 我今天和明天都不在办公室,下一个答复将推迟到本周晚些时候。

    此致、

    Nick

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

    忘记提及、TX 线路正常工作。 从电路板 ping 笔记本电脑会显示 RX_D0 上有响应、但 AM64 上的 MAC 层会丢弃响应

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

    每个 ICSSG 都有自己的 MDIO IP 实例 — PRG0_MDIO0_MDC 分别对应于 ICSSG0、PRG1_MDIO0_MDC 分别对应于 ICSSG1

    连接两个 PHY 的优选方法是什么? 一个 ICSSG 一个 CPSW、两者均位于同一 MDIO 线路上或单独的?

    如果您使用 CPSW、则使用 CPSW MDIO、IIRC CPSW MDIO 和 ICSSG1/PRG1 MDIO 在相同的引脚上进行多路复用。  

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

    感谢您澄清 Pratheesh、

    我现在仍然遇到丢弃的 RX 消息。 我尝试根据以太网调试指南中的建议配置移位模式的 TX/RX 时钟延迟为 2ns、但没有成功。 即使 TX 正在工作、IET_RX_SMD_err 也会继续阻止任何 RX 数据、并且 PHY 也会将传入的 RX 数据解码到 RX_D0 线路

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

    对电路板进行两项硬件更改后、iet_rx_sdm_err 已得到解决:

    *更新了自举配置,默认启用 Rgmii ;
    * DP83822 的 Right_Yl LED 上有一个已移除的下拉电阻器。