RDMA/bnxt_re: Support multiple page sizes
authorSelvin Xavier <selvin.xavier@broadcom.com>
Wed, 15 Sep 2021 12:32:36 +0000 (05:32 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 20 Sep 2021 16:37:01 +0000 (13:37 -0300)
HW can support multiple page sizes. Enable bits for enabling sizes from 4k
to 1G by reporting page_size_cap.

Link: https://lore.kernel.org/r/1631709163-2287-6-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/bnxt_re/bnxt_re.h
drivers/infiniband/hw/bnxt_re/ib_verbs.c

index 5b85620..79401e6 100644 (file)
 #define ROCE_DRV_MODULE_NAME           "bnxt_re"
 
 #define BNXT_RE_DESC   "Broadcom NetXtreme-C/E RoCE Driver"
-#define BNXT_RE_PAGE_SHIFT_4K          (12)
-#define BNXT_RE_PAGE_SHIFT_8K          (13)
-#define BNXT_RE_PAGE_SHIFT_64K         (16)
-#define BNXT_RE_PAGE_SHIFT_2M          (21)
-#define BNXT_RE_PAGE_SHIFT_8M          (23)
-#define BNXT_RE_PAGE_SHIFT_1G          (30)
 
-#define BNXT_RE_PAGE_SIZE_4K           BIT(BNXT_RE_PAGE_SHIFT_4K)
-#define BNXT_RE_PAGE_SIZE_8K           BIT(BNXT_RE_PAGE_SHIFT_8K)
-#define BNXT_RE_PAGE_SIZE_64K          BIT(BNXT_RE_PAGE_SHIFT_64K)
-#define BNXT_RE_PAGE_SIZE_2M           BIT(BNXT_RE_PAGE_SHIFT_2M)
-#define BNXT_RE_PAGE_SIZE_8M           BIT(BNXT_RE_PAGE_SHIFT_8M)
-#define BNXT_RE_PAGE_SIZE_1G           BIT(BNXT_RE_PAGE_SHIFT_1G)
+#define BNXT_RE_PAGE_SHIFT_1G          (30)
+#define BNXT_RE_PAGE_SIZE_SUPPORTED    0x7FFFF000 /* 4kb - 1G */
 
 #define BNXT_RE_MAX_MR_SIZE_LOW                BIT_ULL(BNXT_RE_PAGE_SHIFT_1G)
 #define BNXT_RE_MAX_MR_SIZE_HIGH       BIT_ULL(39)
index d09841b..1654260 100644 (file)
@@ -133,7 +133,7 @@ int bnxt_re_query_device(struct ib_device *ibdev,
        bnxt_qplib_get_guid(rdev->netdev->dev_addr,
                            (u8 *)&ib_attr->sys_image_guid);
        ib_attr->max_mr_size = BNXT_RE_MAX_MR_SIZE;
-       ib_attr->page_size_cap = BNXT_RE_PAGE_SIZE_4K | BNXT_RE_PAGE_SIZE_2M;
+       ib_attr->page_size_cap = BNXT_RE_PAGE_SIZE_SUPPORTED;
 
        ib_attr->vendor_id = rdev->en_dev->pdev->vendor;
        ib_attr->vendor_part_id = rdev->en_dev->pdev->device;
@@ -3808,7 +3808,7 @@ struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *ib_pd, u64 start, u64 length,
 
        mr->qplib_mr.va = virt_addr;
        page_size = ib_umem_find_best_pgsz(
-               umem, BNXT_RE_PAGE_SIZE_4K | BNXT_RE_PAGE_SIZE_2M, virt_addr);
+               umem, BNXT_RE_PAGE_SIZE_SUPPORTED, virt_addr);
        if (!page_size) {
                ibdev_err(&rdev->ibdev, "umem page size unsupported!");
                rc = -EFAULT;