Message ID | 20240214135800.2674435-6-claudiu.beznea.uj@bp.renesas.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | net: ravb: Add runtime PM support (part 2) | expand |
On 2/14/24 4:57 PM, Claudiu wrote: > From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> > > Do not apply features to hardware if the interface is down. In case runtime > PM is enabled, and while the interface is down, the IP will be in reset > mode (as for some platforms disabling the clocks will switch the IP to > reset mode, which will lead to losing register contents) and applying > settings in reset mode is not an option. Instead, cache the features and > apply them in ravb_open() through ravb_emac_init(). > > To avoid accessing the hardware while the interface is down > pm_runtime_active() check was introduced. Along with it the device runtime > PM usage counter has been incremented to avoid disabling the device clocks > while the check is in progress (if any). > > Commit prepares for the addition of runtime PM. > > Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru> [...] MBR, Sergey
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index ac23779d1cc5..6f0677d1adee 100644 --- a/drivers/net/ethernet/renesas/ravb_main.c +++ b/drivers/net/ethernet/renesas/ravb_main.c @@ -2564,9 +2564,18 @@ static int ravb_set_features(struct net_device *ndev, { struct ravb_private *priv = netdev_priv(ndev); const struct ravb_hw_info *info = priv->info; + struct device *dev = &priv->pdev->dev; int ret; - ret = info->set_feature(ndev, features); + pm_runtime_get_noresume(dev); + + if (pm_runtime_active(dev)) + ret = info->set_feature(ndev, features); + else + ret = 0; + + pm_runtime_put_noidle(dev); + if (ret) return ret;