dce_v6_0_set_crtc_vline_interrupt_state() was empty without any info to inform the user. Based on DCE8 and DCE10 code. Signed-off-by: Alexandre Demers <alexandre.f.demers@xxxxxxxxx> --- drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c index 254cb73324c6..e805c4f9222c 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c @@ -2957,7 +2957,51 @@ static void dce_v6_0_set_crtc_vline_interrupt_state(struct amdgpu_device *adev, int crtc, enum amdgpu_interrupt_state state) { + u32 reg_block, lb_interrupt_mask; + if (crtc >= adev->mode_info.num_crtc) { + DRM_DEBUG("invalid crtc %d\n", crtc); + return; + } + + switch (crtc) { + case 0: + reg_block = CRTC0_REGISTER_OFFSET; + break; + case 1: + reg_block = CRTC1_REGISTER_OFFSET; + break; + case 2: + reg_block = CRTC2_REGISTER_OFFSET; + break; + case 3: + reg_block = CRTC3_REGISTER_OFFSET; + break; + case 4: + reg_block = CRTC4_REGISTER_OFFSET; + break; + case 5: + reg_block = CRTC5_REGISTER_OFFSET; + break; + default: + DRM_DEBUG("invalid crtc %d\n", crtc); + return; + } + + switch (state) { + case AMDGPU_IRQ_STATE_DISABLE: + lb_interrupt_mask = RREG32(mmINT_MASK + reg_block); + lb_interrupt_mask &= ~VLINE_INT_MASK; + WREG32(mmINT_MASK + reg_block, lb_interrupt_mask); + break; + case AMDGPU_IRQ_STATE_ENABLE: + lb_interrupt_mask = RREG32(mmINT_MASK + reg_block); + lb_interrupt_mask |= VLINE_INT_MASK; + WREG32(mmINT_MASK + reg_block, lb_interrupt_mask); + break; + default: + break; + } } static int dce_v6_0_set_hpd_interrupt_state(struct amdgpu_device *adev, -- 2.48.1