net: mana: Record the physical address for doorbell page region
authorLong Li <longli@microsoft.com>
Thu, 3 Nov 2022 19:16:20 +0000 (12:16 -0700)
committerLeon Romanovsky <leonro@nvidia.com>
Thu, 10 Nov 2022 05:57:26 +0000 (07:57 +0200)
For supporting RDMA device with multiple user contexts with their
individual doorbell pages, record the start address of doorbell page
region for use by the RDMA driver to allocate user context doorbell IDs.

Reviewed-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Long Li <longli@microsoft.com>
Link: https://lore.kernel.org/r/1667502990-2559-3-git-send-email-longli@linuxonhyperv.com
Acked-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
drivers/net/ethernet/microsoft/mana/gdma.h
drivers/net/ethernet/microsoft/mana/gdma_main.c

index f321a26..72eaec2 100644 (file)
@@ -351,9 +351,11 @@ struct gdma_context {
        u32                     test_event_eq_id;
 
        bool                    is_pf;
+       phys_addr_t             bar0_pa;
        void __iomem            *bar0_va;
        void __iomem            *shm_base;
        void __iomem            *db_page_base;
+       phys_addr_t             phys_db_page_base;
        u32 db_page_size;
 
        /* Shared memory chanenl (used to bootstrap HWC) */
index a6f99b4..9a69852 100644 (file)
@@ -44,6 +44,9 @@ static void mana_gd_init_vf_regs(struct pci_dev *pdev)
        gc->db_page_base = gc->bar0_va +
                                mana_gd_r64(gc, GDMA_REG_DB_PAGE_OFFSET);
 
+       gc->phys_db_page_base = gc->bar0_pa +
+                               mana_gd_r64(gc, GDMA_REG_DB_PAGE_OFFSET);
+
        gc->shm_base = gc->bar0_va + mana_gd_r64(gc, GDMA_REG_SHM_OFFSET);
 }
 
@@ -1377,6 +1380,7 @@ static int mana_gd_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        mutex_init(&gc->eq_test_event_mutex);
        pci_set_drvdata(pdev, gc);
+       gc->bar0_pa = pci_resource_start(pdev, 0);
 
        bar0_va = pci_iomap(pdev, bar, 0);
        if (!bar0_va)