Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da6561c2 authored by Roland Dreier's avatar Roland Dreier Committed by Roland Dreier
Browse files

[PATCH] IB/mthca: Use correct port width capability value



When we call the INIT_IB firmware command to bring up a port, use
the actual port width capability returned by the QUERY_DEV_LIM
command instead of always trying to enable both 1X and 4X.  This
fixes breakage seen when the firmware is build to allow 4X only.

Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 2aeba9a0
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -1282,10 +1282,8 @@ int mthca_INIT_IB(struct mthca_dev *dev,
#define INIT_IB_FLAG_SIG         (1 << 18)
#define INIT_IB_FLAG_NG          (1 << 17)
#define INIT_IB_FLAG_G0          (1 << 16)
#define INIT_IB_FLAG_1X          (1 << 8)
#define INIT_IB_FLAG_4X          (1 << 9)
#define INIT_IB_FLAG_12X         (1 << 11)
#define INIT_IB_VL_SHIFT         4
#define INIT_IB_PORT_WIDTH_SHIFT 8
#define INIT_IB_MTU_SHIFT        12
#define INIT_IB_MAX_GID_OFFSET   0x06
#define INIT_IB_MAX_PKEY_OFFSET  0x0a
@@ -1301,12 +1299,11 @@ int mthca_INIT_IB(struct mthca_dev *dev,
	memset(inbox, 0, INIT_IB_IN_SIZE);

	flags = 0;
	flags |= param->enable_1x     ? INIT_IB_FLAG_1X  : 0;
	flags |= param->enable_4x     ? INIT_IB_FLAG_4X  : 0;
	flags |= param->set_guid0     ? INIT_IB_FLAG_G0  : 0;
	flags |= param->set_node_guid ? INIT_IB_FLAG_NG  : 0;
	flags |= param->set_si_guid   ? INIT_IB_FLAG_SIG : 0;
	flags |= param->vl_cap << INIT_IB_VL_SHIFT;
	flags |= param->port_width << INIT_IB_PORT_WIDTH_SHIFT;
	flags |= param->mtu_cap << INIT_IB_MTU_SHIFT;
	MTHCA_PUT(inbox, flags, INIT_IB_FLAGS_OFFSET);

+1 −2
Original line number Diff line number Diff line
@@ -220,8 +220,7 @@ struct mthca_init_hca_param {
};

struct mthca_init_ib_param {
	int enable_1x;
	int enable_4x;
	int port_width;
	int vl_cap;
	int mtu_cap;
	u16 gid_cap;
+1 −0
Original line number Diff line number Diff line
@@ -148,6 +148,7 @@ struct mthca_limits {
	int      reserved_mcgs;
	int      num_pds;
	int      reserved_pds;
	u8       port_width_cap;
};

struct mthca_alloc {
+1 −0
Original line number Diff line number Diff line
@@ -171,6 +171,7 @@ static int __devinit mthca_dev_lim(struct mthca_dev *mdev, struct mthca_dev_lim
	mdev->limits.reserved_mrws      = dev_lim->reserved_mrws;
	mdev->limits.reserved_uars      = dev_lim->reserved_uars;
	mdev->limits.reserved_pds       = dev_lim->reserved_pds;
	mdev->limits.port_width_cap     = dev_lim->max_port_width;

	/* IB_DEVICE_RESIZE_MAX_WR not supported by driver.
	   May be doable since hardware supports it for SRQ.
+5 −6
Original line number Diff line number Diff line
@@ -575,8 +575,7 @@ static void init_port(struct mthca_dev *dev, int port)

	memset(&param, 0, sizeof param);

	param.enable_1x = 1;
	param.enable_4x = 1;
	param.port_width = dev->limits.port_width_cap;
	param.vl_cap     = dev->limits.vl_cap;
	param.mtu_cap    = dev->limits.mtu_cap;
	param.gid_cap    = dev->limits.gid_table_len;