drm/nouveau/disp/nv50-: force scaler for any non-default LVDS/eDP modes
authorIlia Mirkin <imirkin@alum.mit.edu>
Sat, 25 May 2019 22:41:48 +0000 (18:41 -0400)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 19 Jul 2019 06:26:50 +0000 (16:26 +1000)
Higher layers tend to add a lot of modes not actually in the EDID, such
as the standard DMT modes. Changing this would be extremely intrusive to
everyone, so just force the scaler more often. There are no practical
cases we're aware of where a LVDS/eDP panel has multiple resolutions
exposed, and i915 already does it this way.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110660
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/dispnv50/disp.c

index 7ba373f493b298ea90326321df28daab7de21ce2..8497768f1b4102ac76d7e5d45257aec2bb72a82b 100644 (file)
@@ -322,8 +322,13 @@ nv50_outp_atomic_check_view(struct drm_encoder *encoder,
                switch (connector->connector_type) {
                case DRM_MODE_CONNECTOR_LVDS:
                case DRM_MODE_CONNECTOR_eDP:
-                       /* Force use of scaler for non-EDID modes. */
-                       if (adjusted_mode->type & DRM_MODE_TYPE_DRIVER)
+                       /* Don't force scaler for EDID modes with
+                        * same size as the native one (e.g. different
+                        * refresh rate)
+                        */
+                       if (adjusted_mode->hdisplay == native_mode->hdisplay &&
+                           adjusted_mode->vdisplay == native_mode->vdisplay &&
+                           adjusted_mode->type & DRM_MODE_TYPE_DRIVER)
                                break;
                        mode = native_mode;
                        asyc->scaler.full = true;