diff options
author | Christian König <christian.koenig@amd.com> | 2014-08-27 07:16:04 -0400 |
---|---|---|
committer | Christian König <christian.koenig@amd.com> | 2014-08-27 07:16:04 -0400 |
commit | f1217ed09f827e42a49ffa6a5aab672aa6f57a65 (patch) | |
tree | ab6a78bc2f7b0d42165eb647e13e87f92b97f149 /drivers/gpu/drm/ast | |
parent | 484048db6b4890bc433aac7f5e32fdcf1b2b4786 (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.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/ast/ast_ttm.c | 20 |
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) | |||
293 | void ast_ttm_placement(struct ast_bo *bo, int domain) | 293 | void 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 | ||
310 | int ast_bo_create(struct drm_device *dev, int size, int align, | 314 | int 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) { |