[PATCH 04/44] 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)
committerSalvatore Bonaccorso <carnil@debian.org>
Sat, 2 Aug 2025 13:13:02 +0000 (15:13 +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>
(cherry picked from commit f3dc096246091048677c45cfc0e24ad512927b52)
Signed-off-by: Bastian Blank <waldi@debian.org>
Gbp-Pq: Topic features/all/ethernet-microsoft
Gbp-Pq: Name 0004-net-mana-Record-the-physical-address-for-doorbell-pa.patch

drivers/net/ethernet/microsoft/mana/gdma.h
drivers/net/ethernet/microsoft/mana/gdma_main.c

index df0ffe35db92b9dfbde0b2651d0285b2a318f576..86d8a9e36005bf268c115ac153602d1378559dca 100644 (file)
@@ -354,9 +354,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;
        int                     numa_node;
 
index e0bbf346f3e1ff59ab5791c35ad55a0457656c5e..7a963a40e3b17ab15159da25b27efd7fb8b0a8f4 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);
 }
 
@@ -1407,6 +1410,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)