| From e2dc261b872a92a055eb2e86ac136baf9b20f2f2 Mon Sep 17 00:00:00 2001 |
| From: Russell King <rmk+kernel@armlinux.org.uk> |
| Date: Thu, 21 Nov 2019 17:21:33 +0000 |
| Subject: [PATCH 647/660] net: sfp: move phy_start()/phy_stop() to phylink |
| |
| Move phy_start() and phy_stop() into the module_start and module_stop |
| notifications in phylink, rather than having them in the SFP code. |
| This gives phylink responsibility for controlling the PHY, rather |
| than having SFP start and stop the PHY state machine. |
| |
| Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> |
| --- |
| drivers/net/phy/phylink.c | 22 ++++++++++++++++++++++ |
| drivers/net/phy/sfp.c | 2 -- |
| 2 files changed, 22 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/phy/phylink.c |
| +++ b/drivers/net/phy/phylink.c |
| @@ -1772,6 +1772,26 @@ static int phylink_sfp_module_insert(voi |
| return ret; |
| } |
| |
| +static int phylink_sfp_module_start(void *upstream) |
| +{ |
| + struct phylink *pl = upstream; |
| + |
| + /* If this SFP module has a PHY, start the PHY now. */ |
| + if (pl->phydev) |
| + phy_start(pl->phydev); |
| + |
| + return 0; |
| +} |
| + |
| +static void phylink_sfp_module_stop(void *upstream) |
| +{ |
| + struct phylink *pl = upstream; |
| + |
| + /* If this SFP module has a PHY, stop it. */ |
| + if (pl->phydev) |
| + phy_stop(pl->phydev); |
| +} |
| + |
| static void phylink_sfp_link_down(void *upstream) |
| { |
| struct phylink *pl = upstream; |
| @@ -1807,6 +1827,8 @@ static const struct sfp_upstream_ops sfp |
| .attach = phylink_sfp_attach, |
| .detach = phylink_sfp_detach, |
| .module_insert = phylink_sfp_module_insert, |
| + .module_start = phylink_sfp_module_start, |
| + .module_stop = phylink_sfp_module_stop, |
| .link_up = phylink_sfp_link_up, |
| .link_down = phylink_sfp_link_down, |
| .connect_phy = phylink_sfp_connect_phy, |
| --- a/drivers/net/phy/sfp.c |
| +++ b/drivers/net/phy/sfp.c |
| @@ -1412,7 +1412,6 @@ static void sfp_sm_mod_next(struct sfp * |
| |
| static void sfp_sm_phy_detach(struct sfp *sfp) |
| { |
| - phy_stop(sfp->mod_phy); |
| sfp_remove_phy(sfp->sfp_bus); |
| phy_device_remove(sfp->mod_phy); |
| phy_device_free(sfp->mod_phy); |
| @@ -1443,7 +1442,6 @@ static void sfp_sm_probe_phy(struct sfp |
| } |
| |
| sfp->mod_phy = phy; |
| - phy_start(phy); |
| } |
| |
| static void sfp_sm_link_up(struct sfp *sfp) |