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:
Yevgeny Petrilin 2009-07-06 16:10:03 -07:00 committed by Roland Dreier
parent 626f380d0b
commit cc4ac2e7fb
2 changed files with 8 additions and 2 deletions

View File

@ -80,7 +80,9 @@ enum {
/* Bad management packet (silently discarded): */ /* Bad management packet (silently discarded): */
CMD_STAT_BAD_PKT = 0x30, CMD_STAT_BAD_PKT = 0x30,
/* More outstanding CQEs in CQ than new CQ size: */ /* 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 { enum {
@ -128,6 +130,7 @@ static int mlx4_status_to_errno(u8 status)
[CMD_STAT_LAM_NOT_PRE] = -EAGAIN, [CMD_STAT_LAM_NOT_PRE] = -EAGAIN,
[CMD_STAT_BAD_PKT] = -EINVAL, [CMD_STAT_BAD_PKT] = -EINVAL,
[CMD_STAT_BAD_SIZE] = -ENOMEM, [CMD_STAT_BAD_SIZE] = -ENOMEM,
[CMD_STAT_MULTI_FUNC_REQ] = -EACCES,
}; };
if (status >= ARRAY_SIZE(trans_table) || if (status >= ARRAY_SIZE(trans_table) ||

View File

@ -729,7 +729,10 @@ static int mlx4_init_hca(struct mlx4_dev *dev)
err = mlx4_QUERY_FW(dev); err = mlx4_QUERY_FW(dev);
if (err) { 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; return err;
} }