[PATCH 2/2] drm/amdkfd: Expose HDP registers to user space
Zeng, Oak
Oak.Zeng at amd.com
Wed Apr 17 20:19:04 UTC 2019
Thanks, I agree. Will change it.
Regards,
Oak
-----Original Message-----
From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Deucher, Alexander
Sent: Wednesday, April 17, 2019 12:21 PM
To: Zeng, Oak <Oak.Zeng at amd.com>; amd-gfx at lists.freedesktop.org
Cc: Kuehling, Felix <Felix.Kuehling at amd.com>; Zeng, Oak <Oak.Zeng at amd.com>; Keely, Sean <Sean.Keely at amd.com>; Koenig, Christian <Christian.Koenig at amd.com>
Subject: RE: [PATCH 2/2] drm/amdkfd: Expose HDP registers to user space
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of
> Zeng, Oak
> Sent: Wednesday, April 17, 2019 10:21 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>; Kuehling, Felix
> <Felix.Kuehling at amd.com>; Zeng, Oak <Oak.Zeng at amd.com>; Keely, Sean
> <Sean.Keely at amd.com>; Koenig, Christian <Christian.Koenig at amd.com>
> Subject: [PATCH 2/2] drm/amdkfd: Expose HDP registers to user space
>
> Introduce a new memory type (KFD_IOC_ALLOC_MEM_FLAGS_HDP_FLUSH)
I'd suggest calling this something like ALLOC_MEM_FLAGS_MMIO_REMAP or something like that in case we end up needing to remap other registers in the future.
Alex
> and expose mmio page of HDP registers to user space through this new
> memory type.
>
> v2: moved remapped hdp regs to adev struct
>
> Change-Id: If5ac13c46ea7fbd2194ddc8b2ece26ef4f76c330
> Signed-off-by: Oak Zeng <Oak.Zeng at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 7 +++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 1 +
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 7 ++++---
> drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 4 ++++
> drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 1 +
> include/uapi/linux/kfd_ioctl.h | 1 +
> 6 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> index acf8ae0..d953338b8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> @@ -482,6 +482,13 @@ uint64_t amdgpu_amdkfd_get_hive_id(struct kgd_dev
> *kgd)
> return adev->gmc.xgmi.hive_id;
> }
>
> +uint64_t amdgpu_amdkfd_get_hdp_register_physical_addr(struct kgd_dev
> +*kgd) {
> + struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
> +
> + return
> +adev-
> >remapped_hdp_reg.remapped_hdp_mem_flush_cntl_physical_addr;
> +}
> +
> int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type
> engine,
> uint32_t vmid, uint64_t gpu_addr,
> uint32_t *ib_cmd, uint32_t ib_len) diff --git
> a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> index e6a5037..e778679 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> @@ -154,6 +154,7 @@ int amdgpu_amdkfd_get_dmabuf_info(struct
> kgd_dev *kgd, int dma_buf_fd,
> uint32_t *flags);
> uint64_t amdgpu_amdkfd_get_vram_usage(struct kgd_dev *kgd); uint64_t
> amdgpu_amdkfd_get_hive_id(struct kgd_dev *kgd);
> +uint64_t amdgpu_amdkfd_get_hdp_register_physical_addr(struct kgd_dev
> +*kgd);
>
> #define read_user_wptr(mmptr, wptr, dst) \
> ({ \
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> index 047bba8..4394f61 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> @@ -1087,7 +1087,8 @@ int
> amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
> if (!offset || !*offset)
> return -EINVAL;
> user_addr = *offset;
> - } else if (flags & ALLOC_MEM_FLAGS_DOORBELL) {
> + } else if (flags & (ALLOC_MEM_FLAGS_DOORBELL |
> + ALLOC_MEM_FLAGS_HDP_FLUSH)) {
> domain = AMDGPU_GEM_DOMAIN_GTT;
> alloc_domain = AMDGPU_GEM_DOMAIN_CPU;
> bo_type = ttm_bo_type_sg;
> @@ -1263,8 +1264,8 @@ int
> amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
> /* Free the sync object */
> amdgpu_sync_free(&mem->sync);
>
> - /* If the SG is not NULL, it's one we created for a doorbell
> - * BO. We need to free it.
> + /* If the SG is not NULL, it's one we created for a doorbell or hdp
> + * flush BO. We need to free it.
> */
> if (mem->bo->tbo.sg) {
> sg_free_table(mem->bo->tbo.sg);
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> index 083bd81..973d2fe 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> @@ -1272,6 +1272,10 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct
> file *filep,
> if (args->size != kfd_doorbell_process_slice(dev))
> return -EINVAL;
> offset = kfd_get_process_doorbells(dev, p);
> + } else if (flags & KFD_IOC_ALLOC_MEM_FLAGS_HDP_FLUSH) {
> + if (args->size != PAGE_SIZE)
> + return -EINVAL;
> + offset =
> amdgpu_amdkfd_get_hdp_register_physical_addr(dev->kgd);
> }
>
> mutex_lock(&p->mutex);
> diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
> b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
> index 5f3c10e..3bc78b26 100644
> --- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
> +++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
> @@ -186,6 +186,7 @@ struct tile_config {
> #define ALLOC_MEM_FLAGS_GTT (1 << 1)
> #define ALLOC_MEM_FLAGS_USERPTR (1 << 2)
> #define ALLOC_MEM_FLAGS_DOORBELL (1 << 3)
> +#define ALLOC_MEM_FLAGS_HDP_FLUSH (1 << 4)
>
> /*
> * Allocation flags attributes/access options.
> diff --git a/include/uapi/linux/kfd_ioctl.h
> b/include/uapi/linux/kfd_ioctl.h index dc067ed..96afd01 100644
> --- a/include/uapi/linux/kfd_ioctl.h
> +++ b/include/uapi/linux/kfd_ioctl.h
> @@ -338,6 +338,7 @@ struct kfd_ioctl_acquire_vm_args {
> #define KFD_IOC_ALLOC_MEM_FLAGS_GTT (1 << 1)
> #define KFD_IOC_ALLOC_MEM_FLAGS_USERPTR (1 << 2)
> #define KFD_IOC_ALLOC_MEM_FLAGS_DOORBELL (1 << 3)
> +#define KFD_IOC_ALLOC_MEM_FLAGS_HDP_FLUSH (1 << 4)
> /* Allocation flags: attributes/access options */
> #define KFD_IOC_ALLOC_MEM_FLAGS_WRITABLE (1 << 31)
> #define KFD_IOC_ALLOC_MEM_FLAGS_EXECUTABLE (1 << 30)
> --
> 2.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx at lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list