Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 775a517f authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "net: stmmac: LPM link detection fix"

parents 0db26171 b532c900
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -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
+14 −2
Original line number Diff line number Diff line
@@ -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;