On 08/02, Timur Kristóf wrote:
> The VUPDATE interrupt isn't registered on DCE 6, so don't try
> to use that.
> 
> This fixes a page flip timeout after sleep/resume on DCE 6.
> 
> Signed-off-by: Timur Kristóf <timur.kris...@gmail.com>
> ---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 22 ++++++++++++-------
>  .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c    | 16 ++++++++------
>  2 files changed, 23 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 470f831a17f7..e8d2ba58cbfa 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -2981,14 +2981,20 @@ static void dm_gpureset_toggle_interrupts(struct 
> amdgpu_device *adev,
>                               drm_warn(adev_to_drm(adev), "Failed to %s pflip 
> interrupts\n",
>                                        enable ? "enable" : "disable");
>  
> -                     if (enable) {
> -                             if 
> (amdgpu_dm_crtc_vrr_active(to_dm_crtc_state(acrtc->base.state)))
> -                                     rc = 
> amdgpu_dm_crtc_set_vupdate_irq(&acrtc->base, true);
> -                     } else
> -                             rc = 
> amdgpu_dm_crtc_set_vupdate_irq(&acrtc->base, false);
> -
> -                     if (rc)
> -                             drm_warn(adev_to_drm(adev), "Failed to %sable 
> vupdate interrupt\n", enable ? "en" : "dis");
> +                     if (dc_supports_vrr(adev->dm.dc->ctx->dce_version)) {
> +                             if (enable) {
> +                                     if (amdgpu_dm_crtc_vrr_active(
> +                                                     
> to_dm_crtc_state(acrtc->base.state)))
> +                                             rc = 
> amdgpu_dm_crtc_set_vupdate_irq(
> +                                                     &acrtc->base, true);
> +                             } else
> +                                     rc = amdgpu_dm_crtc_set_vupdate_irq(
> +                                                     &acrtc->base, false);
> +
> +                             if (rc)
> +                                     drm_warn(adev_to_drm(adev), "Failed to 
> %sable vupdate interrupt\n",
> +                                             enable ? "en" : "dis");
> +                     }
>  
>                       irq_source = IRQ_TYPE_VBLANK + acrtc->otg_inst;
>                       /* During gpu-reset we disable and then enable vblank 
> irq, so
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> index 2551823382f8..f2208e4224f9 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> @@ -298,13 +298,15 @@ static inline int amdgpu_dm_crtc_set_vblank(struct 
> drm_crtc *crtc, bool enable)
>  
>       irq_type = amdgpu_display_crtc_idx_to_irq_type(adev, acrtc->crtc_id);
>  
> -     if (enable) {
> -             /* vblank irq on -> Only need vupdate irq in vrr mode */
> -             if (amdgpu_dm_crtc_vrr_active(acrtc_state))
> -                     rc = amdgpu_dm_crtc_set_vupdate_irq(crtc, true);
> -     } else {
> -             /* vblank irq off -> vupdate irq off */
> -             rc = amdgpu_dm_crtc_set_vupdate_irq(crtc, false);
> +     if (dc_supports_vrr(dm->dc->ctx->dce_version)) {
> +             if (enable) {
> +                     /* vblank irq on -> Only need vupdate irq in vrr mode */
> +                     if (amdgpu_dm_crtc_vrr_active(acrtc_state))
> +                             rc = amdgpu_dm_crtc_set_vupdate_irq(crtc, true);
> +             } else {
> +                     /* vblank irq off -> vupdate irq off */
> +                     rc = amdgpu_dm_crtc_set_vupdate_irq(crtc, false);
> +             }
>       }
>  
>       if (rc)
> -- 
> 2.50.1
>

Reviewed-by: Rodrigo Siqueira <sique...@igalia.com> 

-- 
Rodrigo Siqueira

Reply via email to