linux/drivers/net/phy
Russell King (Oracle) e0d1c55501 net: phy: fix phy_uses_state_machine()
The blamed commit changed the conditions which phylib uses to stop
and start the state machine in the suspend and resume paths, and
while improving it, has caused two issues.

The original code used this test:

	phydev->attached_dev && phydev->adjust_link

and if true, the paths would handle the PHY state machine. This test
evaluates true for normal drivers that are using phylib directly
while the PHY is attached to the network device, but false in all
other cases, which include the following cases:

- when the PHY has never been attached to a network device.
- when the PHY has been detached from a network device (as phy_detach()
   sets phydev->attached_dev to NULL, phy_disconnect() calls
   phy_detach() and additionally sets phydev->adjust_link NULL.)
- when phylink is using the driver (as phydev->adjust_link is NULL.)

Only the third case was incorrect, and the blamed commit attempted to
fix this by changing this test to (simplified for brevity, see
phy_uses_state_machine()):

	phydev->phy_link_change == phy_link_change ?
		phydev->attached_dev && phydev->adjust_link : true

However, this also incorrectly evaluates true in the first two cases.

Fix the first case by ensuring that phy_uses_state_machine() returns
false when phydev->phy_link_change is NULL.

Fix the second case by ensuring that phydev->phy_link_change is set to
NULL when phy_detach() is called.

Reported-by: Xu Yang <xu.yang_2@nxp.com>
Link: https://lore.kernel.org/r/20250806082931.3289134-1-xu.yang_2@nxp.com
Fixes: fc75ea20ff ("net: phy: allow MDIO bus PM ops to start/stop state machine for phylink-controlled PHY")
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://patch.msgid.link/E1uvMEz-00000003Aoe-3qWe@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2025-09-09 16:33:19 -07:00
..
aquantia net: phy: aquantia: fix commenting format 2025-04-29 15:13:21 -07:00
mediatek net: phy: add Kconfig symbol PHY_PACKAGE 2025-06-16 14:59:30 -07:00
mscc phy: mscc: Stop taking ts_lock for tx_queue and use its own lock 2025-09-04 07:48:29 -07:00
qcom treewide: rename GPIO set callbacks back to their original names 2025-08-07 10:07:06 +02:00
realtek net: phy: realtek: add error handling to rtl8211f_get_wol 2025-06-25 16:54:31 -07:00
Kconfig net: phy: NXP_TJA11XX: Update Kconfig with TJA1102 support 2025-09-08 18:24:19 -07:00
Makefile net: phy: add Kconfig symbol PHY_PACKAGE 2025-06-16 14:59:30 -07:00
adin.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
adin1100.c net: phy: Allow loopback speed selection for PHY drivers 2025-03-20 08:45:08 +01:00
air_en8811h.c net: phy: air_en8811h: Introduce resume/suspend and clk_restore_context to ensure correct CKO settings after network interface reinitialization. 2025-07-01 19:35:43 -07:00
amd.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
as21xxx.c net: phy: Add support for Aeonsemi AS21xxx PHYs 2025-05-21 15:56:10 -07:00
ax88796b.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
ax88796b_rust.rs rust: module: introduce `authors` key 2025-03-10 15:12:17 +01:00
bcm-cygnus.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
bcm-phy-lib.c net: phy: broadcom: use genphy_c45_an_config_eee_aneg in bcm_config_lre_aneg 2024-11-07 20:31:06 -08:00
bcm-phy-lib.h
bcm-phy-ptp.c broadcom: fix supported flag check in periodic output function 2025-03-20 08:50:03 +01:00
bcm7xxx.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
bcm63xx.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
bcm87xx.c net: phy: bcm87xx: simplify .match_phy_device OP 2025-05-21 15:56:09 -07:00
bcm54140.c net: phy: move PHY package related code from phy.h to phy_package.c 2025-03-05 19:13:53 -08:00
bcm84881.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
broadcom.c net: phy: bcm54811: PHY initialization 2025-07-09 19:32:31 -07:00
cicada.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
cortina.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
davicom.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
dp83tc811.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
dp83td510.c net: phy: dp83td510: introduce LED framework support 2025-02-10 17:49:19 -08:00
dp83tg720.c net: phy: dp83tg720: switch to adaptive polling and remove random delays 2025-06-13 18:09:47 -07:00
dp83640.c net: ptp: introduce .supported_perout_flags to ptp_clock_info 2025-04-15 20:20:58 -07:00
dp83640_reg.h
dp83822.c net: phy: simplify phy_get_internal_delay() 2025-06-12 18:23:54 -07:00
dp83848.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
dp83867.c net: phy: dp83867: use 2ns delay if not specified in DTB 2025-05-12 18:43:35 -07:00
dp83869.c net: phy: simplify phy_get_internal_delay() 2025-06-12 18:23:54 -07:00
et1011c.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
fixed_phy.c net: phy: fixed_phy: constify status argument where possible 2025-05-20 18:17:43 -07:00
icplus.c net: phy: pass PHY driver to .match_phy_device OP 2025-05-21 15:56:09 -07:00
intel-xway.c net: phy: simplify phy_get_internal_delay() 2025-06-12 18:23:54 -07:00
linkmode.c
lxt.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
marvell-88q2xxx.c net: phy: marvell-88q2xxx: Enable temperature measurement in probe again 2025-05-15 12:32:09 +02:00
marvell-88x2222.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
marvell.c net: phy: marvell: Align set_loopback() implementation 2025-03-20 08:45:08 +01:00
marvell10g.c net: phy: pass PHY driver to .match_phy_device OP 2025-05-21 15:56:09 -07:00
mdio-boardinfo.c net: phy: directly copy struct mdio_board_info in mdiobus_register_board_info 2025-06-13 16:37:23 -07:00
mdio-boardinfo.h net: phy: improve mdio-boardinfo.h 2025-06-13 16:37:23 -07:00
mdio-open-alliance.h
mdio_bus.c net: mdiobus: release reset_gpio in mdiobus_unregister_device() 2025-08-12 12:32:58 +02:00
mdio_bus_provider.c net: mdiobus: release reset_gpio in mdiobus_unregister_device() 2025-08-12 12:32:58 +02:00
mdio_device.c net: phy: assign default match function for non-PHY MDIO devices 2025-06-12 18:12:37 -07:00
mdio_devres.c
meson-gxl.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
micrel.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2025-07-26 11:49:45 -07:00
microchip.c net: phy: microchip: limit 100M workaround to link-down events on LAN88xx 2025-07-10 18:08:16 -07:00
microchip_rds_ptp.c net: ptp: introduce .supported_perout_flags to ptp_clock_info 2025-04-15 20:20:58 -07:00
microchip_rds_ptp.h net: phy: microchip_rds_ptp: Header file library changes for PEROUT 2025-01-16 17:27:56 -08:00
microchip_t1.c net: phy: microchip_t1: Enable pin out specific to lan887x phy for PEROUT signal 2025-01-16 17:27:56 -08:00
microchip_t1s.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
mii_timestamper.c
motorcomm.c
mxl-86110.c net: phy: add driver for MaxLinear MxL86110 PHY 2025-05-27 09:36:17 +02:00
mxl-gpy.c net: phy: mxl-gpy: remove call to devm_hwmon_sanitize_name 2025-03-21 18:05:30 +01:00
national.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
ncn26000.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
nxp-c45-tja11xx-macsec.c
nxp-c45-tja11xx.c net: phy: nxp-c45-tja11xx: fix the PHY ID mismatch issue when using C45 2025-08-12 12:01:07 +02:00
nxp-c45-tja11xx.h
nxp-cbtx.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
nxp-tja11xx.c net: phy: pass PHY driver to .match_phy_device OP 2025-05-21 15:56:09 -07:00
open_alliance_helpers.c
open_alliance_helpers.h
phy-c45.c net: phy: move definition of genphy_c45_driver to phy_device.c 2025-06-12 18:23:08 -07:00
phy-caps.h net: phylink: Use phy_caps to get an interface's capabilities and modes 2025-03-18 09:03:12 +01:00
phy-core.c net: phy: MII-Lite PHY interface mode 2025-07-09 19:32:30 -07:00
phy.c net: phy: transfer phy_config_inband() locking responsibility to phylink 2025-09-05 17:49:43 -07:00
phy_caps.c net: phy: MII-Lite PHY interface mode 2025-07-09 19:32:30 -07:00
phy_device.c net: phy: fix phy_uses_state_machine() 2025-09-09 16:33:19 -07:00
phy_led_triggers.c net: phy: leds: fix memory leak 2025-04-22 18:25:18 -07:00
phy_link_topology.c phy: fix xa_alloc_cyclic() error handling 2025-03-19 09:57:37 +00:00
phy_package.c net: phy: make phy_package a separate module 2025-06-16 14:59:30 -07:00
phylib-internal.h net: phy: move __phy_package_[read|write]_mmd to phy_package.c 2025-06-16 14:59:29 -07:00
phylib.h net: phy: move PHY package MMD access function declarations from phy.h to phylib.h 2025-03-17 19:07:54 +01:00
phylink.c net: phy: transfer phy_config_inband() locking responsibility to phylink 2025-09-05 17:49:43 -07:00
qsemi.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
qt2025.rs Rust changes for v6.15 2025-03-30 17:03:26 -07:00
rockchip.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
sfp-bus.c
sfp.c net: sfp: add quirk for FLYPRO copper SFP+ module 2025-09-02 14:04:16 -07:00
sfp.h
smsc.c net: phy: smsc: add proper reset flags for LAN8710A 2025-07-30 18:14:11 -07:00
spi_ks8995.c sysfs: treewide: switch back to bin_attribute::read()/write() 2025-06-17 10:44:13 +02:00
ste10Xp.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
stubs.c
swphy.c
swphy.h
teranetics.c net: phy: pass PHY driver to .match_phy_device OP 2025-05-21 15:56:09 -07:00
uPD60620.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
vitesse.c net: phy: Constify struct mdio_device_id 2025-01-14 15:01:32 -08:00
xilinx_gmii2rgmii.c net: phy: Allow loopback speed selection for PHY drivers 2025-03-20 08:45:08 +01:00