From 6473e3ed5eaa18de28fa5f7653e05079a22e0802 Mon Sep 17 00:00:00 2001 From: Harshal Gohel Date: Tue, 8 Apr 2025 10:46:15 +0000 Subject: [PATCH] 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 Co-developed-by: Markus Stockhausen Signed-off-by: Markus Stockhausen Co-developed-by: Sven Eckelmann Signed-off-by: Sven Eckelmann Signed-off-by: Sharadanand Karanjkar Link: https://github.com/openwrt/openwrt/pull/19578 Signed-off-by: Hauke Mehrtens --- .../files-6.12/drivers/net/ethernet/rtl838x_eth.c | 2 +- .../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 bcc8f392866..66e06bbb31e 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 c28a94ed9ff..24c750b4032 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) -- 2.47.2