[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>
Thu, 22 May 2025 18:32:07 +0000 (20:32 +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 abe9888a40aab708d1b9589c237f6f1b4c1b907f..a00bd88443d375a7eede72120c64cdc932c83533 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)