mlxsw: Make MLXSW_SP1_FWREV_MINOR a hard requirement
authorPetr Machata <petrm@mellanox.com>
Sun, 23 Sep 2018 14:48:55 +0000 (17:48 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sun, 23 Sep 2018 19:30:01 +0000 (12:30 -0700)
Up until now, mlxsw tolerated firmware versions that weren't exactly
matching the required version, if the branch number matched. That
allowed the users to test various firmware versions as long as they were
on the right branch.

On the other hand, it made it impossible for mlxsw to put a hard lower
bound on a version that fixes all problems known to date. If a user had
a somewhat older FW version installed, mlxsw would start up just fine,
possibly performing non-optimally as it would use features that trigger
problematic behavior.

Therefore tweak the check to accept any FW version that is:

- on the same branch as the preferred version, and
- the same as or newer than the preferred version.

Signed-off-by: Petr Machata <petrm@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum.c

index 1fc2026..33a0242 100644 (file)
@@ -331,7 +331,10 @@ static int mlxsw_sp_fw_rev_validate(struct mlxsw_sp *mlxsw_sp)
                return -EINVAL;
        }
        if (MLXSW_SP_FWREV_MINOR_TO_BRANCH(rev->minor) ==
-           MLXSW_SP_FWREV_MINOR_TO_BRANCH(req_rev->minor))
+           MLXSW_SP_FWREV_MINOR_TO_BRANCH(req_rev->minor) &&
+           (rev->minor > req_rev->minor ||
+            (rev->minor == req_rev->minor &&
+             rev->subminor >= req_rev->subminor)))
                return 0;
 
        dev_info(mlxsw_sp->bus_info->dev, "The firmware version %d.%d.%d is incompatible with the driver\n",