Message ID | 20240105082339.1468817-19-claudiu.beznea.uj@bp.renesas.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | net: ravb: Add suspend to RAM and runtime PM support for RZ/G3S | expand |
On 1/5/24 11:23 AM, Claudiu wrote: > From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> > > Do not apply the RX CSUM settings 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 registers content) and applying > settings in reset mode is not an option. Instead, cache the RX CSUM > settings and apply them in ravb_open() though ravb_emac_init(). > > Commit prepares for the addition of runtime PM. > > Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> [...] > diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c > index 168b6208db37..e909960fbc30 100644 > --- a/drivers/net/ethernet/renesas/ravb_main.c > +++ b/drivers/net/ethernet/renesas/ravb_main.c > @@ -2342,6 +2342,9 @@ static void ravb_set_rx_csum(struct net_device *ndev, bool enable) > struct ravb_private *priv = netdev_priv(ndev); > unsigned long flags; > > + if (!(ndev->flags & IFF_UP)) Well, I guess it's even OK to even write EDCMR in the reset mode... BUT again, won't this race with pm_runtime_put_autosuspend() when its call gets added to ravb_close()? > + return; > + > spin_lock_irqsave(&priv->lock, flags); > > /* Disable TX and RX */ MBR, Sergey
On 1/8/24 11:34 PM, Sergey Shtylyov wrote: [...] >> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> >> >> Do not apply the RX CSUM settings 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 registers content) and applying >> settings in reset mode is not an option. Instead, cache the RX CSUM >> settings and apply them in ravb_open() though ravb_emac_init(). >> >> Commit prepares for the addition of runtime PM. >> >> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> > [...] > >> diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c >> index 168b6208db37..e909960fbc30 100644 >> --- a/drivers/net/ethernet/renesas/ravb_main.c >> +++ b/drivers/net/ethernet/renesas/ravb_main.c >> @@ -2342,6 +2342,9 @@ static void ravb_set_rx_csum(struct net_device *ndev, bool enable) >> struct ravb_private *priv = netdev_priv(ndev); >> unsigned long flags; >> >> + if (!(ndev->flags & IFF_UP)) > > Well, I guess it's even OK to even write EDCMR in the reset mode... BUT Well, I guess it's even OK to write ECMR in the reset mode... :-) > again, won't this race with pm_runtime_put_autosuspend() when its call gets > added to ravb_close()? [...] MBR, Sergey
On 1/5/24 11:23 AM, Claudiu wrote: > From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> > > Do not apply the RX CSUM settings to hardware if the interface is down. In s/CSUM/checksum/? > 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 registers content) and applying > settings in reset mode is not an option. Instead, cache the RX CSUM Same here... > settings and apply them in ravb_open() though ravb_emac_init(). Through? > Commit prepares for the addition of runtime PM. > > Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> [...] MBR, Sergey
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index 168b6208db37..e909960fbc30 100644 --- a/drivers/net/ethernet/renesas/ravb_main.c +++ b/drivers/net/ethernet/renesas/ravb_main.c @@ -2342,6 +2342,9 @@ static void ravb_set_rx_csum(struct net_device *ndev, bool enable) struct ravb_private *priv = netdev_priv(ndev); unsigned long flags; + if (!(ndev->flags & IFF_UP)) + return; + spin_lock_irqsave(&priv->lock, flags); /* Disable TX and RX */