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 f321a2616d032e7470ac8b55e80321bb6257f1dd..72eaec2470c07bc333305186030d2ccb340e49ed 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 a6f99b4344d93fa813c6300aa904d3fb4c5e44da..9a698526e2a3200fb071210728d8ec4f6dcca3f5 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)