RK3576 适配联芸MAE0621A-Q3C 千兆以太网PHY

目录

项目背景

硬件检查 

管脚配置

电源部分

时钟部分

贴片试用

驱动合入

以linux 6.1为例,按照常规步骤:

其他修改

功能验证

流量测试

RK RGMII Delayline

​编辑

Iperf 测试

调试总结


项目背景

近日接手公司RK3576盒子项目,要求控制成本,尽量采用国产元器件。网络这块RK3576出两个千兆网口,采购推荐了联芸的MAE0621A-Q3C千兆以太网PHY。以前只知道联芸做存储控制牛逼,我的爱国者2TB SSD就快的起飞。既然还有网络芯片,那就好好盘一盘他!

硬件检查 

说句实话,鉴于之前网络调试的不愉快经历,刚开始我还是比较小心的。对所谓的Pin2Pin兼容反复确认,毕竟掉进一个坑容易,要爬出来就得好几天。

管脚配置

RK给的公版原理图上1000M PHY是RTL8211F,作为一匹细心的牛马,我先把MAE0621A-Q3C的所有pin脚都拉出来和RTL8211F比对了一遍,结果完全一致,几个IO口的内部上下拉及功能定义都是一样的。这就意味着在同一硬件环境下,MAE0621A-Q3C和8211F上电配置是一致的,无需做调整。

电源部分

接着再看电源部分,RK原理图上PHY vddl 电压采用DCDC输出,搭配有电感电容,这部分和MAE0621A-Q3C给的原理图也是一致,可以直接使用。

和FAE确认,如果项目上原来使用的是RTL8211FD这类LDO输出vddl的PHY,就需修改外围增加电感电容,或者直接使用外部供电1.1v,MAE0621A-Q3C也是适用的。总结如下:

时钟部分

在PHY的时钟电路这块,RK原理图上给出了无源晶体提供和MAC提供25M时钟两种方案。

查阅MAE0621A-Q3C的datasheet和参考设计也是完全兼容的。需要注意的是,时钟源需要3.3v的电压域,这在RK3576上选择合适的VCCIO就好。

贴片试用

前面硬件检查过后,就八九不离十,基本判断为可以直接贴片测试了。

板子上电后,因为没有合入MAE0621A-Q3C的驱动,从dmesg打印看,识别为Generic PHY。

插上网线和PC对接,可以直接1G linkup,拔掉网线 down,看起来一切正常啊。

然后到网络节点下,访问phy的寄存器。目前PHY是挂在stmmac-0这条bus下的,可以用
cat phy_registers  读取当前page下的0~31号寄存器

echo <reg> <value> > phy_registers 可以对某个寄存器赋值。参照datesheet来尝试对PHY做个复位动作,看来也完全符合预期。

在PC上用dhcpsrv起了DHCP自动分配,RK3576也顺利拿到了IP,ping也没问题。这让我出乎意料,这几乎直接可以用了!

驱动合入

咱还是按要求合入驱动包,官方给的驱动版本是v1.8.1.2,包含了maxio.c和patch.diff两个文件。maxio.c 是驱动的主程序,看内容主要是做了寄存器的优化配置,patch文件记录了其他修改项。

以linux 6.1为例,按照常规步骤:

1. 拷贝 maxio.c 到目录 linux-6.1/drivers/net/phy/

2. 编辑linux-6.1/drivers/net/phy/Makefile, 增加:

obj-$(CONFIG_MAXIO_PHY)       += maxio.o

3. 编辑linux-6.1/drivers/net/phy/Kconfig, 增加:
config MAXIO_PHY
    tristate "MAXIO PHYs"
    help
      Supports the Maxio MAExxxx PHY.

4. 编辑kernel/arch/arm64/configs/xxx_defconfig , 增加:

CONFIG_MAXIO_PHY=y

其他修改

patch文件中记录了对 /drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 文件的一处修改:

@@ -3232,6 +3236,20 @@ int stmmac_resume(struct device *dev)
     priv->cur_tx = 0;
     stmmac_clear_descriptors(priv);

+    if (ndev->phydev->drv->config_init) {    
+        if (ndev->phydev->phy_id == MAXIO_PHY_MAE0621A_Q2C_ID || ndev->phydev->phy_id == MAXIO_PHY_MAE0621A_Q3C_ID)  {          
+            ndev->phydev->drv->config_init(ndev->phydev); 
+        }                 
+    }

     stmmac_hw_setup(ndev, false);
     stmmac_set_rx_mode(ndev);

咨询了FAE,这里是因为RK所采用的stmmac需要在初始化的时候灌入RX CLK,否则会报"DMA engine initialization failed",此处的操作就是把PHY先初始化起来提供RX CLK。如果是全志系列的sunxi mac,就不需要合入此修改了。

以上完成后,就可以编译kernel,直接烧录了!

功能验证

烧录完再次上电后,查看日志,已经可以识别为MAE0621A_Q3C了,并且正确加载了v1.8.1.2版本的驱动。

获取IP,Ping,网口开关,10M/100M/1000M协商,这些动作都没有问题,表现与8211F无异。

流量测试

RK RGMII Delayline

RGMII Delayline 是RK自动计算RGMII delay的工具,其基本原理是设置PHY的RGMII loopback,然后从MAC发包,环回收包后检查是否有错包和丢包。在此过程中,遍历MAC的txdly和rxdly设定,从所有结果中选取最优值。此工具可以保证用户网络达到最佳流量。

目前在RK3576的默认设备树中,RGMII模式设置为RGMII-ID,这意味着RX方向的延时由PHY来保证,MAC不做调整,TX方向则可以做调整。从节点读上来的设定也可以看到,TX当前设定为0x20,RX不做设定。 

咱就在这个RK3576+MAE0621A-Q3C的环境上来跑一下自动计算工具,看看效果怎么样。可是不出意外的话意外发生了,奈何我怎么跑都无法得到合适的txdly值,但实际网络通信又没有问题。拿贴有RTL8211F的板子来跑,也是一样的结果。

继续找FAE咨询,虽然不是联芸PHY的问题,但FAE小哥还是很负责地做了一番研究,还联系了RK的支持。最后给出的方案是测试时需要将RK3576的内存在uboot下临时修改为2GB,方法如下:

--- a/arch/arm/mach-rockchip/param.c
+++ b/arch/arm/mach-rockchip/param.c
@@ -287,10 +287,12 @@ struct memblock *param_parse_ddr_mem(int *out_count)
             return 0;
         } 
+        count = 1;
         for (i = 0, n = 0; i < count; i++, n++) {
             base = t->u.ddr_mem.bank[i];
             size = t->u.ddr_mem.bank[i + count]; 
+            size = SZ_2GB;
             /* 0~4GB */
             if (base < SZ_4GB) {
                 mem[n].base = base;

修改后终于可以计算得到合适的txdly值,从输出的结果来看,打O的都是不丢包的txdly,范围很宽,0x1b是取了中间值,这样可以给不同的板卡留足裕量。

咱先将上述txdly值手工写入mac,后续可以加到设备树中做开机加载。

Iperf 测试

在PC上起iperf server,RK3576板卡做clinet,测试上行流量,可以达到940M以上!

反向RK3576板卡做server,PC做client,测试下行流量,速率也在940M以上,非常稳定。

调试总结

至此,在RK3576上集成联芸MAE0621A-Q3C 千兆以太网PHY的调试就基本结束了,总体非常顺利。最后总结一下:

  • 联芸这颗1000M PHY与RTL8211F系列pin2pin兼容,省却了很多修改外围的麻烦。
  • 驱动合入也很简单,没有啥复杂的东西。
  • 芯片本身素质不错,板子如果硬件布线好良好的话,带宽940M以上无压力!
  • 支持也很到位,有啥问题不用发邮件排队,直接微信支持。

不禁感叹现在国产IC越做越好,价格服务也有优势,以后网络芯片又多了一个新选择!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值