aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlliver Schinagl <oliver@schinagl.nl>2022-10-31 14:02:52 +0100
committerSander Vanheule <sander@svanheule.net>2022-12-01 22:11:06 +0100
commit59542c9ac9acd470c4fa3182792de91b4c2f6421 (patch)
treef8ea47a5205ec0b5a0c4842710da056433c0404d
parentaf8bc8e51b6daef65c497522b67a1dd9d0cdab84 (diff)
downloadupstream-59542c9ac9acd470c4fa3182792de91b4c2f6421.tar.gz
upstream-59542c9ac9acd470c4fa3182792de91b4c2f6421.tar.bz2
upstream-59542c9ac9acd470c4fa3182792de91b4c2f6421.zip
realtek: Fix rtl930x speed status accessor
The rtl930x speed status registers require 4 bits to indicate the speed status. As such, we want to divide by 8. To make things consistent with the rest of this code, use a bitshift however. This bug probably won't affect many users yet, as there aren't many rtl930x switches in the wild yet with more then 10 ports, and thus a low-impact bugfix. Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> [also fix port field extraction] Signed-off-by: Sander Vanheule <sander@svanheule.net>
-rw-r--r--target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.h b/target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.h
index 5db5f545b9..d00d11d0c8 100644
--- a/target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.h
+++ b/target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.h
@@ -348,11 +348,11 @@ inline u32 rtl839x_get_mac_link_spd_sts(int port)
inline u32 rtl930x_get_mac_link_spd_sts(int port)
{
- int r = RTL930X_MAC_LINK_SPD_STS + ((port / 10) << 2);
+ int r = RTL930X_MAC_LINK_SPD_STS + ((port >> 3) << 2);
u32 speed = sw_r32(r);
- speed >>= (port % 10) * 3;
- return (speed & 0x7);
+ speed >>= (port % 8) << 2;
+ return (speed & 0xf);
}
inline u32 rtl931x_get_mac_link_spd_sts(int port)