Skip to content

Commit 872f357

Browse files
skotur-brcmdledford
authored andcommitted
RDMA/bnxt_re: Add support for MRs with Huge pages
Depending on the OS page-table configurations, applications may request MRs which has page size alignment other than 4K Underlying provider driver needs to adjust its PBL boundaries according to the incoming page boundaries in the PA list. Adding a capability to register MRs having pages-sizes other than 4K (Hugepages). Signed-off-by: Somnath Kotur <[email protected]> Signed-off-by: Selvin Xavier <[email protected]> Signed-off-by: Devesh Sharma <[email protected]> Signed-off-by: Doug Ledford <[email protected]>
1 parent 2fc6854 commit 872f357

File tree

5 files changed

+140
-57
lines changed

5 files changed

+140
-57
lines changed

drivers/infiniband/hw/bnxt_re/bnxt_re.h

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,23 @@
4343
#define ROCE_DRV_MODULE_VERSION "1.0.0"
4444

4545
#define BNXT_RE_DESC "Broadcom NetXtreme-C/E RoCE Driver"
46-
47-
#define BNXT_RE_PAGE_SIZE_4K BIT(12)
48-
#define BNXT_RE_PAGE_SIZE_8K BIT(13)
49-
#define BNXT_RE_PAGE_SIZE_64K BIT(16)
50-
#define BNXT_RE_PAGE_SIZE_2M BIT(21)
51-
#define BNXT_RE_PAGE_SIZE_8M BIT(23)
52-
#define BNXT_RE_PAGE_SIZE_1G BIT(30)
53-
54-
#define BNXT_RE_MAX_MR_SIZE BIT(30)
46+
#define BNXT_RE_PAGE_SHIFT_4K (12)
47+
#define BNXT_RE_PAGE_SHIFT_8K (13)
48+
#define BNXT_RE_PAGE_SHIFT_64K (16)
49+
#define BNXT_RE_PAGE_SHIFT_2M (21)
50+
#define BNXT_RE_PAGE_SHIFT_8M (23)
51+
#define BNXT_RE_PAGE_SHIFT_1G (30)
52+
53+
#define BNXT_RE_PAGE_SIZE_4K BIT(BNXT_RE_PAGE_SHIFT_4K)
54+
#define BNXT_RE_PAGE_SIZE_8K BIT(BNXT_RE_PAGE_SHIFT_8K)
55+
#define BNXT_RE_PAGE_SIZE_64K BIT(BNXT_RE_PAGE_SHIFT_64K)
56+
#define BNXT_RE_PAGE_SIZE_2M BIT(BNXT_RE_PAGE_SHIFT_2M)
57+
#define BNXT_RE_PAGE_SIZE_8M BIT(BNXT_RE_PAGE_SHIFT_8M)
58+
#define BNXT_RE_PAGE_SIZE_1G BIT(BNXT_RE_PAGE_SHIFT_1G)
59+
60+
#define BNXT_RE_MAX_MR_SIZE_LOW BIT(BNXT_RE_PAGE_SHIFT_1G)
61+
#define BNXT_RE_MAX_MR_SIZE_HIGH BIT(39)
62+
#define BNXT_RE_MAX_MR_SIZE BNXT_RE_MAX_MR_SIZE_HIGH
5563

5664
#define BNXT_RE_MAX_QPC_COUNT (64 * 1024)
5765
#define BNXT_RE_MAX_MRW_COUNT (64 * 1024)

drivers/infiniband/hw/bnxt_re/ib_verbs.c

Lines changed: 85 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ int bnxt_re_query_device(struct ib_device *ibdev,
147147
bnxt_qplib_get_guid(rdev->netdev->dev_addr,
148148
(u8 *)&ib_attr->sys_image_guid);
149149
ib_attr->max_mr_size = BNXT_RE_MAX_MR_SIZE;
150-
ib_attr->page_size_cap = BNXT_RE_PAGE_SIZE_4K;
150+
ib_attr->page_size_cap = BNXT_RE_PAGE_SIZE_4K | BNXT_RE_PAGE_SIZE_2M;
151151

152152
ib_attr->vendor_id = rdev->en_dev->pdev->vendor;
153153
ib_attr->vendor_part_id = rdev->en_dev->pdev->device;
@@ -248,8 +248,7 @@ int bnxt_re_query_port(struct ib_device *ibdev, u8 port_num,
248248
IB_PORT_VENDOR_CLASS_SUP |
249249
IB_PORT_IP_BASED_GIDS;
250250

251-
/* Max MSG size set to 2G for now */
252-
port_attr->max_msg_sz = 0x80000000;
251+
port_attr->max_msg_sz = (u32)BNXT_RE_MAX_MR_SIZE_LOW;
253252
port_attr->bad_pkey_cntr = 0;
254253
port_attr->qkey_viol_cntr = 0;
255254
port_attr->pkey_tbl_len = dev_attr->max_pkey;
@@ -542,7 +541,7 @@ static int bnxt_re_create_fence_mr(struct bnxt_re_pd *pd)
542541
mr->qplib_mr.total_size = BNXT_RE_FENCE_BYTES;
543542
pbl_tbl = dma_addr;
544543
rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, &pbl_tbl,
545-
BNXT_RE_FENCE_PBL_SIZE, false);
544+
BNXT_RE_FENCE_PBL_SIZE, false, PAGE_SIZE);
546545
if (rc) {
547546
dev_err(rdev_to_dev(rdev), "Failed to register fence-MR\n");
548547
goto fail;
@@ -3091,7 +3090,8 @@ struct ib_mr *bnxt_re_get_dma_mr(struct ib_pd *ib_pd, int mr_access_flags)
30913090

30923091
mr->qplib_mr.hwq.level = PBL_LVL_MAX;
30933092
mr->qplib_mr.total_size = -1; /* Infinte length */
3094-
rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, &pbl, 0, false);
3093+
rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, &pbl, 0, false,
3094+
PAGE_SIZE);
30953095
if (rc)
30963096
goto fail_mr;
30973097

@@ -3117,10 +3117,8 @@ int bnxt_re_dereg_mr(struct ib_mr *ib_mr)
31173117
int rc;
31183118

31193119
rc = bnxt_qplib_free_mrw(&rdev->qplib_res, &mr->qplib_mr);
3120-
if (rc) {
3120+
if (rc)
31213121
dev_err(rdev_to_dev(rdev), "Dereg MR failed: %#x\n", rc);
3122-
return rc;
3123-
}
31243122

31253123
if (mr->pages) {
31263124
rc = bnxt_qplib_free_fast_reg_page_list(&rdev->qplib_res,
@@ -3183,7 +3181,7 @@ struct ib_mr *bnxt_re_alloc_mr(struct ib_pd *ib_pd, enum ib_mr_type type,
31833181

31843182
rc = bnxt_qplib_alloc_mrw(&rdev->qplib_res, &mr->qplib_mr);
31853183
if (rc)
3186-
goto fail;
3184+
goto bail;
31873185

31883186
mr->ib_mr.lkey = mr->qplib_mr.lkey;
31893187
mr->ib_mr.rkey = mr->ib_mr.lkey;
@@ -3205,9 +3203,10 @@ struct ib_mr *bnxt_re_alloc_mr(struct ib_pd *ib_pd, enum ib_mr_type type,
32053203
return &mr->ib_mr;
32063204

32073205
fail_mr:
3208-
bnxt_qplib_free_mrw(&rdev->qplib_res, &mr->qplib_mr);
3209-
fail:
32103206
kfree(mr->pages);
3207+
fail:
3208+
bnxt_qplib_free_mrw(&rdev->qplib_res, &mr->qplib_mr);
3209+
bail:
32113210
kfree(mr);
32123211
return ERR_PTR(rc);
32133212
}
@@ -3261,6 +3260,46 @@ int bnxt_re_dealloc_mw(struct ib_mw *ib_mw)
32613260
return rc;
32623261
}
32633262

3263+
static int bnxt_re_page_size_ok(int page_shift)
3264+
{
3265+
switch (page_shift) {
3266+
case CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_4K:
3267+
case CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_8K:
3268+
case CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_64K:
3269+
case CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_2M:
3270+
case CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_256K:
3271+
case CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_1M:
3272+
case CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_4M:
3273+
case CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_1G:
3274+
return 1;
3275+
default:
3276+
return 0;
3277+
}
3278+
}
3279+
3280+
static int fill_umem_pbl_tbl(struct ib_umem *umem, u64 *pbl_tbl_orig,
3281+
int page_shift)
3282+
{
3283+
u64 *pbl_tbl = pbl_tbl_orig;
3284+
u64 paddr;
3285+
u64 page_mask = (1ULL << page_shift) - 1;
3286+
int i, pages;
3287+
struct scatterlist *sg;
3288+
int entry;
3289+
3290+
for_each_sg(umem->sg_head.sgl, sg, umem->nmap, entry) {
3291+
pages = sg_dma_len(sg) >> PAGE_SHIFT;
3292+
for (i = 0; i < pages; i++) {
3293+
paddr = sg_dma_address(sg) + (i << PAGE_SHIFT);
3294+
if (pbl_tbl == pbl_tbl_orig)
3295+
*pbl_tbl++ = paddr & ~page_mask;
3296+
else if ((paddr & page_mask) == 0)
3297+
*pbl_tbl++ = paddr;
3298+
}
3299+
}
3300+
return pbl_tbl - pbl_tbl_orig;
3301+
}
3302+
32643303
/* uverbs */
32653304
struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
32663305
u64 virt_addr, int mr_access_flags,
@@ -3270,10 +3309,8 @@ struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
32703309
struct bnxt_re_dev *rdev = pd->rdev;
32713310
struct bnxt_re_mr *mr;
32723311
struct ib_umem *umem;
3273-
u64 *pbl_tbl, *pbl_tbl_orig;
3274-
int i, umem_pgs, pages, rc;
3275-
struct scatterlist *sg;
3276-
int entry;
3312+
u64 *pbl_tbl = NULL;
3313+
int umem_pgs, page_shift, rc;
32773314

32783315
if (length > BNXT_RE_MAX_MR_SIZE) {
32793316
dev_err(rdev_to_dev(rdev), "MR Size: %lld > Max supported:%ld\n",
@@ -3290,76 +3327,80 @@ struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
32903327
mr->qplib_mr.flags = __from_ib_access_flags(mr_access_flags);
32913328
mr->qplib_mr.type = CMDQ_ALLOCATE_MRW_MRW_FLAGS_MR;
32923329

3330+
rc = bnxt_qplib_alloc_mrw(&rdev->qplib_res, &mr->qplib_mr);
3331+
if (rc) {
3332+
dev_err(rdev_to_dev(rdev), "Failed to allocate MR");
3333+
goto free_mr;
3334+
}
3335+
/* The fixed portion of the rkey is the same as the lkey */
3336+
mr->ib_mr.rkey = mr->qplib_mr.rkey;
3337+
32933338
umem = ib_umem_get(ib_pd->uobject->context, start, length,
32943339
mr_access_flags, 0);
32953340
if (IS_ERR(umem)) {
32963341
dev_err(rdev_to_dev(rdev), "Failed to get umem");
32973342
rc = -EFAULT;
3298-
goto free_mr;
3343+
goto free_mrw;
32993344
}
33003345
mr->ib_umem = umem;
33013346

3302-
rc = bnxt_qplib_alloc_mrw(&rdev->qplib_res, &mr->qplib_mr);
3303-
if (rc) {
3304-
dev_err(rdev_to_dev(rdev), "Failed to allocate MR");
3305-
goto release_umem;
3306-
}
3307-
/* The fixed portion of the rkey is the same as the lkey */
3308-
mr->ib_mr.rkey = mr->qplib_mr.rkey;
3309-
33103347
mr->qplib_mr.va = virt_addr;
33113348
umem_pgs = ib_umem_page_count(umem);
33123349
if (!umem_pgs) {
33133350
dev_err(rdev_to_dev(rdev), "umem is invalid!");
33143351
rc = -EINVAL;
3315-
goto free_mrw;
3352+
goto free_umem;
33163353
}
33173354
mr->qplib_mr.total_size = length;
33183355

33193356
pbl_tbl = kcalloc(umem_pgs, sizeof(u64 *), GFP_KERNEL);
33203357
if (!pbl_tbl) {
3321-
rc = -EINVAL;
3322-
goto free_mrw;
3358+
rc = -ENOMEM;
3359+
goto free_umem;
33233360
}
3324-
pbl_tbl_orig = pbl_tbl;
33253361

3326-
if (umem->hugetlb) {
3327-
dev_err(rdev_to_dev(rdev), "umem hugetlb not supported!");
3362+
page_shift = umem->page_shift;
3363+
3364+
if (!bnxt_re_page_size_ok(page_shift)) {
3365+
dev_err(rdev_to_dev(rdev), "umem page size unsupported!");
33283366
rc = -EFAULT;
33293367
goto fail;
33303368
}
33313369

3332-
if (umem->page_shift != PAGE_SHIFT) {
3333-
dev_err(rdev_to_dev(rdev), "umem page shift unsupported!");
3334-
rc = -EFAULT;
3370+
if (!umem->hugetlb && length > BNXT_RE_MAX_MR_SIZE_LOW) {
3371+
dev_err(rdev_to_dev(rdev), "Requested MR Sz:%llu Max sup:%llu",
3372+
length, (u64)BNXT_RE_MAX_MR_SIZE_LOW);
3373+
rc = -EINVAL;
33353374
goto fail;
33363375
}
3337-
/* Map umem buf ptrs to the PBL */
3338-
for_each_sg(umem->sg_head.sgl, sg, umem->nmap, entry) {
3339-
pages = sg_dma_len(sg) >> umem->page_shift;
3340-
for (i = 0; i < pages; i++, pbl_tbl++)
3341-
*pbl_tbl = sg_dma_address(sg) + (i << umem->page_shift);
3376+
if (umem->hugetlb && length > BNXT_RE_PAGE_SIZE_2M) {
3377+
page_shift = BNXT_RE_PAGE_SHIFT_2M;
3378+
dev_warn(rdev_to_dev(rdev), "umem hugetlb set page_size %x",
3379+
1 << page_shift);
33423380
}
3343-
rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, pbl_tbl_orig,
3344-
umem_pgs, false);
3381+
3382+
/* Map umem buf ptrs to the PBL */
3383+
umem_pgs = fill_umem_pbl_tbl(umem, pbl_tbl, page_shift);
3384+
rc = bnxt_qplib_reg_mr(&rdev->qplib_res, &mr->qplib_mr, pbl_tbl,
3385+
umem_pgs, false, 1 << page_shift);
33453386
if (rc) {
33463387
dev_err(rdev_to_dev(rdev), "Failed to register user MR");
33473388
goto fail;
33483389
}
33493390

3350-
kfree(pbl_tbl_orig);
3391+
kfree(pbl_tbl);
33513392

33523393
mr->ib_mr.lkey = mr->qplib_mr.lkey;
33533394
mr->ib_mr.rkey = mr->qplib_mr.lkey;
33543395
atomic_inc(&rdev->mr_count);
33553396

33563397
return &mr->ib_mr;
33573398
fail:
3358-
kfree(pbl_tbl_orig);
3399+
kfree(pbl_tbl);
3400+
free_umem:
3401+
ib_umem_release(umem);
33593402
free_mrw:
33603403
bnxt_qplib_free_mrw(&rdev->qplib_res, &mr->qplib_mr);
3361-
release_umem:
3362-
ib_umem_release(umem);
33633404
free_mr:
33643405
kfree(mr);
33653406
return ERR_PTR(rc);

drivers/infiniband/hw/bnxt_re/qplib_sp.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ int bnxt_qplib_dereg_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mrw,
657657
}
658658

659659
int bnxt_qplib_reg_mr(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr,
660-
u64 *pbl_tbl, int num_pbls, bool block)
660+
u64 *pbl_tbl, int num_pbls, bool block, u32 buf_pg_size)
661661
{
662662
struct bnxt_qplib_rcfw *rcfw = res->rcfw;
663663
struct cmdq_register_mr req;
@@ -668,6 +668,9 @@ int bnxt_qplib_reg_mr(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr,
668668
u32 pg_size;
669669

670670
if (num_pbls) {
671+
/* Allocate memory for the non-leaf pages to store buf ptrs.
672+
* Non-leaf pages always uses system PAGE_SIZE
673+
*/
671674
pg_ptrs = roundup_pow_of_two(num_pbls);
672675
pages = pg_ptrs >> MAX_PBL_LVL_1_PGS_SHIFT;
673676
if (!pages)
@@ -685,6 +688,7 @@ int bnxt_qplib_reg_mr(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr,
685688
bnxt_qplib_free_hwq(res->pdev, &mr->hwq);
686689

687690
mr->hwq.max_elements = pages;
691+
/* Use system PAGE_SIZE */
688692
rc = bnxt_qplib_alloc_init_hwq(res->pdev, &mr->hwq, NULL, 0,
689693
&mr->hwq.max_elements,
690694
PAGE_SIZE, 0, PAGE_SIZE,
@@ -705,18 +709,22 @@ int bnxt_qplib_reg_mr(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr,
705709

706710
/* Configure the request */
707711
if (mr->hwq.level == PBL_LVL_MAX) {
712+
/* No PBL provided, just use system PAGE_SIZE */
708713
level = 0;
709714
req.pbl = 0;
710715
pg_size = PAGE_SIZE;
711716
} else {
712717
level = mr->hwq.level + 1;
713718
req.pbl = cpu_to_le64(mr->hwq.pbl[PBL_LVL_0].pg_map_arr[0]);
714-
pg_size = mr->hwq.pbl[PBL_LVL_0].pg_size;
715719
}
720+
pg_size = buf_pg_size ? buf_pg_size : PAGE_SIZE;
716721
req.log2_pg_size_lvl = (level << CMDQ_REGISTER_MR_LVL_SFT) |
717722
((ilog2(pg_size) <<
718723
CMDQ_REGISTER_MR_LOG2_PG_SIZE_SFT) &
719724
CMDQ_REGISTER_MR_LOG2_PG_SIZE_MASK);
725+
req.log2_pbl_pg_size = cpu_to_le16(((ilog2(PAGE_SIZE) <<
726+
CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_SFT) &
727+
CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_MASK));
720728
req.access = (mr->flags & 0xFFFF);
721729
req.va = cpu_to_le64(mr->va);
722730
req.key = cpu_to_le32(mr->lkey);

drivers/infiniband/hw/bnxt_re/qplib_sp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ int bnxt_qplib_alloc_mrw(struct bnxt_qplib_res *res,
159159
int bnxt_qplib_dereg_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mrw,
160160
bool block);
161161
int bnxt_qplib_reg_mr(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr,
162-
u64 *pbl_tbl, int num_pbls, bool block);
162+
u64 *pbl_tbl, int num_pbls, bool block, u32 buf_pg_size);
163163
int bnxt_qplib_free_mrw(struct bnxt_qplib_res *res, struct bnxt_qplib_mrw *mr);
164164
int bnxt_qplib_alloc_fast_reg_mr(struct bnxt_qplib_res *res,
165165
struct bnxt_qplib_mrw *mr, int max);

drivers/infiniband/hw/bnxt_re/roce_hsi.h

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1383,16 +1383,42 @@ struct cmdq_register_mr {
13831383
#define CMDQ_REGISTER_MR_LVL_LVL_0 0x0UL
13841384
#define CMDQ_REGISTER_MR_LVL_LVL_1 0x1UL
13851385
#define CMDQ_REGISTER_MR_LVL_LVL_2 0x2UL
1386+
#define CMDQ_REGISTER_MR_LVL_LAST CMDQ_REGISTER_MR_LVL_LVL_2
13861387
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_MASK 0x7cUL
13871388
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_SFT 2
1389+
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_4K (0xcUL << 2)
1390+
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_8K (0xdUL << 2)
1391+
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_64K (0x10UL << 2)
1392+
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_256K (0x12UL << 2)
1393+
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_1M (0x14UL << 2)
1394+
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_2M (0x15UL << 2)
1395+
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_4M (0x16UL << 2)
1396+
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_1G (0x1eUL << 2)
1397+
#define CMDQ_REGISTER_MR_LOG2_PG_SIZE_LAST \
1398+
CMDQ_REGISTER_MR_LOG2_PG_SIZE_PG_1G
1399+
#define CMDQ_REGISTER_MR_UNUSED1 0x80UL
13881400
u8 access;
13891401
#define CMDQ_REGISTER_MR_ACCESS_LOCAL_WRITE 0x1UL
13901402
#define CMDQ_REGISTER_MR_ACCESS_REMOTE_READ 0x2UL
13911403
#define CMDQ_REGISTER_MR_ACCESS_REMOTE_WRITE 0x4UL
13921404
#define CMDQ_REGISTER_MR_ACCESS_REMOTE_ATOMIC 0x8UL
13931405
#define CMDQ_REGISTER_MR_ACCESS_MW_BIND 0x10UL
13941406
#define CMDQ_REGISTER_MR_ACCESS_ZERO_BASED 0x20UL
1395-
__le16 unused_1;
1407+
__le16 log2_pbl_pg_size;
1408+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_MASK 0x1fUL
1409+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_SFT 0
1410+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_4K 0xcUL
1411+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_8K 0xdUL
1412+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_64K 0x10UL
1413+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_256K 0x12UL
1414+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_1M 0x14UL
1415+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_2M 0x15UL
1416+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_4M 0x16UL
1417+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_1G 0x1eUL
1418+
#define CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_LAST \
1419+
CMDQ_REGISTER_MR_LOG2_PBL_PG_SIZE_PG_1G
1420+
#define CMDQ_REGISTER_MR_UNUSED11_MASK 0xffe0UL
1421+
#define CMDQ_REGISTER_MR_UNUSED11_SFT 5
13961422
__le32 key;
13971423
__le64 pbl;
13981424
__le64 va;

0 commit comments

Comments
 (0)