您好,NXP团队:
我们正在将Microchip LAN96455F以太网交换机(LAN9645x系列)集成到定制的i.MX95 19x19 LPDDR5板(基于imx95-19x19-evk.dts)上,我希望得到关于正确集成设备树的指导。
对于 Linux,如果您希望 Linux 单独公开/管理外部交换机端口,请将 LAN96455F 建模为DSA 以太网交换机。连接到交换机 CPU/上行链路端口的 i.MX95 ENETC/NETC 以太网 MAC 应该是 DSA通道接口;LAN96455F 端口成为 DSA 用户网络设备。DSA 专为具有连接到 SoC 以太网控制器的专用 CPU 端口的交换机而设计,它为每个前面板创建“用户”界面,而不是为 CPU 端口本身创建单独的网络设备。
一个好的设备树结构是:
/* 将 &enetX / &mdioX 替换为实际使用的 i.MX95 BSP 标签
* 在 imx95-19x19-evk.dts / imx95.dtsi 中,选择您喜欢的 NETC ENETC 端口。
*/
/* i.MX95 ENETC 端口连接到 LAN96455F CPU/上行链路端口 */
&netX {
状态 = "好的"
/* 必须匹配 i.MX95 和 LAN96455F 之间的电气接口:
* "rgmii-id", "rgmii", "sgmii", "2500base-x", 等。
*/
phy-mode = "rgmii-id";
/* MAC 到交换机的 CPU 端口通常是无 PHY 的,因此请对其进行描述
*除非 LAN96455F CPU 端口实际处于固定链路状态,否则不会作为固定链路使用
* 通过 PHY/PCS 进行管理。
*/
固定链接 {
速度 = <1000>
全双工;
};
};
/* MDIO 控制器用于访问交换机管理接口。
* i.MX95 NETC 具有用于外部 PHY 的外部主 MDIO 接口,
*/
&mdioX {
状态 = "好的"
以太网交换机@0 {
/* 使用 LAN9645x 驱动程序/绑定中的兼容字符串
* 已包含在您的内核/BSP 中。不要编造这个字符串。
*/
兼容 = "microchip,
reg = <0>; /* 板上绑定的 MDIO 地址 */
端口 {
#address-cells = <1>
#size-cells = <0>
port@0 {
reg = <0>
标签 = "lan0"
/* 如果此外部端口具有外部 PHY:
* phy-handle =
* phy-mode = "..."
*/
};
port@1 {
reg = <1>
标签 = "lan1"
};
port@2 {
reg = <2>
标签 = "lan2"
};
port@3 {
reg = <3>
标签 = "lan3"
};
/* LAN96455F CPU/上行链路端口号必须与
* Microchip 数据手册/驱动程序定义。
*/
端口@N {
reg =
标签 = "cpu"
以太网 = <&enetX>;
phy-mode = "rgmii-id"
固定链接 {
速度 = <1000>
全双工;
};
};
};
};
};
最终确定DTS之前需要检查的关键点:
出院检查:
dmesg | grep -i -E "dsa|lan964|mdio|enetc|netc"
IP链接
cat /sys/class/net/
ip 链路已设置
ip link set lan0 up
ethtool lan0
如果没有 lanX 接口出现,请按以下顺序进行调试:MDIO 地址/strap 值、重置 GPIO 时序、如果驱动程序需要中断 GPIO、正确的 LAN9645x 兼容、正确的 CPU 端口寄存器以及 i.MX95 和交换机之间的正确 phy 模式/固定链路速度。
使用 i.MX95 ENETC 端口作为 DSA 通道,在 MDIO/SPI 管理总线下使用端口块描述 LAN96455F,并使交换机 CPU 端口指向 ENETC MAC,使用 ethernet = <&enetX> 加上有效的 phy-mode 和 fixed-link / managed / phy-handle。