blob: 95877137db231b9f9fc1b26c0f7c74cd0fb4a310 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001From fa3bc9db82e8a0f90986c94f5c69ba8dae265ecf Mon Sep 17 00:00:00 2001
2From: Phil Elwell <phil@raspberrypi.org>
3Date: Thu, 5 Apr 2018 14:46:11 +0100
4Subject: [PATCH] lan78xx: Move enabling of EEE into PHY init code
5
6Enable EEE mode as soon as possible after connecting to the PHY, and
7before phy_start. This avoids a second link negotiation, which speeds
8up booting and stops the interface failing to become ready.
9
10See: https://github.com/raspberrypi/linux/issues/2437
11
12Signed-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@@ -2153,6 +2153,22 @@ static int lan78xx_phy_init(struct lan78
20 mii_adv_to_linkmode_adv_t(fc, mii_adv);
21 linkmode_or(phydev->advertising, fc, phydev->advertising);
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@@ -2626,22 +2642,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);