| From 8ffcd89c0b72fa458ba79de45db58e21d68c93fc Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 23 Sep 2018 17:48:55 +0300 |
| Subject: mlxsw: Make MLXSW_SP1_FWREV_MINOR a hard requirement |
| |
| From: Petr Machata <petrm@mellanox.com> |
| |
| [ Upstream commit 12ba7e1045521ec9f251c93ae0a6735cc3f42337 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c |
| index 1c170a0fd2cc9..e498ee95bacab 100644 |
| --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c |
| +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c |
| @@ -336,7 +336,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", |
| -- |
| 2.20.1 |
| |