05 Platform 平台 Glue 层
源码:
stmmac_platform.c、stmmac_platform.h、dwmac-generic.c
各 SoC 专用:dwmac-rk.c、dwmac-imx.c等
1. 模块职责
Platform Glue 是 STMMAC 与 具体 SoC/板级 之间的适配层:
- 解析 Device Tree,构建
plat_stmmacenet_data - 获取 MMIO、IRQ、MAC 地址等资源
- 提供时钟/复位/引脚复用回调
- 调用统一核心入口
stmmac_dvr_probe()
核心驱动 不依赖 任何特定 SoC 头文件。
2. 通用平台框架
2.1 stmmac_platform.c
| 函数 | 说明 |
|---|---|
stmmac_get_platform_resources() |
映射 reg、解析 interrupt |
stmmac_probe_config_dt() |
解析 DT → plat_stmmacenet_data |
stmmac_remove_config_dt() |
释放 DT 相关内存 |
stmmac_pltfr_probe() |
通用 platform probe(部分平台) |
stmmac_pltfr_remove() |
通用 remove |
2.2 DT 解析要点
从 snps,dwmac 或厂商 compatible 节点读取:
| 属性 | 映射字段 |
|---|---|
snps,tx-sched-sp |
TX 调度算法 |
snps,rx-queues-config |
RX 队列 DCB/AVB |
snps,tx-queues-config |
TX 队列配置 |
snps,axi-config |
AXI 总线 tuning |
snps,mixed-burst |
DMA burst |
max-speed |
max_speed |
tx-fifo-depth / rx-fifo-depth |
FIFO 大小 |
dma-rx-size / dma-tx-size |
ring 深度 |
phy-mode、mdio、phy-handle 供 phylink 使用。
2.3 plat_stmmacenet_data 关键字段
定义于 include/linux/stmmac.h:
1 | struct plat_stmmacenet_data { |
3. Probe 统一模式
所有 Platform 驱动遵循相同模板:
1 | static int xxx_probe(struct platform_device *pdev) |
4. 各 Platform 驱动一览
| 模块文件 | Kconfig | 平台 |
|---|---|---|
dwmac-rk.c |
DWMAC_ROCKCHIP | Rockchip 全系 |
dwmac-imx.c |
DWMAC_IMX8 | NXP i.MX |
dwmac-qcom-ethqos.c |
DWMAC_QCOM_ETHQOS | Qualcomm |
dwmac-stm32.c |
DWMAC_STM32 | STM32 |
dwmac-generic.c |
DWMAC_GENERIC | 无特殊逻辑 |
dwmac-dwc-qos-eth.c |
DWMAC_DWC_QOS_ETH | DWC QoS binding |
stmmac_pci.c |
STMMAC_PCI | PCI 设备 |
Makefile 注释:Generic driver must be last(避免覆盖专用匹配)。
5. stmmac_resources
1 | struct stmmac_resources { |
multi_msi_en 时 per-queue IRQ 从 DT interrupt-names 解析。
6. PCI 路径
stmmac_pci.c:
- PCI probe → 映射 BAR
- 构建
plat_stmmacenet_data(较固定) - 同样调用
stmmac_dvr_probe()
Intel 专用:dwmac-intel.c + dwmac-intel-plat.c。
7. 电源管理
Platform glue 通常注册:
1 |
|
或通过 dev_pm_ops 委托给 stmmac_suspend/resume(),内部处理 DMA stop、PHY、时钟。
8. UIO 变体
stmmac_uio.c(CONFIG_STMMAC_UIO):
- 将 MAC 暴露给 DPDK 等用户态
- 绕过内核 netdev 数据路径
- 默认更大 ring(1024)
9. RK3588 详见
Rockchip 专用逻辑见 11-dwmac-rockchip-RK3588.md。
10. 新增 Platform 检查清单
- DTS binding 文档
- 时钟/复位/电源域
-
phy-mode与 GRF 引脚配置 - MAC 地址来源(DT / OTP / 随机)
-
has_gmac4或has_xgmac正确设置 - Kconfig + Makefile 注册
- 调用
stmmac_dvr_probe/stmmac_dvr_remove
正在加载留言…