TI中文支持网
TI专业的中文技术问题搜集分享网站

am335x第二路千兆网口不通

        板子上有2路网口,第一路为DP83848 百兆网(RMII接口),第二路为KSZ9031千兆网(RGMII接口),在3.20上已经调试完成,所以硬件上不存在问题,但现在将其移植到3.14版本上,第二路网口一直不能ping通,已经进行的确认和尝试如下:

1.gmii_sel寄存器配置为0xc9,即第一个port使用rmii模式,第二个port使用rgmii模式,使用chip pin clk,无internal delay

2.dts配置如下:

&mac {

        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&cpsw_default>;
        pinctrl-1 = <&cpsw_sleep>;
        dual_emac;

}

&davinci_mdio {

        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&davinci_mdio _default>;
        pinctrl-1 = <&davinci_mdio _sleep>;

}

&cpsw_emac0 {
        phy_id = <&davinci_mdio>, <1>;
        phy-mode = "rmii";
        dual_emac_res_vlan = <3>;
};

&cpsw_emac1 {
        phy_id = <&davinci_mdio>, <2>;
        phy-mode = "rgmii";
        dual_emac_res_vlan = <4>;
};

相应管脚确认已配置

3.根据链接http://processors.wiki.ti.com/index.php/Linux_Core_CPSW_User%27s_Guide#Dual_Standalone_EMAC_mode 配置了内核相关选项

4.内核启动有以下网口信息:

……

[    4.124316] davinci_mdio 4a101000.mdio: phy[1] : device 4a101000.mdio:01, driver unknown 

[    4.171734] davinci_mdio 4a101000.mdio: phy[2] : device 4a101000.mdio:02, driver Micrel KSZ9031 Gigabit PHY 

……

[    11.364246] net eth0 : phy found : id is 0x20005c90

 [    11.534238] net eth1 : phy found : id is 0x221622

5.插入网线后,千兆网口均能自动识别插入拔出以及自适应100M/1000M,可以ping自身IP和回环网口,但是ping不通外网

6.http://e2e.ti.com/support/arm/sitara_arm/f/791/t/182794.aspx 根据链接中所描述的配置了KSZ9031的skew参数,没有效果

7.此外,硬件连接上有一个gpio脚接到KSZ9031的rst脚,在代码中有进行以下复位操作:

    gpio_direction_output(64, 0);

    gpio_set_value(64, 1);

    mdelay(10);

    gpio_direction_output(64,0);

    mdelay(10);

    gpio_direction_output(64,1);

-内核版本:3.14.26 

问题:第二路千兆网口不通,暂时不能定位原因,请问现在还可以确认哪些方面

zhipeng xie:

    在不同版本的内核上进行示波器的测量,发现ping的时候TXD管脚都有信号产生,但是有一个TX_CLK管脚的时钟周期不一致,在可以ping通的3.20版本上时钟周期为40ns,在不能ping通的3.14版本上时钟周期为100ns,在DTS中已经定义了此管脚

0x5x (PIN_OUTPUT_PULLDOWN | MUX_MODE2)  /* gpmc_a6.rgmii2_tclk */

    请问在哪里可以修改该时钟的频率?

zhipeng xie:

回复 zhipeng xie:

我在cpsw.c中加入了打印;

在cpsw_probe中有以下代码:

    priv->clk = devm_clk_get(&pdev, "fck");

    …

    priv->bus_freq_mhz = clk_get_rate(priv->clk) / 1000000;  ——>此处的bus_freq_mhz 在可以ping通的板子上是125,而在基于dts的3.14版本上面是50

但是这个fck时钟是dts文件中传进来的,在am33xx.dtsi 中默认配置为&cpsw_125mhz_gclk,为什么获得的实际上只有50M?

zhipeng xie:

回复 zhipeng xie:

现在发现的有以下问题:

1.cpsw.c中传进来的fck频率不对,应该为125,变成了50,但这个频率是dtsi头文件中定义的,没有做修改

2.用示波器进行测试,发现连接千兆网卡的rgmii2_rclk时钟周期跟可以ping通的板子一致(20ns),但rgmii2_tclk的时钟周期是可以ping通的板子的2.5倍(50ns)

烦请帮忙分析下

赞(0)
未经允许不得转载:TI中文支持网 » am335x第二路千兆网口不通
分享到: 更多 (0)