From 49263de90f77f218710ef45bc0377d3e2019d811 Mon Sep 17 00:00:00 2001 From: Wenpeng Liang 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 --- 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