diff options
| author | Yevgeny Petrilin <yevgenyp@mellanox.co.il> | 2009-07-06 16:10:03 -0700 | 
|---|---|---|
| committer | Roland Dreier <rolandd@cisco.com> | 2009-07-06 16:10:03 -0700 | 
| commit | cc4ac2e7fb90dfbbbd5a42df0879733f787e4690 (patch) | |
| tree | 2d349bbda2642b8b2c5156fedf0c13cbbb7cfc28 | |
| parent | 626f380d0b264a1e40237f5a2a3dffc5d14f256e (diff) | |
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>
| -rw-r--r-- | drivers/net/mlx4/cmd.c | 5 | ||||
| -rw-r--r-- | drivers/net/mlx4/main.c | 5 | 
2 files changed, 8 insertions, 2 deletions
| diff --git a/drivers/net/mlx4/cmd.c b/drivers/net/mlx4/cmd.c index 2845a0560b84..65ec77dc31f5 100644 --- a/drivers/net/mlx4/cmd.c +++ b/drivers/net/mlx4/cmd.c @@ -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) || diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c index 018348c01193..b820658fa076 100644 --- a/drivers/net/mlx4/main.c +++ b/drivers/net/mlx4/main.c @@ -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;  	} | 
