From: Yongzhao Chen <yongzhao.derek@gmail.com>
To: netdev@vger.kernel.org
Cc: andrew@lunn.ch, olteanv@gmail.com, ansuelsmth@gmail.com,
hkallweit1@gmail.com, linux@armlinux.org.uk,
florian.fainelli@broadcom.com, jonas.gorski@gmail.com,
woojung.huh@microchip.com, UNGLinuxDriver@microchip.com,
hzyitc@outlook.com, kuba@kernel.org, pabeni@redhat.com,
horms@kernel.org, Yongzhao Chen <yongzhao.derek@gmail.com>
Subject: [RFC PATCH net-next v2 5/5] net: phy: qca83xx: disable SmartSpeed before resetting CPU PHYs
Date: Tue, 22 Sep 2026 22:26:53 +0200 [thread overview]
Message-ID: <20260922202653.1153-6-yongzhao.derek@gmail.com> (raw)
In-Reply-To: <20260922202653.1153-1-yongzhao.derek@gmail.com>
Consume the qca8k flag on QCA8337 by clearing SmartSpeed enable and
bypass-timer bits before genphy_soft_reset(). Read-modify-write preserves
the remaining register bits, and a failed update prevents reset.
The same clear runs before the resume BMCR reset. If MDIO access fails,
resume returns the error without issuing that reset.
The downstream Redmi AX5400 experiment observed Gigabit advertisement
being removed while the conduit was not yet running. Applying this
sequence before the initial reset preserved advertisement in that
experiment. This series does not add the board support used there.
Unflagged QCA8337 PHYs retain their reset sequence. QCA8327 drivers
continue to use genphy_soft_reset() directly.
Link: https://github.com/openwrt/openwrt/issues/24696
Assisted-by: LLM
Signed-off-by: Yongzhao Chen <yongzhao.derek@gmail.com>
---
drivers/net/phy/qcom/qca83xx.c | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/drivers/net/phy/qcom/qca83xx.c b/drivers/net/phy/qcom/qca83xx.c
index 0f484cdfe..21ab015f6 100644
--- a/drivers/net/phy/qcom/qca83xx.c
+++ b/drivers/net/phy/qcom/qca83xx.c
@@ -91,6 +91,28 @@ static int qca83xx_probe(struct phy_device *phydev)
return 0;
}
+static int qca8337_disable_smartspeed(struct phy_device *phydev)
+{
+ if (!(phydev->dev_flags & QCA8K_DEVFLAGS_NO_SMARTSPEED))
+ return 0;
+
+ /* SmartSpeed settings take effect at software reset. */
+ return phy_clear_bits(phydev, AT803X_SMART_SPEED,
+ AT803X_SMART_SPEED_ENABLE |
+ AT803X_SMART_SPEED_BYPASS_TIMER);
+}
+
+static int qca8337_soft_reset(struct phy_device *phydev)
+{
+ int ret;
+
+ ret = qca8337_disable_smartspeed(phydev);
+ if (ret)
+ return ret;
+
+ return genphy_soft_reset(phydev);
+}
+
static int qca83xx_config_init(struct phy_device *phydev)
{
u8 switch_revision;
@@ -160,6 +182,11 @@ static int qca83xx_resume(struct phy_device *phydev)
/* Reinit the port, reset values set by suspend */
qca83xx_config_init(phydev);
+ /* Reapply the CPU PHY quirk before the resume reset. */
+ ret = qca8337_disable_smartspeed(phydev);
+ if (ret)
+ return ret;
+
/* Reset the port on port resume */
phy_set_bits(phydev, MII_BMCR, BMCR_RESET | BMCR_ANENABLE);
@@ -218,7 +245,7 @@ static struct phy_driver qca83xx_driver[] = {
.probe = qca83xx_probe,
.flags = PHY_IS_INTERNAL,
.config_init = qca83xx_config_init,
- .soft_reset = genphy_soft_reset,
+ .soft_reset = qca8337_soft_reset,
.get_sset_count = qca83xx_get_sset_count,
.get_strings = qca83xx_get_strings,
.get_stats = qca83xx_get_stats,
--
2.43.0
next prev parent reply other threads:[~2026-09-22 20:27 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 20:26 [RFC PATCH net-next v2 0/5] net: dsa: qca8k: add a QCA8337 CPU PHY consumer Yongzhao Chen
2026-09-22 20:26 ` [RFC PATCH net-next v2 1/5] net: dsa: pass PHY flags when connecting shared ports Yongzhao Chen
2026-09-22 21:49 ` Florian Fainelli
2026-09-22 20:26 ` [RFC PATCH net-next v2 2/5] net: dsa: qca8k: support an internal PHY as the CPU port Yongzhao Chen
2026-09-22 20:26 ` [RFC PATCH net-next v2 3/5] net: dsa: qca8k: serialize CPU MAC pause during MTU changes Yongzhao Chen
2026-09-22 20:58 ` Andrew Lunn
2026-09-23 21:57 ` Yongzhao Chen
2026-09-22 20:26 ` [RFC PATCH net-next v2 4/5] net: dsa: qca8k: flag QCA8337 internal CPU PHYs for SmartSpeed Yongzhao Chen
2026-09-22 21:00 ` Andrew Lunn
2026-09-23 21:57 ` Yongzhao Chen
2026-09-22 20:26 ` Yongzhao Chen [this message]
2026-09-22 21:06 ` [RFC PATCH net-next v2 5/5] net: phy: qca83xx: disable SmartSpeed before resetting CPU PHYs Andrew Lunn
2026-09-23 21:57 ` Yongzhao Chen
2026-09-24 12:30 ` Andrew Lunn
2026-09-24 23:48 ` Yongzhao Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260922202653.1153-6-yongzhao.derek@gmail.com \
--to=yongzhao.derek@gmail.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=andrew@lunn.ch \
--cc=ansuelsmth@gmail.com \
--cc=florian.fainelli@broadcom.com \
--cc=hkallweit1@gmail.com \
--cc=horms@kernel.org \
--cc=hzyitc@outlook.com \
--cc=jonas.gorski@gmail.com \
--cc=kuba@kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=woojung.huh@microchip.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox