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间接配置。

判断PCS位置的方法:查看设备树中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可分配协议典型板级连接
SD1Lane0SGMII / 1000BASE-XRJ45 + 1G PHY
SD1Lane1SGMII / 1000BASE-XRJ45 + 1G PHY
SD2Lane0-3XAUI / 10GBASE-RSFP+ 光模块
SD3Lane0-1PCIe / SATAM.2 或 SATA 连接器

注意:上表为典型示例,实际分配取决于RCW和板级设计。在LS1088A上,SerDes块数量与LS1046A相同,但部分lane可能默认分配给PCIe或SATA,需要在RCW中显式切换为以太网协议。

五、典型板级连接与信号链

以LS1046A + 10G SFP+ + 1G RJ45的典型板卡为例,信号链如下:

LS1046A 以太网子系统信号链(典型板级连接) 内核网络栈 ECAM 寄存器/统计/MDIO MAC 帧收发/流控/VLAN PCS 64b/66b/对齐/训练 SerDes Lane SFP+ 光模块 1G PHY RJ45 MDIO 管理总线 软件可见 控制器入口 数据面 编码层 物理层 关键映射关系: 1. ECAM 为每个 MAC 提供独立寄存器空间,包含 MDIO 与 PCS 控制入口。 2. MDIO 通过管理总线读写外部 PHY/PCS 寄存器,不承载业务数据。 3. PCS 负责 64b/66b 编解码与链路训练,可位于 SoC 内部或外部 PHY。 4. SerDes lane 由 RCW 分配协议,同一 lane 不可同时用于以太网与 PCIe。

从图中可以看到,MDIO是横向的管理总线,而数据流是纵向的“内核→ECAM→MAC→PCS→SerDes→连接器”。两者在ECAM处交汇:ECAM既提供MAC的数据寄存器,也提供MDIO和PCS的控制寄存器。

六、实操检查要点

在实际板级调试中,建议按以下顺序检查:

  1. 确认RCW中SerDes协议分配与板级原理图一致。若RCW将某lane配为PCIe,而板级走线是SGMII,则链路必然不通。
  2. 通过mdio-tool或ethtool扫描MDIO总线,确认PHY地址与phy-handle匹配。
  3. 检查phy-mode是否与PCS位置匹配。若PCS在SoC内部,phy-mode应设为usxgmii或10gbase-r;若在外部PHY,则设为sgmii或1000base-x。
  4. 使用ethtool -S eth0查看PCS层统计,如rx_errors、tx_errors、link_status,判断链路是否稳定。
  5. 若链路频繁up/down,优先检查SerDes均衡参数和参考时钟,而非MAC配置。
注意:LS1046A与LS1088A的SerDes块编号和lane分配在RCW中定义,不同板卡可能完全不同。切勿直接套用其他板卡的RCW配置,必须以本板原理图和芯片参考手册为准。