diff mbox series

[net-next] net: fec: use phydev->eee_cfg.tx_lpi_timer

Message ID E1tKzVS-006c67-IJ@rmk-PC.armlinux.org.uk (mailing list archive)
State New
Headers show
Series [net-next] net: fec: use phydev->eee_cfg.tx_lpi_timer | expand

Commit Message

Russell King Dec. 10, 2024, 12:38 p.m. UTC
Rather than maintaining a private copy of the LPI timer, make use of
the LPI timer maintained by phylib. In any case, phylib overwrites the
value of tx_lpi_timer set by the driver in phy_ethtool_get_eee().

Note that feb->eee.tx_lpi_timer is initialised to zero, which is just
the same with phylib's copy, so there should be no functional change.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
 drivers/net/ethernet/freescale/fec.h      |  2 --
 drivers/net/ethernet/freescale/fec_main.c | 16 ++++++----------
 2 files changed, 6 insertions(+), 12 deletions(-)

Comments

Russell King (Oracle) Dec. 10, 2024, 12:39 p.m. UTC | #1
On Tue, Dec 10, 2024 at 12:38:26PM +0000, Russell King (Oracle) wrote:
> Rather than maintaining a private copy of the LPI timer, make use of
> the LPI timer maintained by phylib. In any case, phylib overwrites the
> value of tx_lpi_timer set by the driver in phy_ethtool_get_eee().
> 
> Note that feb->eee.tx_lpi_timer is initialised to zero, which is just
> the same with phylib's copy, so there should be no functional change.
> 
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>

Note that this need testing on compatible hardware - I only have iMX6
which doesn't have EEE support in FEC.

I'm particularly interested in any change of output from

	# ethtool --show-eee $if

with/without this patch. Also testing that it doesn't cause any
regression.

Thanks.

> ---
>  drivers/net/ethernet/freescale/fec.h      |  2 --
>  drivers/net/ethernet/freescale/fec_main.c | 16 ++++++----------
>  2 files changed, 6 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
> index 1cca0425d493..c81f2ea588f2 100644
> --- a/drivers/net/ethernet/freescale/fec.h
> +++ b/drivers/net/ethernet/freescale/fec.h
> @@ -671,8 +671,6 @@ struct fec_enet_private {
>  	unsigned int tx_time_itr;
>  	unsigned int itr_clk_rate;
>  
> -	/* tx lpi eee mode */
> -	struct ethtool_keee eee;
>  	unsigned int clk_ref_rate;
>  
>  	/* ptp clock period in ns*/
> diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
> index 1b55047c0237..b2daed55bf6c 100644
> --- a/drivers/net/ethernet/freescale/fec_main.c
> +++ b/drivers/net/ethernet/freescale/fec_main.c
> @@ -2045,14 +2045,14 @@ static int fec_enet_us_to_tx_cycle(struct net_device *ndev, int us)
>  	return us * (fep->clk_ref_rate / 1000) / 1000;
>  }
>  
> -static int fec_enet_eee_mode_set(struct net_device *ndev, bool enable)
> +static int fec_enet_eee_mode_set(struct net_device *ndev, u32 lpi_timer,
> +				 bool enable)
>  {
>  	struct fec_enet_private *fep = netdev_priv(ndev);
> -	struct ethtool_keee *p = &fep->eee;
>  	unsigned int sleep_cycle, wake_cycle;
>  
>  	if (enable) {
> -		sleep_cycle = fec_enet_us_to_tx_cycle(ndev, p->tx_lpi_timer);
> +		sleep_cycle = fec_enet_us_to_tx_cycle(ndev, lpi_timer);
>  		wake_cycle = sleep_cycle;
>  	} else {
>  		sleep_cycle = 0;
> @@ -2105,7 +2105,9 @@ static void fec_enet_adjust_link(struct net_device *ndev)
>  			napi_enable(&fep->napi);
>  		}
>  		if (fep->quirks & FEC_QUIRK_HAS_EEE)
> -			fec_enet_eee_mode_set(ndev, phy_dev->enable_tx_lpi);
> +			fec_enet_eee_mode_set(ndev,
> +					      phy_dev->eee_cfg.tx_lpi_timer,
> +					      phy_dev->enable_tx_lpi);
>  	} else {
>  		if (fep->link) {
>  			netif_stop_queue(ndev);
> @@ -3181,7 +3183,6 @@ static int
>  fec_enet_get_eee(struct net_device *ndev, struct ethtool_keee *edata)
>  {
>  	struct fec_enet_private *fep = netdev_priv(ndev);
> -	struct ethtool_keee *p = &fep->eee;
>  
>  	if (!(fep->quirks & FEC_QUIRK_HAS_EEE))
>  		return -EOPNOTSUPP;
> @@ -3189,8 +3190,6 @@ fec_enet_get_eee(struct net_device *ndev, struct ethtool_keee *edata)
>  	if (!netif_running(ndev))
>  		return -ENETDOWN;
>  
> -	edata->tx_lpi_timer = p->tx_lpi_timer;
> -
>  	return phy_ethtool_get_eee(ndev->phydev, edata);
>  }
>  
> @@ -3198,7 +3197,6 @@ static int
>  fec_enet_set_eee(struct net_device *ndev, struct ethtool_keee *edata)
>  {
>  	struct fec_enet_private *fep = netdev_priv(ndev);
> -	struct ethtool_keee *p = &fep->eee;
>  
>  	if (!(fep->quirks & FEC_QUIRK_HAS_EEE))
>  		return -EOPNOTSUPP;
> @@ -3206,8 +3204,6 @@ fec_enet_set_eee(struct net_device *ndev, struct ethtool_keee *edata)
>  	if (!netif_running(ndev))
>  		return -ENETDOWN;
>  
> -	p->tx_lpi_timer = edata->tx_lpi_timer;
> -
>  	return phy_ethtool_set_eee(ndev->phydev, edata);
>  }
>  
> -- 
> 2.30.2
> 
>
Andrew Lunn Dec. 10, 2024, 1:44 p.m. UTC | #2
On Tue, Dec 10, 2024 at 12:39:53PM +0000, Russell King (Oracle) wrote:
> On Tue, Dec 10, 2024 at 12:38:26PM +0000, Russell King (Oracle) wrote:
> > Rather than maintaining a private copy of the LPI timer, make use of
> > the LPI timer maintained by phylib. In any case, phylib overwrites the
> > value of tx_lpi_timer set by the driver in phy_ethtool_get_eee().
> > 
> > Note that feb->eee.tx_lpi_timer is initialised to zero, which is just
> > the same with phylib's copy, so there should be no functional change.
> > 
> > Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> 
> Note that this need testing on compatible hardware - I only have iMX6
> which doesn't have EEE support in FEC.

The FEC hardware i have does not have EEE either. Sorry.

	Andrew
Wei Fang Dec. 11, 2024, 2:27 a.m. UTC | #3
> On Tue, Dec 10, 2024 at 12:38:26PM +0000, Russell King (Oracle) wrote:
> > Rather than maintaining a private copy of the LPI timer, make use of
> > the LPI timer maintained by phylib. In any case, phylib overwrites the
> > value of tx_lpi_timer set by the driver in phy_ethtool_get_eee().
> >
> > Note that feb->eee.tx_lpi_timer is initialised to zero, which is just
> > the same with phylib's copy, so there should be no functional change.
> >
> > Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> 
> Note that this need testing on compatible hardware - I only have iMX6 which
> doesn't have EEE support in FEC.
> 
> I'm particularly interested in any change of output from
> 
> 	# ethtool --show-eee $if
> 
> with/without this patch. Also testing that it doesn't cause any regression.
> 
> Thanks.
> 
Hi Russell,

There are no changes after applying this patch.

Before:
root@imx8mqevk:~# ethtool --show-eee eth0
EEE settings for eth0:
        EEE status: enabled - active
        Tx LPI: 0 (us)
        Supported EEE link modes:  100baseT/Full
                                   1000baseT/Full
        Advertised EEE link modes:  100baseT/Full
                                    1000baseT/Full
        Link partner advertised EEE link modes:  100baseT/Full
                                                 1000baseT/Full
root@imx8mqevk:~# ethtool --set-eee eth0 eee on tx-lpi on tx-timer 5000
root@imx8mqevk:~# ethtool --show-eee eth0
EEE settings for eth0:
        EEE status: enabled - active
        Tx LPI: 5000 (us)
        Supported EEE link modes:  100baseT/Full
                                   1000baseT/Full
        Advertised EEE link modes:  100baseT/Full
                                    1000baseT/Full
        Link partner advertised EEE link modes:  100baseT/Full
                                                 1000baseT/Full

After applying the patch:
root@imx8mqevk:~# ethtool --show-eee eth0
EEE settings for eth0:
        EEE status: enabled - active
        Tx LPI: 0 (us)
        Supported EEE link modes:  100baseT/Full
                                   1000baseT/Full
        Advertised EEE link modes:  100baseT/Full
                                    1000baseT/Full
        Link partner advertised EEE link modes:  100baseT/Full
                                                 1000baseT/Full
root@imx8mqevk:~# ethtool --set-eee eth0 eee on tx-lpi on tx-timer 5000
root@imx8mqevk:~# ethtool --show-eee eth0
EEE settings for eth0:
        EEE status: enabled - active
        Tx LPI: 5000 (us)
        Supported EEE link modes:  100baseT/Full
                                   1000baseT/Full
        Advertised EEE link modes:  100baseT/Full
                                    1000baseT/Full
        Link partner advertised EEE link modes:  100baseT/Full
                                                 1000baseT/Full

So,
Tested-by: Wei Fang <wei.fang@nxp.com>
patchwork-bot+netdevbpf@kernel.org Dec. 12, 2024, 4:30 a.m. UTC | #4
Hello:

This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Tue, 10 Dec 2024 12:38:26 +0000 you wrote:
> Rather than maintaining a private copy of the LPI timer, make use of
> the LPI timer maintained by phylib. In any case, phylib overwrites the
> value of tx_lpi_timer set by the driver in phy_ethtool_get_eee().
> 
> Note that feb->eee.tx_lpi_timer is initialised to zero, which is just
> the same with phylib's copy, so there should be no functional change.
> 
> [...]

Here is the summary with links:
  - [net-next] net: fec: use phydev->eee_cfg.tx_lpi_timer
    https://git.kernel.org/netdev/net-next/c/3fa2540d93d8

You are awesome, thank you!
diff mbox series

Patch

diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
index 1cca0425d493..c81f2ea588f2 100644
--- a/drivers/net/ethernet/freescale/fec.h
+++ b/drivers/net/ethernet/freescale/fec.h
@@ -671,8 +671,6 @@  struct fec_enet_private {
 	unsigned int tx_time_itr;
 	unsigned int itr_clk_rate;
 
-	/* tx lpi eee mode */
-	struct ethtool_keee eee;
 	unsigned int clk_ref_rate;
 
 	/* ptp clock period in ns*/
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 1b55047c0237..b2daed55bf6c 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -2045,14 +2045,14 @@  static int fec_enet_us_to_tx_cycle(struct net_device *ndev, int us)
 	return us * (fep->clk_ref_rate / 1000) / 1000;
 }
 
-static int fec_enet_eee_mode_set(struct net_device *ndev, bool enable)
+static int fec_enet_eee_mode_set(struct net_device *ndev, u32 lpi_timer,
+				 bool enable)
 {
 	struct fec_enet_private *fep = netdev_priv(ndev);
-	struct ethtool_keee *p = &fep->eee;
 	unsigned int sleep_cycle, wake_cycle;
 
 	if (enable) {
-		sleep_cycle = fec_enet_us_to_tx_cycle(ndev, p->tx_lpi_timer);
+		sleep_cycle = fec_enet_us_to_tx_cycle(ndev, lpi_timer);
 		wake_cycle = sleep_cycle;
 	} else {
 		sleep_cycle = 0;
@@ -2105,7 +2105,9 @@  static void fec_enet_adjust_link(struct net_device *ndev)
 			napi_enable(&fep->napi);
 		}
 		if (fep->quirks & FEC_QUIRK_HAS_EEE)
-			fec_enet_eee_mode_set(ndev, phy_dev->enable_tx_lpi);
+			fec_enet_eee_mode_set(ndev,
+					      phy_dev->eee_cfg.tx_lpi_timer,
+					      phy_dev->enable_tx_lpi);
 	} else {
 		if (fep->link) {
 			netif_stop_queue(ndev);
@@ -3181,7 +3183,6 @@  static int
 fec_enet_get_eee(struct net_device *ndev, struct ethtool_keee *edata)
 {
 	struct fec_enet_private *fep = netdev_priv(ndev);
-	struct ethtool_keee *p = &fep->eee;
 
 	if (!(fep->quirks & FEC_QUIRK_HAS_EEE))
 		return -EOPNOTSUPP;
@@ -3189,8 +3190,6 @@  fec_enet_get_eee(struct net_device *ndev, struct ethtool_keee *edata)
 	if (!netif_running(ndev))
 		return -ENETDOWN;
 
-	edata->tx_lpi_timer = p->tx_lpi_timer;
-
 	return phy_ethtool_get_eee(ndev->phydev, edata);
 }
 
@@ -3198,7 +3197,6 @@  static int
 fec_enet_set_eee(struct net_device *ndev, struct ethtool_keee *edata)
 {
 	struct fec_enet_private *fep = netdev_priv(ndev);
-	struct ethtool_keee *p = &fep->eee;
 
 	if (!(fep->quirks & FEC_QUIRK_HAS_EEE))
 		return -EOPNOTSUPP;
@@ -3206,8 +3204,6 @@  fec_enet_set_eee(struct net_device *ndev, struct ethtool_keee *edata)
 	if (!netif_running(ndev))
 		return -ENETDOWN;
 
-	p->tx_lpi_timer = edata->tx_lpi_timer;
-
 	return phy_ethtool_set_eee(ndev->phydev, edata);
 }