Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 473fee47 authored by Yong Zhao's avatar Yong Zhao Committed by Oded Gabbay
Browse files

drm/amdgpu: Replace kgd_mem with amdgpu_bo for kernel pinned gtt mem



The extra fields in struct kgd_mem aren't actually needed. This struct
will be used for GPUVM allocations later.

Signed-off-by: default avatarYong Zhao <yong.zhao@amd.com>
Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
parent fa72d661
Loading
Loading
Loading
Loading
+23 −24
Original line number Original line Diff line number Diff line
@@ -209,15 +209,13 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
			void **cpu_ptr)
			void **cpu_ptr)
{
{
	struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
	struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
	struct kgd_mem **mem = (struct kgd_mem **) mem_obj;
	struct amdgpu_bo *bo = NULL;
	int r;
	int r;

	uint64_t gpu_addr_tmp = 0;
	*mem = kmalloc(sizeof(struct kgd_mem), GFP_KERNEL);
	void *cpu_ptr_tmp = NULL;
	if ((*mem) == NULL)
		return -ENOMEM;


	r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_GTT,
	r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_GTT,
			     AMDGPU_GEM_CREATE_CPU_GTT_USWC, NULL, NULL, &(*mem)->bo);
			AMDGPU_GEM_CREATE_CPU_GTT_USWC, NULL, NULL, &bo);
	if (r) {
	if (r) {
		dev_err(adev->dev,
		dev_err(adev->dev,
			"failed to allocate BO for amdkfd (%d)\n", r);
			"failed to allocate BO for amdkfd (%d)\n", r);
@@ -225,52 +223,53 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
	}
	}


	/* map the buffer */
	/* map the buffer */
	r = amdgpu_bo_reserve((*mem)->bo, true);
	r = amdgpu_bo_reserve(bo, true);
	if (r) {
	if (r) {
		dev_err(adev->dev, "(%d) failed to reserve bo for amdkfd\n", r);
		dev_err(adev->dev, "(%d) failed to reserve bo for amdkfd\n", r);
		goto allocate_mem_reserve_bo_failed;
		goto allocate_mem_reserve_bo_failed;
	}
	}


	r = amdgpu_bo_pin((*mem)->bo, AMDGPU_GEM_DOMAIN_GTT,
	r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT,
				&(*mem)->gpu_addr);
				&gpu_addr_tmp);
	if (r) {
	if (r) {
		dev_err(adev->dev, "(%d) failed to pin bo for amdkfd\n", r);
		dev_err(adev->dev, "(%d) failed to pin bo for amdkfd\n", r);
		goto allocate_mem_pin_bo_failed;
		goto allocate_mem_pin_bo_failed;
	}
	}
	*gpu_addr = (*mem)->gpu_addr;


	r = amdgpu_bo_kmap((*mem)->bo, &(*mem)->cpu_ptr);
	r = amdgpu_bo_kmap(bo, &cpu_ptr_tmp);
	if (r) {
	if (r) {
		dev_err(adev->dev,
		dev_err(adev->dev,
			"(%d) failed to map bo to kernel for amdkfd\n", r);
			"(%d) failed to map bo to kernel for amdkfd\n", r);
		goto allocate_mem_kmap_bo_failed;
		goto allocate_mem_kmap_bo_failed;
	}
	}
	*cpu_ptr = (*mem)->cpu_ptr;


	amdgpu_bo_unreserve((*mem)->bo);
	*mem_obj = bo;
	*gpu_addr = gpu_addr_tmp;
	*cpu_ptr = cpu_ptr_tmp;

	amdgpu_bo_unreserve(bo);


	return 0;
	return 0;


allocate_mem_kmap_bo_failed:
allocate_mem_kmap_bo_failed:
	amdgpu_bo_unpin((*mem)->bo);
	amdgpu_bo_unpin(bo);
allocate_mem_pin_bo_failed:
allocate_mem_pin_bo_failed:
	amdgpu_bo_unreserve((*mem)->bo);
	amdgpu_bo_unreserve(bo);
allocate_mem_reserve_bo_failed:
allocate_mem_reserve_bo_failed:
	amdgpu_bo_unref(&(*mem)->bo);
	amdgpu_bo_unref(&bo);


	return r;
	return r;
}
}


void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj)
void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj)
{
{
	struct kgd_mem *mem = (struct kgd_mem *) mem_obj;
	struct amdgpu_bo *bo = (struct amdgpu_bo *) mem_obj;


	amdgpu_bo_reserve(mem->bo, true);
	amdgpu_bo_reserve(bo, true);
	amdgpu_bo_kunmap(mem->bo);
	amdgpu_bo_kunmap(bo);
	amdgpu_bo_unpin(mem->bo);
	amdgpu_bo_unpin(bo);
	amdgpu_bo_unreserve(mem->bo);
	amdgpu_bo_unreserve(bo);
	amdgpu_bo_unref(&(mem->bo));
	amdgpu_bo_unref(&(bo));
	kfree(mem);
}
}


void get_local_mem_info(struct kgd_dev *kgd,
void get_local_mem_info(struct kgd_dev *kgd,