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.

[参考译文] AM6442:单端口网络拓扑 DT 设置

Guru**** 2773885 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1606725/am6442-single-port-network-topology-dt-setup

器件型号: AM6442
主题: DP83869SysConfig 中讨论的其他部分

您好、

我有关于在 PRU_ICSSG 上设置以太网的几个问题。

我想在光纤模式下使用单个 dp83869 PHY 在单端口模式下设置网络拓扑:

单端口模式

在此模式下、仅使用 PRU-ICSS 以太网端口之一。 这是最简单的模式、工作方式符合您的预期。

该文件还指出:

实施限制

为了使 PRU_ICSSG 以太网驱动程序正常工作、即使未使用其中一个端口(未连接以太网 PHY)、也必须在 DT 中启用这两个 MIIx 端口。 对未使用的端口使用固定链路作为权变措施

问题:

1) 如何设置设备树来完成此操作? 该限制规定、使用单个 MII 端口的权变措施是使用固定链路。 这是否意味着我要对 DT 进行如下修改?

From 1ec7fbf339bbd7d8d99d5769a116cd985b6fcd5f Mon Sep 17 00:00:00 2001
From: jweyer <jweyer@aecontrols.com>
Date: Wed, 14 Jan 2026 16:17:29 -0800
Subject: [PATCH] single port patch

---
 .../boot/dts/ti/k3-am642-phyboard-electra-rdk.dts      | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/boot/dts/ti/k3-am642-phyboard-electra-rdk.dts b/arch/arm64/boot/dts/ti/k3-am642-phyboard-electra-rdk.dts
index 97ca16f00cd2..e9fb7cbee5b8 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-phyboard-electra-rdk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-phyboard-electra-rdk.dts
@@ -281,10 +281,14 @@ icssg1_emac0: port@0 {
 				local-mac-address = [00 00 00 00 00 00];
 			};
 			icssg1_emac1: port@1 {
-				reg = <1>;
-				/* Filled in by bootloader */
+				phy-mode = "rgmii-rxid";
+				syscon-rgmii-delay = <&scm_conf 0x4124>;
 				local-mac-address = [00 00 00 00 00 00];
-				status = "disabled";
+
+				fixed-link {
+					speed = <1000>;
+					full-duplex;
+				};
 			};
 		};
 	};
-- 
2.25.1

2) 如何将 PHY 类型设置为 dp83869? 我是否只需要修改 icssg0_MDIO 节点、让它知道它将与哪些 PHY 硬件连接? 似乎我需要做更多的事情;但是、我找不到任何这样做的例子。

From befa78bc09093e58266136b7f111edce0af608e3 Mon Sep 17 00:00:00 2001
From: jweyer <jweyer@aecontrols.com>
Date: Wed, 14 Jan 2026 16:48:24 -0800
Subject: [PATCH] phy type

---
 arch/arm64/boot/dts/ti/k3-am642-phyboard-electra-rdk.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/ti/k3-am642-phyboard-electra-rdk.dts b/arch/arm64/boot/dts/ti/k3-am642-phyboard-electra-rdk.dts
index e9fb7cbee5b8..866aabc6ee3c 100644
--- a/arch/arm64/boot/dts/ti/k3-am642-phyboard-electra-rdk.dts
+++ b/arch/arm64/boot/dts/ti/k3-am642-phyboard-electra-rdk.dts
@@ -832,6 +832,7 @@ icssg1_phy1: ethernet-phy@f {
 		reg = <0xf>;
 		tx-internal-delay-ps = <250>;
 		rx-internal-delay-ps = <2000>;
+		ti,fifo-depth = <DP83869_PHYCR_FIFO_DEPTH_4_B_NIB>;
 	};
 };
 
-- 
2.25.1

3) 我的理解是、ti-prueth 驱动程序为 MII 配置 pinmux、并且 Remoteproc 上载以太网固件。 我假设使用 SysConfig 来构建加载到 PRU 上的以太网固件。 如果是这种情况、SysConfig 中定义的引脚多路复用如何不冲突/覆盖 ti-prueth 设置的引脚多路复用?


4) 如何更改 DT 以配置光纤模式?

感谢您的帮助、

Jared Weyer

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

    您好、

    对此有任何更新?

    谢谢、

    Jared

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

    您好 Jared、

    为了进行确认、您实际连接的是 MII 接口还是 RGMII 接口? RGMII 在 Linux 器件树中不需要该权变措施。

    另请确认您所使用的 Linux SDK 版本。

    此致、

    Nick

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

    嗨、Nick、

    我使用 Yocto 构建 Linux、我们使用 Phytec 的 fork 版本 6.12.8。

    我们将使用 RGMII、因此无需实施权变措施。 以下是有关如何使用 DP83869 PHY 实现单端口光纤以太网的最佳猜测:

    	icssg0_eth: icssg0-eth {
    		compatible = "ti,am642-icssg-prueth";
    		pinctrl-names = "default";
    		pinctrl-0 = <&icssg1_rgmii1_pins_default &icssg1_rgmii2_pins_default>;
    
    		sram = <&oc_sram>;
    		ti,prus = <&pru0_0>, <&rtu0_0>, <&tx_pru0_0>, <&pru0_1>, <&rtu0_1>, <&tx_pru0_1>;
    		firmware-name = "ti-pruss/am65x-sr2-pru0-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-rtu0-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-txpru0-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-pru1-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-rtu1-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-txpru1-prueth-fw.elf";
    
    		ti,pruss-gp-mux-sel = <2>,	/* MII mode */
    				      <2>,
    				      <2>,
    				      <2>,	/* MII mode */
    				      <2>,
    				      <2>;
    
    		ti,mii-g-rt = <&icssg0_mii_g_rt>;
    		ti,mii-rt = <&icssg0_mii_rt>;
    		ti,pa-stats = <&icssg0_pa_stats>;
    		iep = <&icssg0_iep0>;
    
    		interrupt-parent = <&icssg0_intc>;
    		interrupts = <24 0 2>, <25 1 3>;
    		interrupt-names = "tx_ts0", "tx_ts1";
    
    		dmas = <&main_pktdma 0xc200 15>, /* egress slice 0 */
    		       <&main_pktdma 0xc201 15>, /* egress slice 0 */
    		       <&main_pktdma 0xc202 15>, /* egress slice 0 */
    		       <&main_pktdma 0xc203 15>, /* egress slice 0 */
    		       <&main_pktdma 0xc204 15>, /* egress slice 1 */
    		       <&main_pktdma 0xc205 15>, /* egress slice 1 */
    		       <&main_pktdma 0xc206 15>, /* egress slice 1 */
    		       <&main_pktdma 0xc207 15>, /* egress slice 1 */
    		       <&main_pktdma 0x4200 15>, /* ingress slice 0 */
    		       <&main_pktdma 0x4201 15>, /* ingress slice 1 */
    		       <&main_pktdma 0x4202 0>, /* mgmnt rsp slice 0 */
    		       <&main_pktdma 0x4203 0>; /* mgmnt rsp slice 1 */
    		dma-names = "tx0-0", "tx0-1", "tx0-2", "tx0-3",
    			    "tx1-0", "tx1-1", "tx1-2", "tx1-3",
    			    "rx0", "rx1";
    
    		ethernet-ports {
    			#address-cells = <1>;
    			#size-cells = <0>;
    			icssg0_emac0: port@0 {
    				//status = "disabled"; 
    				reg = <0>;
    				phy-handle = <&icssg0_phy0>;
    				phy-mode = "rgmii-id";
    				ti,syscon-rgmii-delay = <&main_conf 0x4110>;
    				/* Filled in by bootloader */
    				local-mac-address = [00 00 00 00 00 00];
    			};
    		};
    	};
    };
    
    &icssg1_mdio {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&icssg1_mdio1_pins_default>;
    
    	icssg1_phy0: ethernet-phy@0 {
    	    compatible = "ethernet-phy-id2000.a0f1"; /* DP83869 */
    		reg = <0>;
    		tx-internal-delay-ps = <250>;
    		rx-internal-delay-ps = <2000>;		
    		ti,op-mode = <DP83869_RGMII_COPPER_ETHERNET>; /* TODO: HOW DO I SET TO FIBER MODE? `ti-dp83869.h` does not contain definition for fiber mode */
    	};
    };



    问题:

    1) 以上 DT 看起来对你是正确的吗?

    2) 我不确定如何将 ti,op-mode 设置为光纤。 `ti-dp83869.h`仅对`D P83869_RGMII_RGMII_Ethernet_`进行定义。  

    3) cpsw 和 pru-eth 之间的区别对我来说仍然有点不清楚。 我是否需要对`cpsw3g`节点进行任何调整以使 PRU-eth 正常工作? 是否有任何关于这种区别的良好文件?

    4) 我遇到了 这个 相关的线程,使我有点紧张,因为它似乎已经没有解决。 您是否知道此问题是否已在其他地方解决? 我是否可以重新打开问题以询问 Chris 是否能够解决问题?

    谢谢、

    Jared

    非常感谢您的帮助 Nick。

    再次感谢、

    Jared

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

    您好 Jared、

    CPSW 与 PRU 以太网  

    CPSW3G 是一组实现以太网接口的硬件电路(因此,这是一个硬件外设,就像处理器中用于交互的所有其他外设一样)。 3G 意味着 CPSW 实例中有 3 个千兆位以太网端口:2 个千兆位以太网端口连接到处理器引脚(这就是为什么您可以有最多 2 个单个 EMAC CPSW 端口或一个带有 CPSW 的以太网交换机)、以及 1 个千兆位以太网端口连接回控制该接口的 Linux A53 或 R5F 内核。

    请注意、这会将两个 CPSW 端口(或同时进入两个 CPSW 端口)的总吞吐量限制为 1 千兆位总计、因为它们通过单个内部端口进行扩展。

    更多信息: https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_01_05_03/exports/docs/linux/Foundational_Components Ethernet/Kernel/Network/CPSW-Ethernet.html Kernel_Drivers

    PRU 子系统每个子系统具有 6 个 PRU 内核以及一组加速器。 因此、每当初始化 PRU 以太网端口时、您都会看到固件加载到 PRU 内核。 虽然 PRU 子系统中的 MII 加速器、IEP 外设等是硬件电路、但 PRU 内核本身是可编程的。 因此、PRU 内核可用于实现标准以太网或通常需要外部 ASIC 的专用网络协议。

    每个 PRU 子系统可以实现 2 个千兆位以太网端点或 1 个千兆位以太网交换机。 由于 AM64x 上有 2 个 PRU_ICSSG 子系统、这意味着总共可以使用 4 个 PRU 以太网端口。

    有关标准 Foundational_Components Linux_Drivers 以太网的更多信息: https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_01_05_03/exports/docs/linux/PRU/PRU-ICSS/PRU/PRU_ICSSG_Ethernet.html 

    有关部分 INDUSTRIAL-COMMUNICATIONS-SDK 网络协议的更多信息: https://www.ti.com/tool/download/PRU-AM64X 

    请注意、以太网占用很多引脚。 由于引脚多路复用限制、您只能在单个设计中引出最多 5 个以太网端口。

    南... 我可以自行对 PRU 内核进行编程吗?  

    为什么是你可以,感谢你问未来的读者!

    如果其中一个 PRU 子系统用于以太网、但另一个 PRU 子系统是空闲的、您也可以在该未使用的 PRU 子系统上编写您自己的代码。 我们目前正在编写 PRU Academy、为希望创建自有 PRU 代码的客户提供指导。

    什么是 PRU、PRU 有什么用?

    AM64x PRU Academy (AM243x Academy 也发布了第一稿、仍在编写 AM62x Academy 和 AM26x Academy)

    OpenPRU 存储库 中有可用作起点的示例工程

    PRU 软件支持包 仍然是 AM335x/AM4x/AM57x 等旧器件的示例代码的主要来源、但我的目标是最终将 AM243x/AM62x/AM64x 的大多数示例迁移到 OpenPRU 存储库

    此致、

    Nick

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

    好的、回到您的问题  

    AM64x EVM 上只有 3 个以太网端口、但我们能够在 CPSW 和 PRU 以太网之间切换其中一个以太网端口。

    默认情况下、k3-am642-evm.dts 将 EVM 配置为将 2 个以太网端口路由到 CPSW、将 1 个以太网端口路由到 PRU 以太网。 因此、您可以使用此文件作为如何配置单端口 RGMII PRU 以太网的示例。

    器件树覆盖 k3-am642-evm-icssg1-dualemac.dtso 将配置更改为 1 个端口到 CPSW、2 个端口到 PRU 以太网。

    我正在将您的线程重新分配给另一个团队成员、以便对连接光纤电缆与“常规“以太网电缆进行评论。

    此致、

    Nick

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

    对于未来的读者、我们已经将 Jared 关于如何设置 PRU 以太网的后续问题拆分为一个单独的主题:
    AM6442:如何初始化 PRU 以太网?

    我们将利用该主题继续讨论如何使单端口光纤 PRU 以太网正常工作。

    此致、

    Nick

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

    您好:

    有关如何设置光纤模式的设备树的任何更新?

    谢谢、

    Jared

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

    您好、

    STIL 正在努力使 PRU-eth 在光纤模式下工作。 这是我当前的设备树:

    	qbus {
    		compatible = "ti,am642-icssg-prueth";
    		pinctrl-names = "default";
    		pinctrl-0 = <&icssg0_rgmii1_pins_default>;
    
    		interrupt-parent = <&icssg0_intc>;
    		interrupts = <24 0 2>, <25 1 3>;
    		interrupt-names = "tx_ts0", "tx_ts1";
    
    		sram = <&ethernet_sram>;
    		firmware-name = "ti-pruss/am65x-sr2-pru0-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-rtu0-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-txpru0-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-pru1-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-rtu1-prueth-fw.elf",
    				"ti-pruss/am65x-sr2-txpru1-prueth-fw.elf";
    
    		dmas = <&main_pktdma 0xc100 15>, /* egress slice 0 */
    		       <&main_pktdma 0xc101 15>, /* egress slice 0 */
    		       <&main_pktdma 0xc102 15>, /* egress slice 0 */
    		       <&main_pktdma 0xc103 15>, /* egress slice 0 */
    		       <&main_pktdma 0xc104 15>, /* egress slice 1 */
    		       <&main_pktdma 0xc105 15>, /* egress slice 1 */
    		       <&main_pktdma 0xc106 15>, /* egress slice 1 */
    		       <&main_pktdma 0xc107 15>, /* egress slice 1 */
    		       <&main_pktdma 0x4100 15>, /* ingress slice 0 */
    		       <&main_pktdma 0x4101 15>; /* ingress slice 1 */
    		dma-names = "tx0-0", "tx0-1", "tx0-2", "tx0-3",
    			    "tx1-0", "tx1-1", "tx1-2", "tx1-3",
    			    "rx0", "rx1";
    
    		ti,prus = <&pru0_0>, <&rtu0_0>, <&tx_pru0_0>, <&pru0_1>, <&rtu0_1>, <&tx_pru0_1>;
    		ti,pruss-gp-mux-sel = <2>,	/* MII mode */
    				      <2>,
    				      <2>,
    				      <2>,	/* MII mode */
    				      <2>,
    				      <2>;
    
    		ti,mii-g-rt = <&icssg0_mii_g_rt>;
    		ti,mii-rt = <&icssg0_mii_rt>;
    		ti,iep = <&icssg0_iep0>, <&icssg0_iep1>;
    
    		ethernet-ports {
    			#address-cells = <1>;
    			#size-cells = <0>;
    			icssg0_emac0: port@0 {
    				reg = <0>;
    				phy-handle = <&icssg0_phy0>;
    				phy-mode = "rgmii-id";
    				/* Filled in by bootloader */
    				local-mac-address = [00 00 00 00 00 00];
    				ti,syscon-rgmii-delay = <&main_conf 0x4100>;
    			};
    		};
    	};
    	
    	/* QBUS MDIO */
    &icssg0_mdio {
    	pinctrl-names = "default";
    	pinctrl-0 = <&icssg0_mdio_pins_default &clkout0_pins_default>;
    	status = "okay";
    
    	icssg0_phy0: ethernet-phy@0 {
    		compatible = "ethernet-phy-id2000.a0f1", "ethernet-phy-ieee802.3-c22";
    		reg = <0x0>;
    		ti,op-mode = <DP83869_RGMII_1000_BASE>;
    		tx-internal-delay-ps = <2000>;
    		rx-internal-delay-ps = <2000>;
    		reset-gpios = <&main_gpio1 18 GPIO_ACTIVE_LOW>;
    		reset-assert-us = <1>; /* DP83869HM TRM TBL 6.6: 720 ns */
    		reset-deassert-us = <30>; /* DP83869HM TRM TBL 6.6: 30 us */
    	};
    };
    
    /* QBUS SFP I2C Comms */
    &main_i2c2 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&i2c2_sfp_pins_default>;
    	clock-frequency = <400000>;
    };
    
    /* QBUS IEP */
    &icssg0_iep0 {
    	status = "okay";
    };
    &icssg0_iep1 {
    	status = "okay";
    };
    

    这似乎是有效的。 Linux 似乎成功探测和配置了 PHY:
    [    8.190366] icssg-prueth qbus: couldn't get ti,pa-stats syscon regmap
    [    8.262492] icssg-prueth qbus: couldn't get ti,pa-stats syscon regmap
    [    8.274897] icssg-prueth qbus: port 1: using random MAC addr: 7a:19:66:3b:eb:45
    [    8.307144] icssg-prueth qbus: TI PRU ethernet driver initialized: single EMAC mode
    [    8.852705] remoteproc remoteproc9: Booting fw image ti-pruss/am65x-sr2-pru0-prueth-fw.elf, size 39636
    [    8.885449] remoteproc remoteproc12: Booting fw image ti-pruss/am65x-sr2-rtu0-prueth-fw.elf, size 30444
    [    8.913116] remoteproc remoteproc3: Booting fw image ti-pruss/am65x-sr2-txpru0-prueth-fw.elf, size 39080
    

    此外、通过`ethtool`、我可以看到 PHY 已根据器件树配置。

    root@aec-am6442:~# ethtool eth1
    Settings for eth1:
            Supported ports: [ TP    MII     FIBRE ]
            Supported link modes:   10baseT/Full
                                    100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Supported pause frame use: No
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  10baseT/Full
                                    100baseT/Full
                                    1000baseT/Full
                                    1000baseX/Full
            Advertised pause frame use: No
            Advertised auto-negotiation: Yes
            Advertised FEC modes: Not reported
            Speed: Unknown!
            Duplex: Unknown! (255)
            Auto-negotiation: on
            Port: FIBRE
            PHYAD: 0
            Transceiver: external
            Current message level: 0x00000000 (0)
    
            Link detected: no
    

    但是、我无法使用`phytool 读取 PHY 寄存器`:
    root@aec-am6442:~# phytool read eth1/0/2
    0xffff
    root@aec-am6442:~# phytool read eth1/0/3
    0xffff
    


    问题:

    1. 为什么我无法读取 PHY 寄存器? 很`、因为`Δ V ethtool 正常工作、Linux 能够与 PHY 通信。

    2. 是否有办法可以从设备树中关闭自动协商? 如果没有、建议的方法是什么? 当前我在启动后手动运行`ethtool -s eth1 autoneg off speed 1000 duplex full`。

    感谢您的帮助、

    Jared

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

    您好 Jared、

    很抱歉、这一主题掉了我的仪表板。 是否仍有问题?

    此致、

    Schuyler