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: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Claudiu Beznea 2024-02-02 10:41:27 +02:00 committed by Paolo Abeni
parent 7493bb4c40
commit c5c0714e29

View File

@ -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);
return ret;
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) {