4. DPAA1以太网驱动移植与MAC配置

DPAA1以太网驱动移植与MAC配置 学习卡片

移植目标与硬件前提

本例把 DPAA1 以太网驱动落到一块自定义 LS1046A 板卡上。板卡使用 RGMII 连接外部千兆 PHY(示例为 AQR105 类器件),PHY 地址 0x03,MDIO 挂在 mdio0,复位由 GPIO1_15 控制。移植要同时打通三件事:DTS 节点描述正确、MAC 地址来源合法、PHY 接口与驱动匹配,最后用 ping 与 ethtool 验证链路。

LS1046A 的 DPAA1 以太网控制器在 Linux 中由 fsl_dpaa_mac / dpaa_eth 驱动栈管理。DTS 中 fsl,fman-mac 节点必须与 FMan 端口、MDIO 总线、PHY 三者对齐,否则会出现“网口存在但无 carrier”或“MAC 地址全 0”。

DTS 节点结构与连接关系

下图给出本例板卡上 DPAA1 以太网从 SoC 内部到外部 PHY 的完整连接拓扑,以及 DTS 中需要落笔的关键节点与属性。理解这张图,就能定位“改哪个节点、连哪根线、配哪个参数”。

LS1046A SoC(DPAA1) FMan 帧管理器 MAC0 (dpaa_eth) fsl,fman-mac MDIO 控制器 mdio0 RGMII 接口 phy-mode = "rgmii-id" 外部千兆 PHY addr = 0x03 AQR105 类 RGMII MDIO / MDC PHY 复位 GPIO1_15 DTS 关键节点与属性 ethernet@f200000 compatible = "fsl,ls1046a-dpaa" phy-handle = &phy0 phy-mode = "rgmii-id" mdio@f100000 compatible = "fsl,fman-mdio" phy0: ethernet-phy@3 reg = <0x03> aliases / chosen ethernet0 = &enet0 local-mac-address 来源 U-Boot ethaddr 或 NVMEM

MAC 地址来源与配置

LS1046A 的 MAC 地址不能凭空写死。推荐优先级为:U-Boot 环境变量 ethaddr → DTS 中 local-mac-address → 驱动随机生成。生产板卡应把 MAC 写入 OTP 或 EEPROM,由 U-Boot 读取后注入内核。示例中先在 U-Boot 设置:

setenv ethaddr 00:1b:21:aa:bb:04
setenv eth1addr 00:1b:21:aa:bb:05
saveenv

内核启动后可用 ip link show enet0 确认地址是否生效。若显示 00:00:00:00:00:00,说明 U-Boot 未传递或 DTS 覆盖了该属性。

PHY 接口与驱动匹配

RGMII 模式下,PHY 与 MAC 之间的时序由 phy-mode 决定。常见取值与适用场景:

phy-mode含义适用
rgmii无内部延时PHY 侧已加延时
rgmii-idRX/TX 内部延时本例推荐
rgmii-txid仅 TX 延时RX 由 PHY 处理
rgmii-rxid仅 RX 延时TX 由 PHY 处理

若链路能 up 但丢包严重,优先检查 phy-mode 与 PHY 实际延时配置是否匹配,而不是先怀疑驱动。

编译、烧写与连通性验证

  1. 修改 arch/arm64/boot/dts/freescale/fsl-ls1046a-xxx.dts,加入上述节点与属性。
  2. 编译 DTB:make ARCH=arm64 fsl-ls1046a-xxx.dtb,替换板卡启动分区中的 DTB。
  3. 启动后确认驱动绑定:dmesg | grep -i dpaa,应看到 fsl_dpaa_mac 与 PHY 探测成功。
  4. 查看链路:ethtool enet0,确认 Speed: 1000Mb/s、Duplex: Full、Link detected: yes。
  5. 配置 IP 并 ping 网关:ip addr add 192.168.1.10/24 dev enet0 && ip link set enet0 up && ping -c 4 192.168.1.1。
若 ethtool 显示 Link detected: no,按顺序排查:PHY 复位 GPIO 是否拉低足够时间 → MDIO 能否读到 PHY ID(mdio-tool 或 phytool)→ phy-mode 是否与硬件一致 → 时钟是否使能。

常见问题速查

现象可能原因处理
无 enet0 设备DTS 节点未使能或 compatible 错误检查 status = "okay" 与 compatible
MAC 全 0U-Boot 未传 ethaddr设置并保存 ethaddr
Link noPHY 复位/时钟/MDIO 异常量复位电平,读 PHY ID
能 up 但丢包RGMII 延时错配切换 rgmii-id / rgmii