mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 06:09:23 -04:00
Merge "net: stmmac: LPM link detection fix"
This commit is contained in:
commit
775a517fca
2 changed files with 42 additions and 2 deletions
|
|
@ -899,6 +899,8 @@ static void ethqos_pps_irq_config(struct qcom_ethqos *ethqos)
|
|||
|
||||
static void qcom_ethqos_phy_suspend_clks(struct qcom_ethqos *ethqos)
|
||||
{
|
||||
struct stmmac_priv *priv = qcom_ethqos_get_priv(ethqos);
|
||||
|
||||
ETHQOSINFO("Enter\n");
|
||||
|
||||
if (phy_intr_en)
|
||||
|
|
@ -908,6 +910,18 @@ static void qcom_ethqos_phy_suspend_clks(struct qcom_ethqos *ethqos)
|
|||
|
||||
ethqos_update_rgmii_clk_and_bus_cfg(ethqos, 0);
|
||||
|
||||
if (priv->plat->stmmac_clk)
|
||||
clk_disable_unprepare(priv->plat->stmmac_clk);
|
||||
|
||||
if (priv->plat->pclk)
|
||||
clk_disable_unprepare(priv->plat->pclk);
|
||||
|
||||
if (priv->plat->clk_ptp_ref)
|
||||
clk_disable_unprepare(priv->plat->clk_ptp_ref);
|
||||
|
||||
if (ethqos->rgmii_clk)
|
||||
clk_disable_unprepare(ethqos->rgmii_clk);
|
||||
|
||||
ETHQOSINFO("Exit\n");
|
||||
}
|
||||
|
||||
|
|
@ -933,8 +947,22 @@ inline bool qcom_ethqos_is_phy_link_up(struct qcom_ethqos *ethqos)
|
|||
|
||||
static void qcom_ethqos_phy_resume_clks(struct qcom_ethqos *ethqos)
|
||||
{
|
||||
struct stmmac_priv *priv = qcom_ethqos_get_priv(ethqos);
|
||||
|
||||
ETHQOSINFO("Enter\n");
|
||||
|
||||
if (priv->plat->stmmac_clk)
|
||||
clk_prepare_enable(priv->plat->stmmac_clk);
|
||||
|
||||
if (priv->plat->pclk)
|
||||
clk_prepare_enable(priv->plat->pclk);
|
||||
|
||||
if (priv->plat->clk_ptp_ref)
|
||||
clk_prepare_enable(priv->plat->clk_ptp_ref);
|
||||
|
||||
if (ethqos->rgmii_clk)
|
||||
clk_prepare_enable(ethqos->rgmii_clk);
|
||||
|
||||
if (qcom_ethqos_is_phy_link_up(ethqos))
|
||||
ethqos_update_rgmii_clk_and_bus_cfg(ethqos, ethqos->speed);
|
||||
else
|
||||
|
|
|
|||
|
|
@ -4806,6 +4806,11 @@ int stmmac_suspend(struct device *dev)
|
|||
|
||||
phylink_mac_change(priv->phylink, false);
|
||||
|
||||
#ifdef CONFIG_DWMAC_QCOM_ETHQOS
|
||||
rtnl_lock();
|
||||
phylink_stop(priv->phylink);
|
||||
rtnl_unlock();
|
||||
#endif
|
||||
mutex_lock(&priv->lock);
|
||||
|
||||
netif_device_detach(ndev);
|
||||
|
|
@ -4825,9 +4830,11 @@ int stmmac_suspend(struct device *dev)
|
|||
priv->irq_wake = 1;
|
||||
} else {
|
||||
mutex_unlock(&priv->lock);
|
||||
#ifndef CONFIG_DWMAC_QCOM_ETHQOS
|
||||
rtnl_lock();
|
||||
phylink_stop(priv->phylink);
|
||||
rtnl_unlock();
|
||||
#endif
|
||||
mutex_lock(&priv->lock);
|
||||
|
||||
stmmac_mac_set(priv, priv->ioaddr, false);
|
||||
|
|
@ -4925,13 +4932,18 @@ int stmmac_resume(struct device *dev)
|
|||
stmmac_start_all_queues(priv);
|
||||
|
||||
mutex_unlock(&priv->lock);
|
||||
|
||||
#ifndef CONFIG_DWMAC_QCOM_ETHQOS
|
||||
if (!device_may_wakeup(priv->device)) {
|
||||
rtnl_lock();
|
||||
phylink_start(priv->phylink);
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
#endif
|
||||
#ifdef CONFIG_DWMAC_QCOM_ETHQOS
|
||||
rtnl_lock();
|
||||
phylink_start(priv->phylink);
|
||||
rtnl_unlock();
|
||||
#endif
|
||||
phylink_mac_change(priv->phylink, true);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue