mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
net/mlx5: Fix query ISSI flow
In old FWs query ISSI command is not supported and for some of those FWs
it might fail with status other than "MLX5_CMD_STAT_BAD_OP_ERR".
In such case instead of failing the driver load, we will treat any FW
status other than 0 for Query ISSI FW command as ISSI not supported and
assume ISSI=0 (most basic driver/FW interface).
In case of driver syndrom (query ISSI failure by driver) we will fail
driver load.
Fixes: f62b8bb8f2
('net/mlx5: Extend mlx5_core to support ConnectX-4
Ethernet functionality')
Signed-off-by: Kamal Heib <kamalh@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9e5b2fc1d3
commit
f9c14e4674
3 changed files with 14 additions and 11 deletions
|
@ -268,11 +268,6 @@ static void dump_buf(void *buf, int size, int data_only, int offset)
|
||||||
pr_debug("\n");
|
pr_debug("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
enum {
|
|
||||||
MLX5_DRIVER_STATUS_ABORTED = 0xfe,
|
|
||||||
MLX5_DRIVER_SYND = 0xbadd00de,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
|
static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
|
||||||
u32 *synd, u8 *status)
|
u32 *synd, u8 *status)
|
||||||
{
|
{
|
||||||
|
|
|
@ -732,13 +732,15 @@ static int mlx5_core_set_issi(struct mlx5_core_dev *dev)
|
||||||
u8 status;
|
u8 status;
|
||||||
|
|
||||||
mlx5_cmd_mbox_status(query_out, &status, &syndrome);
|
mlx5_cmd_mbox_status(query_out, &status, &syndrome);
|
||||||
if (status == MLX5_CMD_STAT_BAD_OP_ERR) {
|
if (!status || syndrome == MLX5_DRIVER_SYND) {
|
||||||
pr_debug("Only ISSI 0 is supported\n");
|
mlx5_core_err(dev, "Failed to query ISSI err(%d) status(%d) synd(%d)\n",
|
||||||
return 0;
|
err, status, syndrome);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_err("failed to query ISSI err(%d)\n", err);
|
mlx5_core_warn(dev, "Query ISSI is not supported by FW, ISSI is 0\n");
|
||||||
return err;
|
dev->issi = 0;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sup_issi = MLX5_GET(query_issi_out, query_out, supported_issi_dw0);
|
sup_issi = MLX5_GET(query_issi_out, query_out, supported_issi_dw0);
|
||||||
|
@ -752,7 +754,8 @@ static int mlx5_core_set_issi(struct mlx5_core_dev *dev)
|
||||||
err = mlx5_cmd_exec(dev, set_in, sizeof(set_in),
|
err = mlx5_cmd_exec(dev, set_in, sizeof(set_in),
|
||||||
set_out, sizeof(set_out));
|
set_out, sizeof(set_out));
|
||||||
if (err) {
|
if (err) {
|
||||||
pr_err("failed to set ISSI=1 err(%d)\n", err);
|
mlx5_core_err(dev, "Failed to set ISSI to 1 err(%d)\n",
|
||||||
|
err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,6 +75,11 @@ enum {
|
||||||
MLX5_CMD_TIME, /* print command execution time */
|
MLX5_CMD_TIME, /* print command execution time */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MLX5_DRIVER_STATUS_ABORTED = 0xfe,
|
||||||
|
MLX5_DRIVER_SYND = 0xbadd00de,
|
||||||
|
};
|
||||||
|
|
||||||
int mlx5_query_hca_caps(struct mlx5_core_dev *dev);
|
int mlx5_query_hca_caps(struct mlx5_core_dev *dev);
|
||||||
int mlx5_query_board_id(struct mlx5_core_dev *dev);
|
int mlx5_query_board_id(struct mlx5_core_dev *dev);
|
||||||
int mlx5_cmd_init_hca(struct mlx5_core_dev *dev);
|
int mlx5_cmd_init_hca(struct mlx5_core_dev *dev);
|
||||||
|
|
Loading…
Add table
Reference in a new issue