On 2019-04-17 12:20 p.m., Deucher, Alexander wrote:
>> -----Original Message-----
>> From: amd-gfx <[email protected]> On Behalf Of
>> Zeng, Oak
>> Sent: Wednesday, April 17, 2019 10:21 AM
>> To: [email protected]
>> Cc: Deucher, Alexander <[email protected]>; Kuehling, Felix
>> <[email protected]>; Zeng, Oak <[email protected]>; Keely, Sean
>> <[email protected]>; Koenig, Christian <[email protected]>
>> 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.

So that's assuming other registers would get remapped into the same 
page. Makes sense.

Regards,
   Felix


>
> 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 <[email protected]>
>> ---
>>   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
>> [email protected]
>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to