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.

[参考译文] J722SXH01EVM:如何将 SGMII phy (rtl8211fs)添加到 tda4

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1493666/j722sxh01evm-how-can-i-add-sgmii-phy-rtl8211fs-to-tda4

器件型号:J722SXH01EVM
主题:DP83869中讨论的其他器件

工具/软件:

尊敬的专家:

SDK:ti-processor-sdk-linux-adas-j722s-evm-10_00_00_08

DTS:

&cpsw3g {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&rgmii1_pins_default>;
};

&cpsw3g_mdio {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&mdio_pins_default>;

    cpsw3g_phy0: ethernet-phy@0 {
        reg = <0>;
        ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
        ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
        ti,min-output-impedance;
    };

    cpsw3g_phy1: ethernet-phy@1{
        reg = <1>;
        ti,op-mode = <DP83869_SGMII_COPPER_ETHERNET>;
    };
};

&cpsw_port1 {
    phy-mode = "rgmii-rxid";
    phy-handle = <&cpsw3g_phy0>;
};

&cpsw_port2 {
    status = "okay";
    phy-mode = "sgmii";
    mac-address = [00 00 00 00 00 00];
    phys = <&serdes1_sgmii_link>;
    phy-names = "serdes";
    phy-handle = <&cpsw3g_phy1>;    
};

&serdes_ln_ctrl {
    idle-states = <J722S_SERDES0_LANE0_USB>,
              <J722S_SERDES1_LANE0_QSGMII_LANE1>;
};

&serdes0 {
    status = "okay";
    serdes0_usb_link: phy@0 {
        reg = <0>;
        cdns,num-lanes = <1>;
        #phy-cells = <0>;
        cdns,phy-type = <PHY_TYPE_USB3>;
        resets = <&serdes_wiz0 1>;
    };
};

&serdes1 {
    serdes1_sgmii_link: phy@0 {
        reg = <0>;
        cdns,num-lanes = <1>;
        #phy-cells = <0>;
        cdns,phy-type = <PHY_TYPE_SGMII>;
        resets = <&serdes_wiz1 1>;
    };
};

我们有一个需要使用双网卡的 TDA4VEN 项目。 我们在 SerDes1上安装了一个带有 SGMII 接口的 Rtl8211FS 网卡。
此 DTS 的配置无法正确加载 SGMII RLK8211fs 的 phy 驱动程序。 我可以询问如何配置它

谢谢你。

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

    您好、

    提及的 CPSW 端口2 (cpsw3g_phy1)的 PHY 属性与 TI DP83869 PHY 相关。

    将根据连接到电路板的物理 PHY 的 PHY ID 加载 PHY 驱动程序。
    您需要在 phy 节点(cpsw3g_phy1)中提供正确的 PHY 地址、从上面开始、I can phy 地址为1。

    请咨询 PHY 供应商、了解 RTL8211FS 驱动程序是否启用了对 SGMII 的支持?

    此致、
    Sudheer

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

    您好、

    如何更改向 Realtek 提到的 CPSW 端口2 (cpsw3g_phy1)的 PHY 属性。 C (rtl8211fs)
    (cpsw3g_phy1) PHY 硬件地址为1。
    RTL8211FS 驱动程序支持 SGMII。
    我可以问如何将驱动程序链接到/driver/net/py/Realtek。 C PHY-ID-MATCH_EXACT (0x001cc916)?

    谢谢!

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

    您好、

    如何更改 Realtek 提到的 CPSW 端口2 (cpsw3g_phy1)的 PHY 属性。 C (rtl8211fs)
    (cpsw3g_phy1) PHY 硬件地址为1。

    如果要启用 PHY 驱动程序支持的任何特定配置、则需要在 MAC 端口下使用。

    地址1映射足以将 MDIO 链接到 PHY 以进行读取/写入操作。

    我可以询问如何将驱动程序链接到/driver/net/py/Realtek。 C PHY-ID-MATCH_EXACT (0x001cc916)?

    PHY 驱动程序的链接不是手动链接、也不是从器件树进行配置。
    Linux PHY 将通过读取 phy 寄存器来检查 PHY 的器件 ID、并映射到内核中具有匹配 ID 的驱动程序。 如果不存在驱动程序、它将映射到 Linux 中的通用 phy 驱动程序。

    如果 phy 驱动程序未链接到您的 PHY、请咨询 PHY 供应商。

    此致、
    Sudheer

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

    您好、

    从日志中、似乎 eth1以100Mbps 的速率建立了链路。

    您是否可以检查为以太网功能配置的引脚? (我是指串行器/解串器通道控制寄存器)。

    此致、
    Sudheer

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

    您好、

    串行器/解串器配置看起来正常、PLL 也被锁定。

    从 SGMII 状态寄存器中、链路显示为断开。

    您可以检查 PHY 中配置的模式吗? 默认情况下、MAC 侧为从模式。

    您是否还可以通过在 MAC 侧启用主模式以及广播能力来进行检查。


    此致、
    Sudheer

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

    您好:

    此任务现在可以关闭。谢谢!

    这是 DTS 最终配置:

    &cpsw3g {
    	status = "okay";
    };
    
    &cpsw3g_mdio {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&mdio_pins_default>;
    	reset-post-delay-us = <12000>;
    
    	cpsw3g_phy0: ethernet-phy@0 {
    		reg = <1>;
    		realtek,aldps-disable;
    		realtek,clkout-disable;
    		realtek,phy-mode-eee-disable;
    	/*	ti,op-mode = <DP83869_SGMII_COPPER_ETHERNET>;*/
    	};
    };
    
    &cpsw_port1 {
    	status = "okay";
    	phy-mode = "sgmii";
    	mac-address = [00 00 00 00 00 00];
    	phys = <&phy_gmii_sel 1>,<&serdes1_sgmii_link>;
    	phy-names ="mac","serdes";
    	phy-handle = <&cpsw3g_phy0>;	
    };
    
    &cpsw_port2 {
    	status = "disabled";
    };
    
    &serdes_ln_ctrl {
    	idle-states = <J722S_SERDES0_LANE0_USB>,
    		      <J722S_SERDES1_LANE0_QSGMII_LANE1>;
    };
    
    &serdes0 {
    	status = "okay";
    	serdes0_usb_link: phy@0 {
    		reg = <0>;
    		cdns,num-lanes = <1>;
    		#phy-cells = <0>;
    		cdns,phy-type = <PHY_TYPE_USB3>;
    		resets = <&serdes_wiz0 1>;
    	};
    };
    
    &serdes1 {
    	serdes1_sgmii_link: phy@0 {
    		reg = <0>;
    		cdns,num-lanes = <1>;
    		#phy-cells = <0>;
    		cdns,phy-type = <PHY_TYPE_SGMII>;
    		resets = <&serdes_wiz1 1>;
    	};
    };
    

    这是需要改进的地方:

    drivers/phy/ti/phy-j721e-wiz.c 
    	case AM64_WIZ_10G:
    		if (wiz->lane_phy_type[lane] == PHY_TYPE_PCIE)
    			return regmap_field_write(wiz->p0_fullrt_div[lane], 0x1);
    		if (wiz->lane_phy_type[lane] == PHY_TYPE_SGMII)
    			return regmap_field_write(wiz->p0_fullrt_div[lane], 0x2);
    		break;
    
    drivers/net/ethernet/ti/am65-cpsw-nuss.c
    static const struct am65_cpsw_pdata am64x_cpswxg_pdata = {
    	.quirks = AM64_CPSW_QUIRK_DMA_RX_TDOWN_IRQ | AM64_CPSW_QUIRK_CUT_THRU,
    	.ale_dev_id = "am64-cpswxg",
    	.fdqring_mode = K3_RINGACC_RING_MODE_RING,
    	.extra_modes = BIT(PHY_INTERFACE_MODE_SGMII),
    };
    
    if (common->pdata.extra_modes & BIT(state->interface)) {
    	if (state->interface == PHY_INTERFACE_MODE_SGMII) {
    		printk("zzg sgmii:AM65_CPSW_SGMII_MR_ADV_ABILITY_REG dress 0x%8x:0x%d\n",port->sgmii_base + AM65_CPSW_SGMII_MR_ADV_ABILITY_REG,ADVERTISE_SGMII);
    		writel(ADVERTISE_SGMII | LPA_SGMII_1000FULL | LPA_SGMII_LINK,
    		       port->sgmii_base + AM65_CPSW_SGMII_MR_ADV_ABILITY_REG);
    			
    		writel(0x20,port->sgmii_base + AM65_CPSW_SGMII_CONTROL_REG);
    		cpsw_sl_ctl_set(port->slave.mac_sl, CPSW_SL_CTL_EXT_EN);
    	} else {
    		cpsw_sl_ctl_clr(port->slave.mac_sl, CPSW_SL_CTL_EXT_EN);
    	}
    
    	if (state->interface == PHY_INTERFACE_MODE_USXGMII) {
    		cpsw_sl_ctl_set(port->slave.mac_sl,
    				CPSW_SL_CTL_XGIG | CPSW_SL_CTL_XGMII_EN);
    	} else {
    		cpsw_sl_ctl_clr(port->slave.mac_sl,
    				CPSW_SL_CTL_XGIG | CPSW_SL_CTL_XGMII_EN);
    	}
    	printk("zzg sgmii:AM65_CPSW_SGMII_CONTROL_REG dress 0x%8x:0x%d\n",
    		port->sgmii_base + AM65_CPSW_SGMII_CONTROL_REG,AM65_CPSW_SGMII_CONTROL_MR_AN_ENABLE);
    	reg_val = readl(port->sgmii_base+AM65_CPSW_SGMII_CONTROL_REG);
    	writel(reg_val|AM65_CPSW_SGMII_CONTROL_MR_AN_ENABLE,
    	       port->sgmii_base + AM65_CPSW_SGMII_CONTROL_REG);
    }
    
    drivers/phy/ti/phy-gmii-sel.c
    struct phy_gmii_sel_soc_data phy_gmii_sel_soc_am654 = {
    	.use_of_data = true,
    	.regfields = phy_gmii_sel_fields_am654,
    	.extra_modes = BIT(PHY_INTERFACE_MODE_SGMII),
    };

    这是寄存器 μ:的状态

    root@j722s-evm:/home/zzg# devmem2 0x08000114
    /dev/mem opened.
    Memory mapped at address 0xffffa05c3000.
    Read at address  0x08000114 (0xffffa05c3114): 0x0000003D
    root@j722s-evm:/home/zzg# devmem2 0x08000110
    /dev/mem opened.
    Memory mapped at address 0xffff8279b000.
    Read at address  0x08000110 (0xffff8279b110): 0x00000021
    root@j722s-evm:/home/zzg# devmem2 0x08000118
    /dev/mem opened.
    Memory mapped at address 0xffff97f8f000.
    Read at address  0x08000118 (0xffff97f8f118): 0x00009801
    root@j722s-evm:/home/zzg# 
    root@j722s-evm:/home/zzg# devmem2 0x00106090                                                                                                                                                                  
    /dev/mem opened.
    Memory mapped at address 0xffffa9a2d000.
    Read at address  0x00106090 (0xffffa9a2d090): 0x00000001
    root@j722s-evm:/home/zzg# devmem2 0x00106044
    /dev/mem opened.
    Memory mapped at address 0xffff981e5000.
    Read at address  0x00106044 (0xffff981e5044): 0x00000003
    root@j722s-evm:/home/zzg# devmem2 0x00104044                                                                                                                                                                  
    /dev/mem opened.
    Memory mapped at address 0xffff89d44000.
    Read at address  0x00104044 (0xffff89d44044): 0x00000003
    root@j722s-evm:~# devmem2 0x0F00E000 
    /dev/mem opened.
    Memory mapped at address 0xffffa9a63000.
    Read at address  0x0F00E000 (0xffffa9a63000): 0x000C0030
    root@j722s-evm:~# devmem2 0x0F01E000
    /dev/mem opened.
    Memory mapped at address 0xffff8b433000.
    Read at address  0x0F01E000 (0xffff8b433000): 0x00490011
    root@j722s-evm:~# 
    //8211FS register status
    root@j722s-evm:/home/zzg# cat phytool.sh 
    #Indirect access address = Register_page*16+2*(Register_address%16)
    #SEDES INER
    echo "Indirect access address = Register_page<<4+2*(Register_address%0x10)"
    
    echo "SEDES INER page:0xde1 addr:0x11  0xde12"
    phytool write eth0/0/0x1B 0xde12
    phytool read  eth0/0/0x1C
    
    echo "SEDES INSR page:0xde1 addr:0x12  0xde14"
    phytool write eth0/0/0x1B 0xde14
    phytool read  eth0/0/0x1C
    
    echo "SEDES ANARSEL page:0xd08 addr:0x14  0xd088"
    phytool write eth0/0/0x1B 0xd088
    phytool read  eth0/0/0x1C
    
    echo "SEDES ANAR page:0xd08 addr:0x10  0xd080"
    phytool write eth0/0/0x1B 0xd080
    phytool read  eth0/0/0x1C
    
    echo "SEDES ANLPAR page:0xdc0 addr:0x15  0xdc0a"
    phytool write eth0/0/0x1B 0xdc0a
    phytool read  eth0/0/0x1C
    
    echo "SEDES ANLPAR page:0xdc0 addr:0x15  0xdc88"
    phytool write eth0/0/0x1B 0xdc88
    phytool read  eth0/0/0x1C
    
    echo "SEDES ANLPAR page:0xdc0 addr:0x15  0xdf00"
    phytool write eth0/0/0x1B 0xdf00
    phytool read  eth0/0/0x1C
    root@j722s-evm:/home/zzg# ./phytool.sh 
    Indirect access address = Register_page<<4+2*(Register_address%0x10)
    SEDES INER page:0xde1 addr:0x11  0xde12
    0000
    SEDES INSR page:0xde1 addr:0x12  0xde14
    0000
    SEDES ANARSEL page:0xd08 addr:0x14  0xd088
    0000
    SEDES ANAR page:0xd08 addr:0x10  0xd080
    0x0050
    SEDES ANLPAR page:0xdc0 addr:0x15  0xdc0a
    0xd801
    SEDES ANLPAR page:0xdc0 addr:0x15  0xdc88
    0x0749
    SEDES ANLPAR page:0xdc0 addr:0x15  0xdf00
    0x0907
    root@j722s-evm:/home/zzg# 
     
    
    

    这里遇到两个问题:
    原始 TDA4 (J722s)板在 CPSW-端口1上具有一个 RGMI-RXID TI PHY。 硬件设计人员想要添加一个 SGMII PHY、该 PHY 将连接到 Serdes1<-->SGMI1<-->CPSW-Port1。 此 phy 与原始 phy 位于同一 cpsw_port1上、无法协同工作。 我们需要从 ti 中移除 phy 并调整 cpsw_port1。 我不确定我是否理解正确。
    2.返回的原型板存在硬件问题,差分信号尚未从 TDA4的 SGMII TX 输出

    此致、

    谢谢!

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

    您好、

    原始 TDA4 (J722s)板在 CPSW-端口1上具有 RGMI-RXID TI PHY。 硬件设计人员想要添加一个 SGMII PHY、该 PHY 将连接到 Serdes1<-->SGMI1<-->CPSW-Port1。 此 phy 与原始 phy 位于同一 cpsw_port1上、无法协同工作。 我们需要从 ti 中移除 phy 并调整 cpsw_port1。 我不确定我是否理解正确。

    是的。  在 EVM 上、无法支持它。 我们需要更改电路板、以便在端口1上启用 SGMII。

    2. 返回的原型板存在硬件问题、并且差分信号尚未从 TDA4
    的 SGMII TX 输出

    SGMII1连接端接至 TI EVM 的 ENET 扩展连接器。 请参阅原理图。

    我希望上述更改能解决您的链路和数据传输问题。  

    如果您需要与硬件相关的任何支持、我会请求您创建一个新主题。

    此致、
    Sudheer