Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1419858
| From | Vincent Palatin <vpalatin@chromium.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 2/3] net: stmmac: dwmac-rk: keep the PHY up for WoL |
| Date | 2016-06-11 03:10 +0200 |
| Message-ID | <rIFAZ-4Nk-9@gated-at.bofh.it> (permalink) |
| References | <rItJw-4w2-25@gated-at.bofh.it> <rIFAZ-4Nk-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
When suspending the machine, do not shutdown the external PHY by cutting
its regulator in the mac platform driver suspend code if Wake-on-Lan is enabled,
else it cannot wake us up.
In order to do this, split the suspend/resume callbacks from the
init/exit callbacks, so we can condition the power-down on the lack of
need to wake-up from the LAN but do it unconditionally when unloading the
module.
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
---
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 49 +++++++++++++++++++++++---
1 file changed, 44 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
index 0cd3ecf..fa05771 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
@@ -46,6 +46,7 @@ struct rk_priv_data {
struct platform_device *pdev;
int phy_iface;
struct regulator *regulator;
+ bool powered_down;
const struct rk_gmac_ops *ops;
bool clk_enabled;
@@ -529,9 +530,8 @@ static struct rk_priv_data *rk_gmac_setup(struct platform_device *pdev,
return bsp_priv;
}
-static int rk_gmac_init(struct platform_device *pdev, void *priv)
+static int rk_gmac_powerup(struct rk_priv_data *bsp_priv)
{
- struct rk_priv_data *bsp_priv = priv;
int ret;
ret = phy_power_on(bsp_priv, true);
@@ -542,15 +542,52 @@ static int rk_gmac_init(struct platform_device *pdev, void *priv)
if (ret)
return ret;
+ bsp_priv->powered_down = true;
+
return 0;
}
-static void rk_gmac_exit(struct platform_device *pdev, void *priv)
+static void rk_gmac_powerdown(struct rk_priv_data *gmac)
{
- struct rk_priv_data *gmac = priv;
-
phy_power_on(gmac, false);
gmac_clk_enable(gmac, false);
+ gmac->powered_down = true;
+}
+
+static int rk_gmac_init(struct platform_device *pdev, void *priv)
+{
+ struct rk_priv_data *bsp_priv = priv;
+
+ return rk_gmac_powerup(bsp_priv);
+}
+
+static void rk_gmac_exit(struct platform_device *pdev, void *priv)
+{
+ struct rk_priv_data *bsp_priv = priv;
+
+ rk_gmac_powerdown(bsp_priv);
+}
+
+static void rk_gmac_suspend(struct platform_device *pdev, void *priv)
+{
+ struct rk_priv_data *bsp_priv = priv;
+
+ /* Keep the PHY up if we use Wake-on-Lan. */
+ if (device_may_wakeup(&pdev->dev))
+ return;
+
+ rk_gmac_powerdown(bsp_priv);
+}
+
+static void rk_gmac_resume(struct platform_device *pdev, void *priv)
+{
+ struct rk_priv_data *bsp_priv = priv;
+
+ /* The PHY was up for Wake-on-Lan. */
+ if (!bsp_priv->powered_down)
+ return;
+
+ rk_gmac_powerup(bsp_priv);
}
static void rk_fix_speed(void *priv, unsigned int speed)
@@ -591,6 +628,8 @@ static int rk_gmac_probe(struct platform_device *pdev)
plat_dat->init = rk_gmac_init;
plat_dat->exit = rk_gmac_exit;
plat_dat->fix_mac_speed = rk_fix_speed;
+ plat_dat->suspend = rk_gmac_suspend;
+ plat_dat->resume = rk_gmac_resume;
plat_dat->bsp_priv = rk_gmac_setup(pdev, data);
if (IS_ERR(plat_dat->bsp_priv))
--
2.8.0.rc3.226.g39d4020
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH] net: stmmac: dwmac-rk: keep PHY up for WoL Vincent Palatin <vpalatin@chromium.org> - 2016-06-03 19:30 +0200
Re: [PATCH] net: stmmac: dwmac-rk: keep PHY up for WoL Heiko Stübner <heiko@sntech.de> - 2016-06-06 22:50 +0200
Re: [PATCH] net: stmmac: dwmac-rk: keep PHY up for WoL Vincent Palatin <vpalatin@chromium.org> - 2016-06-06 23:10 +0200
Re: [PATCH] net: stmmac: dwmac-rk: keep PHY up for WoL Giuseppe CAVALLARO <peppe.cavallaro@st.com> - 2016-06-07 09:30 +0200
Re: [PATCH] net: stmmac: dwmac-rk: keep PHY up for WoL Vincent Palatin <vpalatin@chromium.org> - 2016-06-09 00:30 +0200
Re: [PATCH] net: stmmac: dwmac-rk: keep PHY up for WoL Andrew Lunn <andrew@lunn.ch> - 2016-06-09 02:20 +0200
Re: [PATCH] net: stmmac: dwmac-rk: keep PHY up for WoL Vincent Palatin <vpalatin@chromium.org> - 2016-06-10 01:10 +0200
Re: [PATCH] net: stmmac: dwmac-rk: keep PHY up for WoL Giuseppe CAVALLARO <peppe.cavallaro@st.com> - 2016-06-10 14:30 +0200
[PATCH 2/3] net: stmmac: dwmac-rk: keep the PHY up for WoL Vincent Palatin <vpalatin@chromium.org> - 2016-06-11 03:10 +0200
Re: [PATCH 2/3] net: stmmac: dwmac-rk: keep the PHY up for WoL Heiko Stuebner <heiko@sntech.de> - 2016-06-11 04:00 +0200
Re: [PATCH 2/3] net: stmmac: dwmac-rk: keep the PHY up for WoL Vincent Palatin <vpalatin@chromium.org> - 2016-06-15 18:10 +0200
[PATCH v2 0/3] net: stmmac: dwmac-rk: fixes for Wake-on-Lan on RK3288 Vincent Palatin <vpalatin@chromium.org> - 2016-06-15 20:40 +0200
[PATCH v2 2/3] net: stmmac: dwmac-rk: keep the PHY up for WoL Vincent Palatin <vpalatin@chromium.org> - 2016-06-15 20:40 +0200
[PATCH v2 1/3] net: stmmac: allow to split suspend/resume from init/exit callbacks Vincent Palatin <vpalatin@chromium.org> - 2016-06-15 20:40 +0200
[PATCH v2 3/3] ARM: dts: rockchip: add interrupt for Wake-on-Lan on RK3288 Vincent Palatin <vpalatin@chromium.org> - 2016-06-15 20:40 +0200
Re: [PATCH v2 0/3] net: stmmac: dwmac-rk: fixes for Wake-on-Lan on RK3288 David Miller <davem@davemloft.net> - 2016-06-16 23:20 +0200
[PATCH 1/3] net: stmmac: allow to split suspend/resume from init/exit callbacks Vincent Palatin <vpalatin@chromium.org> - 2016-06-11 03:10 +0200
Re: [PATCH 1/3] net: stmmac: allow to split suspend/resume from init/exit callbacks David Miller <davem@davemloft.net> - 2016-06-11 03:20 +0200
net: stmmac: dwmac-rk: fixes for Wake-on-Lan on RK3288 Vincent Palatin <vpalatin@chromium.org> - 2016-06-11 03:10 +0200
[PATCH 3/3] ARM: dts: rockchip: add interrupt for Wake-on-Lan on RK3288 Vincent Palatin <vpalatin@chromium.org> - 2016-06-11 03:10 +0200
Re: net: stmmac: dwmac-rk: fixes for Wake-on-Lan on RK3288 David Miller <davem@davemloft.net> - 2016-06-11 03:20 +0200
Re: net: stmmac: dwmac-rk: fixes for Wake-on-Lan on RK3288 Giuseppe CAVALLARO <peppe.cavallaro@st.com> - 2016-06-13 08:50 +0200
Re: net: stmmac: dwmac-rk: fixes for Wake-on-Lan on RK3288 Vincent Palatin <vpalatin@chromium.org> - 2016-06-15 19:10 +0200
Re: net: stmmac: dwmac-rk: fixes for Wake-on-Lan on RK3288 Giuseppe CAVALLARO <peppe.cavallaro@st.com> - 2016-06-16 15:40 +0200
Re: net: stmmac: dwmac-rk: fixes for Wake-on-Lan on RK3288 Vincent Palatin <vpalatin@chromium.org> - 2016-06-16 17:00 +0200
Re: net: stmmac: dwmac-rk: fixes for Wake-on-Lan on RK3288 Giuseppe CAVALLARO <peppe.cavallaro@st.com> - 2016-06-17 07:40 +0200
csiph-web