11 dwmac-rockchip RK3588 平台
源码:
dwmac-rk.c、dwmac-rk-tool.c、dwmac-rk-tool.h
模块:dwmac-rockchip.ko(CONFIG_DWMAC_ROCKCHIP)
DT compatible:rockchip,rk3588-gmac
1. 模块职责
Rockchip Platform Glue 负责 RK 全系列 SoC 的 DWMAC 适配,RK3588 为其中一代:
- GRF/PHP GRF 引脚复用(RGMII/RMII/SGMII)
- 多路时钟树管理与速率相关分频
- XPCS SerDes(SGMII/QSGMII)
- OTP / vendor storage MAC 地址
- 内置 PHY 供电、CSU 时钟隔离
- 调用
stmmac_dvr_probe()进入通用核心
2. 数据结构
2.1 rk_gmac_ops
SoC 差异通过 ops 表抽象:
1 | struct rk_gmac_ops { |
RK3588:rk3588_ops(约 2270 行起)。
2.2 rk_priv_data
1 | struct rk_priv_data { |
存入 plat_dat->bsp_priv,核心通过 get_stmmac_bsp_priv(dev) 取回。
3. Probe 流程
3.1 平台特有设置
1 | plat_dat->fix_mac_speed = rk_fix_speed; |
- sph_disable:RK 平台默认关闭 Split Header
- has_gmac4:DT 未指定时 fallback 到 legacy GMAC
4. 接口模式配置
4.1 RGMII
rk3588_set_to_rgmii():
- 写 GRF 切换 RGMII 模式
- 配置
tx_delay/rx_delay(DT 属性tx_delay、rx_delay)
4.2 RMII
rk3588_set_to_rmii() + 共享 speed 配置。
4.3 SGMII / QSGMII
- 配置 XPCS 寄存器(
xpcs_read/write) - PCS 模式、自协商使能
- 可能涉及
php_grfSerDes 电源
5. 速率切换
rk_fix_speed() → phylink link up 时调用:
1 | rk3588_set_gmac_speed(bsp_priv, speed) |
与 stmmac_mac_link_up() 配合完成 MAC 侧速率匹配。
6. 时钟
rk_gmac_clk_init() 获取并 prepare/enabled:
| 时钟 | 用途 |
|---|---|
clk_mac |
MAC 主时钟 |
mac_clk_rx / mac_clk_tx |
RGMII RX/TX |
aclk_mac / pclk_mac |
AXI/APB |
clk_phy |
外接 PHY 参考 |
pclk_xpcs |
XPCS APB |
rk_gmac_powerup/powerdown 配合 runtime PM。
7. MAC 地址
rk_get_eth_addr() 优先级:
- Device Tree
local-mac-address - Rockchip vendor storage / OTP
- 随机 MAC(核心 fallback)
8. RK3588 硬件拓扑
RK3588 通常有 两个 GMAC:
| 控制器 | DT 节点 | 常见用途 |
|---|---|---|
| GMAC0 | gmac0 |
RGMII + 外接 PHY |
| GMAC1 | gmac1 |
RGMII 或 SGMII |
具体以板级 DTS(rk3588-*.dtsi)为准。
9. 环回测试工具
CONFIG_DWMAC_ROCKCHIP_TOOL 启用 dwmac-rk-tool.c:
- sysfs 接口创建环回测试
- 用于产测/驱动验证
10. DTS 配置示例要点
1 | gmac0: ethernet@fe1b0000 { |
11. 调试建议
| 现象 | 排查 |
|---|---|
| 无链路 | PHY 供电、phy-mode、delay 参数 |
| 千兆不稳 | tx_delay/rx_delay 微调 |
| SGMII 不通 | XPCS 寄存器、SerDes 时钟 |
| 无 MAC 地址 | vendor storage、DT local-mac-address |
1 | dmesg | grep stmmac |
正在加载留言…