LS1043网口配置修改示例

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

版本说明

操作系统: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_
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值