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.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 647ef4079217..bbc189fd3ddc 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -1748,11 +1748,9 @@ bool r600_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
1748 if (!(reset_mask & (RADEON_RESET_GFX | 1748 if (!(reset_mask & (RADEON_RESET_GFX |
1749 RADEON_RESET_COMPUTE | 1749 RADEON_RESET_COMPUTE |
1750 RADEON_RESET_CP))) { 1750 RADEON_RESET_CP))) {
1751 radeon_ring_lockup_update(ring); 1751 radeon_ring_lockup_update(rdev, ring);
1752 return false; 1752 return false;
1753 } 1753 }
1754 /* force CP activities */
1755 radeon_ring_force_activity(rdev, ring);
1756 return radeon_ring_test_lockup(rdev, ring); 1754 return radeon_ring_test_lockup(rdev, ring);
1757} 1755}
1758 1756
@@ -2604,8 +2602,6 @@ int r600_cp_resume(struct radeon_device *rdev)
2604 WREG32(CP_RB_BASE, ring->gpu_addr >> 8); 2602 WREG32(CP_RB_BASE, ring->gpu_addr >> 8);
2605 WREG32(CP_DEBUG, (1 << 27) | (1 << 28)); 2603 WREG32(CP_DEBUG, (1 << 27) | (1 << 28));
2606 2604
2607 ring->rptr = RREG32(CP_RB_RPTR);
2608
2609 r600_cp_start(rdev); 2605 r600_cp_start(rdev);
2610 ring->ready = true; 2606 ring->ready = true;
2611 r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring); 2607 r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring);
@@ -2843,6 +2839,7 @@ int r600_copy_cpdma(struct radeon_device *rdev,
2843 r = radeon_fence_emit(rdev, fence, ring->idx); 2839 r = radeon_fence_emit(rdev, fence, ring->idx);
2844 if (r) { 2840 if (r) {
2845 radeon_ring_unlock_undo(rdev, ring); 2841 radeon_ring_unlock_undo(rdev, ring);
2842 radeon_semaphore_free(rdev, &sem, NULL);
2846 return r; 2843 return r;
2847 } 2844 }
2848 2845
@@ -3509,7 +3506,6 @@ int r600_irq_set(struct radeon_device *rdev)
3509 u32 hpd1, hpd2, hpd3, hpd4 = 0, hpd5 = 0, hpd6 = 0; 3506 u32 hpd1, hpd2, hpd3, hpd4 = 0, hpd5 = 0, hpd6 = 0;
3510 u32 grbm_int_cntl = 0; 3507 u32 grbm_int_cntl = 0;
3511 u32 hdmi0, hdmi1; 3508 u32 hdmi0, hdmi1;
3512 u32 d1grph = 0, d2grph = 0;
3513 u32 dma_cntl; 3509 u32 dma_cntl;
3514 u32 thermal_int = 0; 3510 u32 thermal_int = 0;
3515 3511
@@ -3618,8 +3614,8 @@ int r600_irq_set(struct radeon_device *rdev)
3618 WREG32(CP_INT_CNTL, cp_int_cntl); 3614 WREG32(CP_INT_CNTL, cp_int_cntl);
3619 WREG32(DMA_CNTL, dma_cntl); 3615 WREG32(DMA_CNTL, dma_cntl);
3620 WREG32(DxMODE_INT_MASK, mode_int); 3616 WREG32(DxMODE_INT_MASK, mode_int);
3621 WREG32(D1GRPH_INTERRUPT_CONTROL, d1grph); 3617 WREG32(D1GRPH_INTERRUPT_CONTROL, DxGRPH_PFLIP_INT_MASK);
3622 WREG32(D2GRPH_INTERRUPT_CONTROL, d2grph); 3618 WREG32(D2GRPH_INTERRUPT_CONTROL, DxGRPH_PFLIP_INT_MASK);
3623 WREG32(GRBM_INT_CNTL, grbm_int_cntl); 3619 WREG32(GRBM_INT_CNTL, grbm_int_cntl);
3624 if (ASIC_IS_DCE3(rdev)) { 3620 if (ASIC_IS_DCE3(rdev)) {
3625 WREG32(DC_HPD1_INT_CONTROL, hpd1); 3621 WREG32(DC_HPD1_INT_CONTROL, hpd1);
@@ -3922,6 +3918,14 @@ restart_ih:
3922 break; 3918 break;
3923 } 3919 }
3924 break; 3920 break;
3921 case 9: /* D1 pflip */
3922 DRM_DEBUG("IH: D1 flip\n");
3923 radeon_crtc_handle_flip(rdev, 0);
3924 break;
3925 case 11: /* D2 pflip */
3926 DRM_DEBUG("IH: D2 flip\n");
3927 radeon_crtc_handle_flip(rdev, 1);
3928 break;
3925 case 19: /* HPD/DAC hotplug */ 3929 case 19: /* HPD/DAC hotplug */
3926 switch (src_data) { 3930 switch (src_data) {
3927 case 0: 3931 case 0: