mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-05 22:28:00 +00:00
RDMA/bnxt_re: Reduce device page size detection code
Getting rid of the repeated code in the driver when deciding on the page size of the hardware ring memory. A new common function would translate the ring page size into device specific page size. Link: https://lore.kernel.org/r/1585851136-2316-2-git-send-email-devesh.sharma@broadcom.com Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
4f95308911
commit
99bf84e24e
3 changed files with 103 additions and 147 deletions
|
@ -612,6 +612,7 @@ int bnxt_qplib_create_srq(struct bnxt_qplib_res *res,
|
||||||
struct cmdq_create_srq req;
|
struct cmdq_create_srq req;
|
||||||
struct bnxt_qplib_pbl *pbl;
|
struct bnxt_qplib_pbl *pbl;
|
||||||
u16 cmd_flags = 0;
|
u16 cmd_flags = 0;
|
||||||
|
u16 pg_sz_lvl;
|
||||||
int rc, idx;
|
int rc, idx;
|
||||||
|
|
||||||
hwq_attr.res = res;
|
hwq_attr.res = res;
|
||||||
|
@ -638,22 +639,11 @@ int bnxt_qplib_create_srq(struct bnxt_qplib_res *res,
|
||||||
|
|
||||||
req.srq_size = cpu_to_le16((u16)srq->hwq.max_elements);
|
req.srq_size = cpu_to_le16((u16)srq->hwq.max_elements);
|
||||||
pbl = &srq->hwq.pbl[PBL_LVL_0];
|
pbl = &srq->hwq.pbl[PBL_LVL_0];
|
||||||
req.pg_size_lvl = cpu_to_le16((((u16)srq->hwq.level &
|
pg_sz_lvl = ((u16)bnxt_qplib_base_pg_size(&srq->hwq) <<
|
||||||
CMDQ_CREATE_SRQ_LVL_MASK) <<
|
CMDQ_CREATE_SRQ_PG_SIZE_SFT);
|
||||||
CMDQ_CREATE_SRQ_LVL_SFT) |
|
pg_sz_lvl |= (srq->hwq.level & CMDQ_CREATE_SRQ_LVL_MASK) <<
|
||||||
(pbl->pg_size == ROCE_PG_SIZE_4K ?
|
CMDQ_CREATE_SRQ_LVL_SFT;
|
||||||
CMDQ_CREATE_SRQ_PG_SIZE_PG_4K :
|
req.pg_size_lvl = cpu_to_le16(pg_sz_lvl);
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8K ?
|
|
||||||
CMDQ_CREATE_SRQ_PG_SIZE_PG_8K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_64K ?
|
|
||||||
CMDQ_CREATE_SRQ_PG_SIZE_PG_64K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_2M ?
|
|
||||||
CMDQ_CREATE_SRQ_PG_SIZE_PG_2M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8M ?
|
|
||||||
CMDQ_CREATE_SRQ_PG_SIZE_PG_8M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_1G ?
|
|
||||||
CMDQ_CREATE_SRQ_PG_SIZE_PG_1G :
|
|
||||||
CMDQ_CREATE_SRQ_PG_SIZE_PG_4K));
|
|
||||||
req.pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
req.pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
||||||
req.pd_id = cpu_to_le32(srq->pd->id);
|
req.pd_id = cpu_to_le32(srq->pd->id);
|
||||||
req.eventq_id = cpu_to_le16(srq->eventq_hw_ring_id);
|
req.eventq_id = cpu_to_le16(srq->eventq_hw_ring_id);
|
||||||
|
@ -809,6 +799,7 @@ int bnxt_qplib_create_qp1(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
|
||||||
struct bnxt_qplib_pbl *pbl;
|
struct bnxt_qplib_pbl *pbl;
|
||||||
u16 cmd_flags = 0;
|
u16 cmd_flags = 0;
|
||||||
u32 qp_flags = 0;
|
u32 qp_flags = 0;
|
||||||
|
u8 pg_sz_lvl;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
RCFW_CMD_PREP(req, CREATE_QP1, cmd_flags);
|
RCFW_CMD_PREP(req, CREATE_QP1, cmd_flags);
|
||||||
|
@ -835,28 +826,13 @@ int bnxt_qplib_create_qp1(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
|
||||||
}
|
}
|
||||||
pbl = &sq->hwq.pbl[PBL_LVL_0];
|
pbl = &sq->hwq.pbl[PBL_LVL_0];
|
||||||
req.sq_pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
req.sq_pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
||||||
req.sq_pg_size_sq_lvl =
|
pg_sz_lvl = (bnxt_qplib_base_pg_size(&sq->hwq) <<
|
||||||
((sq->hwq.level & CMDQ_CREATE_QP1_SQ_LVL_MASK)
|
CMDQ_CREATE_QP1_SQ_PG_SIZE_SFT);
|
||||||
<< CMDQ_CREATE_QP1_SQ_LVL_SFT) |
|
pg_sz_lvl |= (sq->hwq.level & CMDQ_CREATE_QP1_SQ_LVL_MASK);
|
||||||
(pbl->pg_size == ROCE_PG_SIZE_4K ?
|
req.sq_pg_size_sq_lvl = pg_sz_lvl;
|
||||||
CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_4K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8K ?
|
|
||||||
CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_8K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_64K ?
|
|
||||||
CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_64K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_2M ?
|
|
||||||
CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_2M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8M ?
|
|
||||||
CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_8M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_1G ?
|
|
||||||
CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_1G :
|
|
||||||
CMDQ_CREATE_QP1_SQ_PG_SIZE_PG_4K);
|
|
||||||
|
|
||||||
if (qp->scq)
|
if (qp->scq)
|
||||||
req.scq_cid = cpu_to_le32(qp->scq->id);
|
req.scq_cid = cpu_to_le32(qp->scq->id);
|
||||||
|
|
||||||
qp_flags |= CMDQ_CREATE_QP1_QP_FLAGS_RESERVED_LKEY_ENABLE;
|
|
||||||
|
|
||||||
/* RQ */
|
/* RQ */
|
||||||
if (rq->max_wqe) {
|
if (rq->max_wqe) {
|
||||||
hwq_attr.res = res;
|
hwq_attr.res = res;
|
||||||
|
@ -876,32 +852,20 @@ int bnxt_qplib_create_qp1(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
|
||||||
}
|
}
|
||||||
pbl = &rq->hwq.pbl[PBL_LVL_0];
|
pbl = &rq->hwq.pbl[PBL_LVL_0];
|
||||||
req.rq_pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
req.rq_pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
||||||
req.rq_pg_size_rq_lvl =
|
pg_sz_lvl = (bnxt_qplib_base_pg_size(&rq->hwq) <<
|
||||||
((rq->hwq.level & CMDQ_CREATE_QP1_RQ_LVL_MASK) <<
|
CMDQ_CREATE_QP1_RQ_PG_SIZE_SFT);
|
||||||
CMDQ_CREATE_QP1_RQ_LVL_SFT) |
|
pg_sz_lvl |= (rq->hwq.level & CMDQ_CREATE_QP1_RQ_LVL_MASK);
|
||||||
(pbl->pg_size == ROCE_PG_SIZE_4K ?
|
req.rq_pg_size_rq_lvl = pg_sz_lvl;
|
||||||
CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_4K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8K ?
|
|
||||||
CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_8K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_64K ?
|
|
||||||
CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_64K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_2M ?
|
|
||||||
CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_2M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8M ?
|
|
||||||
CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_8M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_1G ?
|
|
||||||
CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_1G :
|
|
||||||
CMDQ_CREATE_QP1_RQ_PG_SIZE_PG_4K);
|
|
||||||
if (qp->rcq)
|
if (qp->rcq)
|
||||||
req.rcq_cid = cpu_to_le32(qp->rcq->id);
|
req.rcq_cid = cpu_to_le32(qp->rcq->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Header buffer - allow hdr_buf pass in */
|
/* Header buffer - allow hdr_buf pass in */
|
||||||
rc = bnxt_qplib_alloc_qp_hdr_buf(res, qp);
|
rc = bnxt_qplib_alloc_qp_hdr_buf(res, qp);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
rc = -ENOMEM;
|
rc = -ENOMEM;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
qp_flags |= CMDQ_CREATE_QP1_QP_FLAGS_RESERVED_LKEY_ENABLE;
|
||||||
req.qp_flags = cpu_to_le32(qp_flags);
|
req.qp_flags = cpu_to_le32(qp_flags);
|
||||||
req.sq_size = cpu_to_le32(sq->hwq.max_elements);
|
req.sq_size = cpu_to_le32(sq->hwq.max_elements);
|
||||||
req.rq_size = cpu_to_le32(rq->hwq.max_elements);
|
req.rq_size = cpu_to_le32(rq->hwq.max_elements);
|
||||||
|
@ -965,6 +929,7 @@ int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
|
||||||
struct cmdq_create_qp req;
|
struct cmdq_create_qp req;
|
||||||
struct bnxt_qplib_pbl *pbl;
|
struct bnxt_qplib_pbl *pbl;
|
||||||
u32 qp_flags = 0;
|
u32 qp_flags = 0;
|
||||||
|
u8 pg_sz_lvl;
|
||||||
u16 max_rsge;
|
u16 max_rsge;
|
||||||
|
|
||||||
RCFW_CMD_PREP(req, CREATE_QP, cmd_flags);
|
RCFW_CMD_PREP(req, CREATE_QP, cmd_flags);
|
||||||
|
@ -1025,31 +990,14 @@ int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
|
||||||
}
|
}
|
||||||
pbl = &sq->hwq.pbl[PBL_LVL_0];
|
pbl = &sq->hwq.pbl[PBL_LVL_0];
|
||||||
req.sq_pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
req.sq_pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
||||||
req.sq_pg_size_sq_lvl =
|
pg_sz_lvl = (bnxt_qplib_base_pg_size(&sq->hwq) <<
|
||||||
((sq->hwq.level & CMDQ_CREATE_QP_SQ_LVL_MASK)
|
CMDQ_CREATE_QP_SQ_PG_SIZE_SFT);
|
||||||
<< CMDQ_CREATE_QP_SQ_LVL_SFT) |
|
pg_sz_lvl |= (sq->hwq.level & CMDQ_CREATE_QP_SQ_LVL_MASK);
|
||||||
(pbl->pg_size == ROCE_PG_SIZE_4K ?
|
req.sq_pg_size_sq_lvl = pg_sz_lvl;
|
||||||
CMDQ_CREATE_QP_SQ_PG_SIZE_PG_4K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8K ?
|
|
||||||
CMDQ_CREATE_QP_SQ_PG_SIZE_PG_8K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_64K ?
|
|
||||||
CMDQ_CREATE_QP_SQ_PG_SIZE_PG_64K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_2M ?
|
|
||||||
CMDQ_CREATE_QP_SQ_PG_SIZE_PG_2M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8M ?
|
|
||||||
CMDQ_CREATE_QP_SQ_PG_SIZE_PG_8M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_1G ?
|
|
||||||
CMDQ_CREATE_QP_SQ_PG_SIZE_PG_1G :
|
|
||||||
CMDQ_CREATE_QP_SQ_PG_SIZE_PG_4K);
|
|
||||||
|
|
||||||
if (qp->scq)
|
if (qp->scq)
|
||||||
req.scq_cid = cpu_to_le32(qp->scq->id);
|
req.scq_cid = cpu_to_le32(qp->scq->id);
|
||||||
|
|
||||||
qp_flags |= CMDQ_CREATE_QP_QP_FLAGS_RESERVED_LKEY_ENABLE;
|
|
||||||
qp_flags |= CMDQ_CREATE_QP_QP_FLAGS_FR_PMR_ENABLED;
|
|
||||||
if (qp->sig_type)
|
|
||||||
qp_flags |= CMDQ_CREATE_QP_QP_FLAGS_FORCE_COMPLETION;
|
|
||||||
|
|
||||||
/* RQ */
|
/* RQ */
|
||||||
if (rq->max_wqe) {
|
if (rq->max_wqe) {
|
||||||
hwq_attr.res = res;
|
hwq_attr.res = res;
|
||||||
|
@ -1071,22 +1019,10 @@ int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
|
||||||
}
|
}
|
||||||
pbl = &rq->hwq.pbl[PBL_LVL_0];
|
pbl = &rq->hwq.pbl[PBL_LVL_0];
|
||||||
req.rq_pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
req.rq_pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
||||||
req.rq_pg_size_rq_lvl =
|
pg_sz_lvl = (bnxt_qplib_base_pg_size(&rq->hwq) <<
|
||||||
((rq->hwq.level & CMDQ_CREATE_QP_RQ_LVL_MASK) <<
|
CMDQ_CREATE_QP_RQ_PG_SIZE_SFT);
|
||||||
CMDQ_CREATE_QP_RQ_LVL_SFT) |
|
pg_sz_lvl |= (rq->hwq.level & CMDQ_CREATE_QP_RQ_LVL_MASK);
|
||||||
(pbl->pg_size == ROCE_PG_SIZE_4K ?
|
req.rq_pg_size_rq_lvl = pg_sz_lvl;
|
||||||
CMDQ_CREATE_QP_RQ_PG_SIZE_PG_4K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8K ?
|
|
||||||
CMDQ_CREATE_QP_RQ_PG_SIZE_PG_8K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_64K ?
|
|
||||||
CMDQ_CREATE_QP_RQ_PG_SIZE_PG_64K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_2M ?
|
|
||||||
CMDQ_CREATE_QP_RQ_PG_SIZE_PG_2M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8M ?
|
|
||||||
CMDQ_CREATE_QP_RQ_PG_SIZE_PG_8M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_1G ?
|
|
||||||
CMDQ_CREATE_QP_RQ_PG_SIZE_PG_1G :
|
|
||||||
CMDQ_CREATE_QP_RQ_PG_SIZE_PG_4K);
|
|
||||||
} else {
|
} else {
|
||||||
/* SRQ */
|
/* SRQ */
|
||||||
if (qp->srq) {
|
if (qp->srq) {
|
||||||
|
@ -1097,7 +1033,13 @@ int bnxt_qplib_create_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
|
||||||
|
|
||||||
if (qp->rcq)
|
if (qp->rcq)
|
||||||
req.rcq_cid = cpu_to_le32(qp->rcq->id);
|
req.rcq_cid = cpu_to_le32(qp->rcq->id);
|
||||||
|
|
||||||
|
qp_flags |= CMDQ_CREATE_QP_QP_FLAGS_RESERVED_LKEY_ENABLE;
|
||||||
|
qp_flags |= CMDQ_CREATE_QP_QP_FLAGS_FR_PMR_ENABLED;
|
||||||
|
if (qp->sig_type)
|
||||||
|
qp_flags |= CMDQ_CREATE_QP_QP_FLAGS_FORCE_COMPLETION;
|
||||||
req.qp_flags = cpu_to_le32(qp_flags);
|
req.qp_flags = cpu_to_le32(qp_flags);
|
||||||
|
|
||||||
req.sq_size = cpu_to_le32(sq->hwq.max_elements);
|
req.sq_size = cpu_to_le32(sq->hwq.max_elements);
|
||||||
req.rq_size = cpu_to_le32(rq->hwq.max_elements);
|
req.rq_size = cpu_to_le32(rq->hwq.max_elements);
|
||||||
qp->sq_hdr_buf = NULL;
|
qp->sq_hdr_buf = NULL;
|
||||||
|
@ -2000,6 +1942,7 @@ int bnxt_qplib_create_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq)
|
||||||
struct cmdq_create_cq req;
|
struct cmdq_create_cq req;
|
||||||
struct bnxt_qplib_pbl *pbl;
|
struct bnxt_qplib_pbl *pbl;
|
||||||
u16 cmd_flags = 0;
|
u16 cmd_flags = 0;
|
||||||
|
u32 pg_sz_lvl;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
hwq_attr.res = res;
|
hwq_attr.res = res;
|
||||||
|
@ -2020,22 +1963,13 @@ int bnxt_qplib_create_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq)
|
||||||
}
|
}
|
||||||
req.dpi = cpu_to_le32(cq->dpi->dpi);
|
req.dpi = cpu_to_le32(cq->dpi->dpi);
|
||||||
req.cq_handle = cpu_to_le64(cq->cq_handle);
|
req.cq_handle = cpu_to_le64(cq->cq_handle);
|
||||||
|
|
||||||
req.cq_size = cpu_to_le32(cq->hwq.max_elements);
|
req.cq_size = cpu_to_le32(cq->hwq.max_elements);
|
||||||
pbl = &cq->hwq.pbl[PBL_LVL_0];
|
pbl = &cq->hwq.pbl[PBL_LVL_0];
|
||||||
req.pg_size_lvl = cpu_to_le32(
|
pg_sz_lvl = (bnxt_qplib_base_pg_size(&cq->hwq) <<
|
||||||
((cq->hwq.level & CMDQ_CREATE_CQ_LVL_MASK) <<
|
CMDQ_CREATE_CQ_PG_SIZE_SFT);
|
||||||
CMDQ_CREATE_CQ_LVL_SFT) |
|
pg_sz_lvl |= (cq->hwq.level & CMDQ_CREATE_CQ_LVL_MASK);
|
||||||
(pbl->pg_size == ROCE_PG_SIZE_4K ? CMDQ_CREATE_CQ_PG_SIZE_PG_4K :
|
req.pg_size_lvl = cpu_to_le32(pg_sz_lvl);
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8K ? CMDQ_CREATE_CQ_PG_SIZE_PG_8K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_64K ? CMDQ_CREATE_CQ_PG_SIZE_PG_64K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_2M ? CMDQ_CREATE_CQ_PG_SIZE_PG_2M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8M ? CMDQ_CREATE_CQ_PG_SIZE_PG_8M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_1G ? CMDQ_CREATE_CQ_PG_SIZE_PG_1G :
|
|
||||||
CMDQ_CREATE_CQ_PG_SIZE_PG_4K));
|
|
||||||
|
|
||||||
req.pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
req.pbl = cpu_to_le64(pbl->pg_map_arr[0]);
|
||||||
|
|
||||||
req.cq_fco_cnq_id = cpu_to_le32(
|
req.cq_fco_cnq_id = cpu_to_le32(
|
||||||
(cq->cnq_hw_ring_id & CMDQ_CREATE_CQ_CNQ_ID_MASK) <<
|
(cq->cnq_hw_ring_id & CMDQ_CREATE_CQ_CNQ_ID_MASK) <<
|
||||||
CMDQ_CREATE_CQ_CNQ_ID_SFT);
|
CMDQ_CREATE_CQ_CNQ_ID_SFT);
|
||||||
|
|
|
@ -468,29 +468,13 @@ int bnxt_qplib_deinit_rcfw(struct bnxt_qplib_rcfw *rcfw)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __get_pbl_pg_idx(struct bnxt_qplib_pbl *pbl)
|
|
||||||
{
|
|
||||||
return (pbl->pg_size == ROCE_PG_SIZE_4K ?
|
|
||||||
CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_4K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8K ?
|
|
||||||
CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_8K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_64K ?
|
|
||||||
CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_64K :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_2M ?
|
|
||||||
CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_2M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_8M ?
|
|
||||||
CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_8M :
|
|
||||||
pbl->pg_size == ROCE_PG_SIZE_1G ?
|
|
||||||
CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_1G :
|
|
||||||
CMDQ_INITIALIZE_FW_QPC_PG_SIZE_PG_4K);
|
|
||||||
}
|
|
||||||
|
|
||||||
int bnxt_qplib_init_rcfw(struct bnxt_qplib_rcfw *rcfw,
|
int bnxt_qplib_init_rcfw(struct bnxt_qplib_rcfw *rcfw,
|
||||||
struct bnxt_qplib_ctx *ctx, int is_virtfn)
|
struct bnxt_qplib_ctx *ctx, int is_virtfn)
|
||||||
{
|
{
|
||||||
struct cmdq_initialize_fw req;
|
|
||||||
struct creq_initialize_fw_resp resp;
|
struct creq_initialize_fw_resp resp;
|
||||||
u16 cmd_flags = 0, level;
|
struct cmdq_initialize_fw req;
|
||||||
|
u16 cmd_flags = 0;
|
||||||
|
u8 pgsz, lvl;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
RCFW_CMD_PREP(req, INITIALIZE_FW, cmd_flags);
|
RCFW_CMD_PREP(req, INITIALIZE_FW, cmd_flags);
|
||||||
|
@ -511,32 +495,30 @@ int bnxt_qplib_init_rcfw(struct bnxt_qplib_rcfw *rcfw,
|
||||||
if (bnxt_qplib_is_chip_gen_p5(rcfw->res->cctx))
|
if (bnxt_qplib_is_chip_gen_p5(rcfw->res->cctx))
|
||||||
goto config_vf_res;
|
goto config_vf_res;
|
||||||
|
|
||||||
level = ctx->qpc_tbl.level;
|
lvl = ctx->qpc_tbl.level;
|
||||||
req.qpc_pg_size_qpc_lvl = (level << CMDQ_INITIALIZE_FW_QPC_LVL_SFT) |
|
pgsz = bnxt_qplib_base_pg_size(&ctx->qpc_tbl);
|
||||||
__get_pbl_pg_idx(&ctx->qpc_tbl.pbl[level]);
|
req.qpc_pg_size_qpc_lvl = (pgsz << CMDQ_INITIALIZE_FW_QPC_PG_SIZE_SFT) |
|
||||||
level = ctx->mrw_tbl.level;
|
lvl;
|
||||||
req.mrw_pg_size_mrw_lvl = (level << CMDQ_INITIALIZE_FW_MRW_LVL_SFT) |
|
lvl = ctx->mrw_tbl.level;
|
||||||
__get_pbl_pg_idx(&ctx->mrw_tbl.pbl[level]);
|
pgsz = bnxt_qplib_base_pg_size(&ctx->mrw_tbl);
|
||||||
level = ctx->srqc_tbl.level;
|
req.mrw_pg_size_mrw_lvl = (pgsz << CMDQ_INITIALIZE_FW_QPC_PG_SIZE_SFT) |
|
||||||
req.srq_pg_size_srq_lvl = (level << CMDQ_INITIALIZE_FW_SRQ_LVL_SFT) |
|
lvl;
|
||||||
__get_pbl_pg_idx(&ctx->srqc_tbl.pbl[level]);
|
lvl = ctx->srqc_tbl.level;
|
||||||
level = ctx->cq_tbl.level;
|
pgsz = bnxt_qplib_base_pg_size(&ctx->srqc_tbl);
|
||||||
req.cq_pg_size_cq_lvl = (level << CMDQ_INITIALIZE_FW_CQ_LVL_SFT) |
|
req.srq_pg_size_srq_lvl = (pgsz << CMDQ_INITIALIZE_FW_QPC_PG_SIZE_SFT) |
|
||||||
__get_pbl_pg_idx(&ctx->cq_tbl.pbl[level]);
|
lvl;
|
||||||
level = ctx->srqc_tbl.level;
|
lvl = ctx->cq_tbl.level;
|
||||||
req.srq_pg_size_srq_lvl = (level << CMDQ_INITIALIZE_FW_SRQ_LVL_SFT) |
|
pgsz = bnxt_qplib_base_pg_size(&ctx->cq_tbl);
|
||||||
__get_pbl_pg_idx(&ctx->srqc_tbl.pbl[level]);
|
req.cq_pg_size_cq_lvl = (pgsz << CMDQ_INITIALIZE_FW_QPC_PG_SIZE_SFT) |
|
||||||
level = ctx->cq_tbl.level;
|
lvl;
|
||||||
req.cq_pg_size_cq_lvl = (level << CMDQ_INITIALIZE_FW_CQ_LVL_SFT) |
|
lvl = ctx->tim_tbl.level;
|
||||||
__get_pbl_pg_idx(&ctx->cq_tbl.pbl[level]);
|
pgsz = bnxt_qplib_base_pg_size(&ctx->tim_tbl);
|
||||||
level = ctx->tim_tbl.level;
|
req.tim_pg_size_tim_lvl = (pgsz << CMDQ_INITIALIZE_FW_QPC_PG_SIZE_SFT) |
|
||||||
req.tim_pg_size_tim_lvl = (level << CMDQ_INITIALIZE_FW_TIM_LVL_SFT) |
|
lvl;
|
||||||
__get_pbl_pg_idx(&ctx->tim_tbl.pbl[level]);
|
lvl = ctx->tqm_ctx.pde.level;
|
||||||
level = ctx->tqm_ctx.pde.level;
|
pgsz = bnxt_qplib_base_pg_size(&ctx->tqm_ctx.pde);
|
||||||
req.tqm_pg_size_tqm_lvl =
|
req.tqm_pg_size_tqm_lvl = (pgsz << CMDQ_INITIALIZE_FW_QPC_PG_SIZE_SFT) |
|
||||||
(level << CMDQ_INITIALIZE_FW_TQM_LVL_SFT) |
|
lvl;
|
||||||
__get_pbl_pg_idx(&ctx->tqm_ctx.pde.pbl[level]);
|
|
||||||
|
|
||||||
req.qpc_page_dir =
|
req.qpc_page_dir =
|
||||||
cpu_to_le64(ctx->qpc_tbl.pbl[PBL_LVL_0].pg_map_arr[0]);
|
cpu_to_le64(ctx->qpc_tbl.pbl[PBL_LVL_0].pg_map_arr[0]);
|
||||||
req.mrw_page_dir =
|
req.mrw_page_dir =
|
||||||
|
|
|
@ -80,6 +80,15 @@ enum bnxt_qplib_pbl_lvl {
|
||||||
#define ROCE_PG_SIZE_8M (8 * 1024 * 1024)
|
#define ROCE_PG_SIZE_8M (8 * 1024 * 1024)
|
||||||
#define ROCE_PG_SIZE_1G (1024 * 1024 * 1024)
|
#define ROCE_PG_SIZE_1G (1024 * 1024 * 1024)
|
||||||
|
|
||||||
|
enum bnxt_qplib_hwrm_pg_size {
|
||||||
|
BNXT_QPLIB_HWRM_PG_SIZE_4K = 0,
|
||||||
|
BNXT_QPLIB_HWRM_PG_SIZE_8K = 1,
|
||||||
|
BNXT_QPLIB_HWRM_PG_SIZE_64K = 2,
|
||||||
|
BNXT_QPLIB_HWRM_PG_SIZE_2M = 3,
|
||||||
|
BNXT_QPLIB_HWRM_PG_SIZE_8M = 4,
|
||||||
|
BNXT_QPLIB_HWRM_PG_SIZE_1G = 5,
|
||||||
|
};
|
||||||
|
|
||||||
struct bnxt_qplib_reg_desc {
|
struct bnxt_qplib_reg_desc {
|
||||||
u8 bar_id;
|
u8 bar_id;
|
||||||
resource_size_t bar_base;
|
resource_size_t bar_base;
|
||||||
|
@ -263,6 +272,37 @@ static inline u8 bnxt_qplib_get_ring_type(struct bnxt_qplib_chip_ctx *cctx)
|
||||||
RING_ALLOC_REQ_RING_TYPE_ROCE_CMPL;
|
RING_ALLOC_REQ_RING_TYPE_ROCE_CMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline u8 bnxt_qplib_base_pg_size(struct bnxt_qplib_hwq *hwq)
|
||||||
|
{
|
||||||
|
u8 pg_size = BNXT_QPLIB_HWRM_PG_SIZE_4K;
|
||||||
|
struct bnxt_qplib_pbl *pbl;
|
||||||
|
|
||||||
|
pbl = &hwq->pbl[PBL_LVL_0];
|
||||||
|
switch (pbl->pg_size) {
|
||||||
|
case ROCE_PG_SIZE_4K:
|
||||||
|
pg_size = BNXT_QPLIB_HWRM_PG_SIZE_4K;
|
||||||
|
break;
|
||||||
|
case ROCE_PG_SIZE_8K:
|
||||||
|
pg_size = BNXT_QPLIB_HWRM_PG_SIZE_8K;
|
||||||
|
break;
|
||||||
|
case ROCE_PG_SIZE_64K:
|
||||||
|
pg_size = BNXT_QPLIB_HWRM_PG_SIZE_64K;
|
||||||
|
break;
|
||||||
|
case ROCE_PG_SIZE_2M:
|
||||||
|
pg_size = BNXT_QPLIB_HWRM_PG_SIZE_2M;
|
||||||
|
break;
|
||||||
|
case ROCE_PG_SIZE_8M:
|
||||||
|
pg_size = BNXT_QPLIB_HWRM_PG_SIZE_8M;
|
||||||
|
break;
|
||||||
|
case ROCE_PG_SIZE_1G:
|
||||||
|
pg_size = BNXT_QPLIB_HWRM_PG_SIZE_1G;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pg_size;
|
||||||
|
}
|
||||||
|
|
||||||
#define to_bnxt_qplib(ptr, type, member) \
|
#define to_bnxt_qplib(ptr, type, member) \
|
||||||
container_of(ptr, type, member)
|
container_of(ptr, type, member)
|
||||||
|
|
Loading…
Add table
Reference in a new issue