The code in sja1105_adjust_port_config relies on the fact that an invalid link speed is detected by sja1105_get_speed_cfg and returned as -EINVAL. However storing this into an enum that only has positive members will cast it into an unsigned value, and it will miss the negative check.
So make the -EINVAL value part of the enum, so that it is stored as a signed number and passes the negative check. Fixes: 8aa9ebccae87 ("net: dsa: Introduce driver for NXP SJA1105 5-port L2 switch") Signed-off-by: Vladimir Oltean <olte...@gmail.com> --- drivers/net/dsa/sja1105/sja1105.h | 1 + drivers/net/dsa/sja1105/sja1105_main.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sja1105.h index 1e6d0f33a663..15df37ec63bf 100644 --- a/drivers/net/dsa/sja1105/sja1105.h +++ b/drivers/net/dsa/sja1105/sja1105.h @@ -160,6 +160,7 @@ typedef enum { SJA1105_SPEED_100MBPS = 2, SJA1105_SPEED_1000MBPS = 1, SJA1105_SPEED_AUTO = 0, + SJA1105_SPEED_INVALID = -EINVAL, } sja1105_speed_t; int sja1105pqrs_setup_rgmii_delay(const void *ctx, int port); diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index b89d979ba213..12b1af52d84b 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -719,7 +719,7 @@ static sja1105_speed_t sja1105_get_speed_cfg(unsigned int speed_mbps) for (i = SJA1105_SPEED_AUTO; i <= SJA1105_SPEED_1000MBPS; i++) if (sja1105_speed[i] == speed_mbps) return i; - return -EINVAL; + return SJA1105_SPEED_INVALID; } /* Set link speed and enable/disable traffic I/O in the MAC configuration -- 2.17.1