diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r600.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 0f39cc661a7e..951566f1de9e 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -2486,6 +2486,17 @@ int r600_startup(struct radeon_device *rdev) | |||
2486 | if (r) | 2486 | if (r) |
2487 | return r; | 2487 | return r; |
2488 | 2488 | ||
2489 | r = radeon_ib_pool_start(rdev); | ||
2490 | if (r) | ||
2491 | return r; | ||
2492 | |||
2493 | r = r600_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX); | ||
2494 | if (r) { | ||
2495 | DRM_ERROR("radeon: failed testing IB (%d).\n", r); | ||
2496 | rdev->accel_working = false; | ||
2497 | return r; | ||
2498 | } | ||
2499 | |||
2489 | return 0; | 2500 | return 0; |
2490 | } | 2501 | } |
2491 | 2502 | ||
@@ -2514,18 +2525,13 @@ int r600_resume(struct radeon_device *rdev) | |||
2514 | /* post card */ | 2525 | /* post card */ |
2515 | atom_asic_init(rdev->mode_info.atom_context); | 2526 | atom_asic_init(rdev->mode_info.atom_context); |
2516 | 2527 | ||
2528 | rdev->accel_working = true; | ||
2517 | r = r600_startup(rdev); | 2529 | r = r600_startup(rdev); |
2518 | if (r) { | 2530 | if (r) { |
2519 | DRM_ERROR("r600 startup failed on resume\n"); | 2531 | DRM_ERROR("r600 startup failed on resume\n"); |
2520 | return r; | 2532 | return r; |
2521 | } | 2533 | } |
2522 | 2534 | ||
2523 | r = r600_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX); | ||
2524 | if (r) { | ||
2525 | DRM_ERROR("radeon: failed testing IB (%d).\n", r); | ||
2526 | return r; | ||
2527 | } | ||
2528 | |||
2529 | r = r600_audio_init(rdev); | 2535 | r = r600_audio_init(rdev); |
2530 | if (r) { | 2536 | if (r) { |
2531 | DRM_ERROR("radeon: audio resume failed\n"); | 2537 | DRM_ERROR("radeon: audio resume failed\n"); |
@@ -2538,13 +2544,14 @@ int r600_resume(struct radeon_device *rdev) | |||
2538 | int r600_suspend(struct radeon_device *rdev) | 2544 | int r600_suspend(struct radeon_device *rdev) |
2539 | { | 2545 | { |
2540 | r600_audio_fini(rdev); | 2546 | r600_audio_fini(rdev); |
2547 | radeon_ib_pool_suspend(rdev); | ||
2548 | r600_blit_suspend(rdev); | ||
2541 | /* FIXME: we should wait for ring to be empty */ | 2549 | /* FIXME: we should wait for ring to be empty */ |
2542 | r600_cp_stop(rdev); | 2550 | r600_cp_stop(rdev); |
2543 | rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; | 2551 | rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; |
2544 | r600_irq_suspend(rdev); | 2552 | r600_irq_suspend(rdev); |
2545 | radeon_wb_disable(rdev); | 2553 | radeon_wb_disable(rdev); |
2546 | r600_pcie_gart_disable(rdev); | 2554 | r600_pcie_gart_disable(rdev); |
2547 | r600_blit_suspend(rdev); | ||
2548 | 2555 | ||
2549 | return 0; | 2556 | return 0; |
2550 | } | 2557 | } |
@@ -2625,30 +2632,24 @@ int r600_init(struct radeon_device *rdev) | |||
2625 | if (r) | 2632 | if (r) |
2626 | return r; | 2633 | return r; |
2627 | 2634 | ||
2635 | r = radeon_ib_pool_init(rdev); | ||
2628 | rdev->accel_working = true; | 2636 | rdev->accel_working = true; |
2637 | if (r) { | ||
2638 | dev_err(rdev->dev, "IB initialization failed (%d).\n", r); | ||
2639 | rdev->accel_working = false; | ||
2640 | } | ||
2641 | |||
2629 | r = r600_startup(rdev); | 2642 | r = r600_startup(rdev); |
2630 | if (r) { | 2643 | if (r) { |
2631 | dev_err(rdev->dev, "disabling GPU acceleration\n"); | 2644 | dev_err(rdev->dev, "disabling GPU acceleration\n"); |
2632 | r600_cp_fini(rdev); | 2645 | r600_cp_fini(rdev); |
2633 | r600_irq_fini(rdev); | 2646 | r600_irq_fini(rdev); |
2634 | radeon_wb_fini(rdev); | 2647 | radeon_wb_fini(rdev); |
2648 | r100_ib_fini(rdev); | ||
2635 | radeon_irq_kms_fini(rdev); | 2649 | radeon_irq_kms_fini(rdev); |
2636 | r600_pcie_gart_fini(rdev); | 2650 | r600_pcie_gart_fini(rdev); |
2637 | rdev->accel_working = false; | 2651 | rdev->accel_working = false; |
2638 | } | 2652 | } |
2639 | if (rdev->accel_working) { | ||
2640 | r = radeon_ib_pool_init(rdev); | ||
2641 | if (r) { | ||
2642 | dev_err(rdev->dev, "IB initialization failed (%d).\n", r); | ||
2643 | rdev->accel_working = false; | ||
2644 | } else { | ||
2645 | r = r600_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX); | ||
2646 | if (r) { | ||
2647 | dev_err(rdev->dev, "IB test failed (%d).\n", r); | ||
2648 | rdev->accel_working = false; | ||
2649 | } | ||
2650 | } | ||
2651 | } | ||
2652 | 2653 | ||
2653 | r = r600_audio_init(rdev); | 2654 | r = r600_audio_init(rdev); |
2654 | if (r) | 2655 | if (r) |
@@ -2663,7 +2664,7 @@ void r600_fini(struct radeon_device *rdev) | |||
2663 | r600_cp_fini(rdev); | 2664 | r600_cp_fini(rdev); |
2664 | r600_irq_fini(rdev); | 2665 | r600_irq_fini(rdev); |
2665 | radeon_wb_fini(rdev); | 2666 | radeon_wb_fini(rdev); |
2666 | radeon_ib_pool_fini(rdev); | 2667 | r100_ib_fini(rdev); |
2667 | radeon_irq_kms_fini(rdev); | 2668 | radeon_irq_kms_fini(rdev); |
2668 | r600_pcie_gart_fini(rdev); | 2669 | r600_pcie_gart_fini(rdev); |
2669 | r600_vram_scratch_fini(rdev); | 2670 | r600_vram_scratch_fini(rdev); |