@@ -2566,6 +2566,9 @@ static int irdma_sc_cq_create(struct irdma_sc_cq *cq, u64 scratch,
25662566 FIELD_PREP (IRDMA_CQPSQ_CQ_LPBLSIZE , cq -> pbl_chunk_size ) |
25672567 FIELD_PREP (IRDMA_CQPSQ_CQ_CHKOVERFLOW , check_overflow ) |
25682568 FIELD_PREP (IRDMA_CQPSQ_CQ_VIRTMAP , cq -> virtual_map ) |
2569+ FIELD_PREP (IRDMA_CQPSQ_CQ_CQID_HIGH , cq -> cq_uk .cq_id >> 22 ) |
2570+ FIELD_PREP (IRDMA_CQPSQ_CQ_CEQID_HIGH ,
2571+ (cq -> ceq_id_valid ? cq -> ceq_id : 0 ) >> 10 ) |
25692572 FIELD_PREP (IRDMA_CQPSQ_CQ_ENCEQEMASK , cq -> ceqe_mask ) |
25702573 FIELD_PREP (IRDMA_CQPSQ_CQ_CEQIDVALID , cq -> ceq_id_valid ) |
25712574 FIELD_PREP (IRDMA_CQPSQ_TPHEN , cq -> tph_en ) |
@@ -3928,7 +3931,7 @@ int irdma_sc_ceq_init(struct irdma_sc_ceq *ceq,
39283931 ceq -> pbl_list = (ceq -> virtual_map ? info -> pbl_list : NULL );
39293932 ceq -> tph_en = info -> tph_en ;
39303933 ceq -> tph_val = info -> tph_val ;
3931- ceq -> vsi = info -> vsi ;
3934+ ceq -> vsi_idx = info -> vsi_idx ;
39323935 ceq -> polarity = 1 ;
39333936 IRDMA_RING_INIT (ceq -> ceq_ring , ceq -> elem_cnt );
39343937 ceq -> dev -> ceq [info -> ceq_id ] = ceq ;
@@ -3961,13 +3964,16 @@ static int irdma_sc_ceq_create(struct irdma_sc_ceq *ceq, u64 scratch,
39613964 (ceq -> virtual_map ? ceq -> first_pm_pbl_idx : 0 ));
39623965 set_64bit_val (wqe , 56 ,
39633966 FIELD_PREP (IRDMA_CQPSQ_TPHVAL , ceq -> tph_val ) |
3964- FIELD_PREP (IRDMA_CQPSQ_VSIIDX , ceq -> vsi -> vsi_idx ));
3967+ FIELD_PREP (IRDMA_CQPSQ_PASID , ceq -> pasid ) |
3968+ FIELD_PREP (IRDMA_CQPSQ_VSIIDX , ceq -> vsi_idx ));
39653969 hdr = FIELD_PREP (IRDMA_CQPSQ_CEQ_CEQID , ceq -> ceq_id ) |
3970+ FIELD_PREP (IRDMA_CQPSQ_CEQ_CEQID_HIGH , ceq -> ceq_id >> 10 ) |
39663971 FIELD_PREP (IRDMA_CQPSQ_OPCODE , IRDMA_CQP_OP_CREATE_CEQ ) |
39673972 FIELD_PREP (IRDMA_CQPSQ_CEQ_LPBLSIZE , ceq -> pbl_chunk_size ) |
39683973 FIELD_PREP (IRDMA_CQPSQ_CEQ_VMAP , ceq -> virtual_map ) |
39693974 FIELD_PREP (IRDMA_CQPSQ_CEQ_ITRNOEXPIRE , ceq -> itr_no_expire ) |
39703975 FIELD_PREP (IRDMA_CQPSQ_TPHEN , ceq -> tph_en ) |
3976+ FIELD_PREP (IRDMA_CQPSQ_PASID_VALID , ceq -> pasid_valid ) |
39713977 FIELD_PREP (IRDMA_CQPSQ_WQEVALID , cqp -> polarity );
39723978 dma_wmb (); /* make sure WQE is written before valid bit is set */
39733979
@@ -4022,7 +4028,7 @@ int irdma_sc_cceq_create(struct irdma_sc_ceq *ceq, u64 scratch)
40224028 int ret_code ;
40234029 struct irdma_sc_dev * dev = ceq -> dev ;
40244030
4025- dev -> ccq -> vsi = ceq -> vsi ;
4031+ dev -> ccq -> vsi_idx = ceq -> vsi_idx ;
40264032 if (ceq -> reg_cq ) {
40274033 ret_code = irdma_sc_add_cq_ctx (ceq , ceq -> dev -> ccq );
40284034 if (ret_code )
@@ -4055,11 +4061,14 @@ int irdma_sc_ceq_destroy(struct irdma_sc_ceq *ceq, u64 scratch, bool post_sq)
40554061
40564062 set_64bit_val (wqe , 16 , ceq -> elem_cnt );
40574063 set_64bit_val (wqe , 48 , ceq -> first_pm_pbl_idx );
4064+ set_64bit_val (wqe , 56 ,
4065+ FIELD_PREP (IRDMA_CQPSQ_PASID , ceq -> pasid ));
40584066 hdr = ceq -> ceq_id |
40594067 FIELD_PREP (IRDMA_CQPSQ_OPCODE , IRDMA_CQP_OP_DESTROY_CEQ ) |
40604068 FIELD_PREP (IRDMA_CQPSQ_CEQ_LPBLSIZE , ceq -> pbl_chunk_size ) |
40614069 FIELD_PREP (IRDMA_CQPSQ_CEQ_VMAP , ceq -> virtual_map ) |
40624070 FIELD_PREP (IRDMA_CQPSQ_TPHEN , ceq -> tph_en ) |
4071+ FIELD_PREP (IRDMA_CQPSQ_PASID_VALID , ceq -> pasid_valid ) |
40634072 FIELD_PREP (IRDMA_CQPSQ_WQEVALID , cqp -> polarity );
40644073 dma_wmb (); /* make sure WQE is written before valid bit is set */
40654074
@@ -4223,10 +4232,13 @@ static int irdma_sc_aeq_create(struct irdma_sc_aeq *aeq, u64 scratch,
42234232 (aeq -> virtual_map ? 0 : aeq -> aeq_elem_pa ));
42244233 set_64bit_val (wqe , 48 ,
42254234 (aeq -> virtual_map ? aeq -> first_pm_pbl_idx : 0 ));
4235+ set_64bit_val (wqe , 56 ,
4236+ FIELD_PREP (IRDMA_CQPSQ_PASID , aeq -> pasid ));
42264237
42274238 hdr = FIELD_PREP (IRDMA_CQPSQ_OPCODE , IRDMA_CQP_OP_CREATE_AEQ ) |
42284239 FIELD_PREP (IRDMA_CQPSQ_AEQ_LPBLSIZE , aeq -> pbl_chunk_size ) |
42294240 FIELD_PREP (IRDMA_CQPSQ_AEQ_VMAP , aeq -> virtual_map ) |
4241+ FIELD_PREP (IRDMA_CQPSQ_PASID_VALID , aeq -> pasid_valid ) |
42304242 FIELD_PREP (IRDMA_CQPSQ_WQEVALID , cqp -> polarity );
42314243 dma_wmb (); /* make sure WQE is written before valid bit is set */
42324244
@@ -4255,17 +4267,21 @@ static int irdma_sc_aeq_destroy(struct irdma_sc_aeq *aeq, u64 scratch,
42554267 u64 hdr ;
42564268
42574269 dev = aeq -> dev ;
4258- writel (0 , dev -> hw_regs [IRDMA_PFINT_AEQCTL ]);
4270+ if (dev -> privileged )
4271+ writel (0 , dev -> hw_regs [IRDMA_PFINT_AEQCTL ]);
42594272
42604273 cqp = dev -> cqp ;
42614274 wqe = irdma_sc_cqp_get_next_send_wqe (cqp , scratch );
42624275 if (!wqe )
42634276 return - ENOMEM ;
42644277 set_64bit_val (wqe , 16 , aeq -> elem_cnt );
42654278 set_64bit_val (wqe , 48 , aeq -> first_pm_pbl_idx );
4279+ set_64bit_val (wqe , 56 ,
4280+ FIELD_PREP (IRDMA_CQPSQ_PASID , aeq -> pasid ));
42664281 hdr = FIELD_PREP (IRDMA_CQPSQ_OPCODE , IRDMA_CQP_OP_DESTROY_AEQ ) |
42674282 FIELD_PREP (IRDMA_CQPSQ_AEQ_LPBLSIZE , aeq -> pbl_chunk_size ) |
42684283 FIELD_PREP (IRDMA_CQPSQ_AEQ_VMAP , aeq -> virtual_map ) |
4284+ FIELD_PREP (IRDMA_CQPSQ_PASID_VALID , aeq -> pasid_valid ) |
42694285 FIELD_PREP (IRDMA_CQPSQ_WQEVALID , cqp -> polarity );
42704286 dma_wmb (); /* make sure WQE is written before valid bit is set */
42714287
@@ -4306,18 +4322,39 @@ int irdma_sc_get_next_aeqe(struct irdma_sc_aeq *aeq,
43064322 print_hex_dump_debug ("WQE: AEQ_ENTRY WQE" , DUMP_PREFIX_OFFSET , 16 , 8 ,
43074323 aeqe , 16 , false);
43084324
4309- ae_src = (u8 )FIELD_GET (IRDMA_AEQE_AESRC , temp );
4310- info -> wqe_idx = (u16 )FIELD_GET (IRDMA_AEQE_WQDESCIDX , temp );
4311- info -> qp_cq_id = (u32 )FIELD_GET (IRDMA_AEQE_QPCQID_LOW , temp ) |
4325+ if (aeq -> dev -> hw_attrs .uk_attrs .hw_rev >= IRDMA_GEN_3 ) {
4326+ ae_src = (u8 )FIELD_GET (IRDMA_AEQE_AESRC_GEN_3 , temp );
4327+ info -> wqe_idx = (u16 )FIELD_GET (IRDMA_AEQE_WQDESCIDX_GEN_3 ,
4328+ temp );
4329+ info -> qp_cq_id = (u32 )FIELD_GET (IRDMA_AEQE_QPCQID_GEN_3 , temp );
4330+ info -> ae_id = (u16 )FIELD_GET (IRDMA_AEQE_AECODE_GEN_3 , temp );
4331+ info -> tcp_state = (u8 )FIELD_GET (IRDMA_AEQE_TCPSTATE_GEN_3 , compl_ctx );
4332+ info -> iwarp_state = (u8 )FIELD_GET (IRDMA_AEQE_IWSTATE_GEN_3 , temp );
4333+ info -> q2_data_written = (u8 )FIELD_GET (IRDMA_AEQE_Q2DATA_GEN_3 , compl_ctx );
4334+ info -> aeqe_overflow = (bool )FIELD_GET (IRDMA_AEQE_OVERFLOW_GEN_3 , temp );
4335+ info -> compl_ctx = FIELD_GET (IRDMA_AEQE_CMPL_CTXT , compl_ctx );
4336+ compl_ctx = FIELD_GET (IRDMA_AEQE_CMPL_CTXT , compl_ctx ) << IRDMA_AEQE_CMPL_CTXT_S ;
4337+ } else {
4338+ ae_src = (u8 )FIELD_GET (IRDMA_AEQE_AESRC , temp );
4339+ info -> wqe_idx = (u16 )FIELD_GET (IRDMA_AEQE_WQDESCIDX , temp );
4340+ info -> qp_cq_id = (u32 )FIELD_GET (IRDMA_AEQE_QPCQID_LOW , temp ) |
43124341 ((u32 )FIELD_GET (IRDMA_AEQE_QPCQID_HI , temp ) << 18 );
4313- info -> ae_id = (u16 )FIELD_GET (IRDMA_AEQE_AECODE , temp );
4314- info -> tcp_state = (u8 )FIELD_GET (IRDMA_AEQE_TCPSTATE , temp );
4315- info -> iwarp_state = (u8 )FIELD_GET (IRDMA_AEQE_IWSTATE , temp );
4316- info -> q2_data_written = (u8 )FIELD_GET (IRDMA_AEQE_Q2DATA , temp );
4317- info -> aeqe_overflow = (bool )FIELD_GET (IRDMA_AEQE_OVERFLOW , temp );
4342+ info -> ae_id = (u16 )FIELD_GET (IRDMA_AEQE_AECODE , temp );
4343+ info -> tcp_state = (u8 )FIELD_GET (IRDMA_AEQE_TCPSTATE , temp );
4344+ info -> iwarp_state = (u8 )FIELD_GET (IRDMA_AEQE_IWSTATE , temp );
4345+ info -> q2_data_written = (u8 )FIELD_GET (IRDMA_AEQE_Q2DATA , temp );
4346+ info -> aeqe_overflow = (bool )FIELD_GET (IRDMA_AEQE_OVERFLOW ,
4347+ temp );
4348+ }
43184349
43194350 info -> ae_src = ae_src ;
43204351 switch (info -> ae_id ) {
4352+ case IRDMA_AE_SRQ_LIMIT :
4353+ info -> srq = true;
4354+ /* [63:6] from CMPL_CTXT, [5:0] from WQDESCIDX. */
4355+ info -> compl_ctx = compl_ctx | info -> wqe_idx ;
4356+ ae_src = IRDMA_AE_SOURCE_RSVD ;
4357+ break ;
43214358 case IRDMA_AE_PRIV_OPERATION_DENIED :
43224359 case IRDMA_AE_AMP_INVALIDATE_TYPE1_MW :
43234360 case IRDMA_AE_AMP_MWBIND_ZERO_BASED_TYPE1_MW :
@@ -4350,6 +4387,10 @@ int irdma_sc_get_next_aeqe(struct irdma_sc_aeq *aeq,
43504387 case IRDMA_AE_LLP_RECEIVED_MPA_CRC_ERROR :
43514388 case IRDMA_AE_LLP_SEGMENT_TOO_SMALL :
43524389 case IRDMA_AE_LLP_TOO_MANY_RETRIES :
4390+ case IRDMA_AE_LLP_TOO_MANY_RNRS :
4391+ case IRDMA_AE_REMOTE_QP_CATASTROPHIC :
4392+ case IRDMA_AE_LOCAL_QP_CATASTROPHIC :
4393+ case IRDMA_AE_RCE_QP_CATASTROPHIC :
43534394 case IRDMA_AE_LLP_DOUBT_REACHABILITY :
43544395 case IRDMA_AE_LLP_CONNECTION_ESTABLISHED :
43554396 case IRDMA_AE_RESET_SENT :
@@ -4395,6 +4436,7 @@ int irdma_sc_get_next_aeqe(struct irdma_sc_aeq *aeq,
43954436 info -> qp = true;
43964437 info -> rq = true;
43974438 info -> compl_ctx = compl_ctx ;
4439+ info -> err_rq_idx_valid = true;
43984440 break ;
43994441 case IRDMA_AE_SOURCE_CQ :
44004442 case IRDMA_AE_SOURCE_CQ_0110 :
@@ -4410,8 +4452,18 @@ int irdma_sc_get_next_aeqe(struct irdma_sc_aeq *aeq,
44104452 info -> compl_ctx = compl_ctx ;
44114453 break ;
44124454 case IRDMA_AE_SOURCE_IN_RR_WR :
4455+ info -> qp = true;
4456+ if (aeq -> dev -> hw_attrs .uk_attrs .hw_rev >= IRDMA_GEN_3 )
4457+ info -> err_rq_idx_valid = true;
4458+ info -> compl_ctx = compl_ctx ;
4459+ info -> in_rdrsp_wr = true;
4460+ break ;
44134461 case IRDMA_AE_SOURCE_IN_RR_WR_1011 :
44144462 info -> qp = true;
4463+ if (aeq -> dev -> hw_attrs .uk_attrs .hw_rev >= IRDMA_GEN_3 ) {
4464+ info -> sq = true;
4465+ info -> err_rq_idx_valid = true;
4466+ }
44154467 info -> compl_ctx = compl_ctx ;
44164468 info -> in_rdrsp_wr = true;
44174469 break ;
0 commit comments