[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(&param, 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, &param, port, &status);
>  	if (err)
>




More information about the general mailing list