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.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 537e259b3837..bc2540b17c5e 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -1378,6 +1378,12 @@ static int r600_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask)
1378{ 1378{
1379 struct rv515_mc_save save; 1379 struct rv515_mc_save save;
1380 1380
1381 if (!(RREG32(GRBM_STATUS) & GUI_ACTIVE))
1382 reset_mask &= ~(RADEON_RESET_GFX | RADEON_RESET_COMPUTE);
1383
1384 if (RREG32(DMA_STATUS_REG) & DMA_IDLE)
1385 reset_mask &= ~RADEON_RESET_DMA;
1386
1381 if (reset_mask == 0) 1387 if (reset_mask == 0)
1382 return 0; 1388 return 0;
1383 1389
@@ -2307,7 +2313,7 @@ void r600_dma_stop(struct radeon_device *rdev)
2307int r600_dma_resume(struct radeon_device *rdev) 2313int r600_dma_resume(struct radeon_device *rdev)
2308{ 2314{
2309 struct radeon_ring *ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX]; 2315 struct radeon_ring *ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX];
2310 u32 rb_cntl, dma_cntl; 2316 u32 rb_cntl, dma_cntl, ib_cntl;
2311 u32 rb_bufsz; 2317 u32 rb_bufsz;
2312 int r; 2318 int r;
2313 2319
@@ -2347,7 +2353,11 @@ int r600_dma_resume(struct radeon_device *rdev)
2347 WREG32(DMA_RB_BASE, ring->gpu_addr >> 8); 2353 WREG32(DMA_RB_BASE, ring->gpu_addr >> 8);
2348 2354
2349 /* enable DMA IBs */ 2355 /* enable DMA IBs */
2350 WREG32(DMA_IB_CNTL, DMA_IB_ENABLE); 2356 ib_cntl = DMA_IB_ENABLE;
2357#ifdef __BIG_ENDIAN
2358 ib_cntl |= DMA_IB_SWAP_ENABLE;
2359#endif
2360 WREG32(DMA_IB_CNTL, ib_cntl);
2351 2361
2352 dma_cntl = RREG32(DMA_CNTL); 2362 dma_cntl = RREG32(DMA_CNTL);
2353 dma_cntl &= ~CTXEMPTY_INT_ENABLE; 2363 dma_cntl &= ~CTXEMPTY_INT_ENABLE;