linux/drivers/net/phy
Alexander Kochetkov ae6a762dcd net: phy: fix auto-negotiation stall due to unavailable interrupt
[ Upstream commit f555f34fdc ]

The Ethernet link on an interrupt driven PHY was not coming up if the Ethernet
cable was plugged before the Ethernet interface was brought up.

The patch trigger PHY state machine to update link state if PHY was requested to
do auto-negotiation and auto-negotiation complete flag already set.

During power-up cycle the PHY do auto-negotiation, generate interrupt and set
auto-negotiation complete flag. Interrupt is handled by PHY state machine but
doesn't update link state because PHY is in PHY_READY state. After some time
MAC bring up, start and request PHY to do auto-negotiation. If there are no new
settings to advertise genphy_config_aneg() doesn't start PHY auto-negotiation.
PHY continue to stay in auto-negotiation complete state and doesn't fire
interrupt. At the same time PHY state machine expect that PHY started
auto-negotiation and is waiting for interrupt from PHY and it won't get it.

Fixes: 321beec504 ("net: phy: Use interrupts when available in NOLINK state")
Signed-off-by: Alexander Kochetkov <al.kochet@gmail.com>
Cc: stable <stable@vger.kernel.org> # v4.9+
Tested-by: Roger Quadros <rogerq@ti.com>
Tested-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2017-05-03 08:36:37 -07:00
..
amd.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
aquantia.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
at803x.c at803x: double check SGMII side autoneg 2016-10-27 16:05:17 -04:00
bcm-cygnus.c net: phy: Broadcom Cygnus internal Etherent PHY driver 2015-10-08 04:45:52 -07:00
bcm-phy-lib.c phy: phy_{read|write}_mmd_indirect: get addr from phydev 2016-01-07 14:31:25 -05:00
bcm-phy-lib.h net: phy: Add Broadcom phy library for common interfaces 2015-10-08 04:45:46 -07:00
bcm7xxx.c net: phy: bcm7xxx: Add entries for Broadcom BCM7346 and BCM7362 2016-03-25 11:37:57 -04:00
bcm63xx.c net: phy: bcm63xx: Utilize correct config_intr function 2017-02-04 09:47:10 +01:00
bcm87xx.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
broadcom.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
cicada.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
davicom.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
dp83640.c dp83640: don't recieve time stamps twice 2017-05-03 08:36:36 -07:00
dp83640_reg.h ptp: Added a clock driver for the National Semiconductor PHYTER. 2011-05-23 13:10:23 -07:00
dp83848.c net: phy: dp83848: add dp83822 PHY support 2016-10-29 17:25:17 -04:00
dp83867.c net: phy: dp83867: Fix initialization of PHYCR register 2016-07-02 14:48:58 -04:00
et1011c.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
fixed_phy.c net: phy: fixed_phy: fix of_node leak in fixed_phy_unregister 2016-11-17 12:05:05 -05:00
icplus.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
intel-xway.c NET: PHY: adds driver for Intel XWAY PHY 2016-06-10 22:13:48 -07:00
Kconfig drivers: net: phy: Correct duplicate MDIO_XGENE entry 2016-10-06 21:15:42 -04:00
lxt.c lxt: simplify lxt970_config_init() 2016-05-16 13:53:20 -04:00
Makefile net: phy: Sort Makefile and Kconfig 2016-08-19 17:11:50 -07:00
marvell.c Marvell phy: add functions to suspend and resume both interfaces: fiber and copper links. 2016-07-19 16:05:56 -07:00
mdio-bcm-iproc.c net: phy: Broadcom iProc MDIO bus driver 2015-10-08 04:44:46 -07:00
mdio-bcm-unimac.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-bitbang.c net: phy: mdio-gpio: Handle phy_ignore_ta_mask 2015-05-14 13:40:55 -04:00
mdio-cavium.c phy: mdio-cavium: Add missing MODULE_* annotations. 2016-03-16 19:55:37 -04:00
mdio-cavium.h phy: mdio-octeon: Refactor into two files/modules 2016-03-14 15:27:22 -04:00
mdio-gpio.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-hisi-femac.c net: Add MDIO bus driver for the Hisilicon FEMAC 2016-07-16 21:32:58 -07:00
mdio-moxart.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-mux-bcm-iproc.c net: mdio-mux: Add MDIO mux driver for iProc SoCs 2016-06-10 23:24:54 -07:00
mdio-mux-gpio.c mdio: mux: Enhanced MDIO mux framework for integrated multiplexers 2016-06-10 23:24:53 -07:00
mdio-mux-mmioreg.c mdio: mux: Enhanced MDIO mux framework for integrated multiplexers 2016-06-10 23:24:53 -07:00
mdio-mux.c mdio: mux: avoid 'maybe-uninitialized' warning 2016-06-15 20:48:52 -07:00
mdio-octeon.c phy: mdio-octeon: Refactor into two files/modules 2016-03-14 15:27:22 -04:00
mdio-sun4i.c mdio-sun4i: oops in error handling in probe 2016-03-21 11:30:01 -04:00
mdio-thunder.c phy: mdio-thunder: Add driver for Cavium Thunder SoC MDIO buses. 2016-03-14 15:27:22 -04:00
mdio-xgene.c drivers: net: phy: xgene: Fix 'remove' function 2016-09-13 12:04:11 -04:00
mdio-xgene.h drivers: net: phy: xgene: Add MDIO driver 2016-07-25 21:51:43 -07:00
mdio_bus.c mdio_bus: don't return NULL from mdiobus_scan() 2016-05-04 16:14:19 -04:00
mdio_device.c mdio: Abstract device_remove() and device_free() 2016-01-07 14:31:27 -05:00
micrel.c net: phy: micrel: fix KSZ8041FTL supported value 2016-11-23 20:18:36 -05:00
microchip.c phy: mark lan88xx_suspend() static 2016-09-19 21:52:10 -04:00
mscc.c net: phy: Add Wake-on-LAN driver for Microsemi PHYs. 2016-10-06 20:48:04 -04:00
national.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
phy.c net: phy: fix auto-negotiation stall due to unavailable interrupt 2017-05-03 08:36:37 -07:00
phy_device.c phy: Don't increment MDIO bus refcount unless it's a different owner 2016-12-07 13:27:14 -05:00
qsemi.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
realtek.c net: phy: realtek: fix enabling of the TX-delay for RTL8211F 2016-11-28 12:06:54 -05:00
smsc.c net: phy: smsc: reintroduced unconditional soft reset 2016-06-10 22:14:58 -07:00
spi_ks8995.c net: phy: spi_ks8895: Don't leak references to SPI devices 2016-04-21 15:00:27 -04:00
ste10Xp.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
swphy.c phy: generate swphy registers on the fly 2016-06-27 10:40:57 -04:00
swphy.h phy: generate swphy registers on the fly 2016-06-27 10:40:57 -04:00
teranetics.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
vitesse.c net/phy/vitesse: Configure RGMII skew on VSC8601, if needed 2016-11-16 17:53:56 -05:00
xilinx_gmii2rgmii.c net: phy: xgmiitorgmii: Fix non static symbol warning 2016-08-23 17:17:48 -07:00