net: stmmac: sun8i: force select external PHY when no internal one
authorIcenowy Zheng <icenowy@aosc.io>
Thu, 20 Jun 2019 13:47:44 +0000 (15:47 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Jun 2019 20:25:11 +0000 (13:25 -0700)
The PHY selection bit also exists on SoCs without an internal PHY; if it's
set to 1 (internal PHY, default value) then the MAC will not make use of
any PHY on such SoCs.

This problem appears when adapting for H6, which has no real internal PHY
(the "internal PHY" on H6 is not on-die, but on a co-packaged AC200 chip,
connected via RMII interface at GPIO bank A).

Force the PHY selection bit to 0 when the SOC doesn't have an internal PHY,
to address the problem of a wrong default value.

Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
Signed-off-by: Ondrej Jirman <megous@megous.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c

index c3e94104474ff43708d1e2f43d6382c1f3f282a5..6d5cba4075eb2b83bf5fe5a9f69fff7c5efea7c8 100644 (file)
@@ -898,6 +898,11 @@ static int sun8i_dwmac_set_syscon(struct stmmac_priv *priv)
                 * address. No need to mask it again.
                 */
                reg |= 1 << H3_EPHY_ADDR_SHIFT;
+       } else {
+               /* For SoCs without internal PHY the PHY selection bit should be
+                * set to 0 (external PHY).
+                */
+               reg &= ~H3_EPHY_SELECT;
        }
 
        if (!of_property_read_u32(node, "allwinner,tx-delay-ps", &val)) {