[openib-general] Re: Continue to experience problems in installing Gen2 on IA-32
Weikuan Yu
yuw at cse.ohio-state.edu
Wed Aug 17 05:24:03 PDT 2005
Hi,
Thanks for the patch. This works for our adaptors too.
Out of my curiosity, it seems like this patch takes firmware parameters
and feed it back as it is when INIT_IB, instead of assuming port width
being (1x | 4x). So wonder now the logic, in this regard, is in place
for future 8x (?) or 12x adaptors with the other two bits, right?
Thanks,
--Weikuan
On Aug 15, 2005, at 11:16 AM, Roland Dreier wrote:
> Thanks for the debugging info. Can you apply the patch below and
> confirm that it works with your PCI-X adapters? If this works for you
> then I will check it into svn and merge it for kernel 2.6.14.
>
> Thanks,
> Roland
>
> Index: infiniband/hw/mthca/mthca_dev.h
> ===================================================================
> --- infiniband/hw/mthca/mthca_dev.h (revision 3056)
> +++ infiniband/hw/mthca/mthca_dev.h (working copy)
> @@ -148,6 +148,7 @@ struct mthca_limits {
> int reserved_mcgs;
> int num_pds;
> int reserved_pds;
> + u8 port_width_cap;
> };
>
> struct mthca_alloc {
> Index: infiniband/hw/mthca/mthca_main.c
> ===================================================================
> --- infiniband/hw/mthca/mthca_main.c (revision 3056)
> +++ infiniband/hw/mthca/mthca_main.c (working copy)
> @@ -171,6 +171,7 @@ static int __devinit mthca_dev_lim(struc
> 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.
> Index: infiniband/hw/mthca/mthca_cmd.c
> ===================================================================
> --- infiniband/hw/mthca/mthca_cmd.c (revision 3056)
> +++ infiniband/hw/mthca/mthca_cmd.c (working copy)
> @@ -1285,10 +1285,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
> @@ -1304,12 +1302,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);
>
> Index: infiniband/hw/mthca/mthca_cmd.h
> ===================================================================
> --- infiniband/hw/mthca/mthca_cmd.h (revision 3056)
> +++ infiniband/hw/mthca/mthca_cmd.h (working copy)
> @@ -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;
> Index: infiniband/hw/mthca/mthca_qp.c
> ===================================================================
> --- infiniband/hw/mthca/mthca_qp.c (revision 3056)
> +++ infiniband/hw/mthca/mthca_qp.c (working copy)
> @@ -502,12 +502,11 @@ static void init_port(struct mthca_dev *
>
> memset(¶m, 0, sizeof param);
>
> - param.enable_1x = 1;
> - param.enable_4x = 1;
> - param.vl_cap = dev->limits.vl_cap;
> - param.mtu_cap = dev->limits.mtu_cap;
> - param.gid_cap = dev->limits.gid_table_len;
> - param.pkey_cap = dev->limits.pkey_table_len;
> + 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;
> + param.pkey_cap = dev->limits.pkey_table_len;
>
> err = mthca_INIT_IB(dev, ¶m, port, &status);
> if (err)
>
More information about the general
mailing list