Skip to content

Commit

Permalink
bnxt_re/lib: DB related changes for gen p7
Browse files Browse the repository at this point in the history
Implements the epoch/toggle bits changes required for Gen P7.
Pass the epoch and toggle bits to while initializing the
DB headers.

Signed-off-by: Selvin Xavier <[email protected]>
  • Loading branch information
selvintxavier committed Dec 19, 2023
1 parent cef835d commit 8b2925b
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 14 deletions.
19 changes: 17 additions & 2 deletions providers/bnxt_re/bnxt_re-abi.h
Expand Up @@ -145,7 +145,7 @@ enum bnxt_re_db_que_type {
};

enum bnxt_re_db_mask {
BNXT_RE_DB_INDX_MASK = 0xFFFFFUL,
BNXT_RE_DB_INDX_MASK = 0xFFFFFFUL,
BNXT_RE_DB_PILO_MASK = 0x0FFUL,
BNXT_RE_DB_PILO_SHIFT = 0x18,
BNXT_RE_DB_QID_MASK = 0xFFFFFUL,
Expand All @@ -154,7 +154,8 @@ enum bnxt_re_db_mask {
BNXT_RE_DB_TYP_MASK = 0x0FUL,
BNXT_RE_DB_TYP_SHIFT = 0x1C,
BNXT_RE_DB_VALID_SHIFT = 0x1A,
BNXT_RE_DB_EPOCH_SHIFT = 0x18
BNXT_RE_DB_EPOCH_SHIFT = 0x18,
BNXT_RE_DB_TOGGLE_SHIFT = 0x19,
};

enum bnxt_re_psns_mask {
Expand All @@ -170,6 +171,8 @@ enum bnxt_re_bcqe_mask {
BNXT_RE_BCQE_PH_MASK = 0x01,
BNXT_RE_BCQE_TYPE_MASK = 0x0F,
BNXT_RE_BCQE_TYPE_SHIFT = 0x01,
BNXT_RE_BCQE_RESIZE_TOG_MASK = 0x03,
BNXT_RE_BCQE_RESIZE_TOG_SHIFT = 0x05,
BNXT_RE_BCQE_STATUS_MASK = 0xFF,
BNXT_RE_BCQE_STATUS_SHIFT = 0x08,
BNXT_RE_BCQE_FLAGS_MASK = 0xFFFFU,
Expand Down Expand Up @@ -215,6 +218,18 @@ enum {
BNXT_RE_COMP_MASK_UCNTX_POW2_DISABLED = 0x04,
};

enum bnxt_re_que_flags_mask {
BNXT_RE_FLAG_EPOCH_TAIL_SHIFT = 0x0UL,
BNXT_RE_FLAG_EPOCH_HEAD_SHIFT = 0x1UL,
BNXT_RE_FLAG_EPOCH_TAIL_MASK = 0x1UL,
BNXT_RE_FLAG_EPOCH_HEAD_MASK = 0x2UL,
};

enum bnxt_re_db_epoch_flag_shift {
BNXT_RE_DB_EPOCH_TAIL_SHIFT = BNXT_RE_DB_EPOCH_SHIFT,
BNXT_RE_DB_EPOCH_HEAD_SHIFT = (BNXT_RE_DB_EPOCH_SHIFT - 1)
};

enum bnxt_re_modes {
BNXT_RE_WQE_MODE_STATIC = 0x00,
BNXT_RE_WQE_MODE_VARIABLE = 0x01
Expand Down
33 changes: 23 additions & 10 deletions providers/bnxt_re/db.c
Expand Up @@ -106,43 +106,52 @@ static void bnxt_re_ring_db(struct bnxt_re_dpi *dpi,
}

static void bnxt_re_init_db_hdr(struct bnxt_re_db_hdr *hdr, uint32_t indx,
uint32_t qid, uint32_t typ)
uint32_t qid, uint32_t toggle, uint32_t typ)
{
hdr->indx = htole32(indx & BNXT_RE_DB_INDX_MASK);
hdr->indx = htole32(indx | toggle << BNXT_RE_DB_TOGGLE_SHIFT);
hdr->typ_qid = htole32(qid & BNXT_RE_DB_QID_MASK);
hdr->typ_qid |= htole32(((typ & BNXT_RE_DB_TYP_MASK) <<
BNXT_RE_DB_TYP_SHIFT));
BNXT_RE_DB_TYP_SHIFT) | (0x1UL << BNXT_RE_DB_VALID_SHIFT));
}

void bnxt_re_ring_rq_db(struct bnxt_re_qp *qp)
{
struct bnxt_re_db_hdr hdr;
uint32_t epoch;
uint32_t tail;

bnxt_re_do_pacing(qp->cntx, &qp->rand);
tail = *qp->jrqq->hwque->dbtail;
bnxt_re_init_db_hdr(&hdr, tail, qp->qpid, BNXT_RE_QUE_TYPE_RQ);
epoch = (qp->jrqq->hwque->flags & BNXT_RE_FLAG_EPOCH_TAIL_MASK) <<
BNXT_RE_DB_EPOCH_TAIL_SHIFT;
bnxt_re_init_db_hdr(&hdr, tail | epoch,
qp->qpid, 0, BNXT_RE_QUE_TYPE_RQ);
bnxt_re_ring_db(qp->udpi, &hdr);
}

void bnxt_re_ring_sq_db(struct bnxt_re_qp *qp)
{
struct bnxt_re_db_hdr hdr;
uint32_t epoch;
uint32_t tail;

bnxt_re_do_pacing(qp->cntx, &qp->rand);
tail = *qp->jsqq->hwque->dbtail;
bnxt_re_init_db_hdr(&hdr, tail, qp->qpid, BNXT_RE_QUE_TYPE_SQ);
epoch = (qp->jsqq->hwque->flags & BNXT_RE_FLAG_EPOCH_TAIL_MASK) <<
BNXT_RE_DB_EPOCH_TAIL_SHIFT;
bnxt_re_init_db_hdr(&hdr, tail | epoch, qp->qpid, 0, BNXT_RE_QUE_TYPE_SQ);
bnxt_re_ring_db(qp->udpi, &hdr);
}

void bnxt_re_ring_srq_db(struct bnxt_re_srq *srq)
{
struct bnxt_re_db_hdr hdr;
uint32_t epoch;

bnxt_re_do_pacing(srq->cntx, &srq->rand);
bnxt_re_init_db_hdr(&hdr, srq->srqq->tail, srq->srqid,
BNXT_RE_QUE_TYPE_SRQ);
epoch = (srq->srqq->flags & BNXT_RE_FLAG_EPOCH_TAIL_MASK) <<
BNXT_RE_DB_EPOCH_TAIL_SHIFT;
bnxt_re_init_db_hdr(&hdr, srq->srqq->tail | epoch, srq->srqid, 0, BNXT_RE_QUE_TYPE_SRQ);
bnxt_re_ring_db(srq->udpi, &hdr);
}

Expand All @@ -151,26 +160,30 @@ void bnxt_re_ring_srq_arm(struct bnxt_re_srq *srq)
struct bnxt_re_db_hdr hdr;

bnxt_re_do_pacing(srq->cntx, &srq->rand);
bnxt_re_init_db_hdr(&hdr, srq->cap.srq_limit, srq->srqid,
bnxt_re_init_db_hdr(&hdr, srq->cap.srq_limit, srq->srqid, 0,
BNXT_RE_QUE_TYPE_SRQ_ARM);
bnxt_re_ring_db(srq->udpi, &hdr);
}

void bnxt_re_ring_cq_db(struct bnxt_re_cq *cq)
{
struct bnxt_re_db_hdr hdr;
uint32_t epoch;

bnxt_re_do_pacing(cq->cntx, &cq->rand);
bnxt_re_init_db_hdr(&hdr, cq->cqq.head, cq->cqid, BNXT_RE_QUE_TYPE_CQ);
epoch = (cq->cqq.flags & BNXT_RE_FLAG_EPOCH_HEAD_MASK) << BNXT_RE_DB_EPOCH_HEAD_SHIFT;
bnxt_re_init_db_hdr(&hdr, cq->cqq.head | epoch, cq->cqid, 0, BNXT_RE_QUE_TYPE_CQ);
bnxt_re_ring_db(cq->udpi, &hdr);
}

void bnxt_re_ring_cq_arm_db(struct bnxt_re_cq *cq, uint8_t aflag)
{
struct bnxt_re_db_hdr hdr;
uint32_t epoch;

bnxt_re_do_pacing(cq->cntx, &cq->rand);
bnxt_re_init_db_hdr(&hdr, cq->cqq.head, cq->cqid, aflag);
epoch = (cq->cqq.flags & BNXT_RE_FLAG_EPOCH_HEAD_MASK) << BNXT_RE_DB_EPOCH_HEAD_SHIFT;
bnxt_re_init_db_hdr(&hdr, cq->cqq.head | epoch, cq->cqid, 0, aflag);
bnxt_re_ring_db(cq->udpi, &hdr);
}

Expand Down
11 changes: 9 additions & 2 deletions providers/bnxt_re/memory.h
Expand Up @@ -44,6 +44,7 @@

struct bnxt_re_queue {
void *va;
uint32_t flags;
uint32_t *dbtail;
uint32_t bytes; /* for munmap */
uint32_t depth; /* no. of entries */
Expand Down Expand Up @@ -101,15 +102,21 @@ static inline uint32_t bnxt_re_is_que_empty(struct bnxt_re_queue *que)
static inline void bnxt_re_incr_tail(struct bnxt_re_queue *que, uint8_t cnt)
{
que->tail += cnt;
if (que->tail >= que->depth)
if (que->tail >= que->depth) {
que->tail %= que->depth;
/* Rolled over, Toggle Tail bit in epoch flags */
que->flags ^= 1UL << BNXT_RE_FLAG_EPOCH_TAIL_SHIFT;
}
}

static inline void bnxt_re_incr_head(struct bnxt_re_queue *que, uint8_t cnt)
{
que->head += cnt;
if (que->head >= que->depth)
if (que->head >= que->depth) {
que->head %= que->depth;
/* Rolled over, Toggle HEAD bit in epoch flags */
que->flags ^= 1UL << BNXT_RE_FLAG_EPOCH_HEAD_SHIFT;
}
}

#endif

0 comments on commit 8b2925b

Please sign in to comment.