首页 > 编程知识 正文

RK3399Android71 移植笔记 网卡RTL8211配置添加

时间:2023-05-03 10:38:06 阅读:233350 作者:1653

Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83

由于在 RK 系列的 SoC 中内置了以太网 MAC 控制器,所以只需要搭配一颗以太网 PHY 芯片, 即可实现以太网卡功能。
按照规范,即使是不同厂家的 PHY,仍然有一部分寄存器的定义是通用的, 只要配置了这些通用的寄存器,基本上 PHY 就可以正常工作。所以,如果不需要使用PHY厂家提供的自定义的寄存器,那么PHY驱动就不用修改。
在 Linux 驱动中有通用的 PHY 驱动,当然 SoC 中的 MAC 驱动是需要实现的(控制器不一样)。

10/100M 以太网 PHY 与 MAC 之间的接口主要有 MII 和 RMII。 10/100/1000M 以太网 PHY 与 MAC 之间的接口主要有 RGMII。 各个系列SoC支持的PHY接口如下:

Kernel控制器及版本配置如下:

网卡使用的是RTL8211,和参考设计一致,因此只要配置一下DTS就可以了。

原理图:

配置添加:

diff --git a/arch/arm64/boot/dts/rockchip/rk3399-eco.dts b/arch/arm64/boot/dts/rockchip/rk3399-eco.dtsindex e984dee..e39f165 100644--- a/arch/arm64/boot/dts/rockchip/rk3399-eco.dts+++ b/arch/arm64/boot/dts/rockchip/rk3399-eco.dts@@ -136,6 +136,15 @@ enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>; }; +//yydfh,180709, add support for eth.+clkin_gmac: external-gmac-clock {+compatible = "fixed-clock";+clock-frequency = <125000000>;+clock-output-names = "clkin_gmac";+#clock-cells = <0>;+};++ vcc_phy: vcc-phy-regulator { compatible = "regulator-fixed"; regulator-name = "vcc_phy";@@ -304,6 +313,23 @@ status = "okay"; }; +//yydfh,180709, add support for eth.+&gmac {+phy-supply = <&vcc_phy>;+phy-mode = "rgmii";+clock_in_out = "input";+snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;+snps,reset-active-low;+snps,reset-delays-us = <0 10000 50000>;+assigned-clocks = <&cru SCLK_RMII_SRC>;+assigned-clock-parents = <&clkin_gmac>;+pinctrl-names = "default";+pinctrl-0 = <&rgmii_pins>;+tx_delay = <0x28>;+rx_delay = <0x11>;+status = "okay";+};+ &sdhci { bus-width = <8>; mmc-hs400-1_8v;

参数说明:

phy-mode: 根据板上所使用的 PHY 的接口进行配置,一般千兆 PHY 为 RGMII, 百兆 PHY 为 RMII。clock_in_out : input 表示由 PHY 提供,output 表示由 GMAC 提供。clock-frequency:只有在时钟方向为input时才会使用到,RMII接口时,设为 50M,RGMII接口时设为125M。125M由外部 PHY 提供,这是因为 RK 主控分出的 clock 不精准,会造成 GMAC 丢包或无法工作。由外部输入的时钟相对于内部 PLL 产生的时钟更加独立,不受内部分频策略的影响,因此更加稳定。而对于 PHY 来说,本身就需要一个 25M 的晶振作为时钟源。tx_delay/rx_delay: RGMII 接口才需要去配置时序,因为时钟频率更高后更容易受到 PCBlayout走线,电磁干扰等影响,需要更加精确调整。如果有出现测试吞吐率不足的情况,可以适当调整这两个值,范围是 0x0—0x7F。

从kernel 4.4 版本开始,各驱动尽可能使用官方 Linux kernel 的代码,官方kernel 中已包含了支持 RK 所使用的 GMAC 的代码框架(很多RK的驱动已经上传到官方kernel,也包括GMAC)。所以往后芯片的 GMAC 驱动会套用此框架。
代码位置在 drivers/net/ethernet/stmicro/stmmac/。
RK 平台相关代码主要位于dwmac-rk.c中。

参考:
Rockchip 以太网 开发指南 V2.3.1-20160708.pdf
Documentation/devicetree/bindings/net/rockchip-dwmac.txt

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。