On 2018-02-15 12:49 PM, Michel Dänzer wrote:
> From: Michel Dänzer <[email protected]>
> 
> If we fail to find or set the mode for a CRTC, keep trying for the
> remaining CRTCs, and only return FALSE if we failed for all CRTCs that
> should be on.
> 
> Signed-off-by: Michel Dänzer <[email protected]>

Thanks. This should help when bandwidth checks in DC fail.

Acked-by: Harry Wentland <[email protected]>

Harry

> ---
> 
> v2:
> Print warning messages for trouble with a particular CRTC, and an error
> message only when returning FALSE.
> 
>  src/drmmode_display.c | 34 +++++++++++++++++++++++++---------
>  1 file changed, 25 insertions(+), 9 deletions(-)
> 
> diff --git a/src/drmmode_display.c b/src/drmmode_display.c
> index 8ccbf735d..a17909876 100644
> --- a/src/drmmode_display.c
> +++ b/src/drmmode_display.c
> @@ -2523,6 +2523,7 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, 
> drmmode_ptr drmmode,
>  {
>       xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
>       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
> +     unsigned num_desired = 0, num_on = 0;
>       int c;
>  
>       for (c = 0; c < config->num_crtc; c++) {
> @@ -2557,6 +2558,8 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, 
> drmmode_ptr drmmode,
>               if (!output)
>                       continue;
>  
> +             num_desired++;
> +
>               /* Mark that we'll need to re-set the mode for sure */
>               memset(&crtc->mode, 0, sizeof(crtc->mode));
>               if (!crtc->desiredMode.CrtcHDisplay) {
> @@ -2564,8 +2567,11 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, 
> drmmode_ptr drmmode,
>                                                                       pScrn->
>                                                                       
> currentMode);
>  
> -                     if (!mode)
> -                             return FALSE;
> +                     if (!mode) {
> +                             xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
> +                                        "Failed to find mode for CRTC %d\n", 
> c);
> +                             continue;
> +                     }
>                       crtc->desiredMode = *mode;
>                       crtc->desiredRotation = RR_Rotate_0;
>                       crtc->desiredX = 0;
> @@ -2573,20 +2579,30 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, 
> drmmode_ptr drmmode,
>               }
>  
>               if (set_hw) {
> -                     if (!crtc->funcs->set_mode_major(crtc, 
> &crtc->desiredMode,
> -                                                      crtc->desiredRotation,
> -                                                      crtc->desiredX,
> -                                                      crtc->desiredY))
> -                             return FALSE;
> +                     if (crtc->funcs->set_mode_major(crtc, 
> &crtc->desiredMode,
> +                                                     crtc->desiredRotation,
> +                                                     crtc->desiredX,
> +                                                     crtc->desiredY)) {
> +                             num_on++;
> +                     } else {
> +                             xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
> +                                        "Failed to set mode on CRTC %d\n", 
> c);
> +                     }
>               } else {
>                       crtc->mode = crtc->desiredMode;
>                       crtc->rotation = crtc->desiredRotation;
>                       crtc->x = crtc->desiredX;
>                       crtc->y = crtc->desiredY;
> -                     if (!drmmode_handle_transform(crtc))
> -                             return FALSE;
> +                     if (drmmode_handle_transform(crtc))
> +                             num_on++;
>               }
>       }
> +
> +     if (num_on == 0 && num_desired > 0) {
> +             xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Failed to enable any 
> CRTC\n");
> +             return FALSE;
> +     }
> +
>       return TRUE;
>  }
>  
> 
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to