Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

RDMA/irdma: Add support for GEN4 hardware

GEN4 hardware is similar to GEN3 and requires only a few special cases.

Signed-off-by: Jacob Moroni <jmoroni@google.com>
Signed-off-by: Tatyana Nikolova <tatyana.e.nikolova@intel.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>

authored by

Jacob Moroni and committed by
Leon Romanovsky
f3cf7493 9d6ba4ce

+12 -5
+1
drivers/infiniband/hw/irdma/ctrl.c
··· 6465 6465 icrdma_init_hw(dev); 6466 6466 break; 6467 6467 case IRDMA_GEN_3: 6468 + case IRDMA_GEN_4: 6468 6469 ig3rdma_init_hw(dev); 6469 6470 break; 6470 6471 }
+10 -4
drivers/infiniband/hw/irdma/hw.c
··· 1082 1082 cqp_init_info.hw_maj_ver = IRDMA_CQPHC_HW_MAJVER_GEN_2; 1083 1083 break; 1084 1084 case IRDMA_GEN_3: 1085 + case IRDMA_GEN_4: 1085 1086 cqp_init_info.hw_maj_ver = IRDMA_CQPHC_HW_MAJVER_GEN_3; 1086 1087 cqp_init_info.ts_override = 1; 1087 1088 break; ··· 1509 1508 hmc_info->hmc_obj[IRDMA_HMC_IW_CQ].cnt; 1510 1509 aeq_size = min(aeq_size, dev->hw_attrs.max_hw_aeq_size); 1511 1510 /* GEN_3 does not support virtual AEQ. Cap at max Kernel alloc size */ 1512 - if (rf->rdma_ver == IRDMA_GEN_3) 1511 + if (rf->rdma_ver >= IRDMA_GEN_3) 1513 1512 aeq_size = min(aeq_size, (u32)((PAGE_SIZE << MAX_PAGE_ORDER) / 1514 1513 sizeof(struct irdma_sc_aeqe))); 1515 1514 aeq->mem.size = ALIGN(sizeof(struct irdma_sc_aeqe) * aeq_size, ··· 1519 1518 GFP_KERNEL | __GFP_NOWARN); 1520 1519 if (aeq->mem.va) 1521 1520 goto skip_virt_aeq; 1522 - else if (rf->rdma_ver == IRDMA_GEN_3) 1521 + else if (rf->rdma_ver >= IRDMA_GEN_3) 1523 1522 return -ENOMEM; 1524 1523 1525 1524 /* physically mapped aeq failed. setup virtual aeq */ ··· 2193 2192 set_bit(2, rf->allocated_pds); 2194 2193 2195 2194 INIT_LIST_HEAD(&rf->mc_qht_list.list); 2196 - /* stag index mask has a minimum of 14 bits */ 2197 - mrdrvbits = 24 - max(get_count_order(rf->max_mr), 14); 2195 + 2196 + if (rf->rdma_ver >= IRDMA_GEN_4) 2197 + mrdrvbits = 24 - max(get_count_order(rf->max_mr), 16); 2198 + else 2199 + /* stag index mask has a minimum of 14 bits */ 2200 + mrdrvbits = 24 - max(get_count_order(rf->max_mr), 14); 2201 + 2198 2202 rf->mr_stagmask = ~(((1 << mrdrvbits) - 1) << (32 - mrdrvbits)); 2199 2203 2200 2204 return 0;
-1
drivers/infiniband/hw/irdma/ig3rdma_hw.c
··· 113 113 dev->irq_ops = &ig3rdma_irq_ops; 114 114 dev->hw_stats_map = ig3rdma_hw_stat_map; 115 115 116 - dev->hw_attrs.uk_attrs.hw_rev = IRDMA_GEN_3; 117 116 dev->hw_attrs.uk_attrs.max_hw_wq_frags = IG3RDMA_MAX_WQ_FRAGMENT_COUNT; 118 117 dev->hw_attrs.uk_attrs.max_hw_read_sges = IG3RDMA_MAX_SGE_RD; 119 118 dev->hw_attrs.uk_attrs.max_hw_sq_chunk = IRDMA_MAX_QUANTA_PER_WR;
+1
drivers/infiniband/hw/irdma/irdma.h
··· 119 119 IRDMA_GEN_1, 120 120 IRDMA_GEN_2, 121 121 IRDMA_GEN_3, 122 + IRDMA_GEN_4, 122 123 IRDMA_GEN_NEXT, 123 124 IRDMA_GEN_MAX = IRDMA_GEN_NEXT-1 124 125 };