linux/drivers/net/phy
Ahmed Naseef bde5212360 net: phy: mediatek: do not report link and per-speed LED rules together
mtk_phy_led_hw_ctrl_get() reports TRIGGER_NETDEV_LINK whenever any of the
speed bits in on_set is on, and in addition reports every individual
TRIGGER_NETDEV_LINK_* bit that is set. The netdev trigger refuses that
combination: netdev_led_attr_store() rejects TRIGGER_NETDEV_LINK together
with any per-speed rule, and it validates the whole resulting mode rather
than just the bit being written. Once the hardware has any link bit
programmed, every write to the trigger attributes of that LED therefore
fails with -EINVAL and the LED can no longer be configured.

The rules are also fed back into the hardware: the trigger stores what is
read back, and a later write of device_name programs it again, expanding
TRIGGER_NETDEV_LINK to every speed in on_set. An LED configured for a
single speed is thereby silently widened to "on at any link speed".

Both are easy to see on the EcoNet EN7528, whose four PHYs share one LED
block. The first LED programs the block correctly, the second reads those
rules back and rewrites them widened, and the remaining two then read the
widened value, so an LED configured for "link_10 link_100" ends up lit on a
1000 Mbps link.

on_set holds every speed the LED can indicate and is exactly what
mtk_phy_led_hw_ctrl_set() programs for TRIGGER_NETDEV_LINK, so report the
speed independent rule only when all of them are on, and the individual
speeds otherwise. The mapping is then the inverse of the one used when
programming the LED and round trips without changing the register.

Fixes: c66937b0f8 ("net: phy: mediatek-ge-soc: support PHY LEDs")
Cc: stable@vger.kernel.org
Signed-off-by: Ahmed Naseef <naseefkm@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20260912134306.3544329-1-naseefkm@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-09-14 19:01:51 -07:00
..
aquantia net: phy: aquantia: use ADVERTISE_XNP for extended next page advertising 2026-04-29 17:30:05 -07:00
mediatek net: phy: mediatek: do not report link and per-speed LED rules together 2026-09-14 19:01:51 -07:00
mscc Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
qcom net: phy: at803x: Use a helper to check for phy reset existence 2026-07-17 15:43:32 +02:00
realtek Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2026-08-13 11:00:14 -07:00
adin.c net: phy: adin: enable configuration of the LP Termination Register 2026-01-15 19:36:04 -08:00
adin1100.c net: phy: adin1100: Simplify register value passing 2025-11-20 18:03:59 -08:00
adin1140-phy.c net: phy: Add support for the ADIN1140 PHY 2026-07-21 10:53:24 +02:00
air_an8801.c net: phy: air_an8801: ensure maximum available speed link use 2026-05-27 18:39:24 -07:00
air_en8811h.c net: phy: air_en8811h: move LED GPIO configuration to config_init 2026-08-27 11:47:01 +02:00
air_phy_lib.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2026-05-28 14:02:21 -07:00
air_phy_lib.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2026-05-28 14:02:21 -07:00
amd.c
as21xxx.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
ax88796b_rust.rs drivers: net: replace kernel::c_str! with C-Strings 2026-01-05 16:32:39 -08:00
ax88796b.c net: phy: ax88796b: Replace hard-coded values with PHY_ID_MATCH_MODEL() 2025-09-22 16:38:59 -07:00
bcm-cygnus.c
bcm-phy-lib.c net: phy: broadcom: Save PHY counters during suspend 2026-05-07 08:36:47 -07:00
bcm-phy-lib.h net: phy: broadcom: Save PHY counters during suspend 2026-05-07 08:36:47 -07:00
bcm-phy-ptp.c net: phy: broadcom: add HW timestamp configuration reporting 2025-11-26 16:56:34 -08:00
bcm7xxx.c net: phy: broadcom: Save PHY counters during suspend 2026-05-07 08:36:47 -07:00
bcm63xx.c
bcm87xx.c net: phy: bcm87xx: simplify .match_phy_device OP 2025-05-21 15:56:09 -07:00
bcm54140.c
bcm84881.c net: phy: bcm84881: add LED framework support for BCM84891/BCM84892 2026-04-02 17:59:43 -07:00
broadcom.c net: phy: broadcom: Save PHY counters during suspend 2026-05-07 08:36:47 -07:00
cicada.c
cortina.c
dap8211r.c net: phy: add DAPU Telecom DAP8211R(I) Gigabit Ethernet PHY driver 2026-08-10 15:30:25 -07:00
davicom.c
dp83tc811.c net: phy: DP83TC811: add reading of abilities 2026-05-14 15:17:12 +02:00
dp83td510.c net: phy: dp83td510: handle the active-high LED polarity mode 2026-09-10 08:47:22 -07:00
dp83tg720.c net: phy: dp83tg720: switch to adaptive polling and remove random delays 2025-06-13 18:09:47 -07:00
dp83640_reg.h
dp83640.c net: phy: dp83640: fix per-bus clock lifetime 2026-08-13 17:30:15 -07:00
dp83822.c net: phy: dp83822: Add optional external PHY clock 2026-06-02 11:38:00 -07:00
dp83848.c
dp83867.c net: phy: dp83867: handle the active-high LED polarity mode 2026-09-10 08:02:06 -07:00
dp83869.c net: phy: dp83869: fix setting CLK_O_SEL field. 2026-04-28 15:51:55 +02:00
et1011c.c
fixed_phy.c net: phy: fixed_phy: replace IDA with a bitmap 2026-01-13 18:58:49 -08: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: intel-xway: add PHY-level statistics via ethtool 2026-05-12 17:51:29 -07:00
Kconfig net: phy: add DAPU Telecom DAP8211R(I) Gigabit Ethernet PHY driver 2026-08-10 15:30:25 -07:00
linkmode.c
lxt.c
Makefile net: phy: add DAPU Telecom DAP8211R(I) Gigabit Ethernet PHY driver 2026-08-10 15:30:25 -07:00
marvell-88q2xxx.c net: phy: marvell-88q2xxx: Fix clamped value in mv88q2xxx_hwmon_write 2025-12-04 17:49:31 -08:00
marvell-88x2222.c net: phy: marvell-88x2222: Support SFP through phy_port interface 2026-01-13 18:52:35 -08:00
marvell.c net: phy: marvell: fix return code 2026-07-20 17:51:46 -07:00
marvell10g.c net: phy: marvell10g: Support SFP through phy_port 2026-01-13 18:52:35 -08:00
mdio_bus_provider.c Networking changes for 7.1. 2026-04-14 18:36:10 -07:00
mdio_bus.c net: phy: move remaining provider code to mdio_bus_provider.c 2026-03-14 12:23:02 -07:00
mdio_device.c net: phy: drop duplicated header include in mdio-device 2026-07-21 08:28:49 -07:00
mdio_devres.c
mdio-open-alliance.h net: phy: phy-c45: add SQI and SQI+ support for OATC14 10Base-T1S PHYs 2025-12-01 15:08:24 -08:00
meson-gxl.c
micrel.c net: phy: micrel: Add loopback support for ksz9131 2026-07-30 13:14:31 +02:00
microchip_rds_ptp.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
microchip_rds_ptp.h
microchip_t1.c net: remove conditional return with no effect 2026-07-30 13:04:03 +02:00
microchip_t1s.c net: phy: microchip-t1s: use generic C45 MMD access helpers 2026-07-21 10:53:24 +02:00
microchip.c net: phy: microchip: enable downshift by default on LAN88xx 2026-04-02 18:03:03 -07:00
mii_timestamper.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
motorcomm.c net: phy: motorcomm: enable the reference clock for YT8521 2026-08-03 17:48:37 -07:00
mxl-86110.c net: phy: mxl-86110: Add power management and soft reset support 2026-01-04 09:53:33 -08:00
mxl-gpy.c net: phy: mxl-gpy: add PHY-level statistics via ethtool 2026-03-17 16:07:40 -07:00
national.c
ncn26000.c
nxp-c45-tja11xx-macsec.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
nxp-c45-tja11xx.c net: phy: nxp-c45-tja11xx: add HW timestamp configuration reporting 2025-11-26 16:56:34 -08:00
nxp-c45-tja11xx.h
nxp-cbtx.c
nxp-tja11xx.c net: phy: nxp-tja11xx: cancel registration work on remove 2026-08-05 17:50:03 -07:00
open_alliance_helpers.c
open_alliance_helpers.h
phy_caps.c net: ethtool: Add support for 80Gbps speed 2026-01-19 12:09:58 -08:00
phy_device.c net: phy: add generic helpers for direct C45 MMD access 2026-07-21 10:53:24 +02:00
phy_led_triggers.c Convert remaining multi-line kmalloc_obj/flex GFP_KERNEL uses 2026-02-22 08:26:33 -08:00
phy_link_topology.c net: ethtool: make dev->hwprov ops-protected 2026-06-09 10:13:04 -07:00
phy_package.c net: phy: add PHY package locking helpers 2026-08-13 17:29:53 -07:00
phy_port.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
phy-c45.c net: phy: c45: add setup and read master/slave helpers 2026-07-31 18:22:48 -07:00
phy-caps.h net: ethtool: Add support for 80Gbps speed 2026-01-19 12:09:58 -08:00
phy-core.c net: ethtool: Add support for 80Gbps speed 2026-01-19 12:09:58 -08:00
phy.c net: phy: add a PHY write barrier when disabling interrupts 2026-04-12 14:19:19 -07:00
phylib-internal.h net: phy: move remaining provider code to mdio_bus_provider.c 2026-03-14 12:23:02 -07:00
phylib.h net: phy: add PHY package locking helpers 2026-08-13 17:29:53 -07:00
phylink.c net: phylink: initialise link_state before a forced major config 2026-09-09 18:47:16 -07:00
qsemi.c
qt2025.rs drivers: net: replace kernel::c_str! with C-Strings 2026-01-05 16:32:39 -08:00
rockchip.c
sfp-bus.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
sfp.c net: sfp: add quirks for OEM XGSPONST2001 and FS XGS-SFP-ONT-MACI 2026-08-17 13:28:38 -07:00
sfp.h net: sfp: allow prefix matching in quirk lookup 2026-08-17 13:28:38 -07:00
smsc.c net: phy: smsc: add proper reset flags for LAN8710A 2025-07-30 18:14:11 -07:00
ste10Xp.c
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
vitesse.c net: phy: vitesse: add inband caps and configuration 2026-03-12 17:55:33 -07:00
xilinx_gmii2rgmii.c