diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c index afadf7232079..8bbe9e3cd436 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c @@ -1464,6 +1464,8 @@ err_out: 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) @@ -1473,6 +1475,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"); } @@ -1498,8 +1512,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