aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Kuehling <Felix.Kuehling@amd.com>2018-02-06 20:32:36 -0500
committerOded Gabbay <oded.gabbay@gmail.com>2018-02-06 20:32:36 -0500
commit155494dbbbf4d6d6512b8bc2dc6bc483e47e1c71 (patch)
treee9d8862293f1cd847373dcc2e6a22b6d48d6ae93
parentd8d019ccffb838bb0dd98e583b5c25ccc0bc6ece (diff)
drm/amdgpu: Update kgd2kfd_shared_resources for dGPU support
Add GPUVM size and DRM render node. Also add function to query the VMID mask to avoid hard-coding it in multiple places later. v2: cut off GPUVM size at the VA hole Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c20
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h2
-rw-r--r--drivers/gpu/drm/amd/include/kgd_kfd_interface.h6
3 files changed, 26 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index 141d11dfede0..3ec4bada61d7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -30,6 +30,8 @@
30const struct kgd2kfd_calls *kgd2kfd; 30const struct kgd2kfd_calls *kgd2kfd;
31bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**); 31bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**);
32 32
33static const unsigned int compute_vmid_bitmap = 0xFF00;
34
33int amdgpu_amdkfd_init(void) 35int amdgpu_amdkfd_init(void)
34{ 36{
35 int ret; 37 int ret;
@@ -137,9 +139,13 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
137 int last_valid_bit; 139 int last_valid_bit;
138 if (adev->kfd) { 140 if (adev->kfd) {
139 struct kgd2kfd_shared_resources gpu_resources = { 141 struct kgd2kfd_shared_resources gpu_resources = {
140 .compute_vmid_bitmap = 0xFF00, 142 .compute_vmid_bitmap = compute_vmid_bitmap,
141 .num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec, 143 .num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec,
142 .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe 144 .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe,
145 .gpuvm_size = min(adev->vm_manager.max_pfn
146 << AMDGPU_GPU_PAGE_SHIFT,
147 AMDGPU_VA_HOLE_START),
148 .drm_render_minor = adev->ddev->render->index
143 }; 149 };
144 150
145 /* this is going to have a few of the MSBs set that we need to 151 /* this is going to have a few of the MSBs set that we need to
@@ -359,3 +365,13 @@ uint64_t amdgpu_amdkfd_get_vram_usage(struct kgd_dev *kgd)
359 365
360 return amdgpu_vram_mgr_usage(&adev->mman.bdev.man[TTM_PL_VRAM]); 366 return amdgpu_vram_mgr_usage(&adev->mman.bdev.man[TTM_PL_VRAM]);
361} 367}
368
369bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
370{
371 if (adev->kfd) {
372 if ((1 << vmid) & compute_vmid_bitmap)
373 return true;
374 }
375
376 return false;
377}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
index 833dc26d402f..d1bab32622df 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
@@ -66,6 +66,8 @@ void amdgpu_amdkfd_device_fini(struct amdgpu_device *adev);
66struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void); 66struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
67struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void); 67struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
68 68
69bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid);
70
69/* Shared API */ 71/* Shared API */
70int alloc_gtt_mem(struct kgd_dev *kgd, size_t size, 72int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
71 void **mem_obj, uint64_t *gpu_addr, 73 void **mem_obj, uint64_t *gpu_addr,
diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
index 9e352499c409..36c706aff2ac 100644
--- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
@@ -108,6 +108,12 @@ struct kgd2kfd_shared_resources {
108 108
109 /* Number of bytes at start of aperture reserved for KGD. */ 109 /* Number of bytes at start of aperture reserved for KGD. */
110 size_t doorbell_start_offset; 110 size_t doorbell_start_offset;
111
112 /* GPUVM address space size in bytes */
113 uint64_t gpuvm_size;
114
115 /* Minor device number of the render node */
116 int drm_render_minor;
111}; 117};
112 118
113struct tile_config { 119struct tile_config {