linux_dsm_epyc7002/drivers/net/phy
Oleksij Rempel 6110dff776 net: phy: micrel: kszphy_resume(): add delay after genphy_resume() before accessing PHY registers
After the power-down bit is cleared, the chip internally triggers a
global reset. According to the KSZ9031 documentation, we have to wait at
least 1ms for the reset to finish.

If the chip is accessed during reset, read will return 0xffff, while
write will be ignored. Depending on the system performance and MDIO bus
speed, we may or may not run in to this issue.

This bug was discovered on an iMX6QP system with KSZ9031 PHY and
attached PHY interrupt line. If IRQ was used, the link status update was
lost. In polling mode, the link status update was always correct.

The investigation showed, that during a read-modify-write access, the
read returned 0xffff (while the chip was still in reset) and
corresponding write hit the chip _after_ reset and triggered (due to the
0xffff) another reset in an undocumented bit (register 0x1f, bit 1),
resulting in the next write being lost due to the new reset cycle.

This patch fixes the issue by adding a 1...2 ms sleep after the
genphy_resume().

Fixes: 836384d250 ("net: phy: micrel: Add specific suspend")
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-04-03 16:04:24 -07:00
..
mscc net: phy: mscc: consolidate a common RGMII delay implementation 2020-03-24 16:36:37 -07:00
adin.c
amd.c
aquantia_hwmon.c
aquantia_main.c net: phy: aquantia: use phy_read_mmd_poll_timeout() to simplify the code 2020-03-23 22:00:02 -07:00
aquantia.h
at803x.c net: phy: at803x: fix clock sink configuration on ATH8030 and ATH8035 2020-04-01 11:20:47 -07:00
ax88796b.c
bcm7xxx.c net: phy: bcm7xx: add jumbo frame configuration to PHY 2020-03-27 16:07:24 -07:00
bcm63xx.c net: phy: bcm63xx: fix OOPS due to missing driver name 2020-03-03 17:37:06 -08:00
bcm87xx.c
bcm84881.c net: phy: bcm84881: use phy_read_mmd_poll_timeout() to simplify the code 2020-03-23 22:00:02 -07:00
bcm-cygnus.c
bcm-phy-lib.c net: phy: bcm7xx: add jumbo frame configuration to PHY 2020-03-27 16:07:24 -07:00
bcm-phy-lib.h net: phy: bcm7xx: add jumbo frame configuration to PHY 2020-03-27 16:07:24 -07:00
broadcom.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-02-21 13:39:34 -08:00
cicada.c
cortina.c
davicom.c
dp83tc811.c
dp83640_reg.h
dp83640.c ptp: Avoid deadlocks in the programmable pin code. 2020-03-30 11:16:38 -07:00
dp83822.c net: phy: DP83822: Add support for additional DP83825 devices 2020-01-23 21:21:12 +01:00
dp83848.c
dp83867.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-03-25 18:58:11 -07:00
dp83869.c
et1011c.c
fixed_phy.c
icplus.c
intel-xway.c
Kconfig net: phy: add marvell usb to mdio controller 2020-03-26 19:49:34 -07:00
linkmode.c net: add linkmode helper for setting flow control advertisement 2020-02-16 19:39:44 -08:00
lxt.c
Makefile net: phy: add marvell usb to mdio controller 2020-03-26 19:49:34 -07:00
marvell10g.c net: phy: marvell10g: use phy_read_mmd_poll_timeout() to simplify the code 2020-03-23 22:00:02 -07:00
marvell.c net: phy: marvell: remove downshift warning now that phylib takes care 2020-03-23 21:09:47 -07:00
mdio_bus.c net: mdiobus: add APIs for modifying a MDIO device register 2020-03-17 22:51:16 -07:00
mdio_device.c
mdio-aspeed.c
mdio-bcm-iproc.c net: phy: restore mdio regs in the iproc mdio driver 2020-02-16 19:19:18 -08:00
mdio-bcm-unimac.c net: phy: mdio-bcm-unimac: Fix clock handling 2020-03-24 16:45:32 -07:00
mdio-bitbang.c
mdio-boardinfo.c
mdio-boardinfo.h
mdio-cavium.c
mdio-cavium.h
mdio-gpio.c
mdio-hisi-femac.c
mdio-i2c.c
mdio-i2c.h
mdio-ipq8064.c net: mdio: add ipq8064 mdio driver 2020-03-06 22:07:05 -08:00
mdio-moxart.c
mdio-mscc-miim.c
mdio-mux-bcm-iproc.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-03-25 18:58:11 -07:00
mdio-mux-gpio.c
mdio-mux-meson-g12a.c
mdio-mux-mmioreg.c
mdio-mux-multiplexer.c
mdio-mux.c
mdio-mvusb.c net: phy: add marvell usb to mdio controller 2020-03-26 19:49:34 -07:00
mdio-octeon.c
mdio-sun4i.c
mdio-thunder.c
mdio-xgene.c
mdio-xgene.h
mdio-xpcs.c net: phy: xpcs: Restart AutoNeg if outcome was invalid 2020-03-23 21:01:58 -07:00
meson-gxl.c
micrel.c net: phy: micrel: kszphy_resume(): add delay after genphy_resume() before accessing PHY registers 2020-04-03 16:04:24 -07:00
microchip_t1.c
microchip.c
mii_timestamper.c net: mii_timestamper: fix static allocation by PHY driver 2020-01-31 07:46:11 -08:00
national.c
nxp-tja11xx.c net: phy: tja11xx: use phy_read_poll_timeout() to simplify the code 2020-03-23 22:00:02 -07:00
phy_device.c net: phy: don't touch suspended flag if there's no suspend/resume callback 2020-03-26 20:29:51 -07:00
phy_led_triggers.c
phy-c45.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-02-27 18:31:39 -08:00
phy-core.c net: phy: add and use phy_check_downshift 2020-03-23 21:09:47 -07:00
phy.c net: phy: add and use phy_check_downshift 2020-03-23 21:09:47 -07:00
phylink.c net: phylink: add separate pcs operations structure 2020-03-30 11:52:27 -07:00
qsemi.c
realtek.c net: phy: realtek: read actual speed to detect downshift 2020-03-18 17:05:34 -07:00
rockchip.c
sfp-bus.c net: phy: sfp-bus.c: get rid of docs warnings 2020-03-17 23:39:29 -07:00
sfp.c
sfp.h
smsc.c net: phy: smsc: use phy_read_poll_timeout() to simplify the code 2020-03-23 22:00:02 -07:00
spi_ks8995.c
ste10Xp.c
swphy.c
swphy.h
teranetics.c
uPD60620.c
vitesse.c
xilinx_gmii2rgmii.c