Merge drm/drm-next into drm-intel-next
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / display / intel_display.c
index bf7ce684dd8e4b098029667c694ce924b73e7cf8..7728795ee26db6e637ddc240bc1bb09be4601482 100644 (file)
@@ -353,16 +353,10 @@ static bool pipe_scanline_is_moving(struct drm_i915_private *dev_priv,
 {
        i915_reg_t reg = PIPEDSL(pipe);
        u32 line1, line2;
-       u32 line_mask;
 
-       if (DISPLAY_VER(dev_priv) == 2)
-               line_mask = DSL_LINEMASK_GEN2;
-       else
-               line_mask = DSL_LINEMASK_GEN3;
-
-       line1 = intel_de_read(dev_priv, reg) & line_mask;
+       line1 = intel_de_read(dev_priv, reg) & PIPEDSL_LINE_MASK;
        msleep(5);
-       line2 = intel_de_read(dev_priv, reg) & line_mask;
+       line2 = intel_de_read(dev_priv, reg) & PIPEDSL_LINE_MASK;
 
        return line1 != line2;
 }
@@ -397,13 +391,11 @@ intel_wait_for_pipe_off(const struct intel_crtc_state *old_crtc_state)
 
        if (DISPLAY_VER(dev_priv) >= 4) {
                enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
-               i915_reg_t reg = PIPECONF(cpu_transcoder);
 
                /* Wait for the Pipe State to go off */
-               if (intel_de_wait_for_clear(dev_priv, reg,
-                                           I965_PIPECONF_ACTIVE, 100))
-                       drm_WARN(&dev_priv->drm, 1,
-                                "pipe_off wait timed out\n");
+               if (intel_de_wait_for_clear(dev_priv, PIPECONF(cpu_transcoder),
+                                           PIPECONF_STATE_ENABLE, 100))
+                       drm_WARN(&dev_priv->drm, 1, "pipe_off wait timed out\n");
        } else {
                intel_wait_for_pipe_scanline_stopped(crtc);
        }
@@ -1118,8 +1110,8 @@ void hsw_enable_ips(const struct intel_crtc_state *crtc_state)
        drm_WARN_ON(dev, !(crtc_state->active_planes & ~BIT(PLANE_CURSOR)));
 
        if (IS_BROADWELL(dev_priv)) {
-               drm_WARN_ON(dev, sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL,
-                                                        IPS_ENABLE | IPS_PCODE_CONTROL));
+               drm_WARN_ON(dev, snb_pcode_write(dev_priv, DISPLAY_IPS_CONTROL,
+                                                IPS_ENABLE | IPS_PCODE_CONTROL));
                /* Quoting Art Runyan: "its not safe to expect any particular
                 * value in IPS_CTL bit 31 after enabling IPS through the
                 * mailbox." Moreover, the mailbox may return a bogus state,
@@ -1149,7 +1141,7 @@ void hsw_disable_ips(const struct intel_crtc_state *crtc_state)
 
        if (IS_BROADWELL(dev_priv)) {
                drm_WARN_ON(dev,
-                           sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL, 0));
+                           snb_pcode_write(dev_priv, DISPLAY_IPS_CONTROL, 0));
                /*
                 * Wait for PCODE to finish disabling IPS. The BSpec specified
                 * 42ms timeout value leads to occasional timeouts so use 100ms
@@ -1369,7 +1361,8 @@ static void intel_crtc_enable_flip_done(struct intel_atomic_state *state,
        for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
                if (plane->enable_flip_done &&
                    plane->pipe == crtc->pipe &&
-                   update_planes & BIT(plane->id))
+                   update_planes & BIT(plane->id) &&
+                   plane_state->do_async_flip)
                        plane->enable_flip_done(plane);
        }
 }
@@ -1387,7 +1380,8 @@ static void intel_crtc_disable_flip_done(struct intel_atomic_state *state,
        for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
                if (plane->disable_flip_done &&
                    plane->pipe == crtc->pipe &&
-                   update_planes & BIT(plane->id))
+                   update_planes & BIT(plane->id) &&
+                   plane_state->do_async_flip)
                        plane->disable_flip_done(plane);
        }
 }
@@ -1858,10 +1852,7 @@ static void ilk_crtc_enable(struct intel_atomic_state *state,
        intel_encoders_pre_enable(state, crtc);
 
        if (new_crtc_state->has_pch_encoder) {
-               /* Note: FDI PLL enabling _must_ be done before we enable the
-                * cpu pipes, hence this is separate from all the other fdi/pch
-                * enabling. */
-               ilk_fdi_pll_enable(new_crtc_state);
+               ilk_pch_pre_enable(state, crtc);
        } else {
                assert_fdi_tx_disabled(dev_priv, pipe);
                assert_fdi_rx_disabled(dev_priv, pipe);
@@ -1974,7 +1965,6 @@ static void hsw_set_frame_start_delay(const struct intel_crtc_state *crtc_state)
 static void icl_ddi_bigjoiner_pre_enable(struct intel_atomic_state *state,
                                         const struct intel_crtc_state *crtc_state)
 {
-       struct drm_i915_private *dev_priv = to_i915(state->base.dev);
        struct intel_crtc_state *master_crtc_state;
        struct intel_crtc *master_crtc;
        struct drm_connector_state *conn_state;
@@ -2004,12 +1994,27 @@ static void icl_ddi_bigjoiner_pre_enable(struct intel_atomic_state *state,
 
        if (crtc_state->bigjoiner_slave)
                intel_encoders_pre_enable(state, master_crtc);
+}
+
+static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_state)
+{
+       struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
+       struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
+       enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
 
-       /* need to enable VDSC, which we skipped in pre-enable */
-       intel_dsc_enable(crtc_state);
+       intel_set_transcoder_timings(crtc_state);
 
-       if (DISPLAY_VER(dev_priv) >= 13)
-               intel_uncompressed_joiner_enable(crtc_state);
+       if (cpu_transcoder != TRANSCODER_EDP)
+               intel_de_write(dev_priv, PIPE_MULT(cpu_transcoder),
+                              crtc_state->pixel_multiplier - 1);
+
+       if (crtc_state->has_pch_encoder)
+               intel_cpu_transcoder_set_m_n(crtc_state,
+                                            &crtc_state->fdi_m_n, NULL);
+
+       hsw_set_frame_start_delay(crtc_state);
+
+       hsw_set_transconf(crtc_state);
 }
 
 static void hsw_crtc_enable(struct intel_atomic_state *state,
@@ -2036,25 +2041,17 @@ static void hsw_crtc_enable(struct intel_atomic_state *state,
                icl_ddi_bigjoiner_pre_enable(state, new_crtc_state);
        }
 
+       intel_dsc_enable(new_crtc_state);
+
+       if (DISPLAY_VER(dev_priv) >= 13)
+               intel_uncompressed_joiner_enable(new_crtc_state);
+
        intel_set_pipe_src_size(new_crtc_state);
        if (DISPLAY_VER(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
                bdw_set_pipemisc(new_crtc_state);
 
-       if (!new_crtc_state->bigjoiner_slave && !transcoder_is_dsi(cpu_transcoder)) {
-               intel_set_transcoder_timings(new_crtc_state);
-
-               if (cpu_transcoder != TRANSCODER_EDP)
-                       intel_de_write(dev_priv, PIPE_MULT(cpu_transcoder),
-                                      new_crtc_state->pixel_multiplier - 1);
-
-               if (new_crtc_state->has_pch_encoder)
-                       intel_cpu_transcoder_set_m_n(new_crtc_state,
-                                                    &new_crtc_state->fdi_m_n, NULL);
-
-               hsw_set_frame_start_delay(new_crtc_state);
-
-               hsw_set_transconf(new_crtc_state);
-       }
+       if (!new_crtc_state->bigjoiner_slave && !transcoder_is_dsi(cpu_transcoder))
+               hsw_configure_cpu_transcoder(new_crtc_state);
 
        crtc->active = true;
 
@@ -3085,7 +3082,7 @@ intel_link_compute_m_n(u16 bits_per_pixel, int nlanes,
        m_n->tu = 64;
        compute_m_n(data_clock,
                    link_clock * nlanes * 8,
-                   &m_n->gmch_m, &m_n->gmch_n,
+                   &m_n->data_m, &m_n->data_n,
                    constant_n);
 
        compute_m_n(pixel_clock, link_clock,
@@ -3116,6 +3113,17 @@ static void intel_panel_sanitize_ssc(struct drm_i915_private *dev_priv)
        }
 }
 
+static void intel_set_m_n(struct drm_i915_private *i915,
+                         const struct intel_link_m_n *m_n,
+                         i915_reg_t data_m_reg, i915_reg_t data_n_reg,
+                         i915_reg_t link_m_reg, i915_reg_t link_n_reg)
+{
+       intel_de_write(i915, data_m_reg, TU_SIZE(m_n->tu) | m_n->data_m);
+       intel_de_write(i915, data_n_reg, m_n->data_n);
+       intel_de_write(i915, link_m_reg, m_n->link_m);
+       intel_de_write(i915, link_n_reg, m_n->link_n);
+}
+
 static void intel_pch_transcoder_set_m_n(const struct intel_crtc_state *crtc_state,
                                         const struct intel_link_m_n *m_n)
 {
@@ -3123,11 +3131,9 @@ static void intel_pch_transcoder_set_m_n(const struct intel_crtc_state *crtc_sta
        struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
        enum pipe pipe = crtc->pipe;
 
-       intel_de_write(dev_priv, PCH_TRANS_DATA_M1(pipe),
-                      TU_SIZE(m_n->tu) | m_n->gmch_m);
-       intel_de_write(dev_priv, PCH_TRANS_DATA_N1(pipe), m_n->gmch_n);
-       intel_de_write(dev_priv, PCH_TRANS_LINK_M1(pipe), m_n->link_m);
-       intel_de_write(dev_priv, PCH_TRANS_LINK_N1(pipe), m_n->link_n);
+       intel_set_m_n(dev_priv, m_n,
+                     PCH_TRANS_DATA_M1(pipe), PCH_TRANS_DATA_N1(pipe),
+                     PCH_TRANS_LINK_M1(pipe), PCH_TRANS_LINK_N1(pipe));
 }
 
 static bool transcoder_has_m2_n2(struct drm_i915_private *dev_priv,
@@ -3153,35 +3159,23 @@ static void intel_cpu_transcoder_set_m_n(const struct intel_crtc_state *crtc_sta
        enum transcoder transcoder = crtc_state->cpu_transcoder;
 
        if (DISPLAY_VER(dev_priv) >= 5) {
-               intel_de_write(dev_priv, PIPE_DATA_M1(transcoder),
-                              TU_SIZE(m_n->tu) | m_n->gmch_m);
-               intel_de_write(dev_priv, PIPE_DATA_N1(transcoder),
-                              m_n->gmch_n);
-               intel_de_write(dev_priv, PIPE_LINK_M1(transcoder),
-                              m_n->link_m);
-               intel_de_write(dev_priv, PIPE_LINK_N1(transcoder),
-                              m_n->link_n);
+               intel_set_m_n(dev_priv, m_n,
+                             PIPE_DATA_M1(transcoder), PIPE_DATA_N1(transcoder),
+                             PIPE_LINK_M1(transcoder), PIPE_LINK_N1(transcoder));
                /*
                 *  M2_N2 registers are set only if DRRS is supported
                 * (to make sure the registers are not unnecessarily accessed).
                 */
                if (m2_n2 && crtc_state->has_drrs &&
                    transcoder_has_m2_n2(dev_priv, transcoder)) {
-                       intel_de_write(dev_priv, PIPE_DATA_M2(transcoder),
-                                      TU_SIZE(m2_n2->tu) | m2_n2->gmch_m);
-                       intel_de_write(dev_priv, PIPE_DATA_N2(transcoder),
-                                      m2_n2->gmch_n);
-                       intel_de_write(dev_priv, PIPE_LINK_M2(transcoder),
-                                      m2_n2->link_m);
-                       intel_de_write(dev_priv, PIPE_LINK_N2(transcoder),
-                                      m2_n2->link_n);
+                       intel_set_m_n(dev_priv, m2_n2,
+                                     PIPE_DATA_M2(transcoder), PIPE_DATA_N2(transcoder),
+                                     PIPE_LINK_M2(transcoder), PIPE_LINK_N2(transcoder));
                }
        } else {
-               intel_de_write(dev_priv, PIPE_DATA_M_G4X(pipe),
-                              TU_SIZE(m_n->tu) | m_n->gmch_m);
-               intel_de_write(dev_priv, PIPE_DATA_N_G4X(pipe), m_n->gmch_n);
-               intel_de_write(dev_priv, PIPE_LINK_M_G4X(pipe), m_n->link_m);
-               intel_de_write(dev_priv, PIPE_LINK_N_G4X(pipe), m_n->link_n);
+               intel_set_m_n(dev_priv, m_n,
+                             PIPE_DATA_M_G4X(pipe), PIPE_DATA_N_G4X(pipe),
+                             PIPE_LINK_M_G4X(pipe), PIPE_LINK_N_G4X(pipe));
        }
 }
 
@@ -3279,7 +3273,8 @@ static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state)
         * always be the user's requested size.
         */
        intel_de_write(dev_priv, PIPESRC(pipe),
-                      ((crtc_state->pipe_src_w - 1) << 16) | (crtc_state->pipe_src_h - 1));
+                      PIPESRC_WIDTH(crtc_state->pipe_src_w - 1) |
+                      PIPESRC_HEIGHT(crtc_state->pipe_src_h - 1));
 }
 
 static bool intel_pipe_is_interlaced(const struct intel_crtc_state *crtc_state)
@@ -3350,8 +3345,8 @@ static void intel_get_pipe_src_size(struct intel_crtc *crtc,
        u32 tmp;
 
        tmp = intel_de_read(dev_priv, PIPESRC(crtc->pipe));
-       pipe_config->pipe_src_h = (tmp & 0xffff) + 1;
-       pipe_config->pipe_src_w = ((tmp >> 16) & 0xffff) + 1;
+       pipe_config->pipe_src_w = REG_FIELD_GET(PIPESRC_WIDTH_MASK, tmp) + 1;
+       pipe_config->pipe_src_h = REG_FIELD_GET(PIPESRC_HEIGHT_MASK, tmp) + 1;
 }
 
 static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state)
@@ -3379,13 +3374,13 @@ static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state)
 
                switch (crtc_state->pipe_bpp) {
                case 18:
-                       pipeconf |= PIPECONF_6BPC;
+                       pipeconf |= PIPECONF_BPC_6;
                        break;
                case 24:
-                       pipeconf |= PIPECONF_8BPC;
+                       pipeconf |= PIPECONF_BPC_8;
                        break;
                case 30:
-                       pipeconf |= PIPECONF_10BPC;
+                       pipeconf |= PIPECONF_BPC_10;
                        break;
                default:
                        /* Case prevented by intel_choose_pipe_bpp_dither. */
@@ -3400,7 +3395,7 @@ static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state)
                else
                        pipeconf |= PIPECONF_INTERLACE_W_SYNC_SHIFT;
        } else {
-               pipeconf |= PIPECONF_PROGRESSIVE;
+               pipeconf |= PIPECONF_INTERLACE_PROGRESSIVE;
        }
 
        if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
@@ -3543,11 +3538,11 @@ static void i9xx_get_pipe_color_config(struct intel_crtc_state *crtc_state)
 
        tmp = intel_de_read(dev_priv, DSPCNTR(i9xx_plane));
 
-       if (tmp & DISPPLANE_GAMMA_ENABLE)
+       if (tmp & DISP_PIPE_GAMMA_ENABLE)
                crtc_state->gamma_enable = true;
 
        if (!HAS_GMCH(dev_priv) &&
-           tmp & DISPPLANE_PIPE_CSC_ENABLE)
+           tmp & DISP_PIPE_CSC_ENABLE)
                crtc_state->csc_enable = true;
 }
 
@@ -3578,16 +3573,17 @@ static bool i9xx_get_pipe_config(struct intel_crtc *crtc,
        if (IS_G4X(dev_priv) || IS_VALLEYVIEW(dev_priv) ||
            IS_CHERRYVIEW(dev_priv)) {
                switch (tmp & PIPECONF_BPC_MASK) {
-               case PIPECONF_6BPC:
+               case PIPECONF_BPC_6:
                        pipe_config->pipe_bpp = 18;
                        break;
-               case PIPECONF_8BPC:
+               case PIPECONF_BPC_8:
                        pipe_config->pipe_bpp = 24;
                        break;
-               case PIPECONF_10BPC:
+               case PIPECONF_BPC_10:
                        pipe_config->pipe_bpp = 30;
                        break;
                default:
+                       MISSING_CASE(tmp);
                        break;
                }
        }
@@ -3596,8 +3592,7 @@ static bool i9xx_get_pipe_config(struct intel_crtc *crtc,
            (tmp & PIPECONF_COLOR_RANGE_SELECT))
                pipe_config->limited_color_range = true;
 
-       pipe_config->gamma_mode = (tmp & PIPECONF_GAMMA_MODE_MASK_I9XX) >>
-               PIPECONF_GAMMA_MODE_SHIFT;
+       pipe_config->gamma_mode = REG_FIELD_GET(PIPECONF_GAMMA_MODE_MASK_I9XX, tmp);
 
        if (IS_CHERRYVIEW(dev_priv))
                pipe_config->cgm_mode = intel_de_read(dev_priv,
@@ -3684,16 +3679,16 @@ static void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state)
 
        switch (crtc_state->pipe_bpp) {
        case 18:
-               val |= PIPECONF_6BPC;
+               val |= PIPECONF_BPC_6;
                break;
        case 24:
-               val |= PIPECONF_8BPC;
+               val |= PIPECONF_BPC_8;
                break;
        case 30:
-               val |= PIPECONF_10BPC;
+               val |= PIPECONF_BPC_10;
                break;
        case 36:
-               val |= PIPECONF_12BPC;
+               val |= PIPECONF_BPC_12;
                break;
        default:
                /* Case prevented by intel_choose_pipe_bpp_dither. */
@@ -3701,12 +3696,12 @@ static void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state)
        }
 
        if (crtc_state->dither)
-               val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP);
+               val |= PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP;
 
        if (crtc_state->hw.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
-               val |= PIPECONF_INTERLACED_ILK;
+               val |= PIPECONF_INTERLACE_IF_ID_ILK;
        else
-               val |= PIPECONF_PROGRESSIVE;
+               val |= PIPECONF_INTERLACE_PF_PD_ILK;
 
        /*
         * This would end up with an odd purple hue over
@@ -3738,12 +3733,12 @@ static void hsw_set_transconf(const struct intel_crtc_state *crtc_state)
        u32 val = 0;
 
        if (IS_HASWELL(dev_priv) && crtc_state->dither)
-               val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP);
+               val |= PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP;
 
        if (crtc_state->hw.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
-               val |= PIPECONF_INTERLACED_ILK;
+               val |= PIPECONF_INTERLACE_IF_ID_ILK;
        else
-               val |= PIPECONF_PROGRESSIVE;
+               val |= PIPECONF_INTERLACE_PF_PD_ILK;
 
        if (IS_HASWELL(dev_priv) &&
            crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB)
@@ -3765,18 +3760,18 @@ static void bdw_set_pipemisc(const struct intel_crtc_state *crtc_state)
 
        switch (crtc_state->pipe_bpp) {
        case 18:
-               val |= PIPEMISC_6_BPC;
+               val |= PIPEMISC_BPC_6;
                break;
        case 24:
-               val |= PIPEMISC_8_BPC;
+               val |= PIPEMISC_BPC_8;
                break;
        case 30:
-               val |= PIPEMISC_10_BPC;
+               val |= PIPEMISC_BPC_10;
                break;
        case 36:
                /* Port output 12BPC defined for ADLP+ */
                if (DISPLAY_VER(dev_priv) > 12)
-                       val |= PIPEMISC_12_BPC_ADLP;
+                       val |= PIPEMISC_BPC_12_ADLP;
                break;
        default:
                MISSING_CASE(crtc_state->pipe_bpp);
@@ -3812,7 +3807,7 @@ static void bdw_set_pipemisc(const struct intel_crtc_state *crtc_state)
                }
 
                intel_de_rmw(dev_priv, PIPE_MISC2(crtc->pipe),
-                            PIPE_MISC2_UNDERRUN_BUBBLE_COUNTER_MASK,
+                            PIPE_MISC2_BUBBLE_COUNTER_MASK,
                             scaler_in_use ? PIPE_MISC2_BUBBLE_COUNTER_SCALER_EN :
                             PIPE_MISC2_BUBBLE_COUNTER_SCALER_DIS);
        }
@@ -3828,11 +3823,11 @@ int bdw_get_pipemisc_bpp(struct intel_crtc *crtc)
        tmp = intel_de_read(dev_priv, PIPEMISC(crtc->pipe));
 
        switch (tmp & PIPEMISC_BPC_MASK) {
-       case PIPEMISC_6_BPC:
+       case PIPEMISC_BPC_6:
                return 18;
-       case PIPEMISC_8_BPC:
+       case PIPEMISC_BPC_8:
                return 24;
-       case PIPEMISC_10_BPC:
+       case PIPEMISC_BPC_10:
                return 30;
        /*
         * PORT OUTPUT 12 BPC defined for ADLP+.
@@ -3844,7 +3839,7 @@ int bdw_get_pipemisc_bpp(struct intel_crtc *crtc)
         * on older platforms, need to find a workaround for 12 BPC
         * MIPI DSI HW readout.
         */
-       case PIPEMISC_12_BPC_ADLP:
+       case PIPEMISC_BPC_12_ADLP:
                if (DISPLAY_VER(dev_priv) > 12)
                        return 36;
                fallthrough;
@@ -3865,6 +3860,18 @@ int ilk_get_lanes_required(int target_clock, int link_bw, int bpp)
        return DIV_ROUND_UP(bps, link_bw * 8);
 }
 
+static void intel_get_m_n(struct drm_i915_private *i915,
+                         struct intel_link_m_n *m_n,
+                         i915_reg_t data_m_reg, i915_reg_t data_n_reg,
+                         i915_reg_t link_m_reg, i915_reg_t link_n_reg)
+{
+       m_n->link_m = intel_de_read(i915, link_m_reg) & DATA_LINK_M_N_MASK;
+       m_n->link_n = intel_de_read(i915, link_n_reg) & DATA_LINK_M_N_MASK;
+       m_n->data_m = intel_de_read(i915, data_m_reg) & DATA_LINK_M_N_MASK;
+       m_n->data_n = intel_de_read(i915, data_n_reg) & DATA_LINK_M_N_MASK;
+       m_n->tu = REG_FIELD_GET(TU_SIZE_MASK, intel_de_read(i915, data_m_reg)) + 1;
+}
+
 static void intel_pch_transcoder_get_m_n(struct intel_crtc *crtc,
                                         struct intel_link_m_n *m_n)
 {
@@ -3872,13 +3879,9 @@ static void intel_pch_transcoder_get_m_n(struct intel_crtc *crtc,
        struct drm_i915_private *dev_priv = to_i915(dev);
        enum pipe pipe = crtc->pipe;
 
-       m_n->link_m = intel_de_read(dev_priv, PCH_TRANS_LINK_M1(pipe));
-       m_n->link_n = intel_de_read(dev_priv, PCH_TRANS_LINK_N1(pipe));
-       m_n->gmch_m = intel_de_read(dev_priv, PCH_TRANS_DATA_M1(pipe))
-               & ~TU_SIZE_MASK;
-       m_n->gmch_n = intel_de_read(dev_priv, PCH_TRANS_DATA_N1(pipe));
-       m_n->tu = ((intel_de_read(dev_priv, PCH_TRANS_DATA_M1(pipe))
-                   & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
+       intel_get_m_n(dev_priv, m_n,
+                     PCH_TRANS_DATA_M1(pipe), PCH_TRANS_DATA_N1(pipe),
+                     PCH_TRANS_LINK_M1(pipe), PCH_TRANS_LINK_N1(pipe));
 }
 
 static void intel_cpu_transcoder_get_m_n(struct intel_crtc *crtc,
@@ -3890,39 +3893,19 @@ static void intel_cpu_transcoder_get_m_n(struct intel_crtc *crtc,
        enum pipe pipe = crtc->pipe;
 
        if (DISPLAY_VER(dev_priv) >= 5) {
-               m_n->link_m = intel_de_read(dev_priv,
-                                           PIPE_LINK_M1(transcoder));
-               m_n->link_n = intel_de_read(dev_priv,
-                                           PIPE_LINK_N1(transcoder));
-               m_n->gmch_m = intel_de_read(dev_priv,
-                                           PIPE_DATA_M1(transcoder))
-                       & ~TU_SIZE_MASK;
-               m_n->gmch_n = intel_de_read(dev_priv,
-                                           PIPE_DATA_N1(transcoder));
-               m_n->tu = ((intel_de_read(dev_priv, PIPE_DATA_M1(transcoder))
-                           & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
+               intel_get_m_n(dev_priv, m_n,
+                             PIPE_DATA_M1(transcoder), PIPE_DATA_N1(transcoder),
+                             PIPE_LINK_M1(transcoder), PIPE_LINK_N1(transcoder));
 
                if (m2_n2 && transcoder_has_m2_n2(dev_priv, transcoder)) {
-                       m2_n2->link_m = intel_de_read(dev_priv,
-                                                     PIPE_LINK_M2(transcoder));
-                       m2_n2->link_n = intel_de_read(dev_priv,
-                                                            PIPE_LINK_N2(transcoder));
-                       m2_n2->gmch_m = intel_de_read(dev_priv,
-                                                            PIPE_DATA_M2(transcoder))
-                                       & ~TU_SIZE_MASK;
-                       m2_n2->gmch_n = intel_de_read(dev_priv,
-                                                            PIPE_DATA_N2(transcoder));
-                       m2_n2->tu = ((intel_de_read(dev_priv, PIPE_DATA_M2(transcoder))
-                                       & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
+                       intel_get_m_n(dev_priv, m2_n2,
+                                     PIPE_DATA_M2(transcoder), PIPE_DATA_N2(transcoder),
+                                     PIPE_LINK_M2(transcoder), PIPE_LINK_N2(transcoder));
                }
        } else {
-               m_n->link_m = intel_de_read(dev_priv, PIPE_LINK_M_G4X(pipe));
-               m_n->link_n = intel_de_read(dev_priv, PIPE_LINK_N_G4X(pipe));
-               m_n->gmch_m = intel_de_read(dev_priv, PIPE_DATA_M_G4X(pipe))
-                       & ~TU_SIZE_MASK;
-               m_n->gmch_n = intel_de_read(dev_priv, PIPE_DATA_N_G4X(pipe));
-               m_n->tu = ((intel_de_read(dev_priv, PIPE_DATA_M_G4X(pipe))
-                           & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
+               intel_get_m_n(dev_priv, m_n,
+                             PIPE_DATA_M_G4X(pipe), PIPE_DATA_N_G4X(pipe),
+                             PIPE_LINK_M_G4X(pipe), PIPE_LINK_N_G4X(pipe));
        }
 }
 
@@ -4037,16 +4020,16 @@ static bool ilk_get_pipe_config(struct intel_crtc *crtc,
                goto out;
 
        switch (tmp & PIPECONF_BPC_MASK) {
-       case PIPECONF_6BPC:
+       case PIPECONF_BPC_6:
                pipe_config->pipe_bpp = 18;
                break;
-       case PIPECONF_8BPC:
+       case PIPECONF_BPC_8:
                pipe_config->pipe_bpp = 24;
                break;
-       case PIPECONF_10BPC:
+       case PIPECONF_BPC_10:
                pipe_config->pipe_bpp = 30;
                break;
-       case PIPECONF_12BPC:
+       case PIPECONF_BPC_12:
                pipe_config->pipe_bpp = 36;
                break;
        default:
@@ -4066,8 +4049,7 @@ static bool ilk_get_pipe_config(struct intel_crtc *crtc,
                break;
        }
 
-       pipe_config->gamma_mode = (tmp & PIPECONF_GAMMA_MODE_MASK_ILK) >>
-               PIPECONF_GAMMA_MODE_SHIFT;
+       pipe_config->gamma_mode = REG_FIELD_GET(PIPECONF_GAMMA_MODE_MASK_ILK, tmp);
 
        pipe_config->csc_mode = intel_de_read(dev_priv,
                                              PIPE_CSC_MODE(crtc->pipe));
@@ -4380,13 +4362,13 @@ static bool hsw_get_pipe_config(struct intel_crtc *crtc,
                active = true;
        }
 
+       if (!active)
+               goto out;
+
        intel_dsc_get_config(pipe_config);
        if (DISPLAY_VER(dev_priv) >= 13 && !pipe_config->dsc.compression_enable)
                intel_uncompressed_joiner_get_config(pipe_config);
 
-       if (!active)
-               goto out;
-
        if (!transcoder_is_dsi(pipe_config->cpu_transcoder) ||
            DISPLAY_VER(dev_priv) >= 11)
                intel_get_transcoder_timings(crtc, pipe_config);
@@ -4908,6 +4890,28 @@ static bool needs_scaling(const struct intel_plane_state *state)
        return (src_w != dst_w || src_h != dst_h);
 }
 
+static bool intel_plane_do_async_flip(struct intel_plane *plane,
+                                     const struct intel_crtc_state *old_crtc_state,
+                                     const struct intel_crtc_state *new_crtc_state)
+{
+       struct drm_i915_private *i915 = to_i915(plane->base.dev);
+
+       if (!plane->async_flip)
+               return false;
+
+       if (!new_crtc_state->uapi.async_flip)
+               return false;
+
+       /*
+        * In platforms after DISPLAY13, we might need to override
+        * first async flip in order to change watermark levels
+        * as part of optimization.
+        * So for those, we are checking if this is a first async flip.
+        * For platforms earlier than DISPLAY13 we always do async flip.
+        */
+       return DISPLAY_VER(i915) < 13 || old_crtc_state->uapi.async_flip;
+}
+
 int intel_plane_atomic_calc_changes(const struct intel_crtc_state *old_crtc_state,
                                    struct intel_crtc_state *new_crtc_state,
                                    const struct intel_plane_state *old_plane_state,
@@ -5027,6 +5031,9 @@ int intel_plane_atomic_calc_changes(const struct intel_crtc_state *old_crtc_stat
                         needs_scaling(new_plane_state))))
                new_crtc_state->disable_lp_wm = true;
 
+       if (intel_plane_do_async_flip(plane, old_crtc_state, new_crtc_state))
+               new_plane_state->do_async_flip = true;
+
        return 0;
 }
 
@@ -5491,9 +5498,9 @@ intel_dump_m_n_config(const struct intel_crtc_state *pipe_config,
        struct drm_i915_private *i915 = to_i915(pipe_config->uapi.crtc->dev);
 
        drm_dbg_kms(&i915->drm,
-                   "%s: lanes: %i; gmch_m: %u, gmch_n: %u, link_m: %u, link_n: %u, tu: %u\n",
+                   "%s: lanes: %i; data_m: %u, data_n: %u, link_m: %u, link_n: %u, tu: %u\n",
                    id, lane_count,
-                   m_n->gmch_m, m_n->gmch_n,
+                   m_n->data_m, m_n->data_n,
                    m_n->link_m, m_n->link_n, m_n->tu);
 }
 
@@ -6189,8 +6196,8 @@ intel_compare_link_m_n(const struct intel_link_m_n *m_n,
                       bool exact)
 {
        return m_n->tu == m2_n2->tu &&
-               intel_compare_m_n(m_n->gmch_m, m_n->gmch_n,
-                                 m2_n2->gmch_m, m2_n2->gmch_n, exact) &&
+               intel_compare_m_n(m_n->data_m, m_n->data_n,
+                                 m2_n2->data_m, m2_n2->data_n, exact) &&
                intel_compare_m_n(m_n->link_m, m_n->link_n,
                                  m2_n2->link_m, m2_n2->link_n, exact);
 }
@@ -6389,16 +6396,16 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
                                    &pipe_config->name,\
                                    !fastset)) { \
                pipe_config_mismatch(fastset, crtc, __stringify(name), \
-                                    "(expected tu %i gmch %i/%i link %i/%i, " \
-                                    "found tu %i, gmch %i/%i link %i/%i)", \
+                                    "(expected tu %i data %i/%i link %i/%i, " \
+                                    "found tu %i, data %i/%i link %i/%i)", \
                                     current_config->name.tu, \
-                                    current_config->name.gmch_m, \
-                                    current_config->name.gmch_n, \
+                                    current_config->name.data_m, \
+                                    current_config->name.data_n, \
                                     current_config->name.link_m, \
                                     current_config->name.link_n, \
                                     pipe_config->name.tu, \
-                                    pipe_config->name.gmch_m, \
-                                    pipe_config->name.gmch_n, \
+                                    pipe_config->name.data_m, \
+                                    pipe_config->name.data_n, \
                                     pipe_config->name.link_m, \
                                     pipe_config->name.link_n); \
                ret = false; \
@@ -6416,22 +6423,22 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
            !intel_compare_link_m_n(&current_config->alt_name, \
                                    &pipe_config->name, !fastset)) { \
                pipe_config_mismatch(fastset, crtc, __stringify(name), \
-                                    "(expected tu %i gmch %i/%i link %i/%i, " \
-                                    "or tu %i gmch %i/%i link %i/%i, " \
-                                    "found tu %i, gmch %i/%i link %i/%i)", \
+                                    "(expected tu %i data %i/%i link %i/%i, " \
+                                    "or tu %i data %i/%i link %i/%i, " \
+                                    "found tu %i, data %i/%i link %i/%i)", \
                                     current_config->name.tu, \
-                                    current_config->name.gmch_m, \
-                                    current_config->name.gmch_n, \
+                                    current_config->name.data_m, \
+                                    current_config->name.data_n, \
                                     current_config->name.link_m, \
                                     current_config->name.link_n, \
                                     current_config->alt_name.tu, \
-                                    current_config->alt_name.gmch_m, \
-                                    current_config->alt_name.gmch_n, \
+                                    current_config->alt_name.data_m, \
+                                    current_config->alt_name.data_n, \
                                     current_config->alt_name.link_m, \
                                     current_config->alt_name.link_n, \
                                     pipe_config->name.tu, \
-                                    pipe_config->name.gmch_m, \
-                                    pipe_config->name.gmch_n, \
+                                    pipe_config->name.data_m, \
+                                    pipe_config->name.data_n, \
                                     pipe_config->name.link_m, \
                                     pipe_config->name.link_n); \
                ret = false; \
@@ -7600,6 +7607,7 @@ static int intel_atomic_check_bigjoiner(struct intel_atomic_state *state,
                                        struct intel_crtc_state *old_crtc_state,
                                        struct intel_crtc_state *new_crtc_state)
 {
+       struct drm_i915_private *i915 = to_i915(state->base.dev);
        struct intel_crtc_state *slave_crtc_state, *master_crtc_state;
        struct intel_crtc *slave_crtc, *master_crtc;
 
@@ -7617,9 +7625,10 @@ static int intel_atomic_check_bigjoiner(struct intel_atomic_state *state,
 
        slave_crtc = intel_dsc_get_bigjoiner_secondary(crtc);
        if (!slave_crtc) {
-               DRM_DEBUG_KMS("[CRTC:%d:%s] Big joiner configuration requires "
-                             "CRTC + 1 to be used, doesn't exist\n",
-                             crtc->base.base.id, crtc->base.name);
+               drm_dbg_kms(&i915->drm,
+                           "[CRTC:%d:%s] Big joiner configuration requires "
+                           "CRTC + 1 to be used, doesn't exist\n",
+                           crtc->base.base.id, crtc->base.name);
                return -EINVAL;
        }
 
@@ -7633,16 +7642,18 @@ static int intel_atomic_check_bigjoiner(struct intel_atomic_state *state,
        if (slave_crtc_state->uapi.enable)
                goto claimed;
 
-       DRM_DEBUG_KMS("[CRTC:%d:%s] Used as slave for big joiner\n",
-                     slave_crtc->base.base.id, slave_crtc->base.name);
+       drm_dbg_kms(&i915->drm,
+                   "[CRTC:%d:%s] Used as slave for big joiner\n",
+                   slave_crtc->base.base.id, slave_crtc->base.name);
 
        return copy_bigjoiner_crtc_state(slave_crtc_state, new_crtc_state);
 
 claimed:
-       DRM_DEBUG_KMS("[CRTC:%d:%s] Slave is enabled as normal CRTC, but "
-                     "[CRTC:%d:%s] claiming this CRTC for bigjoiner.\n",
-                     slave_crtc->base.base.id, slave_crtc->base.name,
-                     master_crtc->base.base.id, master_crtc->base.name);
+       drm_dbg_kms(&i915->drm,
+                   "[CRTC:%d:%s] Slave is enabled as normal CRTC, but "
+                   "[CRTC:%d:%s] claiming this CRTC for bigjoiner.\n",
+                   slave_crtc->base.base.id, slave_crtc->base.name,
+                   master_crtc->base.base.id, master_crtc->base.name);
        return -EINVAL;
 }
 
@@ -9478,7 +9489,7 @@ void intel_modeset_init_hw(struct drm_i915_private *i915)
        cdclk_state = to_intel_cdclk_state(i915->cdclk.obj.state);
 
        intel_update_cdclk(i915);
-       intel_dump_cdclk_config(&i915->cdclk.hw, "Current CDCLK");
+       intel_cdclk_dump_config(i915, &i915->cdclk.hw, "Current CDCLK");
        cdclk_state->logical = cdclk_state->actual = i915->cdclk.hw;
 }
 
@@ -9980,8 +9991,7 @@ void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe)
                udelay(150); /* wait for warmup */
        }
 
-       intel_de_write(dev_priv, PIPECONF(pipe),
-                      PIPECONF_ENABLE | PIPECONF_PROGRESSIVE);
+       intel_de_write(dev_priv, PIPECONF(pipe), PIPECONF_ENABLE);
        intel_de_posting_read(dev_priv, PIPECONF(pipe));
 
        intel_wait_for_pipe_scanline_moving(crtc);
@@ -9995,18 +10005,15 @@ void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe)
                    pipe_name(pipe));
 
        drm_WARN_ON(&dev_priv->drm,
-                   intel_de_read(dev_priv, DSPCNTR(PLANE_A)) &
-                   DISPLAY_PLANE_ENABLE);
+                   intel_de_read(dev_priv, DSPCNTR(PLANE_A)) & DISP_ENABLE);
        drm_WARN_ON(&dev_priv->drm,
-                   intel_de_read(dev_priv, DSPCNTR(PLANE_B)) &
-                   DISPLAY_PLANE_ENABLE);
+                   intel_de_read(dev_priv, DSPCNTR(PLANE_B)) & DISP_ENABLE);
        drm_WARN_ON(&dev_priv->drm,
-                   intel_de_read(dev_priv, DSPCNTR(PLANE_C)) &
-                   DISPLAY_PLANE_ENABLE);
+                   intel_de_read(dev_priv, DSPCNTR(PLANE_C)) & DISP_ENABLE);
        drm_WARN_ON(&dev_priv->drm,
-                   intel_de_read(dev_priv, CURCNTR(PIPE_A)) & MCURSOR_MODE);
+                   intel_de_read(dev_priv, CURCNTR(PIPE_A)) & MCURSOR_MODE_MASK);
        drm_WARN_ON(&dev_priv->drm,
-                   intel_de_read(dev_priv, CURCNTR(PIPE_B)) & MCURSOR_MODE);
+                   intel_de_read(dev_priv, CURCNTR(PIPE_B)) & MCURSOR_MODE_MASK);
 
        intel_de_write(dev_priv, PIPECONF(pipe), 0);
        intel_de_posting_read(dev_priv, PIPECONF(pipe));