LS1028开发板引入了【复位控制字】Reset configuration word (RCW)的配置方法,通过这种配置方法客户可以方便的进行引脚的功能定义,也就是实现引脚的PinMUX功能。
LS1028平台所特有的SerDes Module也是要通过RCW来进行配置,从而将不同的SerDes通道选择为不同的功能。LS1028有一组SerDes
修改需求
LS1028现在的SerDes mode为:8 5 B E,一路SGMII,四路QSGMII,一路PCIE,一路SATA
目前有一种需求需要使用两路SGMII,查看CPU手册可以看到99BB模式可以符合该需求
那么接下来我们将以此为例进行修改配置
代码修改
第一步修改RCW
LS1028 RCW配置文件在源码中的位置:
packages/firmware/rcw/ls1028ardb/R_SQPP_0x85bb/rcw_1500_gpu600.rcw
修改RCW配置为99BB,分别修改SRDS_PRTCL_S1_L0、L1、L2、L3的值,此处需要将16进制转化为10进制换算,如99BB的十进制为9、 9、11、11
SRDS_PRTCL_S1_L0=9
SRDS_PRTCL_S1_L1=9
SRDS_PRTCL_S1_L2=11
SRDS_PRTCL_S1_L3=11
第二步修改uboot设备树
SGMII PHY芯片的实际PHY地址分别为:SGMII0:1、SGMII1:2
uboot设备树路径:
packages/firmware/u-boot/arch/arm/dts/fsl-ls1028a-rdb.dts
&enetc0 {
- status = "okay";
- phy-mode = "sgmii";
- phy-handle = <&rdb_phy0>;
+ status = "disabled";
};
ðsw_ports {
port@0 {
status = "okay";
- phy-mode = "qsgmii";
+ phy-mode = "sgmii";
phy-handle = <&sw_phy0>;
};
port@1 {
status = "okay";
- phy-mode = "qsgmii";
+ phy-mode = "sgmii";
phy-handle = <&sw_phy1>;
};
- port@2 {
- status = "okay";
- phy-mode = "qsgmii";
- phy-handle = <&sw_phy2>;
- };
- port@3 {
- status = "okay";
- phy-mode = "qsgmii";
- phy-mode = "sgmii";
- phy-handle = <&sw_phy3>;
- };
};
&mdio0 {
status = "okay";
- rdb_phy0: phy@2 {
- reg = <2>;
- };
- sw_phy0: phy@8 {
- reg = <0x08>;
+ sw_phy0: phy@1 {
+ reg = <0x01>;
};
- sw_phy1: phy@9 {
- reg = <0x09>;
+ sw_phy1: phy@2 {
+ reg = <0x02>;
};
- sw_phy2: phy@a {
- reg = <0x0a>;
};
- sw_phy3: phy@b {
- reg = <0x0b>;
};
};
第三步修改内核设备树
内核设备树路径:
packages/linux/linux/arch/arm64/boot/dts/freescale/OK1028A-C.dts
-&enetc_port0 {
- phy-handle = <&sgmii_phy0>;
- phy-connection-type = "sgmii";
- mdio {
- #address-cells = <1>;
- #size-cells = <0>;
- sgmii_phy0: ethernet-phy@2 {
- reg = <0x2>;
- };
- };
-};
&enetc_mdio_pf3 {
- qsgmii_phy1: ethernet-phy@08 {
- reg = <0x08>;
- };
- qsgmii_phy2: ethernet-phy@09 {
- reg = <0x09>;
- };
- qsgmii_phy3: ethernet-phy@0a {
- reg = <0x0a>;
- };
- qsgmii_phy4: ethernet-phy@0b {
- reg = <0x0b>;
- };
sgmii_phy1: ethernet-phy@01 {
reg = <0x01>;
};
sgmii_phy2: ethernet-phy@02 {
reg = <0x02>;
};
};
/* l2switch ports */
&mscc_felix_ports {
port@0 {
status = "okay";
phy-handle = <&sgmii_phy1>;
phy-mode = "sgmii";
managed = "in-band-status";
};
port@1 {
status = "okay";
phy-handle = <&sgmii_phy2>;
phy-mode = "sgmii";
managed = "in-band-status";
};
- port@2 {
- status = "okay";
- phy-handle = <&qsgmii_phy3>;
- phy-mode = "qsgmii";
- managed = "in-band-status";
- };
- port@3 {
- status = "okay";
- phy-handle = <&qsgmii_phy4>;
- phy-mode = "qsgmii";
- managed = "in-band-status";
- };
};
第四步 编译烧写验证
生成的设备节点分别为swp0、swp1,网卡可以正常ping通,至此使用双SGMII软件修改成功
补充知识
1028的以太网子系统
以太网子系统由两部分组成:一个以太网控制器(ENETC)和一个支持tsn的以太网交换机。ENETC有两个外部以太网端口,两个内部端口连接到交换机,以及作为一个PCI Root Complex Cortex-A72 cpu的集成终端,与ENETC和支持tsn的以太网交换机交互。支持tsn的以太网交换机共有6个端口——4个外部以太网端口,外加2个内部连接ENETC的端口用于交换机数据和管理/控制功能。
SerDes protocol notation
SGMII -T与SGMII -S的区别
T表示所有的SGMII 2.5G-T和SGMII 1G-T协议都连接到ENETC (Ethernet network controller)的2.5G支持端口上。任何时候只能使用一种协议,因为它们都来自一个端口。
S表示所有SGMII 2.5G-S和SGMII 1G-S协议接入TSN Switch mac。它们不能与多mac协议同时支持,因为它们重用相同的TSN Switch mac。
QSGMII/10G-SXGMII/10G-QXGMII的区别
-多mac协议(10G-QXGMII和QSGMII)的所有mac都连接到TSN Switch mac上。
-10G-QXGMII允许4台TSN Switch mac共享一个SerDes车道,协商速度高达2.5 Gbps /台
链接。连接4个交换机端口,支持每个端口协商速率为10M / 100M / 1G / 2.5G。
-10G-SXGMII允许端口0协商高达2.5 Gbps的速度。连接到支持2.5G容量的端口0
可支持10M、100M、1G或2.5 G的协商速率。
1028 SerDes module在芯片上的实现
SerDes配置的SGMII -T是连接到ENETC的port0,SGMII-S是连接到TSN Switch上的;