Commit 8e07e267 authored by Amber Lin's avatar Amber Lin Committed by Alex Deucher
Browse files

drm/amdgpu: Simplify kgd2kfd interface



After amdkfd is merged into amdgpu module, amdgpu can call amdkfd
functions directly.

Signed-off-by: default avatarAmber Lin <Amber.Lin@amd.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 2d3d25b6
Loading
Loading
Loading
Loading
+11 −15
Original line number Diff line number Diff line
@@ -61,17 +61,13 @@ int amdgpu_amdkfd_init(void)

void amdgpu_amdkfd_fini(void)
{
	if (kgd2kfd)
		kgd2kfd->exit();
	kgd2kfd_exit();
}

void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
{
	const struct kfd2kgd_calls *kfd2kgd;

	if (!kgd2kfd)
		return;

	switch (adev->asic_type) {
#ifdef CONFIG_DRM_AMDGPU_CIK
	case CHIP_KAVERI:
@@ -98,7 +94,7 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
		return;
	}

	adev->kfd.dev = kgd2kfd->probe((struct kgd_dev *)adev,
	adev->kfd.dev = kgd2kfd_probe((struct kgd_dev *)adev,
				      adev->pdev, kfd2kgd);

	if (adev->kfd.dev)
@@ -182,7 +178,7 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
				&gpu_resources.doorbell_start_offset);

		if (adev->asic_type < CHIP_VEGA10) {
			kgd2kfd->device_init(adev->kfd.dev, &gpu_resources);
			kgd2kfd_device_init(adev->kfd.dev, &gpu_resources);
			return;
		}

@@ -211,14 +207,14 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
		gpu_resources.reserved_doorbell_mask = 0x1e0;
		gpu_resources.reserved_doorbell_val  = 0x0e0;

		kgd2kfd->device_init(adev->kfd.dev, &gpu_resources);
		kgd2kfd_device_init(adev->kfd.dev, &gpu_resources);
	}
}

void amdgpu_amdkfd_device_fini(struct amdgpu_device *adev)
{
	if (adev->kfd.dev) {
		kgd2kfd->device_exit(adev->kfd.dev);
		kgd2kfd_device_exit(adev->kfd.dev);
		adev->kfd.dev = NULL;
	}
}
@@ -227,13 +223,13 @@ void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev,
		const void *ih_ring_entry)
{
	if (adev->kfd.dev)
		kgd2kfd->interrupt(adev->kfd.dev, ih_ring_entry);
		kgd2kfd_interrupt(adev->kfd.dev, ih_ring_entry);
}

void amdgpu_amdkfd_suspend(struct amdgpu_device *adev)
{
	if (adev->kfd.dev)
		kgd2kfd->suspend(adev->kfd.dev);
		kgd2kfd_suspend(adev->kfd.dev);
}

int amdgpu_amdkfd_resume(struct amdgpu_device *adev)
@@ -241,7 +237,7 @@ int amdgpu_amdkfd_resume(struct amdgpu_device *adev)
	int r = 0;

	if (adev->kfd.dev)
		r = kgd2kfd->resume(adev->kfd.dev);
		r = kgd2kfd_resume(adev->kfd.dev);

	return r;
}
@@ -251,7 +247,7 @@ int amdgpu_amdkfd_pre_reset(struct amdgpu_device *adev)
	int r = 0;

	if (adev->kfd.dev)
		r = kgd2kfd->pre_reset(adev->kfd.dev);
		r = kgd2kfd_pre_reset(adev->kfd.dev);

	return r;
}
@@ -261,7 +257,7 @@ int amdgpu_amdkfd_post_reset(struct amdgpu_device *adev)
	int r = 0;

	if (adev->kfd.dev)
		r = kgd2kfd->post_reset(adev->kfd.dev);
		r = kgd2kfd_post_reset(adev->kfd.dev);

	return r;
}
+1 −2
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@

static const struct dma_fence_ops amdkfd_fence_ops;
static atomic_t fence_seq = ATOMIC_INIT(0);
extern const struct kgd2kfd_calls *kgd2kfd;

/* Eviction Fence
 * Fence helper functions to deal with KFD memory eviction.
@@ -123,7 +122,7 @@ static bool amdkfd_fence_enable_signaling(struct dma_fence *f)
	if (dma_fence_is_signaled(f))
		return true;

	if (!kgd2kfd->schedule_evict_and_restore_process(fence->mm, f))
	if (!kgd2kfd_schedule_evict_and_restore_process(fence->mm, f))
		return true;

	return false;
+2 −4
Original line number Diff line number Diff line
@@ -44,8 +44,6 @@
 */
#define AMDGPU_USERPTR_RESTORE_DELAY_MS 1

extern const struct kgd2kfd_calls *kgd2kfd;

/* Impose limit on how much memory KFD can use */
static struct {
	uint64_t max_system_mem_limit;
@@ -1792,7 +1790,7 @@ int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem,
	evicted_bos = atomic_inc_return(&process_info->evicted_bos);
	if (evicted_bos == 1) {
		/* First eviction, stop the queues */
		r = kgd2kfd->quiesce_mm(mm);
		r = kgd2kfd_quiesce_mm(mm);
		if (r)
			pr_err("Failed to quiesce KFD\n");
		schedule_delayed_work(&process_info->restore_userptr_work,
@@ -2084,7 +2082,7 @@ static void amdgpu_amdkfd_restore_userptr_worker(struct work_struct *work)
	    evicted_bos)
		goto unlock_out;
	evicted_bos = 0;
	if (kgd2kfd->resume_mm(mm)) {
	if (kgd2kfd_resume_mm(mm)) {
		pr_err("%s: Failed to resume KFD\n", __func__);
		/* No recovery from this failure. Probably the CP is
		 * hanging. No point trying again.