|
@@ -30,6 +30,8 @@
|
|
|
const struct kgd2kfd_calls *kgd2kfd;
|
|
|
bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**);
|
|
|
|
|
|
+static const unsigned int compute_vmid_bitmap = 0xFF00;
|
|
|
+
|
|
|
int amdgpu_amdkfd_init(void)
|
|
|
{
|
|
|
int ret;
|
|
@@ -137,9 +139,13 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
|
|
|
int last_valid_bit;
|
|
|
if (adev->kfd) {
|
|
|
struct kgd2kfd_shared_resources gpu_resources = {
|
|
|
- .compute_vmid_bitmap = 0xFF00,
|
|
|
+ .compute_vmid_bitmap = compute_vmid_bitmap,
|
|
|
.num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec,
|
|
|
- .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe
|
|
|
+ .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe,
|
|
|
+ .gpuvm_size = min(adev->vm_manager.max_pfn
|
|
|
+ << AMDGPU_GPU_PAGE_SHIFT,
|
|
|
+ AMDGPU_VA_HOLE_START),
|
|
|
+ .drm_render_minor = adev->ddev->render->index
|
|
|
};
|
|
|
|
|
|
/* 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)
|
|
|
|
|
|
return amdgpu_vram_mgr_usage(&adev->mman.bdev.man[TTM_PL_VRAM]);
|
|
|
}
|
|
|
+
|
|
|
+bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid)
|
|
|
+{
|
|
|
+ if (adev->kfd) {
|
|
|
+ if ((1 << vmid) & compute_vmid_bitmap)
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|