]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/gpu/drm/nouveau/dispnv50/disp.c
drm/nouveau/kms/nv50-: attach immutable zpos property to planes
[linux.git] / drivers / gpu / drm / nouveau / dispnv50 / disp.c
index 7ba373f493b298ea90326321df28daab7de21ce2..146e54ef672e3e97a3f47cf983238e16a8409670 100644 (file)
 #include <linux/dma-mapping.h>
 #include <linux/hdmi.h>
 
-#include <drm/drmP.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_dp_helper.h>
+#include <drm/drm_edid.h>
 #include <drm/drm_fb_helper.h>
 #include <drm/drm_plane_helper.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_scdc_helper.h>
-#include <drm/drm_edid.h>
+#include <drm/drm_vblank.h>
 
 #include <nvif/class.h>
 #include <nvif/cl0002.h>
@@ -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;
@@ -775,7 +780,7 @@ nv50_msto_atomic_check(struct drm_encoder *encoder,
                        drm_dp_calc_pbn_mode(crtc_state->adjusted_mode.clock,
                                             connector->display_info.bpc * 3);
 
-       if (drm_atomic_crtc_needs_modeset(crtc_state)) {
+       if (crtc_state->mode_changed) {
                slots = drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr,
                                                      mstc->port,
                                                      asyh->dp.pbn);
@@ -2311,6 +2316,7 @@ nv50_display_create(struct drm_device *dev)
        disp->disp = &nouveau_display(dev)->disp;
        dev->mode_config.funcs = &nv50_disp_func;
        dev->mode_config.quirk_addfb_prefer_xbgr_30bpp = true;
+       dev->mode_config.normalize_zpos = true;
 
        /* small shared memory area we use for notifiers and semaphores */
        ret = nouveau_bo_new(&drm->client, 4096, 0x1000, TTM_PL_FLAG_VRAM,