diff mbox series

[1/1] lan78xx: Move enabling of EEE into PHY init code

Message ID 1544028120-27572-2-git-send-email-paolo.pisati@canonical.com
State New
Headers show
Series [1/1] lan78xx: Move enabling of EEE into PHY init code | expand

Commit Message

Paolo Pisati Dec. 5, 2018, 4:42 p.m. UTC
From: Phil Elwell <phil@raspberrypi.org>

BugLink: https://bugs.launchpad.net/bugs/1806108

Enable EEE mode as soon as possible after connecting to the PHY, and
before phy_start. This avoids a second link negotiation, which speeds
up booting and stops the interface failing to become ready.

See: https://github.com/raspberrypi/linux/issues/2437

Signed-off-by: Phil Elwell <phil@raspberrypi.org>
(cherry picked from commit 770de6c8d6b771933c5cfb24708b6027e6ed8d43)
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
(cherry picked from commit 66524920fa205f6670171e8a38e582b7d9abea38)
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
---
 drivers/net/usb/lan78xx.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

Comments

Colin Ian King Dec. 5, 2018, 4:49 p.m. UTC | #1
On 05/12/2018 16:42, Paolo Pisati wrote:
> From: Phil Elwell <phil@raspberrypi.org>
> 
> BugLink: https://bugs.launchpad.net/bugs/1806108
> 
> Enable EEE mode as soon as possible after connecting to the PHY, and
> before phy_start. This avoids a second link negotiation, which speeds
> up booting and stops the interface failing to become ready.
> 
> See: https://github.com/raspberrypi/linux/issues/2437
> 
> Signed-off-by: Phil Elwell <phil@raspberrypi.org>
> (cherry picked from commit 770de6c8d6b771933c5cfb24708b6027e6ed8d43)
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
> (cherry picked from commit 66524920fa205f6670171e8a38e582b7d9abea38)
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>

I don't understand the double cherry pick info above

> ---
>  drivers/net/usb/lan78xx.c | 32 ++++++++++++++++----------------
>  1 file changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
> index 77a186befd07..4e0f223435d4 100644
> --- a/drivers/net/usb/lan78xx.c
> +++ b/drivers/net/usb/lan78xx.c
> @@ -2093,6 +2093,22 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
>  	mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
>  	phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv);
>  
> +	if (of_property_read_bool(dev->udev->dev.of_node,
> +				  "microchip,eee-enabled")) {
> +		struct ethtool_eee edata;
> +		memset(&edata, 0, sizeof(edata));
> +		edata.cmd = ETHTOOL_SEEE;
> +		edata.advertised = ADVERTISED_1000baseT_Full |
> +				   ADVERTISED_100baseT_Full;
> +		edata.eee_enabled = true;
> +		edata.tx_lpi_enabled = true;
> +		if (of_property_read_u32(dev->udev->dev.of_node,
> +					 "microchip,tx-lpi-timer",
> +					 &edata.tx_lpi_timer))
> +			edata.tx_lpi_timer = 600; /* non-aggressive */
> +		(void)lan78xx_set_eee(dev->net, &edata);
> +	}
> +
>  	/* Set LED modes:
>  	 * led: 0=link/activity          1=link1000/activity
>  	 *      2=link100/activity       3=link10/activity
> @@ -2566,22 +2582,6 @@ static int lan78xx_open(struct net_device *net)
>  
>  	netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
>  
> -	if (of_property_read_bool(dev->udev->dev.of_node,
> -				  "microchip,eee-enabled")) {
> -		struct ethtool_eee edata;
> -		memset(&edata, 0, sizeof(edata));
> -		edata.cmd = ETHTOOL_SEEE;
> -		edata.advertised = ADVERTISED_1000baseT_Full |
> -				   ADVERTISED_100baseT_Full;
> -		edata.eee_enabled = true;
> -		edata.tx_lpi_enabled = true;
> -		if (of_property_read_u32(dev->udev->dev.of_node,
> -					 "microchip,tx-lpi-timer",
> -					 &edata.tx_lpi_timer))
> -			edata.tx_lpi_timer = 600; /* non-aggressive */
> -		(void)lan78xx_set_eee(net, &edata);
> -	}
> -
>  	/* for Link Check */
>  	if (dev->urb_intr) {
>  		ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
>
Colin Ian King Dec. 5, 2018, 4:52 p.m. UTC | #2
On 05/12/2018 16:42, Paolo Pisati wrote:
> From: Phil Elwell <phil@raspberrypi.org>
> 
> BugLink: https://bugs.launchpad.net/bugs/1806108
> 
> Enable EEE mode as soon as possible after connecting to the PHY, and
> before phy_start. This avoids a second link negotiation, which speeds
> up booting and stops the interface failing to become ready.
> 
> See: https://github.com/raspberrypi/linux/issues/2437
> 
> Signed-off-by: Phil Elwell <phil@raspberrypi.org>
> (cherry picked from commit 770de6c8d6b771933c5cfb24708b6027e6ed8d43)
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
> (cherry picked from commit 66524920fa205f6670171e8a38e582b7d9abea38)
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>

Ah, the 2nd cherry pick is from a cherry pick. Got it.

> ---
>  drivers/net/usb/lan78xx.c | 32 ++++++++++++++++----------------
>  1 file changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
> index 77a186befd07..4e0f223435d4 100644
> --- a/drivers/net/usb/lan78xx.c
> +++ b/drivers/net/usb/lan78xx.c
> @@ -2093,6 +2093,22 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
>  	mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
>  	phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv);
>  
> +	if (of_property_read_bool(dev->udev->dev.of_node,
> +				  "microchip,eee-enabled")) {
> +		struct ethtool_eee edata;
> +		memset(&edata, 0, sizeof(edata));
> +		edata.cmd = ETHTOOL_SEEE;
> +		edata.advertised = ADVERTISED_1000baseT_Full |
> +				   ADVERTISED_100baseT_Full;
> +		edata.eee_enabled = true;
> +		edata.tx_lpi_enabled = true;
> +		if (of_property_read_u32(dev->udev->dev.of_node,
> +					 "microchip,tx-lpi-timer",
> +					 &edata.tx_lpi_timer))
> +			edata.tx_lpi_timer = 600; /* non-aggressive */
> +		(void)lan78xx_set_eee(dev->net, &edata);
> +	}
> +
>  	/* Set LED modes:
>  	 * led: 0=link/activity          1=link1000/activity
>  	 *      2=link100/activity       3=link10/activity
> @@ -2566,22 +2582,6 @@ static int lan78xx_open(struct net_device *net)
>  
>  	netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
>  
> -	if (of_property_read_bool(dev->udev->dev.of_node,
> -				  "microchip,eee-enabled")) {
> -		struct ethtool_eee edata;
> -		memset(&edata, 0, sizeof(edata));
> -		edata.cmd = ETHTOOL_SEEE;
> -		edata.advertised = ADVERTISED_1000baseT_Full |
> -				   ADVERTISED_100baseT_Full;
> -		edata.eee_enabled = true;
> -		edata.tx_lpi_enabled = true;
> -		if (of_property_read_u32(dev->udev->dev.of_node,
> -					 "microchip,tx-lpi-timer",
> -					 &edata.tx_lpi_timer))
> -			edata.tx_lpi_timer = 600; /* non-aggressive */
> -		(void)lan78xx_set_eee(net, &edata);
> -	}
> -
>  	/* for Link Check */
>  	if (dev->urb_intr) {
>  		ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
> 

Seems sane to me.

Acked-by: Colin Ian King <colin.king@canonical.com>
Paolo Pisati Dec. 5, 2018, 4:57 p.m. UTC | #3
This is a cherry-pick from Cosmic, so the first cherry-pick line is
when the patch originally landed in Cosmic from the Raspberry Github
tree, and the second cherry-pick line is me picking the patch from
Cosmic and landing it in Bionic for this specific bug.
On Wed, Dec 5, 2018 at 5:50 PM Colin Ian King <colin.king@canonical.com> wrote:
>
> On 05/12/2018 16:42, Paolo Pisati wrote:
> > From: Phil Elwell <phil@raspberrypi.org>
> >
> > BugLink: https://bugs.launchpad.net/bugs/1806108
> >
> > Enable EEE mode as soon as possible after connecting to the PHY, and
> > before phy_start. This avoids a second link negotiation, which speeds
> > up booting and stops the interface failing to become ready.
> >
> > See: https://github.com/raspberrypi/linux/issues/2437
> >
> > Signed-off-by: Phil Elwell <phil@raspberrypi.org>
> > (cherry picked from commit 770de6c8d6b771933c5cfb24708b6027e6ed8d43)
> > Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
> > (cherry picked from commit 66524920fa205f6670171e8a38e582b7d9abea38)
> > Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
>
> I don't understand the double cherry pick info above
>
> > ---
> >  drivers/net/usb/lan78xx.c | 32 ++++++++++++++++----------------
> >  1 file changed, 16 insertions(+), 16 deletions(-)
> >
> > diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
> > index 77a186befd07..4e0f223435d4 100644
> > --- a/drivers/net/usb/lan78xx.c
> > +++ b/drivers/net/usb/lan78xx.c
> > @@ -2093,6 +2093,22 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
> >       mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
> >       phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv);
> >
> > +     if (of_property_read_bool(dev->udev->dev.of_node,
> > +                               "microchip,eee-enabled")) {
> > +             struct ethtool_eee edata;
> > +             memset(&edata, 0, sizeof(edata));
> > +             edata.cmd = ETHTOOL_SEEE;
> > +             edata.advertised = ADVERTISED_1000baseT_Full |
> > +                                ADVERTISED_100baseT_Full;
> > +             edata.eee_enabled = true;
> > +             edata.tx_lpi_enabled = true;
> > +             if (of_property_read_u32(dev->udev->dev.of_node,
> > +                                      "microchip,tx-lpi-timer",
> > +                                      &edata.tx_lpi_timer))
> > +                     edata.tx_lpi_timer = 600; /* non-aggressive */
> > +             (void)lan78xx_set_eee(dev->net, &edata);
> > +     }
> > +
> >       /* Set LED modes:
> >        * led: 0=link/activity          1=link1000/activity
> >        *      2=link100/activity       3=link10/activity
> > @@ -2566,22 +2582,6 @@ static int lan78xx_open(struct net_device *net)
> >
> >       netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
> >
> > -     if (of_property_read_bool(dev->udev->dev.of_node,
> > -                               "microchip,eee-enabled")) {
> > -             struct ethtool_eee edata;
> > -             memset(&edata, 0, sizeof(edata));
> > -             edata.cmd = ETHTOOL_SEEE;
> > -             edata.advertised = ADVERTISED_1000baseT_Full |
> > -                                ADVERTISED_100baseT_Full;
> > -             edata.eee_enabled = true;
> > -             edata.tx_lpi_enabled = true;
> > -             if (of_property_read_u32(dev->udev->dev.of_node,
> > -                                      "microchip,tx-lpi-timer",
> > -                                      &edata.tx_lpi_timer))
> > -                     edata.tx_lpi_timer = 600; /* non-aggressive */
> > -             (void)lan78xx_set_eee(net, &edata);
> > -     }
> > -
> >       /* for Link Check */
> >       if (dev->urb_intr) {
> >               ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
> >
>
>
> --
> kernel-team mailing list
> kernel-team@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
Stefan Bader Dec. 5, 2018, 4:57 p.m. UTC | #4
On 05.12.18 17:42, Paolo Pisati wrote:
> From: Phil Elwell <phil@raspberrypi.org>
> 
> BugLink: https://bugs.launchpad.net/bugs/1806108
> 
> Enable EEE mode as soon as possible after connecting to the PHY, and
> before phy_start. This avoids a second link negotiation, which speeds
> up booting and stops the interface failing to become ready.
> 
> See: https://github.com/raspberrypi/linux/issues/2437
> 
> Signed-off-by: Phil Elwell <phil@raspberrypi.org>
> (cherry picked from commit 770de6c8d6b771933c5cfb24708b6027e6ed8d43)
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
> (cherry picked from commit 66524920fa205f6670171e8a38e582b7d9abea38)
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
> ---

I would add "cosmic" to the second pick on commit, but also where is the first
pick from? Does not seem to be linus tree.

-Stefan

>  drivers/net/usb/lan78xx.c | 32 ++++++++++++++++----------------
>  1 file changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
> index 77a186befd07..4e0f223435d4 100644
> --- a/drivers/net/usb/lan78xx.c
> +++ b/drivers/net/usb/lan78xx.c
> @@ -2093,6 +2093,22 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
>  	mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
>  	phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv);
>  
> +	if (of_property_read_bool(dev->udev->dev.of_node,
> +				  "microchip,eee-enabled")) {
> +		struct ethtool_eee edata;
> +		memset(&edata, 0, sizeof(edata));
> +		edata.cmd = ETHTOOL_SEEE;
> +		edata.advertised = ADVERTISED_1000baseT_Full |
> +				   ADVERTISED_100baseT_Full;
> +		edata.eee_enabled = true;
> +		edata.tx_lpi_enabled = true;
> +		if (of_property_read_u32(dev->udev->dev.of_node,
> +					 "microchip,tx-lpi-timer",
> +					 &edata.tx_lpi_timer))
> +			edata.tx_lpi_timer = 600; /* non-aggressive */
> +		(void)lan78xx_set_eee(dev->net, &edata);
> +	}
> +
>  	/* Set LED modes:
>  	 * led: 0=link/activity          1=link1000/activity
>  	 *      2=link100/activity       3=link10/activity
> @@ -2566,22 +2582,6 @@ static int lan78xx_open(struct net_device *net)
>  
>  	netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
>  
> -	if (of_property_read_bool(dev->udev->dev.of_node,
> -				  "microchip,eee-enabled")) {
> -		struct ethtool_eee edata;
> -		memset(&edata, 0, sizeof(edata));
> -		edata.cmd = ETHTOOL_SEEE;
> -		edata.advertised = ADVERTISED_1000baseT_Full |
> -				   ADVERTISED_100baseT_Full;
> -		edata.eee_enabled = true;
> -		edata.tx_lpi_enabled = true;
> -		if (of_property_read_u32(dev->udev->dev.of_node,
> -					 "microchip,tx-lpi-timer",
> -					 &edata.tx_lpi_timer))
> -			edata.tx_lpi_timer = 600; /* non-aggressive */
> -		(void)lan78xx_set_eee(net, &edata);
> -	}
> -
>  	/* for Link Check */
>  	if (dev->urb_intr) {
>  		ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);
>
Paolo Pisati Dec. 5, 2018, 5:43 p.m. UTC | #5
On Wed, Dec 5, 2018 at 5:57 PM Stefan Bader <stefan.bader@canonical.com> wrote:
>
> I would add "cosmic" to the second pick on commit, but also where is the first
> pick from? Does not seem to be linus tree.

For the Bionic point of view, it comes from Cosmic/raspi2 (since
that's where i'm cherry-picking), but originally it came from
Raspberry Pi's github tree / rpi-4.18.y branch

They keep rebasing so that sha1 is no more, but here it is:
https://github.com/raspberrypi/linux/commit/4efb959af4904f09810f4f98a65a4dbc91f0f0d2

commit 4efb959af4904f09810f4f98a65a4dbc91f0f0d2
Author: Phil Elwell <phil@raspberrypi.org>
Date:   Thu Apr 5 14:46:11 2018 +0100

    lan78xx: Move enabling of EEE into PHY init code

    Enable EEE mode as soon as possible after connecting to the PHY, and
    before phy_start. This avoids a second link negotiation, which speeds
    up booting and stops the interface failing to become ready.

    See: https://github.com/raspberrypi/linux/issues/2437

    Signed-off-by: Phil Elwell <phil@raspberrypi.org>
diff mbox series

Patch

diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index 77a186befd07..4e0f223435d4 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -2093,6 +2093,22 @@  static int lan78xx_phy_init(struct lan78xx_net *dev)
 	mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
 	phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv);
 
+	if (of_property_read_bool(dev->udev->dev.of_node,
+				  "microchip,eee-enabled")) {
+		struct ethtool_eee edata;
+		memset(&edata, 0, sizeof(edata));
+		edata.cmd = ETHTOOL_SEEE;
+		edata.advertised = ADVERTISED_1000baseT_Full |
+				   ADVERTISED_100baseT_Full;
+		edata.eee_enabled = true;
+		edata.tx_lpi_enabled = true;
+		if (of_property_read_u32(dev->udev->dev.of_node,
+					 "microchip,tx-lpi-timer",
+					 &edata.tx_lpi_timer))
+			edata.tx_lpi_timer = 600; /* non-aggressive */
+		(void)lan78xx_set_eee(dev->net, &edata);
+	}
+
 	/* Set LED modes:
 	 * led: 0=link/activity          1=link1000/activity
 	 *      2=link100/activity       3=link10/activity
@@ -2566,22 +2582,6 @@  static int lan78xx_open(struct net_device *net)
 
 	netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
 
-	if (of_property_read_bool(dev->udev->dev.of_node,
-				  "microchip,eee-enabled")) {
-		struct ethtool_eee edata;
-		memset(&edata, 0, sizeof(edata));
-		edata.cmd = ETHTOOL_SEEE;
-		edata.advertised = ADVERTISED_1000baseT_Full |
-				   ADVERTISED_100baseT_Full;
-		edata.eee_enabled = true;
-		edata.tx_lpi_enabled = true;
-		if (of_property_read_u32(dev->udev->dev.of_node,
-					 "microchip,tx-lpi-timer",
-					 &edata.tx_lpi_timer))
-			edata.tx_lpi_timer = 600; /* non-aggressive */
-		(void)lan78xx_set_eee(net, &edata);
-	}
-
 	/* for Link Check */
 	if (dev->urb_intr) {
 		ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);