主题中讨论的其他器件:AM5728、 AM3352
为了使用 AM5947向定制板添加额外的网络接口、我们考虑使用外部以太网交换机 KSZ9896。
从 KSZ9897数据表中:
KSZ9897R 是一款七端口管理型千兆位以太网交换机。 它具有五个10BASE-Te/100BASE-TX/1000BASE-T 物理层收发器(PHY)和相关 MAC 单元、以及两个具有可单独配置的 RGMII/MII/RMII 接口的 MAC 端口。
这两个端口可用于直接连接主机微处理器或微控制器、另一个以太网交换机或以太网 PHY。"
KSZ9896是同一器件、但只有一个 MAC 端口 可配置 RGMII/MII/RMII 接口。
为了评估板上的 KSZ9897、 已将开发板 (EVB-KSZ9897)连接到定制板、以替换 Marvell 以太网千兆 PHY 88E1510 (mac0)中的一个。
硬件更改
KSZ9897可通过三条不同的总线连接到 CPU SoC:I2C、SPI 和 MDIO (除了 RGMII 总线)。 但一次只能使用其中一个。
为了简化硬件更换、KSZ9897与 SPI 总线(SPI1)相连。
但对于最终的定制板、首选 MDIO 总线。
定制板的 RGMII0总线连接到 EVB-KSZ9897上的 RGMII 端口6 (取代 EVB-KSZ9897上的 KSZ9031器件)。
定制板的 SPI1总线连接到 EVB-KSZ9897上的 SPI 总线、 EVB-KSZ9897上的自举开关(SW4)必须处于"关闭"设置(以启用 SPI 接口)。
EVB-KSZ9897必须由其自己的电源链供电。
KSZ9897 devicetree 绑定
devicetree 绑定已经针对 ksz 器 件进行了标准化、但在发布此提交的内核4.19之前添加了对 KSZ9897的支持。
它需要在控制器板 devicetree 上添加和启用 SPI1。 我们可以添加 mcp23s08 devicetree 节点来检查 SPI 总线是否正常工作(因为它是一个简单/基本的器件)。
mcspi1{(&M)
状态="正常";
/* SPI1仅使用 cs0、CS1和 CS2 */
TI、SPI-num-cs =<3>;
gpio1:GPIO@1{
兼容="微芯片、mcp23s08";
GPIO 控制器;
#GPIO-cells =<2>;
Microchip、SPI-Present 掩码=<0x1>;
reg =<1>;
SPI-max-frequency =<1000000>;
};
};
通过这一点、我们可以在 dmesg 中看到:
# dmesg | grep spi
[3.190319] OMAP2_mcspi 480980.SPI:注册主器件 SPI1
[3.190432] SPI spi1.0:设置:速度24000000、样本后缘、clk 反转
[3.190445] SPI spi1.0:设置模式3、8位/w、44000000 Hz 最大值--> 0
[3.190618] OMAP2_mcspi 480980.SPI:注册的儿童 spi1.0
[9.288140] gpiochip_find_base:找到新的基址为504
[9.288466] GPIO gpiochip8:(mcp23s08.0):添加了 GPIO 特性(254:8)
[9.288619] gpiochip_setup_dev:在器件上注册了 GPIO 504至511:gpiochip8 (mcp23s08.0)
在 SPI 侧添加 KSZ9897 devicetree 节点(未完成)可检测器件:
ksz9897: switch@0{ compatible = "microchip,ksz9897"; reg = <0>; spi-cpha; spi-cpol; phy-mode = "rgmii-rxid"; spi-max-frequency = <44000000>; ethernet-ports { #address-cells = <1>; #size-cells = <0>; port@0{ reg = <0>; label = "lan1"; // local-mac-address = [00 00 00 00 00 00]; }; port@1{ reg = <1>; label = "lan2"; }; port@2{ reg = <2>; label = "lan3"; }; port@3{ reg = <3>; label = "lan4"; }; port@4{ reg = <4>; label = "lan5"; }; port@5{ reg = <5>; label = "cpu"; ethernet = <&cpsw_emac0>; // probably wrong should be something like "mac: ethernet@48484000" but how to select one of the two cpsw_emac ? phy-mode = "rgmii-id"; fixed-link { speed = <1000>; full-duplex; }; }; };}; |
# dmesg | grep spi
[3.190319] OMAP2_mcspi 480980.SPI:注册主器件 SPI1
[3.190432] SPI spi1.0:设置:速度24000000、样本后缘、clk 反转
[3.190445] SPI spi1.0:设置模式3、8位/w、44000000 Hz 最大值--> 0
[3.190618] OMAP2_mcspi 480980.SPI:注册的儿童 spi1.0
[3.190645] SPI spi1.1:设置:速度1000000、采样前沿、clk 正常
[3.190657] SPI spi1.1:设置模式0、8位/w、1000000 Hz 最大值--> 0
[3.190821] OMAP2_mcspi 480980.SPI:注册的儿童 spi1.1
spi1.1上有一些内容(我们可以使用 spidev 驱动程序进行测试)、但其他任何驱动 程序都不使用该驱动程序(我们期望使用 ksz9477_spi.ko 驱动程序)。
您可以看到、KSZ9897端口5和 cpsw mac0之间的链接无法轻松描述。
在其他示例中、没有模糊之处、因为只有一个 Mac。
事实上、TI CPSW 本身就是以太网交换机。
让我们看看我们是否可以为定制板更改 cpsw devicetree。
TI CPSW (TI SoC 以太网交换机控制器)
TI Sitara AM57xx 使用 TI 的 IP 来提供两个千兆位以太网接口。 此 IP 使用具有标准化 devicetree 绑定的上游内核驱动程序。
下面的提取显示了具有两个"从器件"的 CPSW devicetree 节点、每个 EMAC 一个从器件。
mac: ethernet@48484000{ compatible = "ti,dra7-cpsw","ti,cpsw"; ... davinci_mdio: mdio@48485000{ compatible = "ti,cpsw-mdio","ti,davinci_mdio"; ... }; cpsw_emac0: slave@48480200{ ... }; cpsw_emac1: slave@48480300{ ... }; ...}; |
Mac 节点 cpsw_emac0 和 cpsw_emac1节点已完成、并已从特定于控制器板的 devicetree 中启用:
&mac { status = "okay"; dual_emac;};&cpsw_emac0 { phy_id = <&davinci_mdio>, <0>; phy-mode = "rgmii"; dual_emac_res_vlan = <1>;};&cpsw_emac1 { phy_id = <&davinci_mdio>, <1>; phy-mode = "rgmii"; dual_emac_res_vlan = <2>;}; |
实际的 devicetree 绑定的问题是 KSZ9897绑定期望直接使用以太网控制器"Mac:以太网@48484000"的节点。
但 KSZ9897绑定未指定从器件的处理。
此外、TI CPSW 预计会使用 MDIO 总线连接 PHY、而不是 SPI 总线。
对 TI 论坛进行了一些研究后、TI 和 CPSW 驱动程序似乎不支持我们要实现的目标、至少对于 AM3352和 AM5728:
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/649924/am3352-ethernet-switch-with-rmii-interface
"TI 在 Sitara 器件的 CPSW 上不支持 MAC 至 MAC 配置。"
"RMII 规范将接口定义为 MAC 至 PHY、因此 Sitara SoC MAC 不在 MAC 至 MAC 拓扑中进行测试或表征。 这适用于软件和硬件。"
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/711394/linux-am5728-mac-to-external-switch
"TI 不支持将 EMAC 连接到外部交换机的用例。 抱歉、我们无法就此问题提供帮助。"
https://github.com/Microchip-Ethernet/UNG8071/blob/master/KSZ/kernels/linux-3.18/drivers/net/ethernet/cadence/macb.c
"SOC MAC 驱动程序需要进行一些修改。 如需参考、请参阅 macb 驱动程序(Atmel SAMA5 SOC Mac 驱动程序)。"
https://github.com/Microchip-Ethernet/EVB-KSZ9477/tree/master/KSZ/linux-drivers/ksz9897/linux-5.3/drivers/net/ethernet
"内核4.9、4.19、5.3的微芯片攻击驱动程序、但仅适用于某些供应商:Cadence、Freescale、Micrel
DSA (分布式交换机架构)理解
在网络设备(netdev)的公共 Linux 内核邮件列表中、讨论 了带有 AM572x CPU (cpsw IP/驱动程序)和 KSZ9897以太网交换机的 DSA 交换机。
这是有关此类设置的潜在问题的良好信息来源。
它展示了如何修改 devicetree、配置网络接口和使用 ethtool 分析网络统计信息。
最后、用户(在修补/黑客攻击其内核之后)似乎(未确认)能够使用以太网交换机。
至少我们应该能够在定制板上执行相同的步骤。
原型的硬件问题
在测试期间、我们发现了硬件问题。
-电源问题。 绿色(电源)指示灯闪烁、以太网交换机设备真的很热。 3、3V 电源(1、5A)的功耗较高。
这是因为 Microchip 评估板上的屏幕打印有误导性。
在绝对最大额定值范围内、3、3V 电源被长时间(几个小时)连接至1、2V DVDDL。
在调查此问题时、从电路板上移除了多个器件(主要是 LAN7801和 KSZ9031以及一些电阻器)。
- TXC (RGMII)已断开连接(电缆损坏)
以太网交换机和 CPU 之间的链路需要添加一些电缆来将每个 MAC 连接在一起。 其中一根电缆(TXC)损坏。
结论
总结:
- CPSW Linux 驱动程序/devicetree 似乎不支持 MAC 到 MAC、但 有几个(成功?) 尝试。
-硬件问题可能会损坏主板。
我们所做的修改似乎是正确的吗? 我们是否还必须进行其他修改才能允许使用此以太网交换机?