Commit c5c0714e authored by Claudiu Beznea's avatar Claudiu Beznea Committed by Paolo Abeni
Browse files

net: ravb: Assert/de-assert reset on suspend/resume



RZ/G3S can go to deep sleep states where power to most of the SoC parts is
off. When resuming from such a state, the Ethernet controller needs to be
reinitialized. De-asserting the reset signal for it should also be done.
Thus, add reset assert/de-assert on suspend/resume functions.

On the resume function, the de-assert was not reverted in case of failures
to give the user a chance to restore the interface (e.g., bringing down/up
the interface) in case suspend/resume failed.

Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: default avatarSergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 7493bb4c
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -2978,7 +2978,7 @@ static int ravb_suspend(struct device *dev)
	int ret;

	if (!netif_running(ndev))
		return 0;
		goto reset_assert;

	netif_device_detach(ndev);

@@ -2990,7 +2990,11 @@ static int ravb_suspend(struct device *dev)
	if (priv->info->ccc_gac)
		ravb_ptp_stop(ndev);

	if (priv->wol_enabled)
		return ret;

reset_assert:
	return reset_control_assert(priv->rstc);
}

static int ravb_resume(struct device *dev)
@@ -2998,7 +3002,11 @@ static int ravb_resume(struct device *dev)
	struct net_device *ndev = dev_get_drvdata(dev);
	struct ravb_private *priv = netdev_priv(ndev);
	const struct ravb_hw_info *info = priv->info;
	int ret = 0;
	int ret;

	ret = reset_control_deassert(priv->rstc);
	if (ret)
		return ret;

	/* If WoL is enabled set reset mode to rearm the WoL logic */
	if (priv->wol_enabled) {