diff options
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 19 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_ttm.c | 14 |
3 files changed, 30 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index c938bb54123c..e3c494097f67 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -1016,6 +1016,7 @@ extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data); | |||
1016 | extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable); | 1016 | extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable); |
1017 | extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable); | 1017 | extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable); |
1018 | extern void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain); | 1018 | extern void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain); |
1019 | extern bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo); | ||
1019 | 1020 | ||
1020 | /* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */ | 1021 | /* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */ |
1021 | struct r100_mc_save { | 1022 | struct r100_mc_save { |
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index 132130fcd991..d9ffe1f56e8f 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c | |||
@@ -56,6 +56,13 @@ static void radeon_ttm_bo_destroy(struct ttm_buffer_object *tbo) | |||
56 | kfree(bo); | 56 | kfree(bo); |
57 | } | 57 | } |
58 | 58 | ||
59 | bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo) | ||
60 | { | ||
61 | if (bo->destroy == &radeon_ttm_bo_destroy) | ||
62 | return true; | ||
63 | return false; | ||
64 | } | ||
65 | |||
59 | void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain) | 66 | void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain) |
60 | { | 67 | { |
61 | u32 c = 0; | 68 | u32 c = 0; |
@@ -483,14 +490,20 @@ int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved, | |||
483 | } | 490 | } |
484 | 491 | ||
485 | void radeon_bo_move_notify(struct ttm_buffer_object *bo, | 492 | void radeon_bo_move_notify(struct ttm_buffer_object *bo, |
486 | struct ttm_mem_reg *mem) | 493 | struct ttm_mem_reg *mem) |
487 | { | 494 | { |
488 | struct radeon_bo *rbo = container_of(bo, struct radeon_bo, tbo); | 495 | struct radeon_bo *rbo; |
496 | if (!radeon_ttm_bo_is_radeon_bo(bo)) | ||
497 | return; | ||
498 | rbo = container_of(bo, struct radeon_bo, tbo); | ||
489 | radeon_bo_check_tiling(rbo, 0, 1); | 499 | radeon_bo_check_tiling(rbo, 0, 1); |
490 | } | 500 | } |
491 | 501 | ||
492 | void radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo) | 502 | void radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo) |
493 | { | 503 | { |
494 | struct radeon_bo *rbo = container_of(bo, struct radeon_bo, tbo); | 504 | struct radeon_bo *rbo; |
505 | if (!radeon_ttm_bo_is_radeon_bo(bo)) | ||
506 | return; | ||
507 | rbo = container_of(bo, struct radeon_bo, tbo); | ||
495 | radeon_bo_check_tiling(rbo, 0, 0); | 508 | radeon_bo_check_tiling(rbo, 0, 0); |
496 | } | 509 | } |
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index d2ed896cca01..7bed4122528c 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c | |||
@@ -200,7 +200,19 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type, | |||
200 | static void radeon_evict_flags(struct ttm_buffer_object *bo, | 200 | static void radeon_evict_flags(struct ttm_buffer_object *bo, |
201 | struct ttm_placement *placement) | 201 | struct ttm_placement *placement) |
202 | { | 202 | { |
203 | struct radeon_bo *rbo = container_of(bo, struct radeon_bo, tbo); | 203 | struct radeon_bo *rbo; |
204 | static u32 placements = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; | ||
205 | |||
206 | if (!radeon_ttm_bo_is_radeon_bo(bo)) { | ||
207 | placement->fpfn = 0; | ||
208 | placement->lpfn = 0; | ||
209 | placement->placement = &placements; | ||
210 | placement->busy_placement = &placements; | ||
211 | placement->num_placement = 1; | ||
212 | placement->num_busy_placement = 1; | ||
213 | return; | ||
214 | } | ||
215 | rbo = container_of(bo, struct radeon_bo, tbo); | ||
204 | switch (bo->mem.mem_type) { | 216 | switch (bo->mem.mem_type) { |
205 | case TTM_PL_VRAM: | 217 | case TTM_PL_VRAM: |
206 | radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_GTT); | 218 | radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_GTT); |