mlx4_core: Handle multi-physical function devices
MT26468 (PCI ID 0x6764) devices can expose multiple physical functions. The current driver only handles the primary physical function. For other functions, the QUERY_FW firmware command will fail with the CMD_STAT_MULTI_FUNC_REQ error code. Don't try to drive such devices, but print a message saying the driver is skipping those devices rather than just "QUERY_FW command failed." Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il> [ Rather than keeping unsupported devices bound to the driver, simply print a more informative error message and exit - Roland ] Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
626f380d0b
commit
cc4ac2e7fb
|
@ -80,7 +80,9 @@ enum {
|
|||
/* Bad management packet (silently discarded): */
|
||||
CMD_STAT_BAD_PKT = 0x30,
|
||||
/* More outstanding CQEs in CQ than new CQ size: */
|
||||
CMD_STAT_BAD_SIZE = 0x40
|
||||
CMD_STAT_BAD_SIZE = 0x40,
|
||||
/* Multi Function device support required: */
|
||||
CMD_STAT_MULTI_FUNC_REQ = 0x50,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -128,6 +130,7 @@ static int mlx4_status_to_errno(u8 status)
|
|||
[CMD_STAT_LAM_NOT_PRE] = -EAGAIN,
|
||||
[CMD_STAT_BAD_PKT] = -EINVAL,
|
||||
[CMD_STAT_BAD_SIZE] = -ENOMEM,
|
||||
[CMD_STAT_MULTI_FUNC_REQ] = -EACCES,
|
||||
};
|
||||
|
||||
if (status >= ARRAY_SIZE(trans_table) ||
|
||||
|
|
|
@ -729,7 +729,10 @@ static int mlx4_init_hca(struct mlx4_dev *dev)
|
|||
|
||||
err = mlx4_QUERY_FW(dev);
|
||||
if (err) {
|
||||
mlx4_err(dev, "QUERY_FW command failed, aborting.\n");
|
||||
if (err == -EACCES)
|
||||
mlx4_info(dev, "non-primary physical function, skipping.\n");
|
||||
else
|
||||
mlx4_err(dev, "QUERY_FW command failed, aborting.\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue