Re: [PATCH v4 4/5] net: stmmac: dwmac-sun8i: choose internal PHY via phy-is-integrated

From: Rob Herring
Date: Thu Aug 31 2017 - 16:18:12 EST


On Sat, Aug 26, 2017 at 11:20:51PM +0200, Andrew Lunn wrote:
> Hi Corentin
>
> I think we have now all agreed this is an mdio-mux, plus it is also an
> MII mux. We should represent that in device tree. This patchset does
> this. However, as it is now, the mux structure in DT is ignored. All
> it does is search for the phy-is-integrated flags and goes on that.
>
> I made the comment that the device tree representation cannot be
> implemented using an MDIO mux driver, because of driver loading
> issues. However, the core of the MDIO mux code is just a library,
> symbols exported as GPL, free for anything to use.
>
> What i think should happen is the mdio-mux is implemented inside the
> MAC driver, using the mux-core as a library. The device tree structure
> of a mix is then reflected within Linux. The mux switch callback is
> implemented within the MAC driver. So it can reset the MAC when the
> mux is switched. The 'phy-is-integrated' property is then no longer
> needed.
>
> I would suggest a binding something like:

This is looks better to me, but...

> emac: ethernet@1c0b000 {
> compatible = "allwinner,sun8i-h3-emac";
> syscon = <&syscon>;
> reg = <0x01c0b000 0x104>;
> interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
> interrupt-names = "macirq";
> resets = <&ccu RST_BUS_EMAC>;
> reset-names = "stmmaceth";
> clocks = <&ccu CLK_BUS_EMAC>;
> clock-names = "stmmaceth";
> #address-cells = <1>;
> #size-cells = <0>;
>
> phy-handle = <&int_mii_phy>;
> phy-mode = "mii";
> allwinner,leds-active-low;
>
> mdio: mdio {
> #address-cells = <1>;
> #size-cells = <0>;
> }

Why do you need this node still?

>
> mdio-mux {
> #address-cells = <1>;
> #size-cells = <0>;
>
> mdio@0 {
> reg = <0>;
> #address-cells = <1>;
> #size-cells = <0>;
>
> int_mii_phy: ethernet-phy@1 {
> reg = <1>;
> clocks = <&ccu CLK_BUS_EPHY>;
> resets = <&ccu RST_BUS_EPHY>;
> };
> };
> ext_mdio: mdio@0 {
> #address-cells = <1>;
> #size-cells = <0>;
>
> ext_rgmii_phy: ethernet-phy@1 {
> reg = <1>;
> };
> };
> };
> };
>
> Andrew