]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[hermon] Force link speed to SDR
authorItay Gazit <itaygazit@gmail.com>
Tue, 8 Feb 2011 13:06:30 +0000 (15:06 +0200)
committerMichael Brown <mcb30@ipxe.org>
Thu, 17 Feb 2011 01:25:10 +0000 (01:25 +0000)
SDR link comes up much faster than other speeds.

Signed-off-by: Itay Gazit <itaygazit@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/infiniband/hermon.c
src/drivers/infiniband/hermon.h
src/drivers/infiniband/mlx_bitops.h

index 6a1ca8e504d9ecf93bb4d6fc9f94cf82d97c54d4..a67c678718d998d8b04f2b121d91b8a8750fba1c 100644 (file)
@@ -1969,17 +1969,20 @@ static int hermon_open ( struct ib_device *ibdev ) {
 
        /* Set port parameters */
        memset ( &set_port, 0, sizeof ( set_port ) );
-       MLX_FILL_7 ( &set_port.ib, 0,
+       MLX_FILL_8 ( &set_port.ib, 0,
                     mmc, 1,
                     mvc, 1,
                     mp, 1,
                     mg, 1,
                     mtu_cap, IB_MTU_2048,
                     vl_cap, IB_VL_0,
-                    rcm, 1 );
+                    rcm, 1,
+                    lss, 1 );
        MLX_FILL_2 ( &set_port.ib, 10,
                     max_pkey, 1,
                     max_gid, 1 );
+       MLX_FILL_1 ( &set_port.ib, 28,
+                    link_speed_supported, 1 );
        if ( ( rc = hermon_cmd_set_port ( hermon, 0, ibdev->port,
                                          &set_port ) ) != 0 ) {
                DBGC ( hermon, "Hermon %p port %d could not set port: %s\n",
index 86553936537bd76a2490d682208f4323bb1972c5..ca343f7aaf96d1fdf508c70e71855d541f9cb5ac 100644 (file)
@@ -228,7 +228,10 @@ struct hermonprm_set_port_ib_st {
        pseudo_bit_t mp[0x00001];
        pseudo_bit_t mvc[0x00001];
        pseudo_bit_t mmc[0x00001];
-       pseudo_bit_t reserved2[0x00009];
+       pseudo_bit_t reserved2[0x00004];
+       pseudo_bit_t lws[0x00001];
+       pseudo_bit_t lss[0x00001];
+       pseudo_bit_t reserved3[0x00003];
 /* -------------- */
        pseudo_bit_t capability_mask[0x00020];
 /* -------------- */
@@ -246,14 +249,53 @@ struct hermonprm_set_port_ib_st {
 /* -------------- */
        pseudo_bit_t egress_sniff_qpn[0x00018];
        pseudo_bit_t egress_sniff_mode[0x00002];
-       pseudo_bit_t reserved3[0x00006];
+       pseudo_bit_t reserved4[0x00006];
 /* -------------- */
        pseudo_bit_t ingress_sniff_qpn[0x00018];
        pseudo_bit_t ingress_sniff_mode[0x00002];
-       pseudo_bit_t reserved4[0x00006];
+       pseudo_bit_t reserved5[0x00006];
 /* -------------- */
        pseudo_bit_t max_gid[0x00010];
        pseudo_bit_t max_pkey[0x00010];
+/* -------------- */
+       pseudo_bit_t reserved6[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved7[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved8[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved9[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved10[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved11[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved12[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved13[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved14[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved15[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved16[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved17[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved18[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved19[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved20[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved21[0x00020];
+/* -------------- */
+       pseudo_bit_t reserved22[0x00020];
+/* -------------- */
+       pseudo_bit_t link_width_supported[0x00004];
+       pseudo_bit_t link_speed_supported[0x00004];
+       pseudo_bit_t reserved23[0x00018];
+/* -------------- */
 } __attribute__ (( packed ));
 
 struct hermonprm_query_port_cap_st {
index 71a9bf1ec356227874137083e2f69d5cc5e9d90f..5215f9a8a022fac6f72c61d29f3a36476a425f71 100644 (file)
@@ -110,6 +110,10 @@ typedef unsigned char pseudo_bit_t;
        ( MLX_ASSEMBLE_1 ( _structure_st, _index, _field, _value ) |         \
          MLX_ASSEMBLE_6 ( _structure_st, _index, __VA_ARGS__ ) )
 
+#define MLX_ASSEMBLE_8( _structure_st, _index, _field, _value, ... )        \
+       ( MLX_ASSEMBLE_1 ( _structure_st, _index, _field, _value ) |         \
+         MLX_ASSEMBLE_7 ( _structure_st, _index, __VA_ARGS__ ) )
+
 /*
  * Build native-endian (positive) dword bitmasks from named fields
  *
@@ -143,6 +147,10 @@ typedef unsigned char pseudo_bit_t;
        ( MLX_MASK_1 ( _structure_st, _index, _field ) |                     \
          MLX_MASK_6 ( _structure_st, _index, __VA_ARGS__ ) )
 
+#define MLX_MASK_8( _structure_st, _index, _field, ... )                    \
+       ( MLX_MASK_1 ( _structure_st, _index, _field ) |                     \
+         MLX_MASK_7 ( _structure_st, _index, __VA_ARGS__ ) )
+
 /*
  * Populate big-endian dwords from named fields and values
  *
@@ -183,6 +191,10 @@ typedef unsigned char pseudo_bit_t;
        MLX_FILL ( _ptr, _index, MLX_ASSEMBLE_7 ( MLX_PSEUDO_STRUCT ( _ptr ),\
                                                  _index, __VA_ARGS__ ) )
 
+#define MLX_FILL_8( _ptr, _index, ... )                                             \
+       MLX_FILL ( _ptr, _index, MLX_ASSEMBLE_8 ( MLX_PSEUDO_STRUCT ( _ptr ),\
+                                                 _index, __VA_ARGS__ ) )
+
 /*
  * Modify big-endian dword using named field and value
  *