Merge branches 'misc' and 'mlx4' into for-next
authorRoland Dreier <roland@purestorage.com>
Mon, 12 Mar 2012 23:25:28 +0000 (16:25 -0700)
committerRoland Dreier <roland@purestorage.com>
Mon, 12 Mar 2012 23:25:28 +0000 (16:25 -0700)
Conflicts:
drivers/infiniband/hw/mlx4/main.c
drivers/net/ethernet/mellanox/mlx4/main.c
include/linux/mlx4/device.h

1  2 
drivers/infiniband/hw/mlx4/cq.c
drivers/infiniband/hw/mlx4/main.c
drivers/net/ethernet/mellanox/mlx4/main.c
drivers/net/ethernet/mellanox/mlx4/mlx4.h
drivers/net/ethernet/mellanox/mlx4/port.c
include/linux/mlx4/device.h

Simple merge
@@@ -224,22 -239,27 +239,24 @@@ static int ib_link_query_port(struct ib
        }
  
        /* If reported active speed is QDR, check if is FDR-10 */
 -      if (props->active_speed == 4) {
 -              if (to_mdev(ibdev)->dev->caps.ext_port_cap[port] &
 -                  MLX_EXT_PORT_CAP_FLAG_EXTENDED_PORT_INFO) {
 -                      init_query_mad(in_mad);
 -                      in_mad->attr_id = MLX4_ATTR_EXTENDED_PORT_INFO;
 -                      in_mad->attr_mod = cpu_to_be32(port);
 -
 -                      err = mlx4_MAD_IFC(to_mdev(ibdev), 1, 1, port,
 -                                         NULL, NULL, in_mad, out_mad);
 -                      if (err)
 -                              goto out;
 -
 -                      /* Checking LinkSpeedActive for FDR-10 */
 -                      if (out_mad->data[15] & 0x1)
 -                              props->active_speed = 8;
 -              }
 +      if (props->active_speed == IB_SPEED_QDR) {
 +              init_query_mad(in_mad);
 +              in_mad->attr_id = MLX4_ATTR_EXTENDED_PORT_INFO;
 +              in_mad->attr_mod = cpu_to_be32(port);
 +
 +              err = mlx4_MAD_IFC(to_mdev(ibdev), 1, 1, port,
 +                                 NULL, NULL, in_mad, out_mad);
 +              if (err)
 +                      return err;
 +
 +              /* Checking LinkSpeedActive for FDR-10 */
 +              if (out_mad->data[15] & 0x1)
 +                      props->active_speed = IB_SPEED_FDR10;
        }
-       return 0;
+ out:
+       kfree(in_mad);
+       kfree(out_mad);
+       return err;
  }
  
  static u8 state_to_phys_state(enum ib_port_state state)
  }
  
  static int eth_link_query_port(struct ib_device *ibdev, u8 port,
-                              struct ib_port_attr *props,
-                              struct ib_smp *out_mad)
+                              struct ib_port_attr *props)
  {
-       struct mlx4_ib_iboe *iboe = &to_mdev(ibdev)->iboe;
+       struct mlx4_ib_dev *mdev = to_mdev(ibdev);
+       struct mlx4_ib_iboe *iboe = &mdev->iboe;
        struct net_device *ndev;
        enum ib_mtu tmp;
+       struct mlx4_cmd_mailbox *mailbox;
+       int err = 0;
+       mailbox = mlx4_alloc_cmd_mailbox(mdev->dev);
+       if (IS_ERR(mailbox))
+               return PTR_ERR(mailbox);
  
-       props->active_width     = IB_WIDTH_1X;
+       err = mlx4_cmd_box(mdev->dev, 0, mailbox->dma, port, 0,
+                          MLX4_CMD_QUERY_PORT, MLX4_CMD_TIME_CLASS_B,
+                          MLX4_CMD_WRAPPED);
+       if (err)
+               goto out;
+       props->active_width     =  (((u8 *)mailbox->buf)[5] == 0x40) ?
+                                               IB_WIDTH_4X : IB_WIDTH_1X;
 -      props->active_speed     = 4;
 +      props->active_speed     = IB_SPEED_QDR;
        props->port_cap_flags   = IB_PORT_CM_SUP;
-       props->gid_tbl_len      = to_mdev(ibdev)->dev->caps.gid_table_len[port];
-       props->max_msg_sz       = to_mdev(ibdev)->dev->caps.max_msg_sz;
+       props->gid_tbl_len      = mdev->dev->caps.gid_table_len[port];
+       props->max_msg_sz       = mdev->dev->caps.max_msg_sz;
        props->pkey_tbl_len     = 1;
-       props->bad_pkey_cntr    = be16_to_cpup((__be16 *) (out_mad->data + 46));
-       props->qkey_viol_cntr   = be16_to_cpup((__be16 *) (out_mad->data + 48));
        props->max_mtu          = IB_MTU_4096;
-       props->subnet_timeout   = 0;
-       props->max_vl_num       = out_mad->data[37] >> 4;
-       props->init_type_reply  = 0;
+       props->max_vl_num       = 2;
        props->state            = IB_PORT_DOWN;
        props->phys_state       = state_to_phys_state(props->state);
        props->active_mtu       = IB_MTU_256;
@@@ -1360,7 -1455,17 +1455,12 @@@ static int mlx4_setup_hca(struct mlx4_d
                                          "ib capabilities (%d). Continuing "
                                          "with caps = 0\n", port, err);
                        dev->caps.ib_port_def_cap[port] = ib_port_default_caps;
 -                      err = mlx4_check_ext_port_caps(dev, port);
 -                      if (err)
 -                              mlx4_warn(dev, "failed to get port %d extended "
 -                                        "port capabilities support info (%d)."
 -                                        " Assuming not supported\n",
 -                                        port, err);
 +
+                       if (mlx4_is_mfunc(dev))
+                               dev->caps.port_ib_mtu[port] = IB_MTU_2048;
+                       else
+                               dev->caps.port_ib_mtu[port] = IB_MTU_4096;
                        err = mlx4_SET_PORT(dev, port);
                        if (err) {
                                mlx4_err(dev, "Failed to set port %d, aborting\n",
@@@ -304,6 -314,8 +310,7 @@@ struct mlx4_caps 
        u32                     port_mask[MLX4_MAX_PORTS + 1];
        enum mlx4_port_type     possible_type[MLX4_MAX_PORTS + 1];
        u32                     max_counters;
 -      u8                      ext_port_cap[MLX4_MAX_PORTS + 1];
+       u8                      port_ib_mtu[MLX4_MAX_PORTS + 1];
  };
  
  struct mlx4_buf_list {