From d802e6310a013a4255392c73967a243a773c8799 Mon Sep 17 00:00:00 2001 From: Harshal Gohel Date: Tue, 17 Jun 2025 13:03:47 +0000 Subject: [PATCH] realtek: rtl931x: Support enable/disable SMI Polling for SerDes ports During PHY matching, the SMI polling must be disabled to avoid conflicts during the complex detection routine. Only after this finished, SMI polling is allowed again. This was implemented for all realtek families besides RTL931x. Signed-off-by: Harshal Gohel Signed-off-by: Sharadanand Karanjkar Link: https://github.com/openwrt/openwrt/pull/19603 Signed-off-by: Robert Marko --- .../realtek/files-6.12/drivers/net/phy/rtl83xx-phy.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/target/linux/realtek/files-6.12/drivers/net/phy/rtl83xx-phy.c b/target/linux/realtek/files-6.12/drivers/net/phy/rtl83xx-phy.c index 65e7e12117e..85399151dbe 100644 --- a/target/linux/realtek/files-6.12/drivers/net/phy/rtl83xx-phy.c +++ b/target/linux/realtek/files-6.12/drivers/net/phy/rtl83xx-phy.c @@ -120,7 +120,10 @@ static u64 disable_polling(int port) sw_w32_mask(BIT(port), 0, RTL930X_SMI_POLL_CTRL); break; case RTL9310_FAMILY_ID: - pr_warn("%s not implemented for RTL931X\n", __func__); + saved_state = sw_r32(RTL931X_SMI_PORT_POLLING_CTRL + 4); + saved_state <<= 32; + saved_state |= sw_r32(RTL931X_SMI_PORT_POLLING_CTRL); + sw_w32_mask(BIT(port % 32), 0, RTL931X_SMI_PORT_POLLING_CTRL + ((port >> 5) << 2)); break; } @@ -145,7 +148,8 @@ static int resume_polling(u64 saved_state) sw_w32(saved_state, RTL930X_SMI_POLL_CTRL); break; case RTL9310_FAMILY_ID: - pr_warn("%s not implemented for RTL931X\n", __func__); + sw_w32(saved_state >> 32, RTL931X_SMI_PORT_POLLING_CTRL + 4); + sw_w32(saved_state, RTL931X_SMI_PORT_POLLING_CTRL); break; } -- 2.47.2