These patches are mainly related to IO operations. Signed-off-by: zhengfeng luo <luozhengfeng@h-partners.com> Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
187 lines
6.4 KiB
Diff
187 lines
6.4 KiB
Diff
From 49263de90f77f218710ef45bc0377d3e2019d811 Mon Sep 17 00:00:00 2001
|
|
From: Wenpeng Liang <liangwenpeng@huawei.com>
|
|
Date: Sat, 25 Dec 2021 17:42:54 +0800
|
|
Subject: libhns: Use new interfaces hr reg ***() to operate the DB field
|
|
|
|
Use hr_reg_xxx() to simply the codes for filling fields.
|
|
|
|
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
|
|
---
|
|
providers/hns/hns_roce_u_hw_v2.c | 59 ++++++++++++++------------------
|
|
providers/hns/hns_roce_u_hw_v2.h | 30 ++++++----------
|
|
2 files changed, 35 insertions(+), 54 deletions(-)
|
|
|
|
diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c
|
|
index 0cff12b..e7dec0b 100644
|
|
--- a/providers/hns/hns_roce_u_hw_v2.c
|
|
+++ b/providers/hns/hns_roce_u_hw_v2.c
|
|
@@ -291,10 +291,9 @@ static void hns_roce_update_rq_db(struct hns_roce_context *ctx,
|
|
{
|
|
struct hns_roce_db rq_db = {};
|
|
|
|
- rq_db.byte_4 = htole32(qpn);
|
|
- roce_set_field(rq_db.byte_4, DB_BYTE_4_CMD_M, DB_BYTE_4_CMD_S,
|
|
- HNS_ROCE_V2_RQ_DB);
|
|
- rq_db.parameter = htole32(rq_head);
|
|
+ hr_reg_write(&rq_db, DB_TAG, qpn);
|
|
+ hr_reg_write(&rq_db, DB_CMD, HNS_ROCE_V2_RQ_DB);
|
|
+ hr_reg_write(&rq_db, DB_PI, rq_head);
|
|
|
|
hns_roce_write64(ctx->uar + ROCEE_VF_DB_CFG0_OFFSET, (__le32 *)&rq_db);
|
|
}
|
|
@@ -304,12 +303,11 @@ static void hns_roce_update_sq_db(struct hns_roce_context *ctx,
|
|
{
|
|
struct hns_roce_db sq_db = {};
|
|
|
|
- sq_db.byte_4 = htole32(qp->verbs_qp.qp.qp_num);
|
|
- roce_set_field(sq_db.byte_4, DB_BYTE_4_CMD_M, DB_BYTE_4_CMD_S,
|
|
- HNS_ROCE_V2_SQ_DB);
|
|
+ hr_reg_write(&sq_db, DB_TAG, qp->verbs_qp.qp.qp_num);
|
|
+ hr_reg_write(&sq_db, DB_CMD, HNS_ROCE_V2_SQ_DB);
|
|
+ hr_reg_write(&sq_db, DB_PI, qp->sq.head);
|
|
+ hr_reg_write(&sq_db, DB_SL, qp->sl);
|
|
|
|
- sq_db.parameter = htole32(qp->sq.head);
|
|
- roce_set_field(sq_db.parameter, DB_PARAM_SL_M, DB_PARAM_SL_S, qp->sl);
|
|
hns_roce_write64(qp->sq.db_reg, (__le32 *)&sq_db);
|
|
}
|
|
|
|
@@ -336,14 +334,10 @@ static void update_cq_db(struct hns_roce_context *ctx,
|
|
{
|
|
struct hns_roce_db cq_db = {};
|
|
|
|
- roce_set_field(cq_db.byte_4, DB_BYTE_4_TAG_M, DB_BYTE_4_TAG_S, cq->cqn);
|
|
- roce_set_field(cq_db.byte_4, DB_BYTE_4_CMD_M, DB_BYTE_4_CMD_S,
|
|
- HNS_ROCE_V2_CQ_DB_PTR);
|
|
-
|
|
- roce_set_field(cq_db.parameter, DB_PARAM_CQ_CONSUMER_IDX_M,
|
|
- DB_PARAM_CQ_CONSUMER_IDX_S, cq->cons_index);
|
|
- roce_set_field(cq_db.parameter, DB_PARAM_CQ_CMD_SN_M,
|
|
- DB_PARAM_CQ_CMD_SN_S, 1);
|
|
+ hr_reg_write(&cq_db, DB_TAG, cq->cqn);
|
|
+ hr_reg_write(&cq_db, DB_CMD, HNS_ROCE_V2_CQ_DB_PTR);
|
|
+ hr_reg_write(&cq_db, DB_CQ_CI, cq->cons_index);
|
|
+ hr_reg_write(&cq_db, DB_CQ_CMD_SN, 1);
|
|
|
|
hns_roce_write64(ctx->uar + ROCEE_VF_DB_CFG0_OFFSET, (__le32 *)&cq_db);
|
|
}
|
|
@@ -663,7 +657,7 @@ static int hns_roce_u_v2_poll_cq(struct ibv_cq *ibvcq, int ne,
|
|
|
|
if (npolled || err == V2_CQ_POLL_ERR) {
|
|
if (cq->flags & HNS_ROCE_CQ_FLAG_RECORD_DB)
|
|
- *cq->db = cq->cons_index & DB_PARAM_CQ_CONSUMER_IDX_M;
|
|
+ *cq->db = cq->cons_index & RECORD_DB_CI_MASK;
|
|
else
|
|
update_cq_db(ctx, cq);
|
|
}
|
|
@@ -679,24 +673,17 @@ static int hns_roce_u_v2_arm_cq(struct ibv_cq *ibvcq, int solicited)
|
|
struct hns_roce_cq *cq = to_hr_cq(ibvcq);
|
|
struct hns_roce_db cq_db = {};
|
|
uint32_t solicited_flag;
|
|
- uint32_t cmd_sn;
|
|
uint32_t ci;
|
|
|
|
ci = cq->cons_index & ((cq->cq_depth << 1) - 1);
|
|
- cmd_sn = cq->arm_sn & HNS_ROCE_CMDSN_MASK;
|
|
solicited_flag = solicited ? HNS_ROCE_V2_CQ_DB_REQ_SOL :
|
|
HNS_ROCE_V2_CQ_DB_REQ_NEXT;
|
|
|
|
- roce_set_field(cq_db.byte_4, DB_BYTE_4_TAG_M, DB_BYTE_4_TAG_S, cq->cqn);
|
|
- roce_set_field(cq_db.byte_4, DB_BYTE_4_CMD_M, DB_BYTE_4_CMD_S,
|
|
- HNS_ROCE_V2_CQ_DB_NTR);
|
|
-
|
|
- roce_set_field(cq_db.parameter, DB_PARAM_CQ_CONSUMER_IDX_M,
|
|
- DB_PARAM_CQ_CONSUMER_IDX_S, ci);
|
|
-
|
|
- roce_set_field(cq_db.parameter, DB_PARAM_CQ_CMD_SN_M,
|
|
- DB_PARAM_CQ_CMD_SN_S, cmd_sn);
|
|
- roce_set_bit(cq_db.parameter, DB_PARAM_CQ_NOTIFY_S, solicited_flag);
|
|
+ hr_reg_write(&cq_db, DB_TAG, cq->cqn);
|
|
+ hr_reg_write(&cq_db, DB_CMD, HNS_ROCE_V2_CQ_DB_NTR);
|
|
+ hr_reg_write(&cq_db, DB_CQ_CI, ci);
|
|
+ hr_reg_write(&cq_db, DB_CQ_CMD_SN, cq->arm_sn);
|
|
+ hr_reg_write(&cq_db, DB_CQ_NOTIFY, solicited_flag);
|
|
|
|
hns_roce_write64(ctx->uar + ROCEE_VF_DB_CFG0_OFFSET, (__le32 *)&cq_db);
|
|
|
|
@@ -1626,6 +1613,13 @@ static void fill_wqe_idx(struct hns_roce_srq *srq, unsigned int wqe_idx)
|
|
idx_que->head++;
|
|
}
|
|
|
|
+static void update_srq_db(struct hns_roce_db *db, struct hns_roce_srq *srq)
|
|
+{
|
|
+ hr_reg_write(db, DB_TAG, srq->srqn);
|
|
+ hr_reg_write(db, DB_CMD, HNS_ROCE_V2_SRQ_DB);
|
|
+ hr_reg_write(db, DB_PI, srq->idx_que.head);
|
|
+}
|
|
+
|
|
static int hns_roce_u_v2_post_srq_recv(struct ibv_srq *ib_srq,
|
|
struct ibv_recv_wr *wr,
|
|
struct ibv_recv_wr **bad_wr)
|
|
@@ -1665,10 +1659,7 @@ static int hns_roce_u_v2_post_srq_recv(struct ibv_srq *ib_srq,
|
|
*/
|
|
udma_to_device_barrier();
|
|
|
|
- srq_db.byte_4 = htole32(HNS_ROCE_V2_SRQ_DB << DB_BYTE_4_CMD_S |
|
|
- srq->srqn);
|
|
- srq_db.parameter = htole32(srq->idx_que.head &
|
|
- DB_PARAM_SRQ_PRODUCER_COUNTER_M);
|
|
+ update_srq_db(&srq_db, srq);
|
|
|
|
hns_roce_write64(ctx->uar + ROCEE_VF_DB_CFG0_OFFSET,
|
|
(__le32 *)&srq_db);
|
|
diff --git a/providers/hns/hns_roce_u_hw_v2.h b/providers/hns/hns_roce_u_hw_v2.h
|
|
index 4330b7d..e91b1f7 100644
|
|
--- a/providers/hns/hns_roce_u_hw_v2.h
|
|
+++ b/providers/hns/hns_roce_u_hw_v2.h
|
|
@@ -41,8 +41,6 @@ enum {
|
|
#define HNS_ROCE_V2_CQ_DB_REQ_SOL 1
|
|
#define HNS_ROCE_V2_CQ_DB_REQ_NEXT 0
|
|
|
|
-#define HNS_ROCE_CMDSN_MASK 0x3
|
|
-
|
|
#define HNS_ROCE_SL_SHIFT 2
|
|
|
|
/* V2 REG DEFINITION */
|
|
@@ -127,27 +125,19 @@ struct hns_roce_db {
|
|
__le32 byte_4;
|
|
__le32 parameter;
|
|
};
|
|
-#define DB_BYTE_4_TAG_S 0
|
|
-#define DB_BYTE_4_TAG_M GENMASK(23, 0)
|
|
-
|
|
-#define DB_BYTE_4_CMD_S 24
|
|
-#define DB_BYTE_4_CMD_M GENMASK(27, 24)
|
|
-
|
|
-#define DB_BYTE_4_FLAG_S 31
|
|
-
|
|
-#define DB_PARAM_SRQ_PRODUCER_COUNTER_S 0
|
|
-#define DB_PARAM_SRQ_PRODUCER_COUNTER_M GENMASK(15, 0)
|
|
-
|
|
-#define DB_PARAM_SL_S 16
|
|
-#define DB_PARAM_SL_M GENMASK(18, 16)
|
|
|
|
-#define DB_PARAM_CQ_CONSUMER_IDX_S 0
|
|
-#define DB_PARAM_CQ_CONSUMER_IDX_M GENMASK(23, 0)
|
|
+#define DB_FIELD_LOC(h, l) FIELD_LOC(struct hns_roce_db, h, l)
|
|
|
|
-#define DB_PARAM_CQ_NOTIFY_S 24
|
|
+#define DB_TAG DB_FIELD_LOC(23, 0)
|
|
+#define DB_CMD DB_FIELD_LOC(27, 24)
|
|
+#define DB_FLAG DB_FIELD_LOC(31, 31)
|
|
+#define DB_PI DB_FIELD_LOC(47, 32)
|
|
+#define DB_SL DB_FIELD_LOC(50, 48)
|
|
+#define DB_CQ_CI DB_FIELD_LOC(55, 32)
|
|
+#define DB_CQ_NOTIFY DB_FIELD_LOC(56, 56)
|
|
+#define DB_CQ_CMD_SN DB_FIELD_LOC(58, 57)
|
|
|
|
-#define DB_PARAM_CQ_CMD_SN_S 25
|
|
-#define DB_PARAM_CQ_CMD_SN_M GENMASK(26, 25)
|
|
+#define RECORD_DB_CI_MASK GENMASK(23, 0)
|
|
|
|
struct hns_roce_v2_cqe {
|
|
__le32 byte_4;
|
|
--
|
|
2.27.0
|
|
|