Commit 73b984d8 authored by Arunpravin Paneer Selvam's avatar Arunpravin Paneer Selvam Committed by Christian König
Browse files

drm/nouveau: Implement intersect/compatible functions



Implemented a new intersect and compatible callback function
fetching the start offset from struct ttm_resource.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarArunpravin Paneer Selvam <Arunpravin.PaneerSelvam@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220820073304.178444-5-Arunpravin.PaneerSelvam@amd.com
parent 92b2b55e
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -187,3 +187,32 @@ nouveau_mem_new(struct nouveau_cli *cli, u8 kind, u8 comp,
	*res = &mem->base;
	return 0;
}

bool
nouveau_mem_intersects(struct ttm_resource *res,
		       const struct ttm_place *place,
		       size_t size)
{
	u32 num_pages = PFN_UP(size);

	/* Don't evict BOs outside of the requested placement range */
	if (place->fpfn >= (res->start + num_pages) ||
	    (place->lpfn && place->lpfn <= res->start))
		return false;

	return true;
}

bool
nouveau_mem_compatible(struct ttm_resource *res,
		       const struct ttm_place *place,
		       size_t size)
{
	u32 num_pages = PFN_UP(size);

	if (res->start < place->fpfn ||
	    (place->lpfn && (res->start + num_pages) > place->lpfn))
		return false;

	return true;
}
+6 −0
Original line number Diff line number Diff line
@@ -25,6 +25,12 @@ int nouveau_mem_new(struct nouveau_cli *, u8 kind, u8 comp,
		    struct ttm_resource **);
void nouveau_mem_del(struct ttm_resource_manager *man,
		     struct ttm_resource *);
bool nouveau_mem_intersects(struct ttm_resource *res,
			    const struct ttm_place *place,
			    size_t size);
bool nouveau_mem_compatible(struct ttm_resource *res,
			    const struct ttm_place *place,
			    size_t size);
int nouveau_mem_vram(struct ttm_resource *, bool contig, u8 page);
int nouveau_mem_host(struct ttm_resource *, struct ttm_tt *);
void nouveau_mem_fini(struct nouveau_mem *);
+24 −0
Original line number Diff line number Diff line
@@ -42,6 +42,24 @@ nouveau_manager_del(struct ttm_resource_manager *man,
	nouveau_mem_del(man, reg);
}

static bool
nouveau_manager_intersects(struct ttm_resource_manager *man,
			   struct ttm_resource *res,
			   const struct ttm_place *place,
			   size_t size)
{
	return nouveau_mem_intersects(res, place, size);
}

static bool
nouveau_manager_compatible(struct ttm_resource_manager *man,
			   struct ttm_resource *res,
			   const struct ttm_place *place,
			   size_t size)
{
	return nouveau_mem_compatible(res, place, size);
}

static int
nouveau_vram_manager_new(struct ttm_resource_manager *man,
			 struct ttm_buffer_object *bo,
@@ -73,6 +91,8 @@ nouveau_vram_manager_new(struct ttm_resource_manager *man,
const struct ttm_resource_manager_func nouveau_vram_manager = {
	.alloc = nouveau_vram_manager_new,
	.free = nouveau_manager_del,
	.intersects = nouveau_manager_intersects,
	.compatible = nouveau_manager_compatible,
};

static int
@@ -97,6 +117,8 @@ nouveau_gart_manager_new(struct ttm_resource_manager *man,
const struct ttm_resource_manager_func nouveau_gart_manager = {
	.alloc = nouveau_gart_manager_new,
	.free = nouveau_manager_del,
	.intersects = nouveau_manager_intersects,
	.compatible = nouveau_manager_compatible,
};

static int
@@ -130,6 +152,8 @@ nv04_gart_manager_new(struct ttm_resource_manager *man,
const struct ttm_resource_manager_func nv04_gart_manager = {
	.alloc = nv04_gart_manager_new,
	.free = nouveau_manager_del,
	.intersects = nouveau_manager_intersects,
	.compatible = nouveau_manager_compatible,
};

static int