这是本文档旧的修订版!
CCMP2以太网口设备树片段解读和修改
CCMP25系列开发板使用Marvell的以太网PHY,它的设备树片段位于[https://github.com/digi-embedded/linux/blob/v6.1/stm/dey-4.0/maint_ccmp2-cc91-beta/arch/arm64/boot/dts/digi/ccmp25-dvk.dts|ccmp25-dvk.dts]]
和以太网口有关的设备树片段主要是ð1和ð2,这&表时是对上游的定义的修改,如果溯源的话,eth2可以在stm32mp253.dtsi(该文件由stm32mp255.dtsi引用)里找到原始定义。 eth1则在stm32mp251.dtsi中。
我们再看看和STM32MP257 EVK板子的设备树,这是使用Realtec的PHY芯片,文件在:stm32mp257f-ev1.dts, 它的源定义同样是stm32mp253.dtsi,而eth2的源定义同样位于stm32mp251.dtsi内。
因此Digi开发板和ST的EVK板子的以太网口源定义同源。修改部分在相应的板级设备树上。
需要注意的是,如是是用stm32mp257,支持三个以太网口,它大概是switch0这个节点定义的,这个定义在stm32mp257.dtsi中. 对于Digi MP255的开发板设备树,它只添加stm32mp255.dtsi,所以如果使用的是Digi ConnectCore MP257的模块,可以相应地把设备树引用文件换成stm32mp257.dtsi。因为对ST的不同型号,高阶功能的片子设备树dtsi文件会引用低层级的芯片设备树dtsi文件。所以只需添加最高阶的dtsi即可。
ð1 {
status = "okay";
pinctrl-0 = <ð1_rgmii_pins_a ð1_mdio_pins_a>;
pinctrl-1 = <ð1_rgmii_sleep_pins_a ð1_mdio_sleep_pins_a>;
pinctrl-names = "default", "sleep";
phy-mode = "rgmii-id";
max-speed = <1000>;
phy-handle = <&phy1_eth1>;
snps,ext-systime;
/* ETH1 connected to the mdio bus ETH1_MDIO */
mdio1 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "snps,dwmac-mdio";
phy1_eth1: ethernet-phy@0 {
compatible = "ethernet-phy-id0141.0dd0"; /* PHY ID for Marvell 88E1512 */
reset-gpios = <&gpiob 2 GPIO_ACTIVE_LOW>; /* ETH1_RST */
reset-assert-us = <1000>;
reset-deassert-us = <2000>;
reg = <0>;
};
};
};
ð2 {
status = "okay";
pinctrl-0 = <ð2_rgmii_pins_a>;
pinctrl-names = "default";
phy-mode = "rgmii-id";
max-speed = <1000>;
phy-handle = <&phy1_eth2>;
st,eth-ptp-from-rcc;
/* ETH2 connected to mdio bus ETH2_MDIO */
mdio1 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "snps,dwmac-mdio";
phy1_eth2: ethernet-phy@1 {
compatible = "ethernet-phy-id0141.0dd0"; /* PHY ID for Marvell 88E1512 */
reset-gpios = <&gpiog 6 GPIO_ACTIVE_LOW>; /* ETH2_RST */
reset-assert-us = <1000>;
reset-deassert-us = <2000>;
reg = <1>;
};
};
};