aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2014-03-12 15:26:34 -0400
committerAlex Deucher <alexander.deucher@amd.com>2014-03-12 15:53:25 -0400
commit07ae78c9798b79bad3d3adf983c94ba23fde54d4 (patch)
tree06f5516db539f64beea31aba45d3f9694fc0b21c
parent7b1bbe883b3ed962ca2be4daf321f318f5091340 (diff)
drm/radeon/cik: stop the sdma engines in the enable() function
We always stop the rings when disabling the engines so just call the stop functions directly from the sdma enable function. This way the rings' status is set correctly on suspend so there are no problems on resume. Fixes resume failures that result in acceleration getting disabled. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
-rw-r--r--drivers/gpu/drm/radeon/cik_sdma.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c
index 5d7a5fa3741a..94626ea90fa5 100644
--- a/drivers/gpu/drm/radeon/cik_sdma.c
+++ b/drivers/gpu/drm/radeon/cik_sdma.c
@@ -293,6 +293,11 @@ void cik_sdma_enable(struct radeon_device *rdev, bool enable)
293 u32 me_cntl, reg_offset; 293 u32 me_cntl, reg_offset;
294 int i; 294 int i;
295 295
296 if (enable == false) {
297 cik_sdma_gfx_stop(rdev);
298 cik_sdma_rlc_stop(rdev);
299 }
300
296 for (i = 0; i < 2; i++) { 301 for (i = 0; i < 2; i++) {
297 if (i == 0) 302 if (i == 0)
298 reg_offset = SDMA0_REGISTER_OFFSET; 303 reg_offset = SDMA0_REGISTER_OFFSET;
@@ -422,10 +427,6 @@ static int cik_sdma_load_microcode(struct radeon_device *rdev)
422 if (!rdev->sdma_fw) 427 if (!rdev->sdma_fw)
423 return -EINVAL; 428 return -EINVAL;
424 429
425 /* stop the gfx rings and rlc compute queues */
426 cik_sdma_gfx_stop(rdev);
427 cik_sdma_rlc_stop(rdev);
428
429 /* halt the MEs */ 430 /* halt the MEs */
430 cik_sdma_enable(rdev, false); 431 cik_sdma_enable(rdev, false);
431 432
@@ -494,9 +495,6 @@ int cik_sdma_resume(struct radeon_device *rdev)
494 */ 495 */
495void cik_sdma_fini(struct radeon_device *rdev) 496void cik_sdma_fini(struct radeon_device *rdev)
496{ 497{
497 /* stop the gfx rings and rlc compute queues */
498 cik_sdma_gfx_stop(rdev);
499 cik_sdma_rlc_stop(rdev);
500 /* halt the MEs */ 498 /* halt the MEs */
501 cik_sdma_enable(rdev, false); 499 cik_sdma_enable(rdev, false);
502 radeon_ring_fini(rdev, &rdev->ring[R600_RING_TYPE_DMA_INDEX]); 500 radeon_ring_fini(rdev, &rdev->ring[R600_RING_TYPE_DMA_INDEX]);