73 lines
2.1 KiB
Diff
73 lines
2.1 KiB
Diff
|
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
|
||
|
@@ -1717,6 +1717,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;
|
||
|
@@ -1752,6 +1772,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
|
||
|
@@ -1331,7 +1331,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);
|
||
|
@@ -1362,7 +1361,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)
|