aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2014-01-27 10:59:51 -0500
committerAlex Deucher <alexander.deucher@amd.com>2014-01-29 15:23:04 -0500
commitb9ace36f13c6fc46391c9d40edc648eef3a59ab0 (patch)
tree13f85bf9e838463852ec77d7cb260036600555c7
parent9babd35ad72af631547c7ca294bc2e931cc40e58 (diff)
drm/radeon: skip async dma init on r6xx
The hw is buggy and it's not currently used, but it's currently still initialized by the driver. Skip the init. Skipping init also seems to improve stability with dpm on some r6xx asics. bug: https://bugs.freedesktop.org/show_bug.cgi?id=66963 Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
-rw-r--r--drivers/gpu/drm/radeon/r600.c27
-rw-r--r--drivers/gpu/drm/radeon/radeon_cs.c2
2 files changed, 6 insertions, 23 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 3dce370adc1b..4d69d1745d54 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2612,6 +2612,11 @@ int r600_cp_resume(struct radeon_device *rdev)
2612 ring->ready = false; 2612 ring->ready = false;
2613 return r; 2613 return r;
2614 } 2614 }
2615
2616 /* RV7xx+ uses dma for paging */
2617 if (rdev->family < CHIP_RV770)
2618 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
2619
2615 return 0; 2620 return 0;
2616} 2621}
2617 2622
@@ -2895,12 +2900,6 @@ static int r600_startup(struct radeon_device *rdev)
2895 return r; 2900 return r;
2896 } 2901 }
2897 2902
2898 r = radeon_fence_driver_start_ring(rdev, R600_RING_TYPE_DMA_INDEX);
2899 if (r) {
2900 dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r);
2901 return r;
2902 }
2903
2904 /* Enable IRQ */ 2903 /* Enable IRQ */
2905 if (!rdev->irq.installed) { 2904 if (!rdev->irq.installed) {
2906 r = radeon_irq_kms_init(rdev); 2905 r = radeon_irq_kms_init(rdev);
@@ -2922,12 +2921,6 @@ static int r600_startup(struct radeon_device *rdev)
2922 if (r) 2921 if (r)
2923 return r; 2922 return r;
2924 2923
2925 ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX];
2926 r = radeon_ring_init(rdev, ring, ring->ring_size, R600_WB_DMA_RPTR_OFFSET,
2927 DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0));
2928 if (r)
2929 return r;
2930
2931 r = r600_cp_load_microcode(rdev); 2924 r = r600_cp_load_microcode(rdev);
2932 if (r) 2925 if (r)
2933 return r; 2926 return r;
@@ -2935,10 +2928,6 @@ static int r600_startup(struct radeon_device *rdev)
2935 if (r) 2928 if (r)
2936 return r; 2929 return r;
2937 2930
2938 r = r600_dma_resume(rdev);
2939 if (r)
2940 return r;
2941
2942 r = radeon_ib_pool_init(rdev); 2931 r = radeon_ib_pool_init(rdev);
2943 if (r) { 2932 if (r) {
2944 dev_err(rdev->dev, "IB initialization failed (%d).\n", r); 2933 dev_err(rdev->dev, "IB initialization failed (%d).\n", r);
@@ -2997,7 +2986,6 @@ int r600_suspend(struct radeon_device *rdev)
2997 radeon_pm_suspend(rdev); 2986 radeon_pm_suspend(rdev);
2998 r600_audio_fini(rdev); 2987 r600_audio_fini(rdev);
2999 r600_cp_stop(rdev); 2988 r600_cp_stop(rdev);
3000 r600_dma_stop(rdev);
3001 r600_irq_suspend(rdev); 2989 r600_irq_suspend(rdev);
3002 radeon_wb_disable(rdev); 2990 radeon_wb_disable(rdev);
3003 r600_pcie_gart_disable(rdev); 2991 r600_pcie_gart_disable(rdev);
@@ -3077,9 +3065,6 @@ int r600_init(struct radeon_device *rdev)
3077 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; 3065 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
3078 r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); 3066 r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
3079 3067
3080 rdev->ring[R600_RING_TYPE_DMA_INDEX].ring_obj = NULL;
3081 r600_ring_init(rdev, &rdev->ring[R600_RING_TYPE_DMA_INDEX], 64 * 1024);
3082
3083 rdev->ih.ring_obj = NULL; 3068 rdev->ih.ring_obj = NULL;
3084 r600_ih_ring_init(rdev, 64 * 1024); 3069 r600_ih_ring_init(rdev, 64 * 1024);
3085 3070
@@ -3092,7 +3077,6 @@ int r600_init(struct radeon_device *rdev)
3092 if (r) { 3077 if (r) {
3093 dev_err(rdev->dev, "disabling GPU acceleration\n"); 3078 dev_err(rdev->dev, "disabling GPU acceleration\n");
3094 r600_cp_fini(rdev); 3079 r600_cp_fini(rdev);
3095 r600_dma_fini(rdev);
3096 r600_irq_fini(rdev); 3080 r600_irq_fini(rdev);
3097 radeon_wb_fini(rdev); 3081 radeon_wb_fini(rdev);
3098 radeon_ib_pool_fini(rdev); 3082 radeon_ib_pool_fini(rdev);
@@ -3109,7 +3093,6 @@ void r600_fini(struct radeon_device *rdev)
3109 radeon_pm_fini(rdev); 3093 radeon_pm_fini(rdev);
3110 r600_audio_fini(rdev); 3094 r600_audio_fini(rdev);
3111 r600_cp_fini(rdev); 3095 r600_cp_fini(rdev);
3112 r600_dma_fini(rdev);
3113 r600_irq_fini(rdev); 3096 r600_irq_fini(rdev);
3114 radeon_wb_fini(rdev); 3097 radeon_wb_fini(rdev);
3115 radeon_ib_pool_fini(rdev); 3098 radeon_ib_pool_fini(rdev);
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
index a8e3342fd4a9..dfb5a1db87d4 100644
--- a/drivers/gpu/drm/radeon/radeon_cs.c
+++ b/drivers/gpu/drm/radeon/radeon_cs.c
@@ -138,7 +138,7 @@ static int radeon_cs_get_ring(struct radeon_cs_parser *p, u32 ring, s32 priority
138 p->ring = R600_RING_TYPE_DMA_INDEX; 138 p->ring = R600_RING_TYPE_DMA_INDEX;
139 else 139 else
140 p->ring = CAYMAN_RING_TYPE_DMA1_INDEX; 140 p->ring = CAYMAN_RING_TYPE_DMA1_INDEX;
141 } else if (p->rdev->family >= CHIP_R600) { 141 } else if (p->rdev->family >= CHIP_RV770) {
142 p->ring = R600_RING_TYPE_DMA_INDEX; 142 p->ring = R600_RING_TYPE_DMA_INDEX;
143 } else { 143 } else {
144 return -EINVAL; 144 return -EINVAL;