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>
This commit is contained in:
Olliver Schinagl 2022-10-31 14:02:52 +01:00 committed by Sander Vanheule
parent af8bc8e51b
commit 59542c9ac9

View File

@ -348,11 +348,11 @@ inline u32 rtl839x_get_mac_link_spd_sts(int port)
inline u32 rtl930x_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); u32 speed = sw_r32(r);
speed >>= (port % 10) * 3; speed >>= (port % 8) << 2;
return (speed & 0x7); return (speed & 0xf);
} }
inline u32 rtl931x_get_mac_link_spd_sts(int port) inline u32 rtl931x_get_mac_link_spd_sts(int port)