版本说明
操作系统:Ubuntu18.04 64 位版
交叉工具链:aarch64-linux-gnu-gcc
SDK 版本:LSDK-18.06-V4.14
u-boot版本:U-Boot 2018.03
项目需求
本方法是以1043格外的网口需求为例来介绍如何在 rcw、uboot、设备树中配置网络。
forlinx的OK1043A-C的SerDes配置方案为1455,如下表所示:
| SRDS_PRTCL_S1RCW[128:143] | A SD1_RX0_P/N SD1_TX0_P/N | B SD1_RX1_P/N SD1_TX1P/N | C SD1_RX2_P/N SD1_TX2_P/N | D SD1_RX3_P/N SD1_TX3_P/N | PLL Mapping |
|---|---|---|---|---|---|
| 1455 | XFI.m9 | QS.m1,2,5,6 | PCIe#1(x1) | PCIE#3(x1) | 1222 |
可以看到有一个XFI for MAC9,QSGMII for MAC1,MAC2,MAC5,MAC6,还有两个PCIe x1接口。除此之外 核心板自带两路RGMII。
这时我们有一个项目需求,需要将XFI万兆网改为SGMII千兆网,通过查阅SerDes配置表,发现3455配置方案符合要求:
| SRDS_PRTCL_S1RCW[128:143] | A SD1_RX0_P/N SD1_TX0_P/N | B SD1_RX1_P/N SD1_TX1P/N | C SD1_RX2_P/N SD1_TX2_P/N | D SD1_RX3_P/N SD1_TX3_P/N | PLL Mapping |
|---|---|---|---|---|---|
| 3455 | Sg.m9 | QS.m1,2,5,6 | PCIe#1(x1) | PCIE#3(x1) | 1222 |
每个受支持的SerDes协议都允许一组有限的有效的与SerDes相关的RCW字段和参考时钟频率,如下表所示:

我们将以此为例来进行配置的修改,先整理一下项目中的PHY与MAC的对应关系:

总体思路:我们需要修改依次RCW配置、Uboot、设备树,最后编译烧写。
代码修改
第一步 修改RCW配置
我们需要知道,OK1043A-C的RCW的文件源码位置为:
OK10xx-linux-fs/flexbuild/packages/firmware/rcw/ls1043ardb/RR_FQPP_1455/rcw_1600_qspiboot.rcw
分别修改SRDS_PRTCL_S1和SRDS_PLL_REF_CLK_SEL_S1的值,此处要将16进制转换为10进制换算,如0x3455的十进制为13397。
SYS_PLL_RAT=4
MEM_PLL_RAT=16
CGA_PLL1_RAT=16
CGA_PLL2_RAT=10
-SRDS_PRTCl_S1=5205
+SRDS_PRTCL_S1=13397
FM1_MAC_RAT=1
-SRDS_PLL_REF_CLK_SEL_S1=2
+SRDS_PLL_REF_CLK_SEL_S1=0
SRDS_DIV_PEX=1
DDR_FDBK_MULT=2
DDR_REFCLK_SEL=1
第二步 修改uboot的网络初始化代码
先在头文件中添加我们所需的 PHY 的定义,该文件在源码中的位置为:
flexbuild\packages\firmware\OK10xx-linux-uboot\include\configs\ls1043ardb.h
#define RGMII_PHY1_ADDR 0x1
#define RGMII_PHY2_ADDR 0x2
+#define SGMII_PHY1_ADDR 0x3
#define QSGMII_PORT1_PHY_ADDR 8
#define QSGMII_PORT2_PHY_ADDR 9
#define QSGMII_PORT3_PHY_ADDR 10
#define QSGMII_PORT4_PHY_ADDR 11
-#define FM1_10GEC1_PHY_ADDR 0
Uboot 的网络初始化代码在源码中的位置为:
flexbuild\packages\firmware\OK10xx-linux-uboot\board\freescale\ls1043ardb\eth.c
此时我们要修改网络部分的配置:
int board_eth_init(bd_t *bis)
{
#ifdef CONFIG_FMAN_ENET
int i;
struct memac_mdio_info dtsec_mdio_info;
struct memac_mdio_info tgec_mdio_info;
struct mii_dev *dev;
u32 srds_s1;
struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
srds_s1 = in_be32(&gur->rcwsr[4]) &
FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK;
srds_s1 >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT;
dtsec_mdio_info.regs= (structmemac_

本文介绍了在LS1043项目中,如何将XFI万兆网口改配置为SGMII千兆网口,详细阐述了修改RCW、u-boot、设备树的步骤,涉及SerDes配置方案的调整。
最低0.47元/天 解锁文章
3050

被折叠的 条评论
为什么被折叠?



