diff mbox series

[RFC/PATCH,07/18] ravb: Add magic_pkt to struct ravb_hw_info

Message ID 20210923140813.13541-8-biju.das.jz@bp.renesas.com (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series Add Gigabit Ethernet driver support | expand

Checks

Context Check Description
netdev/cover_letter success Link
netdev/fixes_present success Link
netdev/patch_count fail Series longer than 15 patches
netdev/tree_selection success Guessed tree name to be net-next
netdev/subject_prefix warning Target tree name not specified in the subject
netdev/cc_maintainers success CCed 11 of 11 maintainers
netdev/source_inline success Was 0 now: 0
netdev/verify_signedoff success Link
netdev/module_param success Was 0 now: 0
netdev/build_32bit success Errors and warnings before: 0 this patch: 0
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/verify_fixes success Link
netdev/checkpatch warning WARNING: line length of 83 exceeds 80 columns
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/header_inline success Link

Commit Message

Biju Das Sept. 23, 2021, 2:08 p.m. UTC
E-MAC on R-Car supports magic packet detection, whereas RZ/G2L
do not support this feature. Add magic_pkt to struct ravb_hw_info
and enable this feature only for R-Car.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
 drivers/net/ethernet/renesas/ravb.h      | 1 +
 drivers/net/ethernet/renesas/ravb_main.c | 8 ++++++--
 2 files changed, 7 insertions(+), 2 deletions(-)

Comments

Sergey Shtylyov Sept. 23, 2021, 8:42 p.m. UTC | #1
On 9/23/21 5:08 PM, Biju Das wrote:

> E-MAC on R-Car supports magic packet detection, whereas RZ/G2L
> do not support this feature. Add magic_pkt to struct ravb_hw_info
> and enable this feature only for R-Car.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
[...]
> diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
> index d37d73f6d984..529364d8f7fb 100644
> --- a/drivers/net/ethernet/renesas/ravb_main.c
> +++ b/drivers/net/ethernet/renesas/ravb_main.c
> @@ -811,12 +811,13 @@ static int ravb_stop_dma(struct net_device *ndev)
>  static void ravb_emac_interrupt_unlocked(struct net_device *ndev)
>  {
>  	struct ravb_private *priv = netdev_priv(ndev);
> +	const struct ravb_hw_info *info = priv->info;
>  	u32 ecsr, psr;
>  
>  	ecsr = ravb_read(ndev, ECSR);
>  	ravb_write(ndev, ecsr, ECSR);	/* clear interrupt */
>  
> -	if (ecsr & ECSR_MPD)
> +	if (info->magic_pkt && (ecsr & ECSR_MPD))

   I think masking the MPD interrupt would be enough.

>  		pm_wakeup_event(&priv->pdev->dev, 0);
>  	if (ecsr & ECSR_ICD)
>  		ndev->stats.tx_carrier_errors++;
> @@ -1416,8 +1417,9 @@ static void ravb_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)

   Didn't you miss ravb_get_wol() -- it needs a change as well...

>  static int ravb_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
>  {
>  	struct ravb_private *priv = netdev_priv(ndev);
> +	const struct ravb_hw_info *info = priv->info;
>  
> -	if (wol->wolopts & ~WAKE_MAGIC)
> +	if (!info->magic_pkt || (wol->wolopts & ~WAKE_MAGIC))
>  		return -EOPNOTSUPP;
>  
>  	priv->wol_enabled = !!(wol->wolopts & WAKE_MAGIC);
[...]

MBR, Sergey
Biju Das Sept. 24, 2021, 6:24 a.m. UTC | #2
Hi Sergei,

Thanks for the feedback.

> Subject: Re: [RFC/PATCH 07/18] ravb: Add magic_pkt to struct ravb_hw_info
> 
> On 9/23/21 5:08 PM, Biju Das wrote:
> 
> > E-MAC on R-Car supports magic packet detection, whereas RZ/G2L do not
> > support this feature. Add magic_pkt to struct ravb_hw_info and enable
> > this feature only for R-Car.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> [...]
> > diff --git a/drivers/net/ethernet/renesas/ravb_main.c
> > b/drivers/net/ethernet/renesas/ravb_main.c
> > index d37d73f6d984..529364d8f7fb 100644
> > --- a/drivers/net/ethernet/renesas/ravb_main.c
> > +++ b/drivers/net/ethernet/renesas/ravb_main.c
> > @@ -811,12 +811,13 @@ static int ravb_stop_dma(struct net_device
> > *ndev)  static void ravb_emac_interrupt_unlocked(struct net_device
> > *ndev)  {
> >  	struct ravb_private *priv = netdev_priv(ndev);
> > +	const struct ravb_hw_info *info = priv->info;
> >  	u32 ecsr, psr;
> >
> >  	ecsr = ravb_read(ndev, ECSR);
> >  	ravb_write(ndev, ecsr, ECSR);	/* clear interrupt */
> >
> > -	if (ecsr & ECSR_MPD)
> > +	if (info->magic_pkt && (ecsr & ECSR_MPD))
> 
>    I think masking the MPD interrupt would be enough.

Agreed.

> 
> >  		pm_wakeup_event(&priv->pdev->dev, 0);
> >  	if (ecsr & ECSR_ICD)
> >  		ndev->stats.tx_carrier_errors++;
> > @@ -1416,8 +1417,9 @@ static void ravb_get_wol(struct net_device
> > *ndev, struct ethtool_wolinfo *wol)
> 
>    Didn't you miss ravb_get_wol() -- it needs a change as well...

I don't think it is required. Framework is taking care of this. Please see the output from target.

root@smarc-rzg2l:~# ethtool -s eth0 wol g
netlink error: Operation not supported
root@smarc-rzg2l:~#


Regards,
Biju

> 
> >  static int ravb_set_wol(struct net_device *ndev, struct
> > ethtool_wolinfo *wol)  {
> >  	struct ravb_private *priv = netdev_priv(ndev);
> > +	const struct ravb_hw_info *info = priv->info;
> >
> > -	if (wol->wolopts & ~WAKE_MAGIC)
> > +	if (!info->magic_pkt || (wol->wolopts & ~WAKE_MAGIC))
> >  		return -EOPNOTSUPP;
> >
> >  	priv->wol_enabled = !!(wol->wolopts & WAKE_MAGIC);
> [...]
> 
> MBR, Sergey
Biju Das Sept. 26, 2021, 1:56 p.m. UTC | #3
Hi Sergei,

> Subject: RE: [RFC/PATCH 07/18] ravb: Add magic_pkt to struct ravb_hw_info
> 
> Hi Sergei,
> 
> Thanks for the feedback.
> 
> > Subject: Re: [RFC/PATCH 07/18] ravb: Add magic_pkt to struct
> > ravb_hw_info
> >
> > On 9/23/21 5:08 PM, Biju Das wrote:
> >
> > > E-MAC on R-Car supports magic packet detection, whereas RZ/G2L do
> > > not support this feature. Add magic_pkt to struct ravb_hw_info and
> > > enable this feature only for R-Car.
> > >
> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > [...]
> > > diff --git a/drivers/net/ethernet/renesas/ravb_main.c
> > > b/drivers/net/ethernet/renesas/ravb_main.c
> > > index d37d73f6d984..529364d8f7fb 100644
> > > --- a/drivers/net/ethernet/renesas/ravb_main.c
> > > +++ b/drivers/net/ethernet/renesas/ravb_main.c
> > > @@ -811,12 +811,13 @@ static int ravb_stop_dma(struct net_device
> > > *ndev)  static void ravb_emac_interrupt_unlocked(struct net_device
> > > *ndev)  {
> > >  	struct ravb_private *priv = netdev_priv(ndev);
> > > +	const struct ravb_hw_info *info = priv->info;
> > >  	u32 ecsr, psr;
> > >
> > >  	ecsr = ravb_read(ndev, ECSR);
> > >  	ravb_write(ndev, ecsr, ECSR);	/* clear interrupt */
> > >
> > > -	if (ecsr & ECSR_MPD)
> > > +	if (info->magic_pkt && (ecsr & ECSR_MPD))
> >
> >    I think masking the MPD interrupt would be enough.
> 
> Agreed.
> 
> >
> > >  		pm_wakeup_event(&priv->pdev->dev, 0);
> > >  	if (ecsr & ECSR_ICD)
> > >  		ndev->stats.tx_carrier_errors++;
> > > @@ -1416,8 +1417,9 @@ static void ravb_get_wol(struct net_device
> > > *ndev, struct ethtool_wolinfo *wol)
> >
> >    Didn't you miss ravb_get_wol() -- it needs a change as well...
> 
> I don't think it is required. Framework is taking care of this. Please see
> the output from target.
> 
> root@smarc-rzg2l:~# ethtool -s eth0 wol g netlink error: Operation not
> supported root@smarc-rzg2l:~#
> 
> >
> > >  static int ravb_set_wol(struct net_device *ndev, struct
> > > ethtool_wolinfo *wol)  {
> > >  	struct ravb_private *priv = netdev_priv(ndev);
> > > +	const struct ravb_hw_info *info = priv->info;
> > >
> > > -	if (wol->wolopts & ~WAKE_MAGIC)
> > > +	if (!info->magic_pkt || (wol->wolopts & ~WAKE_MAGIC))
> > >  		return -EOPNOTSUPP;
> > >
> > >  	priv->wol_enabled = !!(wol->wolopts & WAKE_MAGIC);
> > [...]
> >

As discussed, the new patch removes info->magic_pkt from interrupt routine.

Regards,
Biju
diff mbox series

Patch

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index c043ee555be4..bce480fadb91 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -1007,6 +1007,7 @@  struct ravb_hw_info {
 	unsigned no_gptp:1;		/* AVB-DMAC does not support gPTP feature */
 	unsigned ccc_gac:1;		/* AVB-DMAC has gPTP support active in config mode */
 	unsigned multi_tsrq:1;		/* AVB-DMAC has MULTI TSRQ */
+	unsigned magic_pkt:1;		/* E-MAC supports magic packet detection */
 };
 
 struct ravb_private {
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index d37d73f6d984..529364d8f7fb 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -811,12 +811,13 @@  static int ravb_stop_dma(struct net_device *ndev)
 static void ravb_emac_interrupt_unlocked(struct net_device *ndev)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	u32 ecsr, psr;
 
 	ecsr = ravb_read(ndev, ECSR);
 	ravb_write(ndev, ecsr, ECSR);	/* clear interrupt */
 
-	if (ecsr & ECSR_MPD)
+	if (info->magic_pkt && (ecsr & ECSR_MPD))
 		pm_wakeup_event(&priv->pdev->dev, 0);
 	if (ecsr & ECSR_ICD)
 		ndev->stats.tx_carrier_errors++;
@@ -1416,8 +1417,9 @@  static void ravb_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
 static int ravb_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 
-	if (wol->wolopts & ~WAKE_MAGIC)
+	if (!info->magic_pkt || (wol->wolopts & ~WAKE_MAGIC))
 		return -EOPNOTSUPP;
 
 	priv->wol_enabled = !!(wol->wolopts & WAKE_MAGIC);
@@ -2095,6 +2097,7 @@  static const struct ravb_hw_info ravb_gen3_hw_info = {
 	.multi_irqs = 1,
 	.ccc_gac = 1,
 	.multi_tsrq = 1,
+	.magic_pkt = 1,
 };
 
 static const struct ravb_hw_info ravb_gen2_hw_info = {
@@ -2114,6 +2117,7 @@  static const struct ravb_hw_info ravb_gen2_hw_info = {
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
 	.aligned_tx = 1,
 	.multi_tsrq = 1,
+	.magic_pkt = 1,
 };
 
 static const struct ravb_hw_info rgeth_hw_info = {