9b5e492c9ba763796af30c67b549ab31c9eb7798
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.19 / 950-0128-lan78xx-Move-enabling-of-EEE-into-PHY-init-code.patch
1 From 75ec78040e02200dfc2ad4e35c289086334fbee2 Mon Sep 17 00:00:00 2001
2 From: Phil Elwell <phil@raspberrypi.org>
3 Date: Thu, 5 Apr 2018 14:46:11 +0100
4 Subject: [PATCH] lan78xx: Move enabling of EEE into PHY init code
5
6 Enable EEE mode as soon as possible after connecting to the PHY, and
7 before phy_start. This avoids a second link negotiation, which speeds
8 up booting and stops the interface failing to become ready.
9
10 See: https://github.com/raspberrypi/linux/issues/2437
11
12 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
13 ---
14 drivers/net/usb/lan78xx.c | 32 ++++++++++++++++----------------
15 1 file changed, 16 insertions(+), 16 deletions(-)
16
17 --- a/drivers/net/usb/lan78xx.c
18 +++ b/drivers/net/usb/lan78xx.c
19 @@ -2190,6 +2190,22 @@ static int lan78xx_phy_init(struct lan78
20 mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control);
21 phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv);
22
23 + if (of_property_read_bool(dev->udev->dev.of_node,
24 + "microchip,eee-enabled")) {
25 + struct ethtool_eee edata;
26 + memset(&edata, 0, sizeof(edata));
27 + edata.cmd = ETHTOOL_SEEE;
28 + edata.advertised = ADVERTISED_1000baseT_Full |
29 + ADVERTISED_100baseT_Full;
30 + edata.eee_enabled = true;
31 + edata.tx_lpi_enabled = true;
32 + if (of_property_read_u32(dev->udev->dev.of_node,
33 + "microchip,tx-lpi-timer",
34 + &edata.tx_lpi_timer))
35 + edata.tx_lpi_timer = 600; /* non-aggressive */
36 + (void)lan78xx_set_eee(dev->net, &edata);
37 + }
38 +
39 if (phydev->mdio.dev.of_node) {
40 u32 reg;
41 int len;
42 @@ -2667,22 +2683,6 @@ static int lan78xx_open(struct net_devic
43
44 netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
45
46 - if (of_property_read_bool(dev->udev->dev.of_node,
47 - "microchip,eee-enabled")) {
48 - struct ethtool_eee edata;
49 - memset(&edata, 0, sizeof(edata));
50 - edata.cmd = ETHTOOL_SEEE;
51 - edata.advertised = ADVERTISED_1000baseT_Full |
52 - ADVERTISED_100baseT_Full;
53 - edata.eee_enabled = true;
54 - edata.tx_lpi_enabled = true;
55 - if (of_property_read_u32(dev->udev->dev.of_node,
56 - "microchip,tx-lpi-timer",
57 - &edata.tx_lpi_timer))
58 - edata.tx_lpi_timer = 600; /* non-aggressive */
59 - (void)lan78xx_set_eee(net, &edata);
60 - }
61 -
62 /* for Link Check */
63 if (dev->urb_intr) {
64 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL);