diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r600.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 20 |
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: |