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:支持 MAC2MAC 连接的 Linux 器件树

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1367268/tda4vm-linux-device-tree-support-for-mac2mac-connection

器件型号:TDA4VM

工具与软件:

尊敬的 TI:  

我们已经进行了以下设置:

  • TDA4_1 SGMII 端口5 -> PHY TI DP83867
  • TDA4_1 SGMII 端口6 -> PHY TI  DP83867
  • TDA4_1 SGMII 端口7 -> PHY TI DP83867
  • TDA4_1 SGMII 端口8 -> TDA4_2 SGMII 端口7
  • TDA4_2 SGMII 端口8 ->未连接

我想使用 Mac2Mac 功能、在 SGMII Port7的 TDA4_2上的 Linux 中建立工作正常的以太网连接。

我已经在 TDA4_1上尝试了以下操作:

&cpsw_port8 {
	phy-mode = "sgmii";
	fixed-link {
		speed = <100>;
		full-duplex;
	};
};

 

&cpsw_port7 {
	phy-mode = "sgmii";
	fixed-link {
		speed = <100>;
		full-duplex;
	};
};

但这样无效。 另请参阅:TDA4_1上的以太网适用于端口5、6和7 (Linux 上)。

是否有相应的补丁/指南可解决此问题?

感谢您的帮助、此致、

Felix

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

    尊敬的 Felix:

    您为此使用的 SDK 版本是什么?

    此致、
    Tanmay

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

    您好、Tanmay、  

    我使用的是 PSDK Linux v09.01。

    此致、

    Felix

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

    尊敬的 Felix:

    您是否可以尝试添加以下补丁并查看您是否能够通信:

    e2e.ti.com/.../enable_2D00_master_2D00_mode_2D00_in_2D00_sgmii_2D00_MAC.patch

    在此补丁中、对于100M 全双工链路、不使用"LPA_SGMII_1000Full"、而使用"LPA_SGMII_100FULL"。

    此致、
    Tanmay

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

    您好、Tanmay、

    感谢您的快速响应。

    我是否必须将此补丁应用于 TDA4_1器件树和 TDA4_2器件树?

    我在下面对这两个进行了应用。

    对于 TDA4_2、我得到以下输出:

    root@j721e-evm:~# ifconfig
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    root@j721e-evm:~# dmesg | grep cpsw
    [    1.171043] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA01901, cpsw version 0x6BA80101 Ports: 9 quirks:00000000
    [    1.382685] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA01901, cpsw version 0x6BA80101 Ports: 9 quirks:00000000
    [    1.396580] am65-cpsw-nuss c000000.ethernet: Use random MAC address
    [    1.402890] am65-cpsw-nuss c000000.ethernet: Use random MAC address
    [    1.409153] am65-cpsw-nuss c000000.ethernet: /bus@100000/ethernet@c000000/ethernet-ports/port@7 error retrieving port phy: -19
    root@j721e-evm:~# dmesg | grep mdio
    root@j721e-evm:~# 

    对于 TDA4_1、我得到以下输出:

    root@j721e-evm:~# ifconfig
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    root@j721e-evm:~# dmesg | grep cpsw
    [    1.171798] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA01901, cpsw version 0x6BA80101 Ports: 9 quirks:00000000
    [    1.464820] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA01901, cpsw version 0x6BA80101 Ports: 9 quirks:00000000
    [    1.478716] am65-cpsw-nuss c000000.ethernet: Use random MAC address
    [    1.485047] am65-cpsw-nuss c000000.ethernet: Use random MAC address
    [    1.491367] am65-cpsw-nuss c000000.ethernet: /bus@100000/ethernet@c000000/ethernet-ports/port@8 error retrieving port phy: -19
    root@j721e-evm:~# dmesg | grep mdio
    [    1.386668] davinci_mdio c000f00.mdio: Configuring MDIO in manual mode
    [    1.430755] davinci_mdio c000f00.mdio: davinci mdio revision 9.7, bus freq 1000000
    [    1.440572] davinci_mdio c000f00.mdio: phy[0]: device c000f00.mdio:00, driver TI DP83867
    [    1.448655] davinci_mdio c000f00.mdio: phy[1]: device c000f00.mdio:01, driver TI DP83867
    [    1.456727] davinci_mdio c000f00.mdio: phy[2]: device c000f00.mdio:02, driver TI DP83867
    root@j721e-evm:~# 
    

    因此,除了使 Mac2Mac 连接无法正常工作之外,先前工作的 ethX 接口也不再显示。

    删除  

    &cpsw0_port8 {
    	status = "okay";
    	phy-mode = "sgmii";
    	fixed-link {
    		speed = <1000>;
    		full-duplex;
    	};
    };

    从 TDA4_1可以修复此问题、所有三个以太网接口都可以再次正常工作。

    此致、

    Felix

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

    尊敬的 Felix:

    该补丁不是针对设备树、而是针对 CPSW 驱动程序、在使用固定链路时、您不会看到所看到的错误。

    我怀疑在应用导致问题的补丁时出现了某种错误。

    您能否分享如何应用补丁以及如何构建映像和 dtb。 您是否使用器件树叠加层进行配置?

    此致、

    Tanmay  

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

    尊敬的 Felix:

    抱歉、再次遍历器件树节点后、发现还必须配置 serdes4节点以启用 SGMII。 默认情况下不存在该选项。  

     查看此票证、看看您是否可以使用此处的串行器/解串器配置。 您还必须指向 cpsw 端口节点中的 SerDes phy 句柄。

    您能否简单介绍一下您的补丁程序应该怎么做?

    我的补丁是一个附加组件。 默认情况下、CPSW MAC 配置为在 SGMII 从模式下工作。 我的补丁将其更改为主模式。 如果两侧均为从器件、则不会触发自动协商。 通常连接的接口处于主模式、因此从模式不是问题。

    此致、
    Tanmay

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

    您好、Tanmay、

    感谢您的提示。 我认为 serdes4节点已正确配置、因为端口5、6和7上 TDA4_1上的以太网连接工作正常(这些都通过 SGMII 连接)。

    您还必须指向 cpsw 端口节点中的 SerDes phy 句柄。

    此部件在我的上一器件诊断树中缺失。 因此、TDA4_1器件树的相关部分现在显示如下:

    &cpsw0_port5 {
    	status = "disabled";
    	phy-mode = "sgmii";
    	mac-address = [00 00 00 00 00 00];
    	phys = <&cpsw0_phy_gmii_sel 5>, <&serdes4_sgmii_link>;
    	phy-names = "mac", "serdes";
    	phy-handle = <&cpsw9g_phy0>;
    };
    
    &cpsw0_port6 {
    	status = "disabled";
    	phy-mode = "sgmii";
    	mac-address = [00 00 00 00 00 00];
    	phys = <&cpsw0_phy_gmii_sel 6>, <&serdes4_sgmii_link>;
    	phy-names = "mac", "serdes";
    	phy-handle = <&cpsw9g_phy1>;
    };
    
    &cpsw0_port7 {
    	status = "okay";
    	phy-mode = "sgmii";
    	mac-address = [00 00 00 00 00 00];
    	phys = <&cpsw0_phy_gmii_sel 7>, <&serdes4_sgmii_link>;
    	phy-names = "mac", "serdes";
    	phy-handle = <&cpsw9g_phy2>;
    };
    
    &cpsw0_port8 {
    	status = "okay";
    	phy-mode = "sgmii";
    	phys = <&cpsw0_phy_gmii_sel 8>, <&serdes4_sgmii_link>;
    	phy-names = "mac", "serdes";
    	mac-address = [00 00 00 00 00 00];
    	fixed-link {
    		speed = <100>;
    		full-duplex;
    	};
    };

    对于 TDA4_2:

    &cpsw0_port5 {
    	status = "disabled";
    	phy-mode = "sgmii";
    	mac-address = [00 00 00 00 00 00];
    	phys = <&cpsw0_phy_gmii_sel 5>, <&serdes4_sgmii_link>;
    	phy-names = "mac", "serdes";
    	phy-handle = <&cpsw9g_phy0>;
    };
    
    &cpsw0_port6 {
    	status = "disabled";
    	phy-mode = "sgmii";
    	mac-address = [00 00 00 00 00 00];
    	phys = <&cpsw0_phy_gmii_sel 6>, <&serdes4_sgmii_link>;
    	phy-names = "mac", "serdes";
    	phy-handle = <&cpsw9g_phy1>;
    };
    
    &cpsw0_port7 {
    	status = "okay";
    	phy-mode = "sgmii";
    	phys = <&cpsw0_phy_gmii_sel 7>, <&serdes4_sgmii_link>;
    	mac-address = [00 00 00 00 00 00];
    	fixed-link {
    		speed = <100>;
    		full-duplex;
    	};
    };

    我现在在 TDA4_2上得到以下与以太网相关的启动日志:

    root@j721e-evm:~# dmesg | grep cpsw
    [    1.171913] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA01901, cpsw version 0x6BA80101 Ports: 9 quirks:00000000
    [    1.463614] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA01901, cpsw version 0x6BA80101 Ports: 9 quirks:00000000
    [    1.477463] am65-cpsw-nuss c000000.ethernet: initialized cpsw ale version 1.4
    [    1.484595] am65-cpsw-nuss c000000.ethernet: ALE Table size 512
    [    1.490935] am65-cpsw-nuss c000000.ethernet: CPTS ver 0x4e8a010a, freq:200000000, add_val:4 pps:0
    [    1.502714] am65-cpsw-nuss c000000.ethernet: set new flow-id-base 140
    [    5.503238] am65-cpsw-nuss c000000.ethernet eth0: configuring for fixed/sgmii link mode
    [    5.517887] am65-cpsw-nuss c000000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
    

    双向通信

    root@j721e-evm:~# dmesg | grep cpsw
    [    1.171825] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA01901, cpsw version 0x6BA80101 Ports: 9 quirks:00000000
    [    1.465293] am65-cpsw-nuss c000000.ethernet: initializing am65 cpsw nuss version 0x6BA01901, cpsw version 0x6BA80101 Ports: 9 quirks:00000000
    [    1.479254] am65-cpsw-nuss c000000.ethernet: Use random MAC address
    [    1.488660] am65-cpsw-nuss c000000.ethernet: initialized cpsw ale version 1.4
    [    1.500764] am65-cpsw-nuss c000000.ethernet: ALE Table size 512
    [    1.513985] am65-cpsw-nuss c000000.ethernet: CPTS ver 0x4e8a010a, freq:200000000, add_val:4 pps:0
    [    1.540542] am65-cpsw-nuss c000000.ethernet: set new flow-id-base 140
    [    5.362046] am65-cpsw-nuss c000000.ethernet eth1: configuring for fixed/sgmii link mode
    [    5.380575] am65-cpsw-nuss c000000.ethernet eth1: Link is Up - 100Mbps/Full - flow control off
    [    5.459995] am65-cpsw-nuss c000000.ethernet eth0: PHY [c000f00.mdio:02] driver [TI DP83867] (irq=POLL)
    [    5.477619] am65-cpsw-nuss c000000.ethernet eth0: configuring for phy/sgmii link mode
    [    9.568146] am65-cpsw-nuss c000000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
    

    TDA4_1上的 ETH0接口工作正常(端口7)。 TDA4_1 (端口8)上的 ETH1接口是固定链路、连接到 TDA4_2上的端口7。 在该屏幕上、我还会看到一个"link up" 但没有网络。

    您刚才提到的详细信息

    如果两端都是从端、将不会触发自动协商。 连接的接口通常处于主模式、因此从模式不是问题。[/QUOT]

    我必须在哪一侧应用该补丁? 目前、它仅应用于 TDA4_2。 是这样吗?

    此致、

    Felix

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

    尊敬的 Felix:

    我必须在哪一侧应用此补丁? 目前、它仅应用于 TDA4_2。 这是正确的吗?

    这也应该起作用。 您也可以将补丁应用于两个 TDA4。 我实际上建议这么做。 使用 CPSW 开关(MAC 也处于主模式)时、可实现自动协商。

    请注意、对于100M 链路、请在补丁中使用"LPA_SGMII_100FULL"。 或者使用现有增补程序、将设备树中的链接速度设置为1000。

    您是否可以为两侧的相关端口提供以下寄存器值:

    • 0x0C000110 +(I*0x100)、其中 i 是0索引端口号(对于 TDA4_1端口8、i 将为7)
    • 0x0C000114 +(I*0x100)
    • 0x0C000118 +(I*0x100)
    • 0x0C000120 +(I*0x100)

    此致、
    Tanmay

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

    您好、Tanmay、  

    我已切换回1G 链接、修改了补丁和相应的器件树以适应此设置。 您的补丁现已应用于 TDA4_1和 TDA4_2。

    的说明 TDA4_1端口8 我得到以下信息:

    • 0x0C000810:0x21
    • 0x0C000814:0x3D
    • 0x0C000818:0x9801
    • 0x0C000820:0xD801

    的说明 TDA4_2端口7  我得到以下信息:

    • 0x0C000710:0x21
    • 0x0C000714:0x3D
    • 0x0C000718:0x9801
    • 0x0C000720:0xD801

    此外、DIAG_STATUS 寄存器还显示:

    • TDA4_1端口8 (0x0c000848):在0xEE9和0xEA9之间切换
    • TDA4_2端口7 (0x0c000748): 在0xEE9和0xEA9之间切换

    TDA4上的 eth 接口显示接收和传输的数据包、但仍然无法从 TDA4_2端口7 ping 任何地址

    这是 TDA4_1 (eth2是端口7、eth3是端口8):

    root@j721e-evm:~# ifconfig
    eth0      Link encap:Ethernet  HWaddr DA:62:37:AC:9A:16  
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    eth1      Link encap:Ethernet  HWaddr F2:79:07:27:79:90  
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    eth2      Link encap:Ethernet  HWaddr 34:08:E1:6C:4B:0E  
              inet addr:192.168.50.82  Bcast:192.168.50.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:247 errors:0 dropped:0 overruns:0 frame:0
              TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:45869 (44.7 KiB)  TX bytes:1895 (1.8 KiB)
    
    eth3      Link encap:Ethernet  HWaddr C2:F0:E6:95:BE:DE  
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:15 errors:0 dropped:0 overruns:0 frame:0
              TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:4995 (4.8 KiB)  TX bytes:4995 (4.8 KiB)
    

    这是 TDA4_2 (eth0是端口7、eth1是端口8;端口8当前未使用):

    root@j721e-evm:~# ifconfig
    eth0      Link encap:Ethernet  HWaddr 82:11:18:93:EB:CD  
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:14 errors:0 dropped:0 overruns:0 frame:0
              TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:4662 (4.5 KiB)  TX bytes:4995 (4.8 KiB)
    
    eth1      Link encap:Ethernet  HWaddr F2:8D:6C:C9:8B:8A  
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:4995 (4.8 KiB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    

    此致、

    Felix

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

    尊敬的 Felix:

    指出这一点是因为我看不到这一点、但是您需要分配 IP 地址才能 ping 通接口。 您在测试时这么做了吗?

    您可以在 TDA4_1上运行

    • ifconfig eth3 192.168.1.10

    在 TDA4_2上、您可以运行

    • ifconfig eth0 192.168.1.20
    • Ping 192.168.1.10

    这应该就足够了。

    通过寄存器转储可以看到链路状态良好。

    此致、
    Tanmay

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

    您好、Tanmay、

    感谢您的提示。 我假设只要一切正常、IP 地址就会自动分配。 我现在支持从 TDA4_1对 TDA4_2执行 ping 操作、反之亦然。

    另外还有一个问题、因为这是我的主要假设:

    目前、我无法 从同一网络中的另一台主机对 TDA4_2 eth0执行 ping 操作。

    此用例是否完全可以通过 MAC2MAC 功能实现?

    再次感谢您的支持。

    此致、

    Felix

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

    尊敬的 Felix:

    默认情况下、接口配置为 MAC 模式。 在这种情况下、接口相互独立。 我们还拥有一种称为开关模式的原生 Linux 驱动程序、您可以将接口与 Linux 上的桥接接口相结合、用作开关。

    有关更多详细信息、请参阅此处 的文档- https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-jacinto7/09_01_00_06/exports/docs/linux/Foundational_Components SNS/Kernel/IRG Kernel_Drivers Network/CPSWng-Native-Ethernet.html#switch-mode

    按照此步骤操作以启用所需功能。

    是否可以使用 MAC2MAC 功能实现此用例?

    MAC2MAC 只是一种具有一个端口的链路类型、不会以任何方式限制交换机功能的运行。 它与 MAC 模式不同。

    如果您有任何疑问、请告诉我。

    此致、
    Tanmay