Message ID | PAWP192MB21287372F30C4E55B6DF6158C38E2@PAWP192MB2128.EURP192.PROD.OUTLOOK.COM (mailing list archive) |
---|---|
State | Accepted |
Commit | a2f5c505b4378cd6fc7c4a44ff3665ccef2037db |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: phy: realtek: Fix setting of PHY LEDs Mode B bit on RTL8211F | expand |
On 8/21/24 4:16 AM, Sava Jakovljev wrote: > From: Sava Jakovljev <savaj@meyersound.com> > > The current implementation incorrectly sets the mode bit of the PHY chip. > Bit 15 (RTL8211F_LEDCR_MODE) should not be shifted together with the > configuration nibble of a LED- it should be set independently of the > index of the LED being configured. > As a consequence, the RTL8211F LED control is actually operating in Mode A. > Fix the error by or-ing final register value to write with a const-value of > RTL8211F_LEDCR_MODE, thus setting Mode bit explicitly. > > Fixes: 17784801d888 ("net: phy: realtek: Add support for PHY LEDs on RTL8211F") > > Signed-off-by: Sava Jakovljev <savaj@meyersound.com> > --- > drivers/net/phy/realtek.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c > index 87865918dab6..25e5bfbb6f89 100644 > --- a/drivers/net/phy/realtek.c > +++ b/drivers/net/phy/realtek.c > @@ -555,7 +555,7 @@ static int rtl8211f_led_hw_control_set(struct phy_device *phydev, u8 index, > unsigned long rules) > { > const u16 mask = RTL8211F_LEDCR_MASK << (RTL8211F_LEDCR_SHIFT * index); > - u16 reg = RTL8211F_LEDCR_MODE; /* Mode B */ > + u16 reg = 0; > > if (index >= RTL8211F_LED_COUNT) > return -EINVAL; > @@ -575,6 +575,7 @@ static int rtl8211f_led_hw_control_set(struct phy_device *phydev, u8 index, > } > > reg <<= RTL8211F_LEDCR_SHIFT * index; > + reg |= RTL8211F_LEDCR_MODE; /* Mode B */ Nice find, thanks ! Reviewed-by: Marek Vasut <marex@denx.de>
On 8/21/24 04:16, Sava Jakovljev wrote: > From: Sava Jakovljev <savaj@meyersound.com> > > The current implementation incorrectly sets the mode bit of the PHY chip. > Bit 15 (RTL8211F_LEDCR_MODE) should not be shifted together with the > configuration nibble of a LED- it should be set independently of the > index of the LED being configured. > As a consequence, the RTL8211F LED control is actually operating in Mode A. > Fix the error by or-ing final register value to write with a const-value of > RTL8211F_LEDCR_MODE, thus setting Mode bit explicitly. > > Fixes: 17784801d888 ("net: phy: realtek: Add support for PHY LEDs on RTL8211F") Please, do not insert blank lines in the tag area i.e. between the fixes and sob tags. I'll one-off fix this while applying the patch, No need to resent Cheers, Paolo
Hello: This patch was applied to netdev/net.git (main) by Paolo Abeni <pabeni@redhat.com>: On Wed, 21 Aug 2024 04:16:57 +0200 you wrote: > From: Sava Jakovljev <savaj@meyersound.com> > > The current implementation incorrectly sets the mode bit of the PHY chip. > Bit 15 (RTL8211F_LEDCR_MODE) should not be shifted together with the > configuration nibble of a LED- it should be set independently of the > index of the LED being configured. > As a consequence, the RTL8211F LED control is actually operating in Mode A. > Fix the error by or-ing final register value to write with a const-value of > RTL8211F_LEDCR_MODE, thus setting Mode bit explicitly. > > [...] Here is the summary with links: - net: phy: realtek: Fix setting of PHY LEDs Mode B bit on RTL8211F https://git.kernel.org/netdev/net/c/a2f5c505b437 You are awesome, thank you!
diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c index 87865918dab6..25e5bfbb6f89 100644 --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c @@ -555,7 +555,7 @@ static int rtl8211f_led_hw_control_set(struct phy_device *phydev, u8 index, unsigned long rules) { const u16 mask = RTL8211F_LEDCR_MASK << (RTL8211F_LEDCR_SHIFT * index); - u16 reg = RTL8211F_LEDCR_MODE; /* Mode B */ + u16 reg = 0; if (index >= RTL8211F_LED_COUNT) return -EINVAL; @@ -575,6 +575,7 @@ static int rtl8211f_led_hw_control_set(struct phy_device *phydev, u8 index, } reg <<= RTL8211F_LEDCR_SHIFT * index; + reg |= RTL8211F_LEDCR_MODE; /* Mode B */ return phy_modify_paged(phydev, 0xd04, RTL8211F_LEDCR, mask, reg); }