aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r600.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/r600.c')
-rw-r--r--drivers/gpu/drm/radeon/r600.c43
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)
2538int r600_suspend(struct radeon_device *rdev) 2544int 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);