2. LS1046A/LS1088A以太网子系统拆解
在LS1046A与LS1088A这类Layerscape处理器上,以太网数据面并不是“一个MAC接一个PHY”这么简单。它由ECAM、MDIO、PCS、MAC以及SerDes通道共同构成一条从内核网络栈到板级连接器的完整链路。理解这条链路的层次与映射关系,是后续做DPAA、MAC配置、PCS调优和SerDes lane规划的基础。
一、从内核到连接器:五层对象的分工
先建立整体视角。LS1046A/LS1088A的以太网子系统可以按“软件可见—控制器—物理编码—串行通道—板级器件”划分为五层:
- ECAM(Ethernet Controller and Management):位于SoC内部,是MAC控制器与管理系统(MDIO、PCS、统计、时钟)的寄存器集合入口。Linux中通过
fsl_enetc驱动访问,ECAM负责把MAC、MDIO、PCS等子模块组织成可枚举的以太网控制器实例。 - MDIO:管理数据接口,用于读写外部PHY或PCS芯片的寄存器。LS1046A/LS1088A通常提供多组MDIO总线,每组可挂多个PHY地址。
- PCS(Physical Coding Sublayer):物理编码子层,负责64b/66b编解码、对齐、链路训练、自协商等。在10G/25G场景中,PCS通常与SerDes配合,决定链路能否up。
- MAC:媒体访问控制层,负责帧收发、流控、VLAN、校验和卸载等。每个MAC对应一个网络接口(如
eth0、eth1)。 - SerDes通道:高速串行收发器,每个通道(lane)可独立配置速率、协议和极性。LS1046A有4个SerDes块,LS1088A有4个SerDes块,每块4 lane,共16 lane。
这五层不是并列关系,而是“软件→控制器→编码→串行→板级”的纵向依赖。任何一层配置错误,都会导致链路无法建立或性能异常。
二、ECAM与MAC的映射关系
ECAM在LS1046A/LS1088A中并不是一个单独的硬件模块,而是对以太网相关寄存器空间的统一编址。每个MAC实例在ECAM中有一组基地址,包含MAC寄存器、MDIO寄存器、PCS寄存器以及统计计数器。以LS1046A为例,典型映射如下(示例地址,具体以芯片参考手册为准):
ECAM 基地址示例(LS1046A):
ENETC0: 0x01F_0000_0000 -> MAC0 + MDIO0 + PCS0
ENETC1: 0x01F_0000_2000 -> MAC1 + MDIO1 + PCS1
ENETC2: 0x01F_0000_4000 -> MAC2 + MDIO2 + PCS2
ENETC3: 0x01F_0000_6000 -> MAC3 + MDIO3 + PCS3
在设备树中,这些实例通过compatible = "fsl,ls1046a-enetc"或"fsl,ls1088a-enetc"描述,每个节点包含reg、interrupts、phy-handle、phy-mode等属性。驱动加载后,内核会为每个MAC创建net_device,并通过ethtool -i可以查看驱动与总线信息。
三、MDIO与PCS的协作
MDIO是“管理面”,PCS是“数据面编码层”。两者经常被混淆,但职责完全不同:MDIO负责读写PHY/PCS芯片的寄存器,PCS负责实际的高速串行编码。在LS1046A/LS1088A中,PCS可以集成在SoC内部(如10G PCS),也可以外置在PHY芯片中。
典型操作流程是:先通过MDIO扫描总线,确认PHY地址;再通过MDIO读取PHY的MII_BMSR、MII_ADVERTISE等寄存器,判断链路状态和自协商能力;最后根据phy-mode(如10gbase-r、sgmii、usxgmii)配置PCS。如果PCS在SoC内部,则通过ECAM中的PCS寄存器直接配置;如果PCS在外部PHY中,则通过MDIO间接配置。
phy-mode与phy-handle。若phy-handle指向外部PHY且phy-mode为10gbase-r,则PCS通常在PHY内部;若phy-mode为usxgmii且无外部PHY,则PCS在SoC内部。四、SerDes通道映射与板级连接
SerDes通道是连接MAC/PCS与板级连接器的物理通道。LS1046A/LS1088A的SerDes通道可以灵活分配给不同协议,但分配关系由RCW(Reset Configuration Word)和SerDes协议寄存器决定。典型映射如下:
| SerDes块 | Lane | 可分配协议 | 典型板级连接 |
|---|---|---|---|
| SD1 | Lane0 | SGMII / 1000BASE-X | RJ45 + 1G PHY |
| SD1 | Lane1 | SGMII / 1000BASE-X | RJ45 + 1G PHY |
| SD2 | Lane0-3 | XAUI / 10GBASE-R | SFP+ 光模块 |
| SD3 | Lane0-1 | PCIe / SATA | M.2 或 SATA 连接器 |
注意:上表为典型示例,实际分配取决于RCW和板级设计。在LS1088A上,SerDes块数量与LS1046A相同,但部分lane可能默认分配给PCIe或SATA,需要在RCW中显式切换为以太网协议。
五、典型板级连接与信号链
以LS1046A + 10G SFP+ + 1G RJ45的典型板卡为例,信号链如下:
从图中可以看到,MDIO是横向的管理总线,而数据流是纵向的“内核→ECAM→MAC→PCS→SerDes→连接器”。两者在ECAM处交汇:ECAM既提供MAC的数据寄存器,也提供MDIO和PCS的控制寄存器。
六、实操检查要点
在实际板级调试中,建议按以下顺序检查:
- 确认RCW中SerDes协议分配与板级原理图一致。若RCW将某lane配为PCIe,而板级走线是SGMII,则链路必然不通。
- 通过
mdio-tool或ethtool扫描MDIO总线,确认PHY地址与phy-handle匹配。 - 检查
phy-mode是否与PCS位置匹配。若PCS在SoC内部,phy-mode应设为usxgmii或10gbase-r;若在外部PHY,则设为sgmii或1000base-x。 - 使用
ethtool -S eth0查看PCS层统计,如rx_errors、tx_errors、link_status,判断链路是否稳定。 - 若链路频繁up/down,优先检查SerDes均衡参数和参考时钟,而非MAC配置。