aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/ast
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2014-08-27 07:16:04 -0400
committerChristian König <christian.koenig@amd.com>2014-08-27 07:16:04 -0400
commitf1217ed09f827e42a49ffa6a5aab672aa6f57a65 (patch)
treeab6a78bc2f7b0d42165eb647e13e87f92b97f149 /drivers/gpu/drm/ast
parent484048db6b4890bc433aac7f5e32fdcf1b2b4786 (diff)
drm/ttm: move fpfn and lpfn into each placement v2
This allows us to more fine grained specify where to place the buffer object. v2: rebased on drm-next, add bochs changes as well Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/ast')
-rw-r--r--drivers/gpu/drm/ast/ast_drv.h2
-rw-r--r--drivers/gpu/drm/ast/ast_ttm.c20
2 files changed, 13 insertions, 9 deletions
diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
index 957d4fabf1e1..cb91c2acc3cb 100644
--- a/drivers/gpu/drm/ast/ast_drv.h
+++ b/drivers/gpu/drm/ast/ast_drv.h
@@ -316,7 +316,7 @@ struct ast_bo {
316 struct ttm_placement placement; 316 struct ttm_placement placement;
317 struct ttm_bo_kmap_obj kmap; 317 struct ttm_bo_kmap_obj kmap;
318 struct drm_gem_object gem; 318 struct drm_gem_object gem;
319 u32 placements[3]; 319 struct ttm_place placements[3];
320 int pin_count; 320 int pin_count;
321}; 321};
322#define gem_to_ast_bo(gobj) container_of((gobj), struct ast_bo, gem) 322#define gem_to_ast_bo(gobj) container_of((gobj), struct ast_bo, gem)
diff --git a/drivers/gpu/drm/ast/ast_ttm.c b/drivers/gpu/drm/ast/ast_ttm.c
index b8246227bab0..8008ea0bc76c 100644
--- a/drivers/gpu/drm/ast/ast_ttm.c
+++ b/drivers/gpu/drm/ast/ast_ttm.c
@@ -293,18 +293,22 @@ void ast_mm_fini(struct ast_private *ast)
293void ast_ttm_placement(struct ast_bo *bo, int domain) 293void ast_ttm_placement(struct ast_bo *bo, int domain)
294{ 294{
295 u32 c = 0; 295 u32 c = 0;
296 bo->placement.fpfn = 0; 296 unsigned i;
297 bo->placement.lpfn = 0; 297
298 bo->placement.placement = bo->placements; 298 bo->placement.placement = bo->placements;
299 bo->placement.busy_placement = bo->placements; 299 bo->placement.busy_placement = bo->placements;
300 if (domain & TTM_PL_FLAG_VRAM) 300 if (domain & TTM_PL_FLAG_VRAM)
301 bo->placements[c++] = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_VRAM; 301 bo->placements[c++].flags = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_VRAM;
302 if (domain & TTM_PL_FLAG_SYSTEM) 302 if (domain & TTM_PL_FLAG_SYSTEM)
303 bo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; 303 bo->placements[c++].flags = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
304 if (!c) 304 if (!c)
305 bo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; 305 bo->placements[c++].flags = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
306 bo->placement.num_placement = c; 306 bo->placement.num_placement = c;
307 bo->placement.num_busy_placement = c; 307 bo->placement.num_busy_placement = c;
308 for (i = 0; i < c; ++i) {
309 bo->placements[i].fpfn = 0;
310 bo->placements[i].lpfn = 0;
311 }
308} 312}
309 313
310int ast_bo_create(struct drm_device *dev, int size, int align, 314int ast_bo_create(struct drm_device *dev, int size, int align,
@@ -360,7 +364,7 @@ int ast_bo_pin(struct ast_bo *bo, u32 pl_flag, u64 *gpu_addr)
360 364
361 ast_ttm_placement(bo, pl_flag); 365 ast_ttm_placement(bo, pl_flag);
362 for (i = 0; i < bo->placement.num_placement; i++) 366 for (i = 0; i < bo->placement.num_placement; i++)
363 bo->placements[i] |= TTM_PL_FLAG_NO_EVICT; 367 bo->placements[i].flags |= TTM_PL_FLAG_NO_EVICT;
364 ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false); 368 ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false);
365 if (ret) 369 if (ret)
366 return ret; 370 return ret;
@@ -383,7 +387,7 @@ int ast_bo_unpin(struct ast_bo *bo)
383 return 0; 387 return 0;
384 388
385 for (i = 0; i < bo->placement.num_placement ; i++) 389 for (i = 0; i < bo->placement.num_placement ; i++)
386 bo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT; 390 bo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT;
387 ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false); 391 ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false);
388 if (ret) 392 if (ret)
389 return ret; 393 return ret;
@@ -407,7 +411,7 @@ int ast_bo_push_sysram(struct ast_bo *bo)
407 411
408 ast_ttm_placement(bo, TTM_PL_FLAG_SYSTEM); 412 ast_ttm_placement(bo, TTM_PL_FLAG_SYSTEM);
409 for (i = 0; i < bo->placement.num_placement ; i++) 413 for (i = 0; i < bo->placement.num_placement ; i++)
410 bo->placements[i] |= TTM_PL_FLAG_NO_EVICT; 414 bo->placements[i].flags |= TTM_PL_FLAG_NO_EVICT;
411 415
412 ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false); 416 ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false);
413 if (ret) { 417 if (ret) {