linux_dsm_epyc7002/drivers/net/phy
Petr Oros e96bd2d3b1 phy: avoid unnecessary link-up delay in polling mode
commit 93c0970493 ("net: phy: consider latched link-down status in
polling mode") removed double-read of latched link-state register for
polling mode from genphy_update_link(). This added extra ~1s delay into
sequence link down->up.
Following scenario:
 - After boot link goes up
 - phy_start() is called triggering an aneg restart, hence link goes
   down and link-down info is latched.
 - After aneg has finished link goes up. In phy_state_machine is checked
   link state but it is latched "link is down". The state machine is
   scheduled after one second and there is detected "link is up". This
   extra delay can be avoided when we keep link-state register double read
   in case when link was down previously.

With this solution we don't miss a link-down event in polling mode and
link-up is faster.

Details about this quirky behavior on Realtek phy:
Without patch:
T0:    aneg is started, link goes down, link-down status is latched
T0+3s: state machine runs, up-to-date link-down is read
T0+4s: state machine runs, aneg is finished (BMSR_ANEGCOMPLETE==1),
       here i read link-down (BMSR_LSTATUS==0),
T0+5s: state machine runs, aneg is finished (BMSR_ANEGCOMPLETE==1),
       up-to-date link-up is read (BMSR_LSTATUS==1),
       phydev->link goes up, state change PHY_NOLINK to PHY_RUNNING

With patch:
T0:    aneg is started, link goes down, link-down status is latched
T0+3s: state machine runs, up-to-date link-down is read
T0+4s: state machine runs, aneg is finished (BMSR_ANEGCOMPLETE==1),
       first BMSR read: BMSR_ANEGCOMPLETE==1 and BMSR_LSTATUS==0,
       second BMSR read: BMSR_ANEGCOMPLETE==1 and BMSR_LSTATUS==1,
       phydev->link goes up, state change PHY_NOLINK to PHY_RUNNING

Signed-off-by: Petr Oros <poros@redhat.com>
Reviewed-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-02-19 16:17:28 -08:00
..
adin.c net: phy: adin: fix a warning about msleep 2020-01-19 16:06:42 +01:00
amd.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
aquantia_hwmon.c
aquantia_main.c net: switch to using PHY_INTERFACE_MODE_10GBASER rather than 10GKR 2020-01-05 15:05:35 -08:00
aquantia.h net: phy: Use the correct style for SPDX License Identifier 2019-11-27 11:25:48 -08:00
at803x.c net: phy: at803x: disable vddio regulator 2020-01-31 07:54:48 -08:00
ax88796b.c net: phy: rename Asix Electronics PHY driver 2019-06-09 13:24:17 -07:00
bcm7xxx.c net: phy: bcm7xxx: define soft_reset for 40nm EPHY 2019-10-18 10:00:07 -07:00
bcm63xx.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
bcm87xx.c net: phy: bcm87xx: improve bcm87xx_config_init and feature detection 2019-05-26 21:56:41 -07:00
bcm84881.c net: switch to using PHY_INTERFACE_MODE_10GBASER rather than 10GKR 2020-01-05 15:05:35 -08:00
bcm-cygnus.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
bcm-phy-lib.c net: phy: Prepare for moving Omega out of bcm7xxx 2019-03-21 13:41:26 -07:00
bcm-phy-lib.h net: phy: Use the correct style for SPDX License Identifier 2019-11-27 11:25:48 -08:00
broadcom.c net: phy: broadcom: add 1000Base-X support for BCM54616S 2019-10-23 20:42:52 -07:00
cicada.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
cortina.c net: phy: remove gen10g_no_soft_reset 2019-03-03 21:47:57 -08:00
davicom.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
dp83tc811.c net: phy: remove calls to genphy_config_init 2019-08-17 12:34:50 -07:00
dp83640_reg.h
dp83640.c net: Introduce a new MII time stamping interface. 2019-12-25 19:51:33 -08:00
dp83822.c net: phy: DP83822: Add support for additional DP83825 devices 2020-01-23 21:21:12 +01:00
dp83848.c net: phy: remove calls to genphy_config_init 2019-08-17 12:34:50 -07:00
dp83867.c Merge ra.kernel.org:/pub/scm/linux/kernel/git/netdev/net 2020-01-19 22:10:04 +01:00
dp83869.c net: phy: dp83869: Remove unneeded semicolon 2019-12-14 16:11:40 -08:00
et1011c.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
fixed_phy.c net: phy: fixed_phy: switch to using fwnode_gpiod_get_index 2020-01-05 14:27:01 -08:00
icplus.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
intel-xway.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
Kconfig net: phy: allow bcm84881 to be a module 2020-02-17 15:08:55 -08:00
linkmode.c net: add linkmode helper for setting flow control advertisement 2020-02-16 19:39:44 -08:00
lxt.c net: phy: provide and use genphy_read_status_fixed() 2019-12-19 12:52:34 -08:00
Makefile net: add helpers to resolve negotiated flow control 2020-02-16 19:39:44 -08:00
marvell10g.c net: switch to using PHY_INTERFACE_MODE_10GBASER rather than 10GKR 2020-01-05 15:05:35 -08:00
marvell.c net: phy: marvell: use genphy_check_and_restart_aneg() 2019-12-19 12:52:34 -08:00
mdio_bus.c net: phy: Maintain MDIO device and bus statistics 2020-01-17 11:12:44 +01:00
mdio_device.c net: phy: allow for reset line to be tied to a sleepy GPIO controller 2019-10-04 18:07:45 -07:00
mdio-aspeed.c net: phy: Add mdio-aspeed 2019-08-02 17:56:28 -07:00
mdio-bcm-iproc.c phy: mdio-bcm-iproc: use devm_platform_ioremap_resource() to simplify code 2019-08-28 14:51:00 -07:00
mdio-bcm-unimac.c net: phy: mdio-bcm-unimac: remove redundant !timeout check 2019-03-27 14:27:30 -07:00
mdio-bitbang.c
mdio-boardinfo.c
mdio-boardinfo.h
mdio-cavium.c
mdio-cavium.h net: phy: Use the correct style for SPDX License Identifier 2019-11-27 11:25:48 -08:00
mdio-gpio.c
mdio-hisi-femac.c phy: mdio-hisi-femac: use devm_platform_ioremap_resource() to simplify code 2019-08-28 14:51:00 -07:00
mdio-i2c.c net: mdio-i2c: add support for Clause 45 accesses 2019-12-11 11:53:41 -08:00
mdio-i2c.h net: phy: Use the correct style for SPDX License Identifier 2019-11-27 11:25:48 -08:00
mdio-moxart.c phy: mdio-moxart: use devm_platform_ioremap_resource() to simplify code 2019-08-28 14:51:00 -07:00
mdio-mscc-miim.c
mdio-mux-bcm-iproc.c
mdio-mux-gpio.c
mdio-mux-meson-g12a.c clk: let init callback return an error code 2019-12-23 18:53:13 -08:00
mdio-mux-mmioreg.c
mdio-mux-multiplexer.c drivers: net: phy: mdio-mux: Add support for Generic Mux controls 2019-02-27 12:52:20 -08:00
mdio-mux.c
mdio-octeon.c
mdio-sun4i.c phy: mdio-sun4i: add missed regulator_disable in remove 2019-11-18 17:22:40 -08:00
mdio-thunder.c phy: mdio-thunder: add missed pci_release_regions in remove 2019-12-06 12:05:06 -08:00
mdio-xgene.c net: phy: xgene: use devm_platform_ioremap_resource() to simplify code 2019-08-01 13:10:34 -04:00
mdio-xgene.h net: phy: Use the correct style for SPDX License Identifier 2019-11-27 11:25:48 -08:00
meson-gxl.c net: phy: remove calls to genphy_config_init 2019-08-17 12:34:50 -07:00
micrel.c net: phy: micrel: Update KSZ87xx PHY name 2019-10-17 16:31:52 -07:00
microchip_t1.c net: phy: remove calls to genphy_config_init 2019-08-17 12:34:50 -07:00
microchip.c net: phy: remove calls to genphy_config_init 2019-08-17 12:34:50 -07:00
mii_timestamper.c net: mii_timestamper: fix static allocation by PHY driver 2020-01-31 07:46:11 -08:00
mscc_fc_buffer.h net: phy: mscc: macsec initialization 2020-01-14 11:31:41 -08:00
mscc_mac.h net: phy: mscc: macsec initialization 2020-01-14 11:31:41 -08:00
mscc_macsec.h net: phy: mscc: PN rollover support 2020-01-14 11:31:41 -08:00
mscc.c net: phy: mscc: PN rollover support 2020-01-14 11:31:41 -08:00
national.c net/phy: fix DP83865 10 Mbps HDX loopback disable function 2019-09-21 18:21:52 -07:00
nxp-tja11xx.c net: phy: tja11xx: Switch to HWMON_CHANNEL_INFO() 2019-05-29 22:02:18 -07:00
phy_device.c phy: avoid unnecessary link-up delay in polling mode 2020-02-19 16:17:28 -08:00
phy_led_triggers.c net: phy: phy_led_triggers: Fix a possible null-pointer dereference in phy_led_trigger_change_speed() 2019-07-31 18:56:11 -04:00
phy-c45.c phy: avoid unnecessary link-up delay in polling mode 2020-02-19 16:17:28 -08:00
phy-core.c ethtool: Add support for low latency RS FEC 2020-02-18 19:17:31 -08:00
phy.c net: phy: add new version of phy_do_ioctl 2020-01-21 10:50:41 +01:00
phylink.c net: phylink: improve initial mac configuration 2020-02-16 19:39:45 -08:00
qsemi.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
realtek.c net: phy: realtek: add support for configuring the RX delay on RTL8211F 2019-12-26 13:22:17 -08:00
rockchip.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
sfp-bus.c net: switch to using PHY_INTERFACE_MODE_10GBASER rather than 10GKR 2020-01-05 15:05:35 -08:00
sfp.c net: sfp: report error on failure to read sfp soft status 2019-12-19 17:26:07 -08:00
sfp.h net: sfp: add module start/stop upstream notifications 2019-12-11 11:53:41 -08:00
smsc.c net: phy: smsc: LAN8740: add PHY_RST_AFTER_CLK_EN flag 2019-10-23 21:44:44 -07:00
spi_ks8995.c spi: Micrel eth switch: declare missing of table 2019-04-23 10:44:44 -07:00
ste10Xp.c net: phy: switch drivers to use dynamic feature detection 2019-04-15 17:19:54 -07:00
swphy.c net: phy: swphy: emulate register MII_ESTATUS 2019-08-15 11:43:48 -07:00
swphy.h
teranetics.c net: phy: remove gen10g_no_soft_reset 2019-03-03 21:47:57 -08:00
uPD60620.c net: phy: use phy_resolve_aneg_pause() 2019-12-19 12:52:34 -08:00
vitesse.c net: phy: remove calls to genphy_config_init 2019-08-17 12:34:50 -07:00
xilinx_gmii2rgmii.c net: phy: gmii2rgmii: Dont use priv field in phy device 2019-09-05 12:32:06 +02:00