diff mbox series

[net-next,4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down

Message ID 20240207120733.1746920-5-claudiu.beznea.uj@bp.renesas.com (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series net: ravb: Add runtime PM support (part 2) | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Clearly marked for net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 1048 this patch: 1048
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers success CCed 7 of 7 maintainers
netdev/build_clang success Errors and warnings before: 1065 this patch: 1065
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 1065 this patch: 1065
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 23 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Claudiu Feb. 7, 2024, 12:07 p.m. UTC
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Do not apply the RX checksum 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
checksum settings and apply them in ravb_open() through ravb_emac_init().
This has been solved by introducing pm_runtime_active() check. 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>
---

Changes since [2]:
- use pm_runtime_get_noresume() and pm_runtime_active() and updated the
  commit message to describe that
- fixed typos
- s/CSUM/checksum in patch title and description

Changes in v3 of [2]:
- this was patch 20/21 in v2
- fixed typos in patch description
- removed code from ravb_open()
- use ndev->flags & IFF_UP checks instead of netif_running()

Changes in v2 of [2]:
- none; this patch is new

[2] https://lore.kernel.org/all/20240105082339.1468817-1-claudiu.beznea.uj@bp.renesas.com/

 drivers/net/ethernet/renesas/ravb_main.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Sergey Shtylyov Feb. 7, 2024, 8:50 p.m. UTC | #1
On 2/7/24 3:07 PM, Claudiu wrote:

> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> Do not apply the RX checksum 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

   The register contents? I thought I'd pointed out all of these...

> applying settings in reset mode is not an option. Instead, cache the RX
> checksum settings and apply them in ravb_open() through ravb_emac_init().
> This has been solved by introducing pm_runtime_active() check. 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>

   I'm afraid such check now needs to be added to ravb_set_features_gbeth()
that's populated by Biju Das' checksum patches (which I've already ACKed)...

[...]

MBR, Sergey
Biju Das Feb. 8, 2024, 8:09 a.m. UTC | #2
Hi Sergey,

> -----Original Message-----
> From: Sergey Shtylyov <s.shtylyov@omp.ru>
> Sent: Wednesday, February 7, 2024 8:50 PM
> Subject: Re: [PATCH net-next 4/5] net: ravb: Do not apply RX checksum
> settings to hardware if the interface is down
> 
> On 2/7/24 3:07 PM, Claudiu wrote:
> 
> > From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> >
> > Do not apply the RX checksum 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
> 
>    The register contents? I thought I'd pointed out all of these...
> 
> > applying settings in reset mode is not an option. Instead, cache the
> > RX checksum settings and apply them in ravb_open() through
> ravb_emac_init().
> > This has been solved by introducing pm_runtime_active() check. 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>
> 
>    I'm afraid such check now needs to be added to
> ravb_set_features_gbeth() that's populated by Biju Das' checksum patches
> (which I've already ACKed)...

You mean this check to be moved to ravb_set_features_rcar() instead of ravb_set_rx_csum()
as ravb_set_rx_csum() is called in receive path as well which is interface up case.
ON reset mode, anyway we don't get any interrupts so there is no rx.
Then possibility is through set_features??

Cheers,
Biju
Biju Das Feb. 8, 2024, 9:16 a.m. UTC | #3
> -----Original Message-----
> From: Biju Das <biju.das.jz@bp.renesas.com>
> Sent: Thursday, February 8, 2024 8:09 AM
> Subject: RE: [PATCH net-next 4/5] net: ravb: Do not apply RX checksum
> settings to hardware if the interface is down
> 
> Hi Sergey,
> 
> > -----Original Message-----
> > From: Sergey Shtylyov <s.shtylyov@omp.ru>
> > Sent: Wednesday, February 7, 2024 8:50 PM
> > Subject: Re: [PATCH net-next 4/5] net: ravb: Do not apply RX checksum
> > settings to hardware if the interface is down
> >
> > On 2/7/24 3:07 PM, Claudiu wrote:
> >
> > > From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> > >
> > > Do not apply the RX checksum 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
> >
> >    The register contents? I thought I'd pointed out all of these...
> >
> > > applying settings in reset mode is not an option. Instead, cache the
> > > RX checksum settings and apply them in ravb_open() through
> > ravb_emac_init().
> > > This has been solved by introducing pm_runtime_active() check. 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>
> >
> >    I'm afraid such check now needs to be added to
> > ravb_set_features_gbeth() that's populated by Biju Das' checksum
> > patches (which I've already ACKed)...
> 
> You mean this check to be moved to ravb_set_features_rcar() instead of
> ravb_set_rx_csum() as ravb_set_rx_csum() is called in receive path as well
> which is interface up case.
> ON reset mode, anyway we don't get any interrupts so there is no rx.
> Then possibility is through set_features??


Or are you suggesting to have a common code to avoid code duplication?

On interface down case, just cache the feature and return?

Active cases, call the family specific callback()?

Cheers,
Biju
Claudiu Feb. 8, 2024, 4:11 p.m. UTC | #4
On 07.02.2024 22:50, Sergey Shtylyov wrote:
> On 2/7/24 3:07 PM, Claudiu wrote:
> 
>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>
>> Do not apply the RX checksum 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
> 
>    The register contents? I thought I'd pointed out all of these...
> 
>> applying settings in reset mode is not an option. Instead, cache the RX
>> checksum settings and apply them in ravb_open() through ravb_emac_init().
>> This has been solved by introducing pm_runtime_active() check. 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>
> 
>    I'm afraid such check now needs to be added to ravb_set_features_gbeth()
> that's populated by Biju Das' checksum patches (which I've already ACKed)...

Yes, it's on my radar. I'll check it and update it (if any) in the next
version.

Thank you,
Claudiu Beznea

> 
> [...]
> 
> MBR, Sergey
diff mbox series

Patch

diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 4f8d5c9e9e03..df47d3e057c5 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -2385,8 +2385,14 @@  static int ravb_change_mtu(struct net_device *ndev, int new_mtu)
 static void ravb_set_rx_csum(struct net_device *ndev, bool enable)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
+	struct device *dev = &priv->pdev->dev;
 	unsigned long flags;
 
+	pm_runtime_get_noresume(dev);
+
+	if (!pm_runtime_active(dev))
+		goto out_rpm_put;
+
 	spin_lock_irqsave(&priv->lock, flags);
 
 	/* Disable TX and RX */
@@ -2399,6 +2405,9 @@  static void ravb_set_rx_csum(struct net_device *ndev, bool enable)
 	ravb_rcv_snd_enable(ndev);
 
 	spin_unlock_irqrestore(&priv->lock, flags);
+
+out_rpm_put:
+	pm_runtime_put_noidle(dev);
 }
 
 static int ravb_set_features_gbeth(struct net_device *ndev,