Lines Matching refs:p_hwfn

38 static void qed_roce_free_real_icid(struct qed_hwfn *p_hwfn, u16 icid);
40 static int qed_roce_async_event(struct qed_hwfn *p_hwfn, u8 fw_event_code,
44 struct qed_rdma_events events = p_hwfn->p_rdma_info->events;
54 qed_roce_free_real_icid(p_hwfn, icid);
69 void qed_roce_stop(struct qed_hwfn *p_hwfn)
71 struct qed_bmap *rcid_map = &p_hwfn->p_rdma_info->real_cid_map;
85 if (p_hwfn->cdev->recov_in_prog)
90 DP_NOTICE(p_hwfn, "cid bitmap wait timed out\n");
132 static void qed_roce_free_cid_pair(struct qed_hwfn *p_hwfn, u16 cid)
134 spin_lock_bh(&p_hwfn->p_rdma_info->lock);
135 qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->cid_map, cid);
136 qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->cid_map, cid + 1);
137 spin_unlock_bh(&p_hwfn->p_rdma_info->lock);
140 int qed_roce_alloc_cid(struct qed_hwfn *p_hwfn, u16 *cid)
142 struct qed_rdma_info *p_rdma_info = p_hwfn->p_rdma_info;
147 spin_lock_bh(&p_hwfn->p_rdma_info->lock);
148 rc = qed_rdma_bmap_alloc_id(p_hwfn, &p_rdma_info->cid_map,
155 rc = qed_rdma_bmap_alloc_id(p_hwfn, &p_rdma_info->cid_map,
164 DP_NOTICE(p_hwfn, "Failed to allocate two adjacent qp's'\n");
169 responder_icid += qed_cxt_get_proto_cid_start(p_hwfn,
171 requester_icid += qed_cxt_get_proto_cid_start(p_hwfn,
177 rc = qed_cxt_dynamic_ilt_alloc(p_hwfn, QED_ELEM_CXT, responder_icid);
181 rc = qed_cxt_dynamic_ilt_alloc(p_hwfn, QED_ELEM_CXT, requester_icid);
190 qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map, responder_icid);
191 qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map, requester_icid);
194 DP_VERBOSE(p_hwfn, QED_MSG_RDMA,
199 static void qed_roce_set_real_cid(struct qed_hwfn *p_hwfn, u32 cid)
201 spin_lock_bh(&p_hwfn->p_rdma_info->lock);
202 qed_bmap_set_id(p_hwfn, &p_hwfn->p_rdma_info->real_cid_map, cid);
203 spin_unlock_bh(&p_hwfn->p_rdma_info->lock);
206 static u8 qed_roce_get_qp_tc(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp)
212 tc = qed_dcbx_get_priority_tc(p_hwfn, pri);
215 DP_VERBOSE(p_hwfn, QED_MSG_SP,
222 static int qed_roce_sp_create_responder(struct qed_hwfn *p_hwfn,
237 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid);
241 qp->irq = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev,
246 DP_NOTICE(p_hwfn,
255 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid;
258 rc = qed_sp_init_request(p_hwfn, &p_ent, ROCE_RAMROD_CREATE_QP,
309 p_ramrod->cq_cid = cpu_to_le32((p_hwfn->hw_info.opaque_fid << 16) |
313 tc = qed_roce_get_qp_tc(p_hwfn, qp);
314 regular_latency_queue = qed_get_cm_pq_idx_ofld_mtc(p_hwfn, tc);
315 low_latency_queue = qed_get_cm_pq_idx_llt_mtc(p_hwfn, tc);
316 DP_VERBOSE(p_hwfn, QED_MSG_SP,
333 p_ramrod->srq_id.opaque_fid = cpu_to_le16(p_hwfn->hw_info.opaque_fid);
335 p_ramrod->stats_counter_id = RESC_START(p_hwfn, QED_RDMA_STATS_QUEUE) +
338 rc = qed_spq_post(p_hwfn, p_ent, NULL);
345 proto = p_hwfn->p_rdma_info->proto;
346 qed_roce_set_real_cid(p_hwfn, qp->icid -
347 qed_cxt_get_proto_cid_start(p_hwfn, proto));
352 DP_NOTICE(p_hwfn, "create responder - failed, rc = %d\n", rc);
353 dma_free_coherent(&p_hwfn->cdev->pdev->dev,
360 static int qed_roce_sp_create_requester(struct qed_hwfn *p_hwfn,
375 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid);
379 qp->orq = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev,
384 DP_NOTICE(p_hwfn,
393 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid;
396 rc = qed_sp_init_request(p_hwfn, &p_ent,
446 cpu_to_le32((p_hwfn->hw_info.opaque_fid << 16) | qp->sq_cq_id);
448 tc = qed_roce_get_qp_tc(p_hwfn, qp);
449 regular_latency_queue = qed_get_cm_pq_idx_ofld_mtc(p_hwfn, tc);
450 low_latency_queue = qed_get_cm_pq_idx_llt_mtc(p_hwfn, tc);
451 DP_VERBOSE(p_hwfn, QED_MSG_SP,
467 p_ramrod->stats_counter_id = RESC_START(p_hwfn, QED_RDMA_STATS_QUEUE) +
470 rc = qed_spq_post(p_hwfn, p_ent, NULL);
475 proto = p_hwfn->p_rdma_info->proto;
476 qed_roce_set_real_cid(p_hwfn,
478 qed_cxt_get_proto_cid_start(p_hwfn, proto));
483 DP_NOTICE(p_hwfn, "Create requested - failed, rc = %d\n", rc);
484 dma_free_coherent(&p_hwfn->cdev->pdev->dev,
490 static int qed_roce_sp_modify_responder(struct qed_hwfn *p_hwfn,
503 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid);
511 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid;
514 rc = qed_sp_init_request(p_hwfn, &p_ent,
518 DP_NOTICE(p_hwfn, "rc = %d\n", rc);
571 rc = qed_spq_post(p_hwfn, p_ent, NULL);
573 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Modify responder, rc = %d\n", rc);
577 static int qed_roce_sp_modify_requester(struct qed_hwfn *p_hwfn,
591 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid);
599 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid;
602 rc = qed_sp_init_request(p_hwfn, &p_ent,
606 DP_NOTICE(p_hwfn, "rc = %d\n", rc);
658 rc = qed_spq_post(p_hwfn, p_ent, NULL);
660 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Modify requester, rc = %d\n", rc);
664 static int qed_roce_sp_destroy_qp_responder(struct qed_hwfn *p_hwfn,
680 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid);
690 qed_cxt_get_proto_cid_start(p_hwfn,
691 p_hwfn->p_rdma_info->proto);
692 qed_roce_free_cid_pair(p_hwfn, (u16)cid);
700 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid;
703 rc = qed_sp_init_request(p_hwfn, &p_ent,
711 p_ramrod_res = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev,
717 DP_NOTICE(p_hwfn,
720 qed_sp_destroy_request(p_hwfn, p_ent);
726 rc = qed_spq_post(p_hwfn, p_ent, NULL);
734 dma_free_coherent(&p_hwfn->cdev->pdev->dev,
740 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Destroy responder, rc = %d\n", rc);
743 dma_free_coherent(&p_hwfn->cdev->pdev->dev,
750 static int qed_roce_sp_destroy_qp_requester(struct qed_hwfn *p_hwfn,
763 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid);
768 p_ramrod_res = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev,
772 DP_NOTICE(p_hwfn,
780 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid;
783 rc = qed_sp_init_request(p_hwfn, &p_ent, ROCE_RAMROD_DESTROY_QP,
791 rc = qed_spq_post(p_hwfn, p_ent, NULL);
796 dma_free_coherent(&p_hwfn->cdev->pdev->dev,
802 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Destroy requester, rc = %d\n", rc);
805 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_ramrod_res),
811 int qed_roce_query_qp(struct qed_hwfn *p_hwfn,
837 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "No QPs as no offload\n");
842 DP_NOTICE(p_hwfn,
849 dma_alloc_coherent(&p_hwfn->cdev->pdev->dev,
853 DP_NOTICE(p_hwfn,
861 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid;
863 rc = qed_sp_init_request(p_hwfn, &p_ent, ROCE_RAMROD_QUERY_QP,
871 rc = qed_spq_post(p_hwfn, p_ent, NULL);
879 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_resp_ramrod_res),
896 p_req_ramrod_res = dma_alloc_coherent(&p_hwfn->cdev->pdev->dev,
902 DP_NOTICE(p_hwfn,
909 rc = qed_sp_init_request(p_hwfn, &p_ent, ROCE_RAMROD_QUERY_QP,
917 rc = qed_spq_post(p_hwfn, p_ent, NULL);
928 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_req_ramrod_res),
942 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_req_ramrod_res),
946 dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_resp_ramrod_res),
951 int qed_roce_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp)
960 DP_NOTICE(p_hwfn,
966 rc = qed_roce_sp_destroy_qp_responder(p_hwfn, qp,
972 rc = qed_roce_sp_destroy_qp_requester(p_hwfn, qp);
980 int qed_roce_modify_qp(struct qed_hwfn *p_hwfn,
994 rc = qed_roce_sp_create_responder(p_hwfn, qp);
999 rc = qed_roce_sp_create_requester(p_hwfn, qp);
1004 rc = qed_roce_sp_modify_responder(p_hwfn, qp, false,
1010 rc = qed_roce_sp_modify_responder(p_hwfn, qp, false,
1015 rc = qed_roce_sp_modify_requester(p_hwfn, qp, false, false,
1021 rc = qed_roce_sp_modify_requester(p_hwfn, qp, true, false,
1027 rc = qed_roce_sp_modify_responder(p_hwfn, qp, false,
1032 rc = qed_roce_sp_modify_requester(p_hwfn, qp, false, false,
1038 rc = qed_roce_sp_modify_responder(p_hwfn, qp, false,
1043 rc = qed_roce_sp_modify_requester(p_hwfn, qp, false, false,
1049 rc = qed_roce_sp_modify_responder(p_hwfn, qp, true,
1054 rc = qed_roce_sp_modify_requester(p_hwfn, qp, false, true,
1062 rc = qed_roce_sp_destroy_qp_responder(p_hwfn,
1071 rc = qed_roce_sp_destroy_qp_requester(p_hwfn, qp);
1073 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "0\n");
1079 static void qed_roce_free_real_icid(struct qed_hwfn *p_hwfn, u16 icid)
1081 struct qed_rdma_info *p_rdma_info = p_hwfn->p_rdma_info;
1089 start_cid = qed_cxt_get_proto_cid_start(p_hwfn, p_rdma_info->proto);
1095 qed_bmap_release_id(p_hwfn, &p_rdma_info->real_cid_map, cid);
1096 if (qed_bmap_test_id(p_hwfn, &p_rdma_info->real_cid_map, xcid) == 0) {
1097 qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map, cid);
1098 qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map, xcid);
1101 spin_unlock_bh(&p_hwfn->p_rdma_info->lock);
1104 void qed_roce_dpm_dcbx(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1112 val = qed_rdma_allocated_qps(p_hwfn) ? true : false;
1113 p_hwfn->dcbx_no_edpm = (u8)val;
1115 qed_rdma_dpm_conf(p_hwfn, p_ptt);
1118 int qed_roce_setup(struct qed_hwfn *p_hwfn)
1120 return qed_spq_register_async_cb(p_hwfn, PROTOCOLID_ROCE,
1124 int qed_roce_init_hw(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1128 qed_wr(p_hwfn, p_ptt, PRS_REG_ROCE_DEST_QP_MAX_PF, 0);
1130 p_hwfn->rdma_prs_search_reg = PRS_REG_SEARCH_ROCE;
1132 ll2_ethertype_en = qed_rd(p_hwfn, p_ptt, PRS_REG_LIGHT_L2_ETHERTYPE_EN);
1133 qed_wr(p_hwfn, p_ptt, PRS_REG_LIGHT_L2_ETHERTYPE_EN,
1136 if (qed_cxt_get_proto_cid_start(p_hwfn, PROTOCOLID_ROCE) % 2) {
1137 DP_NOTICE(p_hwfn, "The first RoCE's cid should be even\n");
1141 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Initializing HW - Done\n");