mirror-linux/drivers/net/phy
Oleksij Rempel 6d806841f1 net: phy: dp83td510: fix kernel stall during netboot in DP83TD510E PHY driver
commit fc0649395d upstream.

Fix an issue where the kernel would stall during netboot, showing the
"sched: RT throttling activated" message. This stall was triggered by
the behavior of the mii_interrupt bit (Bit 7 - DP83TD510E_STS_MII_INT)
in the DP83TD510E's PHY_STS Register (Address = 0x10). The DP83TD510E
datasheet (2020) states that the bit clears on write, however, in
practice, the bit clears on read.

This discrepancy had significant implications on the driver's interrupt
handling. The PHY_STS Register was used by handle_interrupt() to check
for pending interrupts and by read_status() to get the current link
status. The call to read_status() was unintentionally clearing the
mii_interrupt status bit without deasserting the IRQ pin, causing
handle_interrupt() to miss other pending interrupts. This issue was most
apparent during netboot.

The fix refrains from using the PHY_STS Register for interrupt handling.
Instead, we now solely rely on the INTERRUPT_REG_1 Register (Address =
0x12) and INTERRUPT_REG_2 Register (Address = 0x13) for this purpose.
These registers directly influence the IRQ pin state and are latched
high until read.

Note: The INTERRUPT_REG_2 Register (Address = 0x13) exists and can also
be used for interrupt handling, specifically for "Aneg page received
interrupt" and "Polarity change interrupt". However, these features are
currently not supported by this driver.

Fixes: 165cd04fe2 ("net: phy: dp83td510: Add support for the DP83TD510 Ethernet PHY")
Cc: <stable@vger.kernel.org>
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20230621043848.3806124-1-o.rempel@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-07-23 13:49:32 +02:00
..
mscc net: phy: mscc: enable VSC8501/2 RGMII RX clock 2023-06-05 09:26:20 +02:00
Kconfig net: phy: mxl-gpy: add temperature sensor 2022-06-23 20:55:18 -07:00
Makefile net: phy: broadcom: Add PTP support for some Broadcom PHYs. 2022-06-23 20:49:02 -07:00
adin.c net: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:07 -07:00
adin1100.c net: phy: adin1100: add PHY IDs of adin1110/adin2111 2022-09-20 15:00:30 +02:00
amd.c
aquantia.h
aquantia_hwmon.c
aquantia_main.c net: phy: aquantia: Add support for rate matching 2022-09-23 11:56:18 +01:00
at803x.c net: phy: at803x: fix error return code in at803x_probe() 2022-11-21 20:43:01 -08:00
ax88796b.c net: phy: ax88772a: fix lost pause advertisement configuration 2022-06-29 20:39:05 -07:00
bcm-cygnus.c
bcm-phy-lib.c net: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:07 -07:00
bcm-phy-lib.h net: phy: bcm7xx: Correct read from expansion register 2023-05-24 17:32:31 +01:00
bcm-phy-ptp.c net: phy: Add support for 1PPS out and external timestamps 2022-06-23 20:49:02 -07:00
bcm7xxx.c net: phy: bcm7xx: Correct read from expansion register 2023-05-24 17:32:31 +01:00
bcm63xx.c
bcm87xx.c net: phy: bcm87xx: Use mmd helpers 2022-05-02 13:21:38 +02:00
bcm54140.c
bcm84881.c
broadcom.c net: phy: broadcom: Implement suspend/resume for AC131 and BCM5241 2022-08-17 11:49:23 +01:00
cicada.c
cortina.c
davicom.c
dp83tc811.c
dp83td510.c net: phy: dp83td510: fix kernel stall during netboot in DP83TD510E PHY driver 2023-07-23 13:49:32 +02:00
dp83640.c
dp83640_reg.h
dp83822.c net: phy: dp83822: Fix null pointer access on DP83825/DP83826 devices 2023-02-09 11:28:05 +01:00
dp83848.c
dp83867.c Revert "net: phy: dp83867: perform soft reset and retain established link" 2023-06-28 11:12:33 +02:00
dp83869.c net: phy: dp83869: fix default value for tx-/rx-internal-delay 2023-04-06 12:10:53 +02:00
et1011c.c
fixed_phy.c net: phy: fixed_phy: set phy_mask before calling mdiobus_register() 2022-06-13 23:11:24 -07:00
icplus.c
intel-xway.c
linkmode.c
lxt.c
marvell-88x2222.c net: sfp: augment SFP parsing with phy_interface_t bitmap 2022-10-03 11:08:32 +01:00
marvell.c net: phy: marvell: add sleep time after enabling the loopback bit 2022-11-15 13:14:46 +01:00
marvell10g.c net: phy: marvell10g: select host interface configuration 2022-10-03 11:08:32 +01:00
mdio-boardinfo.c
mdio-boardinfo.h
mdio_bus.c net: mdio: validate parameter addr in mdiobus_get_phy() 2023-02-01 08:34:19 +01:00
mdio_device.c net: mdio: fix unbalanced fwnode reference count in mdio_device_release() 2022-12-06 12:50:00 +01:00
mdio_devres.c net: mdio: fix owner field for mdio buses registered using device-tree 2023-03-30 12:49:05 +02:00
mediatek-ge.c
meson-gxl.c net: phy: meson-gxl: use MMD access dummy stubs for GXL, internal PHY 2023-02-14 19:11:44 +01:00
micrel.c net: phy: micrel: Fixes FIELD_GET assertion 2022-10-12 17:51:33 -07:00
microchip.c net: lan78xx: fix accessing the LAN7800's internal phy specific registers from the MAC driver 2023-03-17 08:50:24 +01:00
microchip_t1.c net: phy: lan87xx: change interrupt src of link_up to comm_ready 2022-09-08 11:02:44 +02:00
mii_timestamper.c
motorcomm.c
mxl-gpy.c net: phy: mxl-gpy: add MDINT workaround 2022-12-07 20:04:11 -08:00
national.c
nxp-c45-tja11xx.c net: phy: nxp-c45-tja11xx: fix unsigned long multiplication overflow 2023-04-20 12:35:13 +02:00
nxp-tja11xx.c net: phy: tja11xx: add interface mode and RMII REF_CLK support 2022-08-23 17:43:28 -07:00
phy-c45.c net: phy: c45 baset1: do not skip aneg configuration if clock role is not specified 2022-08-08 20:54:28 -07:00
phy-core.c net: phy: Add support for rate matching 2022-09-23 11:55:35 +01:00
phy.c net: phy: Ensure state transitions are processed from phy_stop() 2023-03-30 12:49:04 +02:00
phy_device.c net: phylib: get rid of unnecessary locking 2023-03-17 08:50:25 +01:00
phy_led_triggers.c
phylink.c net: phylink: use a dedicated helper to parse usgmii control word 2023-06-21 16:01:00 +02:00
qsemi.c
realtek.c net: phy: realtek: add support for RTL8211F(D)(I)-VD-CG 2022-08-22 12:47:18 +01:00
rockchip.c
sfp-bus.c net: sfp: fill also 5gbase-r and 25gbase-r modes in sfp_parse_support() 2022-10-10 18:00:29 -07:00
sfp.c net: sfp: fix state loss when updating state_hw_mask 2023-06-14 11:15:15 +02:00
sfp.h net: sfp: augment SFP parsing with phy_interface_t bitmap 2022-10-03 11:08:32 +01:00
smsc.c net: phy: smsc: bail out in lan87xx_read_status if genphy_read_status fails 2023-03-22 13:33:46 +01:00
spi_ks8995.c net: phy: spi_ks8895: switch to using gpiod API 2022-09-15 11:43:51 +02:00
ste10Xp.c
swphy.c
swphy.h
teranetics.c
uPD60620.c
vitesse.c
xilinx_gmii2rgmii.c net: phy: xgmiitorgmii: Fix refcount leak in xgmiitorgmii_probe 2023-01-12 12:02:20 +01:00