|
@@ -142,12 +142,6 @@ struct mlx4_port_config {
|
|
|
struct pci_dev *pdev;
|
|
|
};
|
|
|
|
|
|
-static inline int mlx4_master_get_num_eqs(struct mlx4_dev *dev)
|
|
|
-{
|
|
|
- return dev->caps.reserved_eqs +
|
|
|
- MLX4_MFUNC_EQ_NUM * (dev->num_slaves + 1);
|
|
|
-}
|
|
|
-
|
|
|
int mlx4_check_port_params(struct mlx4_dev *dev,
|
|
|
enum mlx4_port_type *port_type)
|
|
|
{
|
|
@@ -217,6 +211,7 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
|
|
|
}
|
|
|
|
|
|
dev->caps.num_ports = dev_cap->num_ports;
|
|
|
+ dev->phys_caps.num_phys_eqs = MLX4_MAX_EQ_NUM;
|
|
|
for (i = 1; i <= dev->caps.num_ports; ++i) {
|
|
|
dev->caps.vl_cap[i] = dev_cap->max_vl[i];
|
|
|
dev->caps.ib_mtu_cap[i] = dev_cap->ib_mtu[i];
|
|
@@ -435,12 +430,17 @@ static int mlx4_slave_cap(struct mlx4_dev *dev)
|
|
|
mlx4_log_num_mgm_entry_size = hca_param.log_mc_entry_sz;
|
|
|
|
|
|
memset(&dev_cap, 0, sizeof(dev_cap));
|
|
|
+ dev->caps.max_qp_dest_rdma = 1 << hca_param.log_rd_per_qp;
|
|
|
err = mlx4_dev_cap(dev, &dev_cap);
|
|
|
if (err) {
|
|
|
mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting.\n");
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+ err = mlx4_QUERY_FW(dev);
|
|
|
+ if (err)
|
|
|
+ mlx4_err(dev, "QUERY_FW command failed: could not get FW version.\n");
|
|
|
+
|
|
|
page_size = ~dev->caps.page_size_cap + 1;
|
|
|
mlx4_warn(dev, "HCA minimum page size:%d\n", page_size);
|
|
|
if (page_size > PAGE_SIZE) {
|
|
@@ -485,15 +485,15 @@ static int mlx4_slave_cap(struct mlx4_dev *dev)
|
|
|
dev->caps.num_mgms = 0;
|
|
|
dev->caps.num_amgms = 0;
|
|
|
|
|
|
- for (i = 1; i <= dev->caps.num_ports; ++i)
|
|
|
- dev->caps.port_mask[i] = dev->caps.port_type[i];
|
|
|
-
|
|
|
if (dev->caps.num_ports > MLX4_MAX_PORTS) {
|
|
|
mlx4_err(dev, "HCA has %d ports, but we only support %d, "
|
|
|
"aborting.\n", dev->caps.num_ports, MLX4_MAX_PORTS);
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|
|
|
+ for (i = 1; i <= dev->caps.num_ports; ++i)
|
|
|
+ dev->caps.port_mask[i] = dev->caps.port_type[i];
|
|
|
+
|
|
|
if (dev->caps.uar_page_size * (dev->caps.num_uars -
|
|
|
dev->caps.reserved_uars) >
|
|
|
pci_resource_len(dev->pdev, 2)) {
|
|
@@ -504,18 +504,6 @@ static int mlx4_slave_cap(struct mlx4_dev *dev)
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|
|
|
-#if 0
|
|
|
- mlx4_warn(dev, "sqp_demux:%d\n", dev->caps.sqp_demux);
|
|
|
- mlx4_warn(dev, "num_uars:%d reserved_uars:%d uar region:0x%x bar2:0x%llx\n",
|
|
|
- dev->caps.num_uars, dev->caps.reserved_uars,
|
|
|
- dev->caps.uar_page_size * dev->caps.num_uars,
|
|
|
- pci_resource_len(dev->pdev, 2));
|
|
|
- mlx4_warn(dev, "num_eqs:%d reserved_eqs:%d\n", dev->caps.num_eqs,
|
|
|
- dev->caps.reserved_eqs);
|
|
|
- mlx4_warn(dev, "num_pds:%d reserved_pds:%d slave_pd_shift:%d pd_base:%d\n",
|
|
|
- dev->caps.num_pds, dev->caps.reserved_pds,
|
|
|
- dev->caps.slave_pd_shift, dev->caps.pd_base);
|
|
|
-#endif
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -810,9 +798,8 @@ static int mlx4_init_cmpt_table(struct mlx4_dev *dev, u64 cmpt_base,
|
|
|
if (err)
|
|
|
goto err_srq;
|
|
|
|
|
|
- num_eqs = (mlx4_is_master(dev)) ?
|
|
|
- roundup_pow_of_two(mlx4_master_get_num_eqs(dev)) :
|
|
|
- dev->caps.num_eqs;
|
|
|
+ num_eqs = (mlx4_is_master(dev)) ? dev->phys_caps.num_phys_eqs :
|
|
|
+ dev->caps.num_eqs;
|
|
|
err = mlx4_init_icm_table(dev, &priv->eq_table.cmpt_table,
|
|
|
cmpt_base +
|
|
|
((u64) (MLX4_CMPT_TYPE_EQ *
|
|
@@ -874,9 +861,8 @@ static int mlx4_init_icm(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap,
|
|
|
}
|
|
|
|
|
|
|
|
|
- num_eqs = (mlx4_is_master(dev)) ?
|
|
|
- roundup_pow_of_two(mlx4_master_get_num_eqs(dev)) :
|
|
|
- dev->caps.num_eqs;
|
|
|
+ num_eqs = (mlx4_is_master(dev)) ? dev->phys_caps.num_phys_eqs :
|
|
|
+ dev->caps.num_eqs;
|
|
|
err = mlx4_init_icm_table(dev, &priv->eq_table.table,
|
|
|
init_hca->eqc_base, dev_cap->eqc_entry_sz,
|
|
|
num_eqs, num_eqs, 0, 0);
|