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

Commit 1fb107fc authored by Jerome Glisse's avatar Jerome Glisse Committed by Dave Airlie
Browse files

drm/radeon/kms: Convert radeon to new ttm_bo_init



Now bo init use placement structure like bo validation does.

Signed-off-by: default avatarJerome Glisse <jglisse@redhat.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 09855acb
Loading
Loading
Loading
Loading
+9 −30
Original line number Original line Diff line number Diff line
@@ -56,25 +56,6 @@ static void radeon_ttm_bo_destroy(struct ttm_buffer_object *tbo)
	kfree(bo);
	kfree(bo);
}
}


static inline u32 radeon_ttm_flags_from_domain(u32 domain)
{
	u32 flags = 0;

	if (domain & RADEON_GEM_DOMAIN_VRAM) {
		flags |= TTM_PL_FLAG_VRAM | TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED;
	}
	if (domain & RADEON_GEM_DOMAIN_GTT) {
		flags |= TTM_PL_FLAG_TT | TTM_PL_MASK_CACHING;
	}
	if (domain & RADEON_GEM_DOMAIN_CPU) {
		flags |= TTM_PL_FLAG_SYSTEM | TTM_PL_MASK_CACHING;
	}
	if (!flags) {
		flags |= TTM_PL_FLAG_SYSTEM | TTM_PL_MASK_CACHING;
	}
	return flags;
}

void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain)
void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain)
{
{
	u32 c = 0;
	u32 c = 0;
@@ -100,7 +81,6 @@ int radeon_bo_create(struct radeon_device *rdev, struct drm_gem_object *gobj,
{
{
	struct radeon_bo *bo;
	struct radeon_bo *bo;
	enum ttm_bo_type type;
	enum ttm_bo_type type;
	u32 flags;
	int r;
	int r;


	if (unlikely(rdev->mman.bdev.dev_mapping == NULL)) {
	if (unlikely(rdev->mman.bdev.dev_mapping == NULL)) {
@@ -120,16 +100,16 @@ int radeon_bo_create(struct radeon_device *rdev, struct drm_gem_object *gobj,
	bo->surface_reg = -1;
	bo->surface_reg = -1;
	INIT_LIST_HEAD(&bo->list);
	INIT_LIST_HEAD(&bo->list);


	flags = radeon_ttm_flags_from_domain(domain);
	radeon_ttm_placement_from_domain(bo, domain);
	/* Kernel allocation are uninterruptible */
	/* Kernel allocation are uninterruptible */
	r = ttm_buffer_object_init(&rdev->mman.bdev, &bo->tbo, size, type,
	r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type,
					flags, 0, 0, !kernel, NULL, size,
			&bo->placement, 0, 0, !kernel, NULL, size,
			&radeon_ttm_bo_destroy);
			&radeon_ttm_bo_destroy);
	if (unlikely(r != 0)) {
	if (unlikely(r != 0)) {
		if (r != -ERESTARTSYS)
		if (r != -ERESTARTSYS)
			dev_err(rdev->dev,
			dev_err(rdev->dev,
				"object_init failed for (%ld, 0x%08X)\n",
				"object_init failed for (%lu, 0x%08X)\n",
				size, flags);
				size, domain);
		return r;
		return r;
	}
	}
	*bo_ptr = bo;
	*bo_ptr = bo;
@@ -199,7 +179,7 @@ int radeon_bo_pin(struct radeon_bo *bo, u32 domain, u64 *gpu_addr)
	radeon_ttm_placement_from_domain(bo, domain);
	radeon_ttm_placement_from_domain(bo, domain);
	for (i = 0; i < bo->placement.num_placement; i++)
	for (i = 0; i < bo->placement.num_placement; i++)
		bo->placements[i] |= TTM_PL_FLAG_NO_EVICT;
		bo->placements[i] |= TTM_PL_FLAG_NO_EVICT;
	r = ttm_buffer_object_validate(&bo->tbo, &bo->placement, false, false);
	r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false);
	if (likely(r == 0)) {
	if (likely(r == 0)) {
		bo->pin_count = 1;
		bo->pin_count = 1;
		if (gpu_addr != NULL)
		if (gpu_addr != NULL)
@@ -223,7 +203,7 @@ int radeon_bo_unpin(struct radeon_bo *bo)
		return 0;
		return 0;
	for (i = 0; i < bo->placement.num_placement; i++)
	for (i = 0; i < bo->placement.num_placement; i++)
		bo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT;
		bo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT;
	r = ttm_buffer_object_validate(&bo->tbo, &bo->placement, false, false);
	r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false);
	if (unlikely(r != 0))
	if (unlikely(r != 0))
		dev_err(bo->rdev->dev, "%p validate failed for unpin\n", bo);
		dev_err(bo->rdev->dev, "%p validate failed for unpin\n", bo);
	return r;
	return r;
@@ -336,8 +316,7 @@ int radeon_bo_list_validate(struct list_head *head, void *fence)
				radeon_ttm_placement_from_domain(bo,
				radeon_ttm_placement_from_domain(bo,
								lobj->rdomain);
								lobj->rdomain);
			}
			}
			r = ttm_buffer_object_validate(&bo->tbo,
			r = ttm_bo_validate(&bo->tbo, &bo->placement,
						&bo->placement,
						true, false);
						true, false);
			if (unlikely(r))
			if (unlikely(r))
				return r;
				return r;