Make kernel submission the default, so mapping the doorbell back to user
space is not needed:
- Remove .mmap handler and use standard drm_gem_mmap.
- Set hwctx->doorbell_offset to AMDXDNA_INVALID_DOORBELL_OFFSET on
  context creation so userspace does not receive a valid-looking BAR
  offset.

Signed-off-by: David Zhang <[email protected]>
---
 drivers/accel/amdxdna/aie4_ctx.c        | 20 +--------------
 drivers/accel/amdxdna/aie4_pci.c        | 33 -------------------------
 drivers/accel/amdxdna/aie4_pci.h        |  1 -
 drivers/accel/amdxdna/amdxdna_pci_drv.c | 17 +------------
 drivers/accel/amdxdna/amdxdna_pci_drv.h |  1 -
 5 files changed, 2 insertions(+), 70 deletions(-)

diff --git a/drivers/accel/amdxdna/aie4_ctx.c b/drivers/accel/amdxdna/aie4_ctx.c
index 8408b0d2696f..8157f2a6fd10 100644
--- a/drivers/accel/amdxdna/aie4_ctx.c
+++ b/drivers/accel/amdxdna/aie4_ctx.c
@@ -158,7 +158,7 @@ static int aie4_hwctx_create(struct amdxdna_hwctx *hwctx)
        }
 
        priv->hw_ctx_id = resp.hw_context_id;
-       hwctx->doorbell_offset = resp.doorbell_offset;
+       hwctx->doorbell_offset = AMDXDNA_INVALID_DOORBELL_OFFSET;
 
        return 0;
 }
@@ -313,21 +313,3 @@ int aie4_cmd_wait(struct amdxdna_hwctx *hwctx, u64 seq, 
u32 timeout)
 
        return ret <= 0 ? ret : 0;
 }
-
-int aie4_hwctx_valid_doorbell(struct amdxdna_client *client, u32 vm_pgoff)
-{
-       struct amdxdna_hwctx *hwctx;
-       unsigned long hwctx_id;
-       int idx;
-
-       idx = srcu_read_lock(&client->hwctx_srcu);
-       amdxdna_for_each_hwctx(client, hwctx_id, hwctx) {
-               if (vm_pgoff == (hwctx->doorbell_offset >> PAGE_SHIFT)) {
-                       srcu_read_unlock(&client->hwctx_srcu, idx);
-                       return 1;
-               }
-       }
-       srcu_read_unlock(&client->hwctx_srcu, idx);
-
-       return 0;
-}
diff --git a/drivers/accel/amdxdna/aie4_pci.c b/drivers/accel/amdxdna/aie4_pci.c
index a58a83af42a4..db02d25e3f4a 100644
--- a/drivers/accel/amdxdna/aie4_pci.c
+++ b/drivers/accel/amdxdna/aie4_pci.c
@@ -518,38 +518,6 @@ static int aie4m_pcidev_init(struct amdxdna_dev *xdna)
        return 0;
 }
 
-static int aie4_doorbell_mmap(struct amdxdna_client *client, struct 
vm_area_struct *vma)
-{
-       struct amdxdna_dev *xdna = client->xdna;
-       struct pci_dev *pdev = to_pci_dev(xdna->ddev.dev);
-       const struct amdxdna_dev_priv *npriv = xdna->dev_info->dev_priv;
-       phys_addr_t res_start;
-       unsigned long pfn;
-       int ret;
-
-       if (!aie4_hwctx_valid_doorbell(client, vma->vm_pgoff)) {
-               XDNA_ERR(xdna, "Invalid doorbell page offset 0x%lx", 
vma->vm_pgoff);
-               return -EINVAL;
-       }
-
-       if (vma_pages(vma) != 1) {
-               XDNA_ERR(xdna, "can only map one page, got %ld", 
vma_pages(vma));
-               return -EINVAL;
-       }
-
-       res_start = pci_resource_start(pdev, xdna->dev_info->doorbell_bar) + 
npriv->doorbell_off;
-       pfn = PHYS_PFN(res_start) + vma->vm_pgoff;
-       vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
-       vm_flags_set(vma, VM_IO | VM_DONTEXPAND | VM_DONTDUMP);
-       ret = io_remap_pfn_range(vma, vma->vm_start,
-                                pfn,
-                                PAGE_SIZE,
-                                vma->vm_page_prot);
-
-       XDNA_DBG(xdna, "doorbell ret %d", ret);
-       return ret;
-}
-
 static int aie4_get_info(struct amdxdna_client *client, struct 
amdxdna_drm_get_info *args)
 {
        struct amdxdna_dev *xdna = client->xdna;
@@ -661,7 +629,6 @@ const struct amdxdna_dev_ops aie4_vf_ops = {
        .fini                   = aie4_vf_fini,
        .hwctx_init             = aie4_hwctx_init,
        .hwctx_fini             = aie4_hwctx_fini,
-       .mmap                   = aie4_doorbell_mmap,
        .cmd_wait               = aie4_cmd_wait,
        .get_aie_info           = aie4_get_info,
 };
diff --git a/drivers/accel/amdxdna/aie4_pci.h b/drivers/accel/amdxdna/aie4_pci.h
index 3fd5eace3ed7..c6219544dc0f 100644
--- a/drivers/accel/amdxdna/aie4_pci.h
+++ b/drivers/accel/amdxdna/aie4_pci.h
@@ -69,7 +69,6 @@ int aie4_attach_work_buffer(struct amdxdna_dev_hdl *ndev);
 int aie4_hwctx_init(struct amdxdna_hwctx *hwctx);
 void aie4_hwctx_fini(struct amdxdna_hwctx *hwctx);
 int aie4_cmd_wait(struct amdxdna_hwctx *hwctx, u64 seq, u32 timeout);
-int aie4_hwctx_valid_doorbell(struct amdxdna_client *client, u32 vm_pgoff);
 
 /* aie4_sriov.c */
 #if IS_ENABLED(CONFIG_PCI_IOV)
diff --git a/drivers/accel/amdxdna/amdxdna_pci_drv.c 
b/drivers/accel/amdxdna/amdxdna_pci_drv.c
index d9e2e71d3e05..3140af69e29c 100644
--- a/drivers/accel/amdxdna/amdxdna_pci_drv.c
+++ b/drivers/accel/amdxdna/amdxdna_pci_drv.c
@@ -250,21 +250,6 @@ static int amdxdna_drm_set_state_ioctl(struct drm_device 
*dev, void *data, struc
        return ret;
 }
 
-static int amdxdna_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
-{
-       struct drm_file *drm_filp = filp->private_data;
-       struct amdxdna_client *client = drm_filp->driver_priv;
-       struct amdxdna_dev *xdna = client->xdna;
-
-       if (likely(vma->vm_pgoff >= DRM_FILE_PAGE_OFFSET_START))
-               return drm_gem_mmap(filp, vma);
-
-       if (!xdna->dev_info->ops->mmap)
-               return -EOPNOTSUPP;
-
-       return xdna->dev_info->ops->mmap(client, vma);
-}
-
 static const struct drm_ioctl_desc amdxdna_drm_ioctls[] = {
        /* Context */
        DRM_IOCTL_DEF_DRV(AMDXDNA_CREATE_HWCTX, amdxdna_drm_create_hwctx_ioctl, 
0),
@@ -323,7 +308,7 @@ static const struct file_operations amdxdna_fops = {
        .poll           = drm_poll,
        .read           = drm_read,
        .llseek         = noop_llseek,
-       .mmap           = amdxdna_drm_gem_mmap,
+       .mmap           = drm_gem_mmap,
        .show_fdinfo    = drm_show_fdinfo,
        .fop_flags      = FOP_UNSIGNED_OFFSET,
 };
diff --git a/drivers/accel/amdxdna/amdxdna_pci_drv.h 
b/drivers/accel/amdxdna/amdxdna_pci_drv.h
index a997d27a504d..84c8973e9197 100644
--- a/drivers/accel/amdxdna/amdxdna_pci_drv.h
+++ b/drivers/accel/amdxdna/amdxdna_pci_drv.h
@@ -57,7 +57,6 @@ struct amdxdna_dev_ops {
        int (*resume)(struct amdxdna_dev *xdna);
        int (*suspend)(struct amdxdna_dev *xdna);
        int (*sriov_configure)(struct amdxdna_dev *xdna, int num_vfs);
-       int (*mmap)(struct amdxdna_client *client, struct vm_area_struct *vma);
        int (*hwctx_init)(struct amdxdna_hwctx *hwctx);
        void (*hwctx_fini)(struct amdxdna_hwctx *hwctx);
        int (*hwctx_config)(struct amdxdna_hwctx *hwctx, u32 type, u64 value, 
void *buf, u32 size);
-- 
2.34.1

Reply via email to