diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_ttm.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_ttm.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index 1227a97f5169..15c3531377ed 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c | |||
| @@ -355,23 +355,26 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, | |||
| 355 | if (!rdev->cp.ready) { | 355 | if (!rdev->cp.ready) { |
| 356 | /* use memcpy */ | 356 | /* use memcpy */ |
| 357 | DRM_ERROR("CP is not ready use memcpy.\n"); | 357 | DRM_ERROR("CP is not ready use memcpy.\n"); |
| 358 | return ttm_bo_move_memcpy(bo, evict, no_wait, new_mem); | 358 | goto memcpy; |
| 359 | } | 359 | } |
| 360 | 360 | ||
| 361 | if (old_mem->mem_type == TTM_PL_VRAM && | 361 | if (old_mem->mem_type == TTM_PL_VRAM && |
| 362 | new_mem->mem_type == TTM_PL_SYSTEM) { | 362 | new_mem->mem_type == TTM_PL_SYSTEM) { |
| 363 | return radeon_move_vram_ram(bo, evict, interruptible, | 363 | r = radeon_move_vram_ram(bo, evict, interruptible, |
| 364 | no_wait, new_mem); | 364 | no_wait, new_mem); |
| 365 | } else if (old_mem->mem_type == TTM_PL_SYSTEM && | 365 | } else if (old_mem->mem_type == TTM_PL_SYSTEM && |
| 366 | new_mem->mem_type == TTM_PL_VRAM) { | 366 | new_mem->mem_type == TTM_PL_VRAM) { |
| 367 | return radeon_move_ram_vram(bo, evict, interruptible, | 367 | r = radeon_move_ram_vram(bo, evict, interruptible, |
| 368 | no_wait, new_mem); | 368 | no_wait, new_mem); |
| 369 | } else { | 369 | } else { |
| 370 | r = radeon_move_blit(bo, evict, no_wait, new_mem, old_mem); | 370 | r = radeon_move_blit(bo, evict, no_wait, new_mem, old_mem); |
| 371 | if (unlikely(r)) { | ||
| 372 | return r; | ||
| 373 | } | ||
| 374 | } | 371 | } |
| 372 | |||
| 373 | if (r) { | ||
| 374 | memcpy: | ||
| 375 | r = ttm_bo_move_memcpy(bo, evict, no_wait, new_mem); | ||
| 376 | } | ||
| 377 | |||
| 375 | return r; | 378 | return r; |
| 376 | } | 379 | } |
| 377 | 380 | ||
| @@ -429,6 +432,8 @@ static struct ttm_bo_driver radeon_bo_driver = { | |||
| 429 | .sync_obj_flush = &radeon_sync_obj_flush, | 432 | .sync_obj_flush = &radeon_sync_obj_flush, |
| 430 | .sync_obj_unref = &radeon_sync_obj_unref, | 433 | .sync_obj_unref = &radeon_sync_obj_unref, |
| 431 | .sync_obj_ref = &radeon_sync_obj_ref, | 434 | .sync_obj_ref = &radeon_sync_obj_ref, |
| 435 | .move_notify = &radeon_bo_move_notify, | ||
| 436 | .fault_reserve_notify = &radeon_bo_fault_reserve_notify, | ||
| 432 | }; | 437 | }; |
| 433 | 438 | ||
| 434 | int radeon_ttm_init(struct radeon_device *rdev) | 439 | int radeon_ttm_init(struct radeon_device *rdev) |
| @@ -442,13 +447,14 @@ int radeon_ttm_init(struct radeon_device *rdev) | |||
| 442 | /* No others user of address space so set it to 0 */ | 447 | /* No others user of address space so set it to 0 */ |
| 443 | r = ttm_bo_device_init(&rdev->mman.bdev, | 448 | r = ttm_bo_device_init(&rdev->mman.bdev, |
| 444 | rdev->mman.mem_global_ref.object, | 449 | rdev->mman.mem_global_ref.object, |
| 445 | &radeon_bo_driver, DRM_FILE_PAGE_OFFSET); | 450 | &radeon_bo_driver, DRM_FILE_PAGE_OFFSET, |
| 451 | rdev->need_dma32); | ||
| 446 | if (r) { | 452 | if (r) { |
| 447 | DRM_ERROR("failed initializing buffer object driver(%d).\n", r); | 453 | DRM_ERROR("failed initializing buffer object driver(%d).\n", r); |
| 448 | return r; | 454 | return r; |
| 449 | } | 455 | } |
| 450 | r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_VRAM, 0, | 456 | r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_VRAM, 0, |
| 451 | ((rdev->mc.aper_size) >> PAGE_SHIFT)); | 457 | ((rdev->mc.real_vram_size) >> PAGE_SHIFT)); |
| 452 | if (r) { | 458 | if (r) { |
| 453 | DRM_ERROR("Failed initializing VRAM heap.\n"); | 459 | DRM_ERROR("Failed initializing VRAM heap.\n"); |
| 454 | return r; | 460 | return r; |
| @@ -465,7 +471,7 @@ int radeon_ttm_init(struct radeon_device *rdev) | |||
| 465 | return r; | 471 | return r; |
| 466 | } | 472 | } |
| 467 | DRM_INFO("radeon: %uM of VRAM memory ready\n", | 473 | DRM_INFO("radeon: %uM of VRAM memory ready\n", |
| 468 | rdev->mc.vram_size / (1024 * 1024)); | 474 | rdev->mc.real_vram_size / (1024 * 1024)); |
| 469 | r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_TT, 0, | 475 | r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_TT, 0, |
| 470 | ((rdev->mc.gtt_size) >> PAGE_SHIFT)); | 476 | ((rdev->mc.gtt_size) >> PAGE_SHIFT)); |
| 471 | if (r) { | 477 | if (r) { |
