net: stmmac: add suspend()/resume() platform ops
Add suspend/resume platform operations, which, when populated, override the init/exit platform operations when we suspend and resume. These suspend()/resume() methods are called by core code, and thus are designed to support any struct device, not just platform devices. This allows them to be used by the PCI drivers we have. Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Link: https://patch.msgid.link/E1ulXbX-008gqZ-Bb@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
c88c6b2db7
commit
07bbbfe7ad
@ -7879,6 +7879,9 @@ int stmmac_suspend(struct device *dev)
|
||||
if (stmmac_fpe_supported(priv))
|
||||
ethtool_mmsv_stop(&priv->fpe_cfg.mmsv);
|
||||
|
||||
if (priv->plat->suspend)
|
||||
return priv->plat->suspend(dev, priv->plat->bsp_priv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(stmmac_suspend);
|
||||
@ -7931,6 +7934,12 @@ int stmmac_resume(struct device *dev)
|
||||
struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
int ret;
|
||||
|
||||
if (priv->plat->resume) {
|
||||
ret = priv->plat->resume(dev, priv->plat->bsp_priv);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!netif_running(ndev))
|
||||
return 0;
|
||||
|
||||
|
||||
@ -901,7 +901,9 @@ static int __maybe_unused stmmac_pltfr_suspend(struct device *dev)
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
|
||||
ret = stmmac_suspend(dev);
|
||||
stmmac_pltfr_exit(pdev, priv->plat);
|
||||
|
||||
if (!priv->plat->suspend)
|
||||
stmmac_pltfr_exit(pdev, priv->plat);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -920,9 +922,11 @@ static int __maybe_unused stmmac_pltfr_resume(struct device *dev)
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
int ret;
|
||||
|
||||
ret = stmmac_pltfr_init(pdev, priv->plat);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (!priv->plat->resume) {
|
||||
ret = stmmac_pltfr_init(pdev, priv->plat);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return stmmac_resume(dev);
|
||||
}
|
||||
|
||||
@ -248,6 +248,8 @@ struct plat_stmmacenet_data {
|
||||
void (*ptp_clk_freq_config)(struct stmmac_priv *priv);
|
||||
int (*init)(struct platform_device *pdev, void *priv);
|
||||
void (*exit)(struct platform_device *pdev, void *priv);
|
||||
int (*suspend)(struct device *dev, void *priv);
|
||||
int (*resume)(struct device *dev, void *priv);
|
||||
struct mac_device_info *(*setup)(void *priv);
|
||||
int (*clks_config)(void *priv, bool enabled);
|
||||
int (*crosststamp)(ktime_t *device, struct system_counterval_t *system,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user