diff options
author | Russell King <rmk+kernel@armlinux.org.uk> | 2017-12-01 10:24:21 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-12-05 11:16:17 -0500 |
commit | cf4f267534e29c53cfdd92d8811168d5d34af80f (patch) | |
tree | 71bf5b741b0af2c5acd3b6630e0a9cf08367edd2 /drivers | |
parent | 365c1e64ad4831f3d1806ff3d7771839ec5eeb6b (diff) | |
download | linux-stable-cf4f267534e29c53cfdd92d8811168d5d34af80f.tar.gz linux-stable-cf4f267534e29c53cfdd92d8811168d5d34af80f.tar.bz2 linux-stable-cf4f267534e29c53cfdd92d8811168d5d34af80f.zip |
phylink: merge SGMII and 802.3z handling
The code handling SGMII and 802.3z is essentially the same, except that
we assume 802.3z has no PHY. Re-organise the code such that these cases
are merged, and exclude 802.3z mode from having a PHY attached. This
results in the same link handling behaviour as before.
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/phy/phylink.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index a02d67689d6e..d7006fdc8f71 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -423,6 +423,7 @@ static void phylink_resolve(struct work_struct *w) break; case MLO_AN_SGMII: + case MLO_AN_8023Z: phylink_get_mac_state(pl, &link_state); if (pl->phydev) { bool changed = false; @@ -448,10 +449,6 @@ static void phylink_resolve(struct work_struct *w) } } break; - - case MLO_AN_8023Z: - phylink_get_mac_state(pl, &link_state); - break; } } @@ -656,6 +653,10 @@ int phylink_connect_phy(struct phylink *pl, struct phy_device *phy) { int ret; + if (WARN_ON(pl->link_an_mode == MLO_AN_FIXED || + pl->link_an_mode == MLO_AN_8023Z)) + return -EINVAL; + ret = phy_attach_direct(pl->netdev, phy, 0, pl->link_interface); if (ret) return ret; @@ -674,8 +675,9 @@ int phylink_of_phy_connect(struct phylink *pl, struct device_node *dn) struct phy_device *phy_dev; int ret; - /* Fixed links are handled without needing a PHY */ - if (pl->link_an_mode == MLO_AN_FIXED) + /* Fixed links and 802.3z are handled without needing a PHY */ + if (pl->link_an_mode == MLO_AN_FIXED || + pl->link_an_mode == MLO_AN_8023Z) return 0; phy_node = of_parse_phandle(dn, "phy-handle", 0); @@ -850,13 +852,13 @@ int phylink_ethtool_ksettings_get(struct phylink *pl, break; case MLO_AN_SGMII: + case MLO_AN_8023Z: /* If there is a phy attached, then use the reported * settings from the phy with no modification. */ if (pl->phydev) break; - case MLO_AN_8023Z: phylink_get_mac_state(pl, &link_state); /* The MAC is reporting the link results from its own PCS |