diff options
author | Felix Kuehling <Felix.Kuehling@amd.com> | 2018-02-06 20:32:36 -0500 |
---|---|---|
committer | Oded Gabbay <oded.gabbay@gmail.com> | 2018-02-06 20:32:36 -0500 |
commit | 155494dbbbf4d6d6512b8bc2dc6bc483e47e1c71 (patch) | |
tree | e9d8862293f1cd847373dcc2e6a22b6d48d6ae93 | |
parent | d8d019ccffb838bb0dd98e583b5c25ccc0bc6ece (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.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 6 |
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 @@ | |||
30 | const struct kgd2kfd_calls *kgd2kfd; | 30 | const struct kgd2kfd_calls *kgd2kfd; |
31 | bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**); | 31 | bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**); |
32 | 32 | ||
33 | static const unsigned int compute_vmid_bitmap = 0xFF00; | ||
34 | |||
33 | int amdgpu_amdkfd_init(void) | 35 | int 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 | |||
369 | bool 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); | |||
66 | struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void); | 66 | struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void); |
67 | struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void); | 67 | struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void); |
68 | 68 | ||
69 | bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid); | ||
70 | |||
69 | /* Shared API */ | 71 | /* Shared API */ |
70 | int alloc_gtt_mem(struct kgd_dev *kgd, size_t size, | 72 | int 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 | ||
113 | struct tile_config { | 119 | struct tile_config { |