Re: FAILED: patch "[PATCH] drm/nouveau/kms/nv50-: Get rid of bogus" failed to apply to 5.9-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Actually - this fix caused some problems, and there's a follow-up fix in linus's
tree now that we want to make sure to apply at the same time. It looks like I
forgot to Cc it to stable though, so I'll backport both this and the subsequent
fix and send them to you in just a bit

On Thu, 2020-11-05 at 16:36 +0100, gregkh@xxxxxxxxxxxxxxxxxxx wrote:
> 
> The patch below does not apply to the 5.9-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@xxxxxxxxxxxxxxx>.
> 
> thanks,
> 
> greg k-h
> 
> ------------------ original commit in Linus's tree ------------------
> 
> From 2d831155cf0607566e43d8465da33774b2dc7221 Mon Sep 17 00:00:00 2001
> From: Lyude Paul <lyude@xxxxxxxxxx>
> Date: Tue, 29 Sep 2020 18:31:31 -0400
> Subject: [PATCH] drm/nouveau/kms/nv50-: Get rid of bogus
>  nouveau_conn_mode_valid()
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
> 
> Ville also pointed out that I got a lot of the logic here wrong as well,
> whoops.
> While I don't think anyone's likely using 3D output with nouveau, the next
> patch
> will make nouveau_conn_mode_valid() make a lot less sense. So, let's just get
> rid of it and open-code it like before, while taking care to move the 3D frame
> packing calculations on the dot clock into the right place.
> 
> Signed-off-by: Lyude Paul <lyude@xxxxxxxxxx>
> Fixes: d6a9efece724 ("drm/nouveau/kms/nv50-: Share DP SST mode_valid()
> handling with MST")
> Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx> # v5.8+
> Signed-off-by: Ben Skeggs <bskeggs@xxxxxxxxxx>
> 
> diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c
> b/drivers/gpu/drm/nouveau/nouveau_connector.c
> index 49dd0cbc332f..6f21f36719fc 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
> @@ -1023,29 +1023,6 @@ get_tmds_link_bandwidth(struct drm_connector
> *connector)
>                 return 112000 * duallink_scale;
>  }
>  
> -enum drm_mode_status
> -nouveau_conn_mode_clock_valid(const struct drm_display_mode *mode,
> -                             const unsigned min_clock,
> -                             const unsigned max_clock,
> -                             unsigned int *clock_out)
> -{
> -       unsigned int clock = mode->clock;
> -
> -       if ((mode->flags & DRM_MODE_FLAG_3D_MASK) ==
> -           DRM_MODE_FLAG_3D_FRAME_PACKING)
> -               clock *= 2;
> -
> -       if (clock < min_clock)
> -               return MODE_CLOCK_LOW;
> -       if (clock > max_clock)
> -               return MODE_CLOCK_HIGH;
> -
> -       if (clock_out)
> -               *clock_out = clock;
> -
> -       return MODE_OK;
> -}
> -
>  static enum drm_mode_status
>  nouveau_connector_mode_valid(struct drm_connector *connector,
>                              struct drm_display_mode *mode)
> @@ -1053,7 +1030,7 @@ nouveau_connector_mode_valid(struct drm_connector
> *connector,
>         struct nouveau_connector *nv_connector = nouveau_connector(connector);
>         struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder;
>         struct drm_encoder *encoder = to_drm_encoder(nv_encoder);
> -       unsigned min_clock = 25000, max_clock = min_clock;
> +       unsigned int min_clock = 25000, max_clock = min_clock, clock = mode-
> >clock;
>  
>         switch (nv_encoder->dcb->type) {
>         case DCB_OUTPUT_LVDS:
> @@ -1082,8 +1059,15 @@ nouveau_connector_mode_valid(struct drm_connector
> *connector,
>                 return MODE_BAD;
>         }
>  
> -       return nouveau_conn_mode_clock_valid(mode, min_clock, max_clock,
> -                                            NULL);
> +       if ((mode->flags & DRM_MODE_FLAG_3D_MASK) ==
> DRM_MODE_FLAG_3D_FRAME_PACKING)
> +               clock *= 2;
> +
> +       if (clock < min_clock)
> +               return MODE_CLOCK_LOW;
> +       if (clock > max_clock)
> +               return MODE_CLOCK_HIGH;
> +
> +       return MODE_OK;
>  }
>  
>  static struct drm_encoder *
> diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c
> b/drivers/gpu/drm/nouveau/nouveau_dp.c
> index 7b640e05bd4c..93e3751ad7f1 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_dp.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c
> @@ -232,12 +232,14 @@ nv50_dp_mode_valid(struct drm_connector *connector,
>                    unsigned *out_clock)
>  {
>         const unsigned min_clock = 25000;
> -       unsigned max_clock, ds_clock, clock;
> -       enum drm_mode_status ret;
> +       unsigned max_clock, ds_clock, clock = mode->clock;
>  
>         if (mode->flags & DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace)
>                 return MODE_NO_INTERLACE;
>  
> +       if ((mode->flags & DRM_MODE_FLAG_3D_MASK) ==
> DRM_MODE_FLAG_3D_FRAME_PACKING)
> +               clock *= 2;
> +
>         max_clock = outp->dp.link_nr * outp->dp.link_bw;
>         ds_clock = drm_dp_downstream_max_dotclock(outp->dp.dpcd,
>                                                   outp->dp.downstream_ports);
> @@ -245,9 +247,13 @@ nv50_dp_mode_valid(struct drm_connector *connector,
>                 max_clock = min(max_clock, ds_clock);
>  
>         clock = mode->clock * (connector->display_info.bpc * 3) / 10;
> -       ret = nouveau_conn_mode_clock_valid(mode, min_clock, max_clock,
> -                                           &clock);
> +       if (clock < min_clock)
> +               return MODE_CLOCK_LOW;
> +       if (clock > max_clock)
> +               return MODE_CLOCK_HIGH;
> +
>         if (out_clock)
>                 *out_clock = clock;
> -       return ret;
> +
> +       return MODE_OK;
>  }
> 

-- 
Sincerely,
   Lyude Paul (she/her)
   Software Engineer at Red Hat
   
Note: I deal with a lot of emails and have a lot of bugs on my plate. If you've
asked me a question, are waiting for a review/merge on a patch, etc. and I
haven't responded in a while, please feel free to send me another email to check
on my status. I don't bite!




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux