state->speed holds a value of 10, 100, 1000 or 2500, but
QSYS_TAG_CONFIG_LINK_SPEED expects a value of 0, 1, 2, 3. So convert the
speed to a proper value.

Fixes: de143c0e274b ("net: dsa: felix: Configure Time-Aware Scheduler via
taprio offload")

Signed-off-by: Xiaoliang Yang <xiaoliang.yan...@nxp.com>
---
 drivers/net/dsa/ocelot/felix_vsc9959.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c 
b/drivers/net/dsa/ocelot/felix_vsc9959.c
index 79ddc4ba27a3..f584eababd0a 100644
--- a/drivers/net/dsa/ocelot/felix_vsc9959.c
+++ b/drivers/net/dsa/ocelot/felix_vsc9959.c
@@ -973,8 +973,28 @@ static void vsc9959_mdio_bus_free(struct ocelot *ocelot)
 static void vsc9959_sched_speed_set(struct ocelot *ocelot, int port,
                                    u32 speed)
 {
+       u8 tas_speed;
+
+       switch (speed) {
+       case SPEED_10:
+               tas_speed = OCELOT_SPEED_10;
+               break;
+       case SPEED_100:
+               tas_speed = OCELOT_SPEED_100;
+               break;
+       case SPEED_1000:
+               tas_speed = OCELOT_SPEED_1000;
+               break;
+       case SPEED_2500:
+               tas_speed = OCELOT_SPEED_2500;
+               break;
+       default:
+               tas_speed = OCELOT_SPEED_1000;
+               break;
+       }
+
        ocelot_rmw_rix(ocelot,
-                      QSYS_TAG_CONFIG_LINK_SPEED(speed),
+                      QSYS_TAG_CONFIG_LINK_SPEED(tas_speed),
                       QSYS_TAG_CONFIG_LINK_SPEED_M,
                       QSYS_TAG_CONFIG, port);
 }
-- 
2.17.1

Reply via email to