Re: [PATCH net] net: phy: mediatek: do not report link and per-speed LED rules together
From: Andrew Lunn
Date: Mon Sep 14 2026 - 10:17:37 EST
On Sat, Sep 12, 2026 at 05:43:06PM +0400, Ahmed Naseef wrote:
> 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: c66937b0f8db ("net: phy: mediatek-ge-soc: support PHY LEDs")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Ahmed Naseef <naseefkm@xxxxxxxxx>
Reviewed-by: Andrew Lunn <andrew@xxxxxxx>
Andrew