-
- diff --git a/arch/arm/boot/dts/sunxi-h3-h5.dtsi b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
- index 4b599b5d26f6..119eed7f51d4 100644
- --- a/arch/arm/boot/dts/sunxi-h3-h5.dtsi
- +++ b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
- @@ -420,11 +420,29 @@
- mdio: mdio {
- #address-cells = <1>;
- #size-cells = <0>;
- - int_mii_phy: ethernet-phy@1 {
- - compatible = "ethernet-phy-ieee802.3-c22";
- + };
- + mdio-mux {
- + compatible = "allwinner,sun8i-h3-mdio-switch";
- + mdio-parent-bus = <&mdio>;
- + #address-cells = <1>;
- + #size-cells = <0>;
- +
- + int_mdio: mdio@1 {
- reg = <1>;
- - clocks = <&ccu CLK_BUS_EPHY>;
- - resets = <&ccu RST_BUS_EPHY>;
- + #address-cells = <1>;
- + #size-cells = <0>;
- + int_mii_phy: ethernet-phy@1 {
- + compatible = "ethernet-phy-ieee802.3-c22";
- + reg = <1>;
- + clocks = <&ccu CLK_BUS_EPHY>;
- + resets = <&ccu RST_BUS_EPHY>;
- + phy-is-integrated;
- + };
- + };
- + ext_mdio: mdio@0 {
- + reg = <0>;
- + #address-cells = <1>;
- + #size-cells = <0>;
- };
- };
- };
- diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
- index a366b3747eeb..4d5e164c830c 100644
- --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
- @@ -312,10 +312,12 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
- static const struct of_device_id need_mdio_ids[] = {
- { .compatible = "snps,dwc-qos-ethernet-4.10" },
- { .compatible = "allwinner,sun8i-a83t-emac" },
- - { .compatible = "allwinner,sun8i-h3-emac" },
- { .compatible = "allwinner,sun8i-v3s-emac" },
- { .compatible = "allwinner,sun50i-a64-emac" },
- };
- + static const struct of_device_id need_mdio_mux_ids[] = {
- + { .compatible = "allwinner,sun8i-h3-emac" },
- + };
-
- /* If phy-handle property is passed from DT, use it as the PHY */
- plat->phy_node = of_parse_phandle(np, "phy-handle", 0);
- @@ -332,7 +334,9 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
- mdio = false;
- }
-
- - if (of_match_node(need_mdio_ids, np)) {
- + if (of_match_node(need_mdio_mux_ids, np)) {
- + plat->mdio_node = of_get_parent(plat->phy_node);
- + } else if (of_match_node(need_mdio_ids, np)) {
- plat->mdio_node = of_get_child_by_name(np, "mdio");
- } else {
- /**
-