* [PATCH net v3 0/2] net: phy: qca808x: fix the active-high LED polarity mode
@ 2026-09-15 22:31 Donggeun Yoo
2026-09-15 22:31 ` [PATCH net v3 1/2] net: phy: qca808x: accept " Donggeun Yoo
2026-09-15 22:31 ` [PATCH net v3 2/2] net: phy: qca808x: keep an explicit active-high LED across the reset Donggeun Yoo
0 siblings, 2 replies; 5+ messages in thread
From: Donggeun Yoo @ 2026-09-15 22:31 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit, David S . Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni
Cc: Russell King, Daniel Golle, Rosen Penev, Christian Marangi,
Sashiko, netdev, linux-arm-msm, linux-kernel, stable,
Donggeun Yoo
A QCA8081 with an 'active-high' LED node does not work today, in two
separate ways, so this is now two patches: qca808x_led_polarity_set()
rejects the mode outright, and once it stops doing that
qca808x_config_init() still will not put the bit back after the reset
phy_init_hw() runs.
Tested in QEMU against a synthetic MDIO bus that answers as a QCA8081 and
emulates MMD7 0x901a, with the reset clearing BIT(6) as f203c8c77c76
describes. One kernel, one harness, three arms, x86_64, 7.3.0-rc2+:
DT node base 1/2 only 1/2 + 2/2
active-high -EINVAL inverted correct
active-low correct correct correct
no polarity node correct correct correct
high-impedance -EINVAL -EINVAL -EINVAL
Still no QCA808x hardware here; the harness emulates the one register, so
a confirmation on a real board would be welcome.
Changes since v2: https://lore.kernel.org/netdev/20260914214720.2467586-1-donggeunyoo.kernel@gmail.com/
- Split in two, one defect each, per Christian Marangi.
- Add QCA808X_PHY_LED_UNSET and express the condition as
PHY_LED_ACTIVE_LOW instead of bare -1/0/1, per Christian Marangi.
- Tested rather than compile-tested; see the table above.
Donggeun Yoo (2):
net: phy: qca808x: accept the active-high LED polarity mode
net: phy: qca808x: keep an explicit active-high LED across the reset
drivers/net/phy/qcom/qca808x.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH net v3 1/2] net: phy: qca808x: accept the active-high LED polarity mode 2026-09-15 22:31 [PATCH net v3 0/2] net: phy: qca808x: fix the active-high LED polarity mode Donggeun Yoo @ 2026-09-15 22:31 ` Donggeun Yoo 2026-09-16 23:56 ` Christian Marangi 2026-09-15 22:31 ` [PATCH net v3 2/2] net: phy: qca808x: keep an explicit active-high LED across the reset Donggeun Yoo 1 sibling, 1 reply; 5+ messages in thread From: Donggeun Yoo @ 2026-09-15 22:31 UTC (permalink / raw) To: Andrew Lunn, Heiner Kallweit, David S . Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni Cc: Russell King, Daniel Golle, Rosen Penev, Christian Marangi, Sashiko, netdev, linux-arm-msm, linux-kernel, stable, Donggeun Yoo commit a274465cc3be ("net: phy: support 'active-high' property for PHY LEDs") added PHY_LED_ACTIVE_HIGH, but qca808x_led_polarity_set() still rejects everything except PHY_LED_ACTIVE_LOW. An LED node carrying 'active-high' therefore falls into the default case and returns -EINVAL, which phy_probe() propagates: the mdio device is left unbound and phy_attach_direct() falls back to the genphy driver, so the PHY loses every qca808x-specific feature, not just the LED. Accept the mode. The register write below already handles both polarities. Cc: stable@vger.kernel.org Fixes: a274465cc3be ("net: phy: support 'active-high' property for PHY LEDs") Signed-off-by: Donggeun Yoo <donggeunyoo.kernel@gmail.com> Assisted-by: Claude:claude-fable-5 --- Tested in QEMU against a synthetic MDIO bus answering as a QCA8081; see the cover letter for the three-arm table. drivers/net/phy/qcom/qca808x.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/phy/qcom/qca808x.c b/drivers/net/phy/qcom/qca808x.c index 8eb51b1a006c..3ba58f14e248 100644 --- a/drivers/net/phy/qcom/qca808x.c +++ b/drivers/net/phy/qcom/qca808x.c @@ -603,6 +603,9 @@ static int qca808x_led_polarity_set(struct phy_device *phydev, int index, case PHY_LED_ACTIVE_LOW: active_low = true; break; + case PHY_LED_ACTIVE_HIGH: + active_low = false; + break; default: return -EINVAL; } -- 2.53.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net v3 1/2] net: phy: qca808x: accept the active-high LED polarity mode 2026-09-15 22:31 ` [PATCH net v3 1/2] net: phy: qca808x: accept " Donggeun Yoo @ 2026-09-16 23:56 ` Christian Marangi 0 siblings, 0 replies; 5+ messages in thread From: Christian Marangi @ 2026-09-16 23:56 UTC (permalink / raw) To: Donggeun Yoo Cc: Andrew Lunn, Heiner Kallweit, David S . Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Russell King, Daniel Golle, Rosen Penev, Sashiko, netdev, linux-arm-msm, linux-kernel, stable On Wed, Sep 16, 2026 at 07:31:37AM +0900, Donggeun Yoo wrote: > commit a274465cc3be ("net: phy: support 'active-high' property for PHY LEDs") > added PHY_LED_ACTIVE_HIGH, but qca808x_led_polarity_set() still rejects > everything except PHY_LED_ACTIVE_LOW. An LED node carrying 'active-high' > therefore falls into the default case and returns -EINVAL, which > phy_probe() propagates: the mdio device is left unbound and > phy_attach_direct() falls back to the genphy driver, so the PHY loses > every qca808x-specific feature, not just the LED. > > Accept the mode. The register write below already handles both > polarities. > > Cc: stable@vger.kernel.org > Fixes: a274465cc3be ("net: phy: support 'active-high' property for PHY LEDs") > Signed-off-by: Donggeun Yoo <donggeunyoo.kernel@gmail.com> > Assisted-by: Claude:claude-fable-5 Reviewed-by: Christian Marangi <ansuelsmth@gmail.com> -- Ansuel ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net v3 2/2] net: phy: qca808x: keep an explicit active-high LED across the reset 2026-09-15 22:31 [PATCH net v3 0/2] net: phy: qca808x: fix the active-high LED polarity mode Donggeun Yoo 2026-09-15 22:31 ` [PATCH net v3 1/2] net: phy: qca808x: accept " Donggeun Yoo @ 2026-09-15 22:31 ` Donggeun Yoo 2026-09-16 23:57 ` Christian Marangi 1 sibling, 1 reply; 5+ messages in thread From: Donggeun Yoo @ 2026-09-15 22:31 UTC (permalink / raw) To: Andrew Lunn, Heiner Kallweit, David S . Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni Cc: Russell King, Daniel Golle, Rosen Penev, Christian Marangi, Sashiko, netdev, linux-arm-msm, linux-kernel, stable, Donggeun Yoo With the previous patch an 'active-high' LED node is accepted, so led_polarity_mode can now hold 0. qca808x_config_init() only re-asserts QCA808X_LED_ACTIVE_HIGH when the mode is -1, the value that means device tree asked for nothing, so an explicit active-high does not reach the register. That matters because the bit does not survive a reset. phy_init_hw() runs .soft_reset before .config_init on every attach and resume, and commit f203c8c77c76 ("net: phy: qcom: qca808x: default to LED active High if not set") records why: "on PHY reset, the Active High bit is not set resulting in the LED driven as active-low". The polarity written from device tree during phy_probe() is therefore gone by the time the link comes up, and the LED runs inverted. Re-assert the bit for anything other than an explicit active-low, which is the one case that wants it clear and gets that from the reset for free. Name the unset value while here: led_polarity_mode otherwise holds a PHY_LED_ACTIVE_* value, so spelling the comparison PHY_LED_ACTIVE_LOW says what it means where -1, 0 and 1 did not. Reported-by: Sashiko <sashiko-bot@kernel.org> Closes: https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260908105959.70453-1-donggeunyoo.kernel%40gmail.com Cc: stable@vger.kernel.org Fixes: a274465cc3be ("net: phy: support 'active-high' property for PHY LEDs") Signed-off-by: Donggeun Yoo <donggeunyoo.kernel@gmail.com> Assisted-by: Claude:claude-fable-5 --- Tested in QEMU against a synthetic MDIO bus answering as a QCA8081, with the reset clearing BIT(6). With only 1/2 applied an 'active-high' node comes up inverted; see the cover letter. drivers/net/phy/qcom/qca808x.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/net/phy/qcom/qca808x.c b/drivers/net/phy/qcom/qca808x.c index 3ba58f14e248..bab26e4c6140 100644 --- a/drivers/net/phy/qcom/qca808x.c +++ b/drivers/net/phy/qcom/qca808x.c @@ -87,6 +87,9 @@ #define QCA8081_PHY_ID 0x004dd101 +/* led_polarity_mode otherwise holds a PHY_LED_ACTIVE_* value */ +#define QCA808X_PHY_LED_UNSET -1 + MODULE_DESCRIPTION("Qualcomm Atheros QCA808X PHY driver"); MODULE_AUTHOR("Matus Ujhelyi"); MODULE_LICENSE("GPL"); @@ -187,8 +190,7 @@ static int qca808x_probe(struct phy_device *phydev) if (!priv) return -ENOMEM; - /* Init LED polarity mode to -1 */ - priv->led_polarity_mode = -1; + priv->led_polarity_mode = QCA808X_PHY_LED_UNSET; phydev->priv = priv; @@ -200,8 +202,8 @@ static int qca808x_config_init(struct phy_device *phydev) struct qca808x_priv *priv = phydev->priv; int ret; - /* Default to LED Active High if active-low not in DT */ - if (priv->led_polarity_mode == -1) { + /* Set LED Active High unless active-low was requested in DT */ + if (priv->led_polarity_mode != PHY_LED_ACTIVE_LOW) { ret = phy_set_bits_mmd(phydev, MDIO_MMD_AN, QCA808X_MMD7_LED_POLARITY_CTRL, QCA808X_LED_ACTIVE_HIGH); @@ -615,7 +617,7 @@ static int qca808x_led_polarity_set(struct phy_device *phydev, int index, * To detect this, check if last requested polarity mode * match the new one. */ - if (priv->led_polarity_mode >= 0 && + if (priv->led_polarity_mode != QCA808X_PHY_LED_UNSET && priv->led_polarity_mode != active_low) { phydev_err(phydev, "PHY polarity is global. Mismatched polarity on different LED\n"); return -EINVAL; -- 2.53.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net v3 2/2] net: phy: qca808x: keep an explicit active-high LED across the reset 2026-09-15 22:31 ` [PATCH net v3 2/2] net: phy: qca808x: keep an explicit active-high LED across the reset Donggeun Yoo @ 2026-09-16 23:57 ` Christian Marangi 0 siblings, 0 replies; 5+ messages in thread From: Christian Marangi @ 2026-09-16 23:57 UTC (permalink / raw) To: Donggeun Yoo Cc: Andrew Lunn, Heiner Kallweit, David S . Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Russell King, Daniel Golle, Rosen Penev, Sashiko, netdev, linux-arm-msm, linux-kernel, stable On Wed, Sep 16, 2026 at 07:31:38AM +0900, Donggeun Yoo wrote: > With the previous patch an 'active-high' LED node is accepted, so > led_polarity_mode can now hold 0. qca808x_config_init() only re-asserts > QCA808X_LED_ACTIVE_HIGH when the mode is -1, the value that means device > tree asked for nothing, so an explicit active-high does not reach the > register. > > That matters because the bit does not survive a reset. phy_init_hw() runs > .soft_reset before .config_init on every attach and resume, and > commit f203c8c77c76 ("net: phy: qcom: qca808x: default to LED active High if not set") > records why: "on PHY reset, the Active High bit is not set resulting in > the LED driven as active-low". The polarity written from device tree > during phy_probe() is therefore gone by the time the link comes up, and > the LED runs inverted. > > Re-assert the bit for anything other than an explicit active-low, which > is the one case that wants it clear and gets that from the reset for > free. Name the unset value while here: led_polarity_mode otherwise > holds a PHY_LED_ACTIVE_* value, so spelling the comparison > PHY_LED_ACTIVE_LOW says what it means where -1, 0 and 1 did not. > > Reported-by: Sashiko <sashiko-bot@kernel.org> > Closes: https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260908105959.70453-1-donggeunyoo.kernel%40gmail.com > Cc: stable@vger.kernel.org > Fixes: a274465cc3be ("net: phy: support 'active-high' property for PHY LEDs") > Signed-off-by: Donggeun Yoo <donggeunyoo.kernel@gmail.com> > Assisted-by: Claude:claude-fable-5 Reviewed-by: Christian Marangi <ansuelsmth@gmail.com> -- Ansuel ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-09-16 23:57 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-09-15 22:31 [PATCH net v3 0/2] net: phy: qca808x: fix the active-high LED polarity mode Donggeun Yoo 2026-09-15 22:31 ` [PATCH net v3 1/2] net: phy: qca808x: accept " Donggeun Yoo 2026-09-16 23:56 ` Christian Marangi 2026-09-15 22:31 ` [PATCH net v3 2/2] net: phy: qca808x: keep an explicit active-high LED across the reset Donggeun Yoo 2026-09-16 23:57 ` Christian Marangi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).