diff options
-rw-r--r-- | drivers/infiniband/hw/cxgb3/cxio_hal.h | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch.c | 4 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch_provider.c | 25 |
3 files changed, 29 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.h b/drivers/infiniband/hw/cxgb3/cxio_hal.h index 25a880664e6b..a9ff32c36211 100644 --- a/drivers/infiniband/hw/cxgb3/cxio_hal.h +++ b/drivers/infiniband/hw/cxgb3/cxio_hal.h | |||
@@ -45,13 +45,14 @@ | |||
45 | #define T3_CTRL_QP_SIZE_LOG2 8 | 45 | #define T3_CTRL_QP_SIZE_LOG2 8 |
46 | #define T3_CTRL_CQ_ID 0 | 46 | #define T3_CTRL_CQ_ID 0 |
47 | 47 | ||
48 | /* TBD */ | ||
49 | #define T3_MAX_NUM_RI (1<<15) | 48 | #define T3_MAX_NUM_RI (1<<15) |
50 | #define T3_MAX_NUM_QP (1<<15) | 49 | #define T3_MAX_NUM_QP (1<<15) |
51 | #define T3_MAX_NUM_CQ (1<<15) | 50 | #define T3_MAX_NUM_CQ (1<<15) |
52 | #define T3_MAX_NUM_PD (1<<15) | 51 | #define T3_MAX_NUM_PD (1<<15) |
53 | #define T3_MAX_PBL_SIZE 256 | 52 | #define T3_MAX_PBL_SIZE 256 |
54 | #define T3_MAX_RQ_SIZE 1024 | 53 | #define T3_MAX_RQ_SIZE 1024 |
54 | #define T3_MAX_QP_DEPTH (T3_MAX_RQ_SIZE-1) | ||
55 | #define T3_MAX_CQ_DEPTH 8192 | ||
55 | #define T3_MAX_NUM_STAG (1<<15) | 56 | #define T3_MAX_NUM_STAG (1<<15) |
56 | #define T3_MAX_MR_SIZE 0x100000000ULL | 57 | #define T3_MAX_MR_SIZE 0x100000000ULL |
57 | 58 | ||
diff --git a/drivers/infiniband/hw/cxgb3/iwch.c b/drivers/infiniband/hw/cxgb3/iwch.c index 71554eacb13c..e09cc1a81999 100644 --- a/drivers/infiniband/hw/cxgb3/iwch.c +++ b/drivers/infiniband/hw/cxgb3/iwch.c | |||
@@ -74,11 +74,11 @@ static void rnic_init(struct iwch_dev *rnicp) | |||
74 | rnicp->attr.vendor_id = 0x168; | 74 | rnicp->attr.vendor_id = 0x168; |
75 | rnicp->attr.vendor_part_id = 7; | 75 | rnicp->attr.vendor_part_id = 7; |
76 | rnicp->attr.max_qps = T3_MAX_NUM_QP - 32; | 76 | rnicp->attr.max_qps = T3_MAX_NUM_QP - 32; |
77 | rnicp->attr.max_wrs = (1UL << 24) - 1; | 77 | rnicp->attr.max_wrs = T3_MAX_QP_DEPTH; |
78 | rnicp->attr.max_sge_per_wr = T3_MAX_SGE; | 78 | rnicp->attr.max_sge_per_wr = T3_MAX_SGE; |
79 | rnicp->attr.max_sge_per_rdma_write_wr = T3_MAX_SGE; | 79 | rnicp->attr.max_sge_per_rdma_write_wr = T3_MAX_SGE; |
80 | rnicp->attr.max_cqs = T3_MAX_NUM_CQ - 1; | 80 | rnicp->attr.max_cqs = T3_MAX_NUM_CQ - 1; |
81 | rnicp->attr.max_cqes_per_cq = (1UL << 24) - 1; | 81 | rnicp->attr.max_cqes_per_cq = T3_MAX_CQ_DEPTH; |
82 | rnicp->attr.max_mem_regs = cxio_num_stags(&rnicp->rdev); | 82 | rnicp->attr.max_mem_regs = cxio_num_stags(&rnicp->rdev); |
83 | rnicp->attr.max_phys_buf_entries = T3_MAX_PBL_SIZE; | 83 | rnicp->attr.max_phys_buf_entries = T3_MAX_PBL_SIZE; |
84 | rnicp->attr.max_pds = T3_MAX_NUM_PD - 1; | 84 | rnicp->attr.max_pds = T3_MAX_NUM_PD - 1; |
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c index 5d504f3ed68b..5f4380657392 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_provider.c +++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c | |||
@@ -1093,6 +1093,29 @@ static int iwch_query_gid(struct ib_device *ibdev, u8 port, | |||
1093 | return 0; | 1093 | return 0; |
1094 | } | 1094 | } |
1095 | 1095 | ||
1096 | static u64 fw_vers_string_to_u64(struct iwch_dev *iwch_dev) | ||
1097 | { | ||
1098 | struct ethtool_drvinfo info; | ||
1099 | struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev; | ||
1100 | char *cp, *next; | ||
1101 | unsigned fw_maj, fw_min, fw_mic; | ||
1102 | |||
1103 | rtnl_lock(); | ||
1104 | lldev->ethtool_ops->get_drvinfo(lldev, &info); | ||
1105 | rtnl_unlock(); | ||
1106 | |||
1107 | next = info.fw_version + 1; | ||
1108 | cp = strsep(&next, "."); | ||
1109 | sscanf(cp, "%i", &fw_maj); | ||
1110 | cp = strsep(&next, "."); | ||
1111 | sscanf(cp, "%i", &fw_min); | ||
1112 | cp = strsep(&next, "."); | ||
1113 | sscanf(cp, "%i", &fw_mic); | ||
1114 | |||
1115 | return (((u64)fw_maj & 0xffff) << 32) | ((fw_min & 0xffff) << 16) | | ||
1116 | (fw_mic & 0xffff); | ||
1117 | } | ||
1118 | |||
1096 | static int iwch_query_device(struct ib_device *ibdev, | 1119 | static int iwch_query_device(struct ib_device *ibdev, |
1097 | struct ib_device_attr *props) | 1120 | struct ib_device_attr *props) |
1098 | { | 1121 | { |
@@ -1103,6 +1126,8 @@ static int iwch_query_device(struct ib_device *ibdev, | |||
1103 | dev = to_iwch_dev(ibdev); | 1126 | dev = to_iwch_dev(ibdev); |
1104 | memset(props, 0, sizeof *props); | 1127 | memset(props, 0, sizeof *props); |
1105 | memcpy(&props->sys_image_guid, dev->rdev.t3cdev_p->lldev->dev_addr, 6); | 1128 | memcpy(&props->sys_image_guid, dev->rdev.t3cdev_p->lldev->dev_addr, 6); |
1129 | props->hw_ver = dev->rdev.t3cdev_p->type; | ||
1130 | props->fw_ver = fw_vers_string_to_u64(dev); | ||
1106 | props->device_cap_flags = dev->device_cap_flags; | 1131 | props->device_cap_flags = dev->device_cap_flags; |
1107 | props->vendor_id = (u32)dev->rdev.rnic_info.pdev->vendor; | 1132 | props->vendor_id = (u32)dev->rdev.rnic_info.pdev->vendor; |
1108 | props->vendor_part_id = (u32)dev->rdev.rnic_info.pdev->device; | 1133 | props->vendor_part_id = (u32)dev->rdev.rnic_info.pdev->device; |