drm/radeon: use pflip irq on R600+ v2
Testing the update pending bit directly after issuing an update is nonsense cause depending on the pixel clock the CRTC needs a bit of time to execute the flip even when we are in the VBLANK period. This is just a non invasive patch to solve the problem at hand, a more complete and cleaner solution should follow in the next merge window. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=76564 v2: fix source IDs for CRTC2-6 Signed-off-by: Christian König <christian.koenig@amd.com> Cc: stable@vger.kernel.org
This commit is contained in:
parent
e45187620f
commit
f5d636d2a7
7 changed files with 147 additions and 17 deletions
|
@ -3505,7 +3505,6 @@ int r600_irq_set(struct radeon_device *rdev)
|
|||
u32 hpd1, hpd2, hpd3, hpd4 = 0, hpd5 = 0, hpd6 = 0;
|
||||
u32 grbm_int_cntl = 0;
|
||||
u32 hdmi0, hdmi1;
|
||||
u32 d1grph = 0, d2grph = 0;
|
||||
u32 dma_cntl;
|
||||
u32 thermal_int = 0;
|
||||
|
||||
|
@ -3614,8 +3613,8 @@ int r600_irq_set(struct radeon_device *rdev)
|
|||
WREG32(CP_INT_CNTL, cp_int_cntl);
|
||||
WREG32(DMA_CNTL, dma_cntl);
|
||||
WREG32(DxMODE_INT_MASK, mode_int);
|
||||
WREG32(D1GRPH_INTERRUPT_CONTROL, d1grph);
|
||||
WREG32(D2GRPH_INTERRUPT_CONTROL, d2grph);
|
||||
WREG32(D1GRPH_INTERRUPT_CONTROL, DxGRPH_PFLIP_INT_MASK);
|
||||
WREG32(D2GRPH_INTERRUPT_CONTROL, DxGRPH_PFLIP_INT_MASK);
|
||||
WREG32(GRBM_INT_CNTL, grbm_int_cntl);
|
||||
if (ASIC_IS_DCE3(rdev)) {
|
||||
WREG32(DC_HPD1_INT_CONTROL, hpd1);
|
||||
|
@ -3918,6 +3917,14 @@ restart_ih:
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case 9: /* D1 pflip */
|
||||
DRM_DEBUG("IH: D1 flip\n");
|
||||
radeon_crtc_handle_flip(rdev, 0);
|
||||
break;
|
||||
case 11: /* D2 pflip */
|
||||
DRM_DEBUG("IH: D2 flip\n");
|
||||
radeon_crtc_handle_flip(rdev, 1);
|
||||
break;
|
||||
case 19: /* HPD/DAC hotplug */
|
||||
switch (src_data) {
|
||||
case 0:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue