aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
authorChristian König <deathsimple@vodafone.de>2012-07-05 10:05:28 -0400
committerChristian König <deathsimple@vodafone.de>2012-07-17 04:32:48 -0400
commit6f72a631998d37673828b0e97c63dafc8e923382 (patch)
treec410a062f6b0d175736a87b4d0ddf385f3f8b1fb /drivers/gpu/drm/radeon
parent2898c348e5caa50b31b9113726dfa45b2dfc3124 (diff)
drm/radeon: remove r600_blit_suspend
Just reinitialize the shader content on resume instead. Signed-off-by: Christian König <deathsimple@vodafone.de> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c1
-rw-r--r--drivers/gpu/drm/radeon/evergreen_blit_kms.c40
-rw-r--r--drivers/gpu/drm/radeon/ni.c1
-rw-r--r--drivers/gpu/drm/radeon/r600.c15
-rw-r--r--drivers/gpu/drm/radeon/r600_blit_kms.c40
-rw-r--r--drivers/gpu/drm/radeon/radeon.h2
-rw-r--r--drivers/gpu/drm/radeon/rv770.c1
-rw-r--r--drivers/gpu/drm/radeon/si.c3
8 files changed, 40 insertions, 63 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index 64e06e67facd..82f7aea14a6e 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -3139,7 +3139,6 @@ int evergreen_suspend(struct radeon_device *rdev)
3139 struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; 3139 struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
3140 3140
3141 r600_audio_fini(rdev); 3141 r600_audio_fini(rdev);
3142 r600_blit_suspend(rdev);
3143 r700_cp_stop(rdev); 3142 r700_cp_stop(rdev);
3144 ring->ready = false; 3143 ring->ready = false;
3145 evergreen_irq_suspend(rdev); 3144 evergreen_irq_suspend(rdev);
diff --git a/drivers/gpu/drm/radeon/evergreen_blit_kms.c b/drivers/gpu/drm/radeon/evergreen_blit_kms.c
index e512560ffc6f..89cb9feb5653 100644
--- a/drivers/gpu/drm/radeon/evergreen_blit_kms.c
+++ b/drivers/gpu/drm/radeon/evergreen_blit_kms.c
@@ -634,10 +634,6 @@ int evergreen_blit_init(struct radeon_device *rdev)
634 634
635 rdev->r600_blit.max_dim = 16384; 635 rdev->r600_blit.max_dim = 16384;
636 636
637 /* pin copy shader into vram if already initialized */
638 if (rdev->r600_blit.shader_obj)
639 goto done;
640
641 rdev->r600_blit.state_offset = 0; 637 rdev->r600_blit.state_offset = 0;
642 638
643 if (rdev->family < CHIP_CAYMAN) 639 if (rdev->family < CHIP_CAYMAN)
@@ -668,11 +664,26 @@ int evergreen_blit_init(struct radeon_device *rdev)
668 obj_size += cayman_ps_size * 4; 664 obj_size += cayman_ps_size * 4;
669 obj_size = ALIGN(obj_size, 256); 665 obj_size = ALIGN(obj_size, 256);
670 666
671 r = radeon_bo_create(rdev, obj_size, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, 667 /* pin copy shader into vram if not already initialized */
672 NULL, &rdev->r600_blit.shader_obj); 668 if (!rdev->r600_blit.shader_obj) {
673 if (r) { 669 r = radeon_bo_create(rdev, obj_size, PAGE_SIZE, true,
674 DRM_ERROR("evergreen failed to allocate shader\n"); 670 RADEON_GEM_DOMAIN_VRAM,
675 return r; 671 NULL, &rdev->r600_blit.shader_obj);
672 if (r) {
673 DRM_ERROR("evergreen failed to allocate shader\n");
674 return r;
675 }
676
677 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
678 if (unlikely(r != 0))
679 return r;
680 r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM,
681 &rdev->r600_blit.shader_gpu_addr);
682 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
683 if (r) {
684 dev_err(rdev->dev, "(%d) pin blit object failed\n", r);
685 return r;
686 }
676 } 687 }
677 688
678 DRM_DEBUG("evergreen blit allocated bo %08x vs %08x ps %08x\n", 689 DRM_DEBUG("evergreen blit allocated bo %08x vs %08x ps %08x\n",
@@ -714,17 +725,6 @@ int evergreen_blit_init(struct radeon_device *rdev)
714 radeon_bo_kunmap(rdev->r600_blit.shader_obj); 725 radeon_bo_kunmap(rdev->r600_blit.shader_obj);
715 radeon_bo_unreserve(rdev->r600_blit.shader_obj); 726 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
716 727
717done:
718 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
719 if (unlikely(r != 0))
720 return r;
721 r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM,
722 &rdev->r600_blit.shader_gpu_addr);
723 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
724 if (r) {
725 dev_err(rdev->dev, "(%d) pin blit object failed\n", r);
726 return r;
727 }
728 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); 728 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
729 return 0; 729 return 0;
730} 730}
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index fe553102df82..4004376362ee 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1316,7 +1316,6 @@ int cayman_suspend(struct radeon_device *rdev)
1316{ 1316{
1317 r600_audio_fini(rdev); 1317 r600_audio_fini(rdev);
1318 radeon_vm_manager_suspend(rdev); 1318 radeon_vm_manager_suspend(rdev);
1319 r600_blit_suspend(rdev);
1320 cayman_cp_enable(rdev, false); 1319 cayman_cp_enable(rdev, false);
1321 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 1320 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
1322 evergreen_irq_suspend(rdev); 1321 evergreen_irq_suspend(rdev);
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 9750f538cc86..af2f74a27081 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2307,20 +2307,6 @@ int r600_copy_blit(struct radeon_device *rdev,
2307 return 0; 2307 return 0;
2308} 2308}
2309 2309
2310void r600_blit_suspend(struct radeon_device *rdev)
2311{
2312 int r;
2313
2314 /* unpin shaders bo */
2315 if (rdev->r600_blit.shader_obj) {
2316 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
2317 if (!r) {
2318 radeon_bo_unpin(rdev->r600_blit.shader_obj);
2319 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
2320 }
2321 }
2322}
2323
2324int r600_set_surface_reg(struct radeon_device *rdev, int reg, 2310int r600_set_surface_reg(struct radeon_device *rdev, int reg,
2325 uint32_t tiling_flags, uint32_t pitch, 2311 uint32_t tiling_flags, uint32_t pitch,
2326 uint32_t offset, uint32_t obj_size) 2312 uint32_t offset, uint32_t obj_size)
@@ -2461,7 +2447,6 @@ int r600_resume(struct radeon_device *rdev)
2461int r600_suspend(struct radeon_device *rdev) 2447int r600_suspend(struct radeon_device *rdev)
2462{ 2448{
2463 r600_audio_fini(rdev); 2449 r600_audio_fini(rdev);
2464 r600_blit_suspend(rdev);
2465 r600_cp_stop(rdev); 2450 r600_cp_stop(rdev);
2466 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 2451 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
2467 r600_irq_suspend(rdev); 2452 r600_irq_suspend(rdev);
diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c
index 2b8d6418a30c..2bef8549ddfe 100644
--- a/drivers/gpu/drm/radeon/r600_blit_kms.c
+++ b/drivers/gpu/drm/radeon/r600_blit_kms.c
@@ -524,10 +524,6 @@ int r600_blit_init(struct radeon_device *rdev)
524 524
525 rdev->r600_blit.max_dim = 8192; 525 rdev->r600_blit.max_dim = 8192;
526 526
527 /* pin copy shader into vram if already initialized */
528 if (rdev->r600_blit.shader_obj)
529 goto done;
530
531 rdev->r600_blit.state_offset = 0; 527 rdev->r600_blit.state_offset = 0;
532 528
533 if (rdev->family >= CHIP_RV770) 529 if (rdev->family >= CHIP_RV770)
@@ -552,11 +548,26 @@ int r600_blit_init(struct radeon_device *rdev)
552 obj_size += r6xx_ps_size * 4; 548 obj_size += r6xx_ps_size * 4;
553 obj_size = ALIGN(obj_size, 256); 549 obj_size = ALIGN(obj_size, 256);
554 550
555 r = radeon_bo_create(rdev, obj_size, PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM, 551 /* pin copy shader into vram if not already initialized */
556 NULL, &rdev->r600_blit.shader_obj); 552 if (rdev->r600_blit.shader_obj == NULL) {
557 if (r) { 553 r = radeon_bo_create(rdev, obj_size, PAGE_SIZE, true,
558 DRM_ERROR("r600 failed to allocate shader\n"); 554 RADEON_GEM_DOMAIN_VRAM,
559 return r; 555 NULL, &rdev->r600_blit.shader_obj);
556 if (r) {
557 DRM_ERROR("r600 failed to allocate shader\n");
558 return r;
559 }
560
561 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
562 if (unlikely(r != 0))
563 return r;
564 r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM,
565 &rdev->r600_blit.shader_gpu_addr);
566 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
567 if (r) {
568 dev_err(rdev->dev, "(%d) pin blit object failed\n", r);
569 return r;
570 }
560 } 571 }
561 572
562 DRM_DEBUG("r6xx blit allocated bo %08x vs %08x ps %08x\n", 573 DRM_DEBUG("r6xx blit allocated bo %08x vs %08x ps %08x\n",
@@ -587,17 +598,6 @@ int r600_blit_init(struct radeon_device *rdev)
587 radeon_bo_kunmap(rdev->r600_blit.shader_obj); 598 radeon_bo_kunmap(rdev->r600_blit.shader_obj);
588 radeon_bo_unreserve(rdev->r600_blit.shader_obj); 599 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
589 600
590done:
591 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
592 if (unlikely(r != 0))
593 return r;
594 r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM,
595 &rdev->r600_blit.shader_gpu_addr);
596 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
597 if (r) {
598 dev_err(rdev->dev, "(%d) pin blit object failed\n", r);
599 return r;
600 }
601 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); 601 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
602 return 0; 602 return 0;
603} 603}
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 7df76b9cc3af..8a8c3f82950e 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -735,8 +735,6 @@ struct r600_blit {
735 u32 state_len; 735 u32 state_len;
736}; 736};
737 737
738void r600_blit_suspend(struct radeon_device *rdev);
739
740/* 738/*
741 * SI RLC stuff 739 * SI RLC stuff
742 */ 740 */
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index cc0ffb9be2bd..2004f0d94f24 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -996,7 +996,6 @@ int rv770_resume(struct radeon_device *rdev)
996int rv770_suspend(struct radeon_device *rdev) 996int rv770_suspend(struct radeon_device *rdev)
997{ 997{
998 r600_audio_fini(rdev); 998 r600_audio_fini(rdev);
999 r600_blit_suspend(rdev);
1000 r700_cp_stop(rdev); 999 r700_cp_stop(rdev);
1001 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 1000 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
1002 r600_irq_suspend(rdev); 1001 r600_irq_suspend(rdev);
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 40405d302723..7c2618b9aa34 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -3810,9 +3810,6 @@ int si_resume(struct radeon_device *rdev)
3810int si_suspend(struct radeon_device *rdev) 3810int si_suspend(struct radeon_device *rdev)
3811{ 3811{
3812 radeon_vm_manager_suspend(rdev); 3812 radeon_vm_manager_suspend(rdev);
3813#if 0
3814 r600_blit_suspend(rdev);
3815#endif
3816 si_cp_enable(rdev, false); 3813 si_cp_enable(rdev, false);
3817 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 3814 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
3818 rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = false; 3815 rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = false;