Re: [PATCH] net: phy: micrel: ksz9131 led errata workaround
From: Francesco Dolcini <hidden>
Date: 2021-10-06 09:40:08
Also in:
lkml
Hello, the link to the errata in the commit message is wrong, the correct one is https://ww1.microchip.com/downloads/en/DeviceDoc/KSZ9131RNX-Silicon-Errata-and-Data-Sheet-Clarification-80000863B.pdf, I will fix it in the next patch version. Francesco On Wed, Oct 06, 2021 at 09:37:55AM +0200, Francesco Dolcini wrote:
quoted hunk ↗ jump to hunk
Micrel KSZ9131 PHY LED behavior is not correct when configured in Individual Mode, LED1 (Activity LED) is in the ON state when there is no-link. Workaround this by setting bit 9 of register 0x1e after verifying that the LED configuration is Individual Mode. This issue is described in KSZ9131RNX Silicon Errata DS80000693B (http://ww1.microchip.com/downloads/en/DeviceDoc/80000863A.pdf) and according to that it will not be corrected in a future silicon revision. Signed-off-by: Francesco Dolcini <redacted> --- drivers/net/phy/micrel.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index c330a5a9f665..661dedec84c4 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c@@ -1003,6 +1003,23 @@ static int ksz9131_config_rgmii_delay(struct phy_device *phydev) txcdll_val); } +/* Silicon Errata DS80000693B + * + * When LEDs are configured in Individual Mode, LED1 is ON in a no-link + * condition. Workaround is to set register 0x1e, bit 9, this way LED1 behaves + * according to the datasheet (off if there is no link). + */ + +static int ksz9131_led_errata(struct phy_device *phydev) +{ + int ret = 0; + + if (phy_read_mmd(phydev, 2, 0) & BIT(4)) + ret = phy_set_bits(phydev, 0x1e, BIT(9)); + + return ret; +} + static int ksz9131_config_init(struct phy_device *phydev) { struct device_node *of_node;@@ -1058,6 +1075,10 @@ static int ksz9131_config_init(struct phy_device *phydev) if (ret < 0) return ret; + ret = ksz9131_led_errata(phydev); + if (ret < 0) + return ret; + return 0; }-- 2.25.1