[openwrt/openwrt] realtek: rtl931x: Fix link status get not fetching correct status

LEDE Commits lede-commits at lists.infradead.org
Thu Aug 7 07:09:21 PDT 2025


hauke pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/6473e3ed5eaa18de28fa5f7653e05079a22e0802

commit 6473e3ed5eaa18de28fa5f7653e05079a22e0802
Author: Harshal Gohel <hg at simonwunderlich.de>
AuthorDate: Tue Apr 8 10:46:15 2025 +0000

    realtek: rtl931x: Fix link status get not fetching correct status
    
    Just like rtl930x, rtl931x also requires two reads to fetch current link
    status.
    
    While at it, rename the function to a proper naming scheme.
    
    Signed-off-by: Harshal Gohel <hg at simonwunderlich.de>
    Co-developed-by: Markus Stockhausen <markus.stockhausen at gmx.de>
    Signed-off-by: Markus Stockhausen <markus.stockhausen at gmx.de>
    Co-developed-by: Sven Eckelmann <sven at narfation.org>
    Signed-off-by: Sven Eckelmann <sven at narfation.org>
    Signed-off-by: Sharadanand Karanjkar <sk at simonwunderlich.de>
    Link: https://github.com/openwrt/openwrt/pull/19578
    Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
---
 .../realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c     |  2 +-
 .../realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.h     | 11 +++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c
index bcc8f39286..66e06bbb31 100644
--- a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c
+++ b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c
@@ -610,7 +610,7 @@ static const struct rtl838x_eth_reg rtl931x_reg = {
 	.dma_if_rx_ring_cntr = rtl931x_dma_if_rx_ring_cntr,
 	.dma_if_rx_cur = RTL931X_DMA_IF_RX_CUR,
 	.rst_glb_ctrl = RTL931X_RST_GLB_CTRL,
-	.get_mac_link_sts = rtl931x_get_mac_link_sts,
+	.get_mac_link_sts = rtldsa_931x_get_mac_link_sts,
 	.get_mac_link_dup_sts = rtl931x_get_mac_link_dup_sts,
 	.get_mac_link_spd_sts = rtl931x_get_mac_link_spd_sts,
 	.get_mac_rx_pause_sts = rtl931x_get_mac_rx_pause_sts,
diff --git a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.h b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.h
index c28a94ed9f..24c750b403 100644
--- a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.h
+++ b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.h
@@ -307,9 +307,16 @@ inline u32 rtl930x_get_mac_link_sts(int port)
 	return link & BIT(port);
 }
 
-inline u32 rtl931x_get_mac_link_sts(int p)
+inline u32 rtldsa_931x_get_mac_link_sts(int port)
 {
-	return (sw_r32(RTL931X_MAC_LINK_STS + ((p >> 5) << 2)) & BIT(p % 32));
+	unsigned int reg = RTL931X_MAC_LINK_STS + (port / 32) * 4;
+	u32 mask = BIT(port % 32);
+	u32 link;
+
+	link = sw_r32(reg);
+	link = sw_r32(reg);
+
+	return (link & mask);
 }
 
 inline u32 rtl838x_get_mac_link_dup_sts(int port)




More information about the lede-commits mailing list