一、SGMII+PHY
1、修改设备树
- combophy
其中属性 rockchip,sgmii-mac-sel 表示使用的是哪个 gmac:
&combphy1_usq {
+ rockchip,sgmii-mac-sel = <0>; /* Use gmac0 for sgmii */
status = "okay";
};
- xpcs
&xpcs {
status = "okay";
};
- gmac0
&gmac0 {
phy-mode = "sgmii";
rockchip,pipegrf = <&pipegrf>;
rockchip,xpcs = <&xpcs>;
snps,reset-gpio = <&gpio2 RK_PC2 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
snps,reset-delays-us = <0 20000 100000>;
assigned-clocks = <&cru SCLK_GMAC0_RX_TX>;
assigned-clock-parents = <&gmac0_xpcsclk>;
pinctrl-names = "default";
pinctrl-0 = <&gmac0_miim>;
power-domains = <&power RK3568_PD_PIPE>;
phys = <&combphy1_usq PHY_TYPE_SGMII>;
phy-handle = <&sgmii_phy>;
status = "okay";
};
&mdio0 {
sgmii_phy: phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <0x1>;
};
};
- gmac1
&gmac1 {
phy-mode = "sgmii";
rockchip,pipegrf = <&pipegrf>;
rockchip,xpcs = <&xpcs>;
snps,reset-gpio = <&gpio2 RK_PC2 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
snps,reset-delays-us = <0 20000 100000>;
assigned-clocks = <&cru SCLK_GMAC1_RX_TX>;
assigned-clock-parents = <&gmac1_xpcsclk>;
pinctrl-names = "default";
pinctrl-0 = <&gmac1_miim>;
power-domains = <&power RK3568_PD_PIPE>;
phys = <&combphy1_usq PHY_TYPE_SGMII>;
phy-handle = <&sgmii_phy>;
status = "okay";
};
&mdio1 {
sgmii_phy: phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <0x1>;
};
};
2、openwrt系统
驱动补丁:
3、其它系统
无操作
二、SGMII+非PHY
1、修改设备树
&gmac1 {
phy-mode = "sgmii";
rockchip,pipegrf = <&pipegrf>;
rockchip,xpcs = <&xpcs>;
assigned-clocks = <&cru SCLK_GMAC1_RX_TX>;
assigned-clock-parents = <&gmac1_xpcsclk>;
power-domains = <&power RK3568_PD_PIPE>;
phys = <&combphy2 PHY_TYPE_SGMII>;
status = "okay";
fixed-link {
speed = <1000>;
full-duplex;
};
};
2、驱动补丁
三、回环测试
1000baseX 走强制模式,PCS会自己link up,而SGMII 需要协商link, 这种情况一般是switch端没有固定好1000baseX模式的,之前rtl8310 switch端也是更新了很多次固件
我建议可以主控端先做一下回环,飞线要尽量短,
//driver 包产生
CONFIG_NET_PKTGEN=y
cd /proc/net/pktgen/
echo “add_device eth0” > /proc/net/pktgen/kpktgend_0
echo “pkt_size 1440” > /proc/net/pktgen/eth0
echo “count 99999999” > /proc/net/pktgen/eth0
echo “dst_mac FF:FF:FF:FF:FF:FF” > /proc/net/pktgen/eth0
echo “start” > /proc/net/pktgen/pgctrl
通过这种方式产生包,ifconfig 查看统计,确认能收到包。