aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma.h7
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_hw.c3
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_main.c4
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_sli.h9
4 files changed, 21 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma.h b/drivers/infiniband/hw/ocrdma/ocrdma.h
index 12503f15fbd6..b58833d9b909 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma.h
+++ b/drivers/infiniband/hw/ocrdma/ocrdma.h
@@ -114,6 +114,7 @@ struct ocrdma_dev_attr {
114 u8 local_ca_ack_delay; 114 u8 local_ca_ack_delay;
115 u8 ird; 115 u8 ird;
116 u8 num_ird_pages; 116 u8 num_ird_pages;
117 u8 udp_encap;
117}; 118};
118 119
119struct ocrdma_dma_mem { 120struct ocrdma_dma_mem {
@@ -598,4 +599,10 @@ static inline u8 ocrdma_get_ae_link_state(u32 ae_state)
598 return ((ae_state & OCRDMA_AE_LSC_LS_MASK) >> OCRDMA_AE_LSC_LS_SHIFT); 599 return ((ae_state & OCRDMA_AE_LSC_LS_MASK) >> OCRDMA_AE_LSC_LS_SHIFT);
599} 600}
600 601
602static inline bool ocrdma_is_udp_encap_supported(struct ocrdma_dev *dev)
603{
604 return (dev->attr.udp_encap & OCRDMA_L3_TYPE_IPV4) ||
605 (dev->attr.udp_encap & OCRDMA_L3_TYPE_IPV6);
606}
607
601#endif 608#endif
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
index 283ca842ff74..aea7f1761907 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
@@ -1144,6 +1144,9 @@ static void ocrdma_get_attr(struct ocrdma_dev *dev,
1144 attr->max_pd = 1144 attr->max_pd =
1145 (rsp->max_pd_ca_ack_delay & OCRDMA_MBX_QUERY_CFG_MAX_PD_MASK) >> 1145 (rsp->max_pd_ca_ack_delay & OCRDMA_MBX_QUERY_CFG_MAX_PD_MASK) >>
1146 OCRDMA_MBX_QUERY_CFG_MAX_PD_SHIFT; 1146 OCRDMA_MBX_QUERY_CFG_MAX_PD_SHIFT;
1147 attr->udp_encap = (rsp->max_pd_ca_ack_delay &
1148 OCRDMA_MBX_QUERY_CFG_L3_TYPE_MASK) >>
1149 OCRDMA_MBX_QUERY_CFG_L3_TYPE_SHIFT;
1147 attr->max_dpp_pds = 1150 attr->max_dpp_pds =
1148 (rsp->max_dpp_pds_credits & OCRDMA_MBX_QUERY_CFG_MAX_DPP_PDS_MASK) >> 1151 (rsp->max_dpp_pds_credits & OCRDMA_MBX_QUERY_CFG_MAX_DPP_PDS_MASK) >>
1149 OCRDMA_MBX_QUERY_CFG_MAX_DPP_PDS_OFFSET; 1152 OCRDMA_MBX_QUERY_CFG_MAX_DPP_PDS_OFFSET;
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
index f38743018cb4..3d75f65ce87e 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
@@ -89,8 +89,10 @@ static int ocrdma_port_immutable(struct ib_device *ibdev, u8 port_num,
89 struct ib_port_immutable *immutable) 89 struct ib_port_immutable *immutable)
90{ 90{
91 struct ib_port_attr attr; 91 struct ib_port_attr attr;
92 struct ocrdma_dev *dev;
92 int err; 93 int err;
93 94
95 dev = get_ocrdma_dev(ibdev);
94 err = ocrdma_query_port(ibdev, port_num, &attr); 96 err = ocrdma_query_port(ibdev, port_num, &attr);
95 if (err) 97 if (err)
96 return err; 98 return err;
@@ -98,6 +100,8 @@ static int ocrdma_port_immutable(struct ib_device *ibdev, u8 port_num,
98 immutable->pkey_tbl_len = attr.pkey_tbl_len; 100 immutable->pkey_tbl_len = attr.pkey_tbl_len;
99 immutable->gid_tbl_len = attr.gid_tbl_len; 101 immutable->gid_tbl_len = attr.gid_tbl_len;
100 immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE; 102 immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE;
103 if (ocrdma_is_udp_encap_supported(dev))
104 immutable->core_cap_flags |= RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP;
101 immutable->max_mad_size = IB_MGMT_MAD_SIZE; 105 immutable->max_mad_size = IB_MGMT_MAD_SIZE;
102 106
103 return 0; 107 return 0;
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_sli.h b/drivers/infiniband/hw/ocrdma/ocrdma_sli.h
index 99dd6fdf06d7..8d75bd4a46ff 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_sli.h
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_sli.h
@@ -140,7 +140,11 @@ enum {
140 OCRDMA_DB_RQ_SHIFT = 24 140 OCRDMA_DB_RQ_SHIFT = 24
141}; 141};
142 142
143#define OCRDMA_ROUDP_FLAGS_SHIFT 0x03 143enum {
144 OCRDMA_L3_TYPE_IB_GRH = 0x00,
145 OCRDMA_L3_TYPE_IPV4 = 0x01,
146 OCRDMA_L3_TYPE_IPV6 = 0x02
147};
144 148
145#define OCRDMA_DB_CQ_RING_ID_MASK 0x3FF /* bits 0 - 9 */ 149#define OCRDMA_DB_CQ_RING_ID_MASK 0x3FF /* bits 0 - 9 */
146#define OCRDMA_DB_CQ_RING_ID_EXT_MASK 0x0C00 /* bits 10-11 of qid at 12-11 */ 150#define OCRDMA_DB_CQ_RING_ID_EXT_MASK 0x0C00 /* bits 10-11 of qid at 12-11 */
@@ -546,7 +550,8 @@ enum {
546 OCRDMA_MBX_QUERY_CFG_CA_ACK_DELAY_SHIFT = 8, 550 OCRDMA_MBX_QUERY_CFG_CA_ACK_DELAY_SHIFT = 8,
547 OCRDMA_MBX_QUERY_CFG_CA_ACK_DELAY_MASK = 0xFF << 551 OCRDMA_MBX_QUERY_CFG_CA_ACK_DELAY_MASK = 0xFF <<
548 OCRDMA_MBX_QUERY_CFG_CA_ACK_DELAY_SHIFT, 552 OCRDMA_MBX_QUERY_CFG_CA_ACK_DELAY_SHIFT,
549 553 OCRDMA_MBX_QUERY_CFG_L3_TYPE_SHIFT = 3,
554 OCRDMA_MBX_QUERY_CFG_L3_TYPE_MASK = 0x18,
550 OCRDMA_MBX_QUERY_CFG_MAX_SEND_SGE_SHIFT = 0, 555 OCRDMA_MBX_QUERY_CFG_MAX_SEND_SGE_SHIFT = 0,
551 OCRDMA_MBX_QUERY_CFG_MAX_SEND_SGE_MASK = 0xFFFF, 556 OCRDMA_MBX_QUERY_CFG_MAX_SEND_SGE_MASK = 0xFFFF,
552 OCRDMA_MBX_QUERY_CFG_MAX_WRITE_SGE_SHIFT = 16, 557 OCRDMA_MBX_QUERY_CFG_MAX_WRITE_SGE_SHIFT = 16,