Merge drm/drm-next into drm-intel-next
[linux-2.6-block.git] / drivers / gpu / drm / i915 / display / intel_display.c
index fc5d94862ef320ae018c51d1583f8aa605b18c21..458f010e46f3589f14a74d4df7b9dfa65465ecca 100644 (file)
@@ -164,16 +164,16 @@ static void ilk_pfit_enable(const struct intel_crtc_state *crtc_state);
  */
 void intel_update_watermarks(struct drm_i915_private *dev_priv)
 {
-       if (dev_priv->wm_disp->update_wm)
-               dev_priv->wm_disp->update_wm(dev_priv);
+       if (dev_priv->display.funcs.wm->update_wm)
+               dev_priv->display.funcs.wm->update_wm(dev_priv);
 }
 
 static int intel_compute_pipe_wm(struct intel_atomic_state *state,
                                 struct intel_crtc *crtc)
 {
        struct drm_i915_private *dev_priv = to_i915(state->base.dev);
-       if (dev_priv->wm_disp->compute_pipe_wm)
-               return dev_priv->wm_disp->compute_pipe_wm(state, crtc);
+       if (dev_priv->display.funcs.wm->compute_pipe_wm)
+               return dev_priv->display.funcs.wm->compute_pipe_wm(state, crtc);
        return 0;
 }
 
@@ -181,20 +181,20 @@ static int intel_compute_intermediate_wm(struct intel_atomic_state *state,
                                         struct intel_crtc *crtc)
 {
        struct drm_i915_private *dev_priv = to_i915(state->base.dev);
-       if (!dev_priv->wm_disp->compute_intermediate_wm)
+       if (!dev_priv->display.funcs.wm->compute_intermediate_wm)
                return 0;
        if (drm_WARN_ON(&dev_priv->drm,
-                       !dev_priv->wm_disp->compute_pipe_wm))
+                       !dev_priv->display.funcs.wm->compute_pipe_wm))
                return 0;
-       return dev_priv->wm_disp->compute_intermediate_wm(state, crtc);
+       return dev_priv->display.funcs.wm->compute_intermediate_wm(state, crtc);
 }
 
 static bool intel_initial_watermarks(struct intel_atomic_state *state,
                                     struct intel_crtc *crtc)
 {
        struct drm_i915_private *dev_priv = to_i915(state->base.dev);
-       if (dev_priv->wm_disp->initial_watermarks) {
-               dev_priv->wm_disp->initial_watermarks(state, crtc);
+       if (dev_priv->display.funcs.wm->initial_watermarks) {
+               dev_priv->display.funcs.wm->initial_watermarks(state, crtc);
                return true;
        }
        return false;
@@ -204,23 +204,23 @@ static void intel_atomic_update_watermarks(struct intel_atomic_state *state,
                                           struct intel_crtc *crtc)
 {
        struct drm_i915_private *dev_priv = to_i915(state->base.dev);
-       if (dev_priv->wm_disp->atomic_update_watermarks)
-               dev_priv->wm_disp->atomic_update_watermarks(state, crtc);
+       if (dev_priv->display.funcs.wm->atomic_update_watermarks)
+               dev_priv->display.funcs.wm->atomic_update_watermarks(state, crtc);
 }
 
 static void intel_optimize_watermarks(struct intel_atomic_state *state,
                                      struct intel_crtc *crtc)
 {
        struct drm_i915_private *dev_priv = to_i915(state->base.dev);
-       if (dev_priv->wm_disp->optimize_watermarks)
-               dev_priv->wm_disp->optimize_watermarks(state, crtc);
+       if (dev_priv->display.funcs.wm->optimize_watermarks)
+               dev_priv->display.funcs.wm->optimize_watermarks(state, crtc);
 }
 
 static int intel_compute_global_watermarks(struct intel_atomic_state *state)
 {
        struct drm_i915_private *dev_priv = to_i915(state->base.dev);
-       if (dev_priv->wm_disp->compute_global_watermarks)
-               return dev_priv->wm_disp->compute_global_watermarks(state);
+       if (dev_priv->display.funcs.wm->compute_global_watermarks)
+               return dev_priv->display.funcs.wm->compute_global_watermarks(state);
        return 0;
 }
 
@@ -1487,7 +1487,7 @@ static void intel_encoders_update_prepare(struct intel_atomic_state *state)
         * Make sure the DPLL state is up-to-date for fastset TypeC ports after non-blocking commits.
         * TODO: Update the DPLL state for all cases in the encoder->update_prepare() hook.
         */
-       if (i915->dpll.mgr) {
+       if (i915->display.dpll.mgr) {
                for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
                        if (intel_crtc_needs_modeset(new_crtc_state))
                                continue;
@@ -2081,22 +2081,20 @@ bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
 {
        if (phy == PHY_NONE)
                return false;
-       else if (IS_DG2(dev_priv))
-               /*
-                * DG2 outputs labelled as "combo PHY" in the bspec use
-                * SNPS PHYs with completely different programming,
-                * hence we always return false here.
-                */
-               return false;
        else if (IS_ALDERLAKE_S(dev_priv))
                return phy <= PHY_E;
        else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
                return phy <= PHY_D;
        else if (IS_JSL_EHL(dev_priv))
                return phy <= PHY_C;
-       else if (DISPLAY_VER(dev_priv) >= 11)
+       else if (IS_ALDERLAKE_P(dev_priv) || IS_DISPLAY_VER(dev_priv, 11, 12))
                return phy <= PHY_B;
        else
+               /*
+                * DG2 outputs labelled as "combo PHY" in the bspec use
+                * SNPS PHYs with completely different programming,
+                * hence we always return false here.
+                */
                return false;
 }
 
@@ -2402,7 +2400,7 @@ static void i9xx_crtc_disable(struct intel_atomic_state *state,
        if (DISPLAY_VER(dev_priv) != 2)
                intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
 
-       if (!dev_priv->wm_disp->initial_watermarks)
+       if (!dev_priv->display.funcs.wm->initial_watermarks)
                intel_update_watermarks(dev_priv);
 
        /* clock the pipe down to 640x480@60 to potentially save power */
@@ -4146,7 +4144,7 @@ bool intel_crtc_get_pipe_config(struct intel_crtc_state *crtc_state)
        struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
        struct drm_i915_private *i915 = to_i915(crtc->base.dev);
 
-       if (!i915->display->get_pipe_config(crtc, crtc_state))
+       if (!i915->display.funcs.display->get_pipe_config(crtc, crtc_state))
                return false;
 
        crtc_state->hw.active = true;
@@ -5841,7 +5839,7 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
 
        PIPE_CONF_CHECK_BOOL(double_wide);
 
-       if (dev_priv->dpll.mgr) {
+       if (dev_priv->display.dpll.mgr) {
                PIPE_CONF_CHECK_P(shared_dpll);
 
                PIPE_CONF_CHECK_X(dpll_hw_state.dpll);
@@ -7121,7 +7119,7 @@ static void intel_enable_crtc(struct intel_atomic_state *state,
 
        intel_crtc_update_active_timings(new_crtc_state);
 
-       dev_priv->display->crtc_enable(state, crtc);
+       dev_priv->display.funcs.display->crtc_enable(state, crtc);
 
        if (intel_crtc_is_bigjoiner_slave(new_crtc_state))
                return;
@@ -7200,7 +7198,7 @@ static void intel_old_crtc_state_disables(struct intel_atomic_state *state,
         */
        intel_crtc_disable_pipe_crc(crtc);
 
-       dev_priv->display->crtc_disable(state, crtc);
+       dev_priv->display.funcs.display->crtc_disable(state, crtc);
        crtc->active = false;
        intel_fbc_disable(crtc);
        intel_disable_shared_dpll(old_crtc_state);
@@ -7588,7 +7586,7 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state)
        }
 
        /* Now enable the clocks, plane, pipe, and connectors that we set up. */
-       dev_priv->display->commit_modeset_enables(state);
+       dev_priv->display.funcs.display->commit_modeset_enables(state);
 
        intel_encoders_update_complete(state);
 
@@ -8319,7 +8317,7 @@ static const struct drm_mode_config_funcs intel_mode_funcs = {
        .atomic_state_free = intel_atomic_state_free,
 };
 
-static const struct drm_i915_display_funcs skl_display_funcs = {
+static const struct intel_display_funcs skl_display_funcs = {
        .get_pipe_config = hsw_get_pipe_config,
        .crtc_enable = hsw_crtc_enable,
        .crtc_disable = hsw_crtc_disable,
@@ -8327,7 +8325,7 @@ static const struct drm_i915_display_funcs skl_display_funcs = {
        .get_initial_plane_config = skl_get_initial_plane_config,
 };
 
-static const struct drm_i915_display_funcs ddi_display_funcs = {
+static const struct intel_display_funcs ddi_display_funcs = {
        .get_pipe_config = hsw_get_pipe_config,
        .crtc_enable = hsw_crtc_enable,
        .crtc_disable = hsw_crtc_disable,
@@ -8335,7 +8333,7 @@ static const struct drm_i915_display_funcs ddi_display_funcs = {
        .get_initial_plane_config = i9xx_get_initial_plane_config,
 };
 
-static const struct drm_i915_display_funcs pch_split_display_funcs = {
+static const struct intel_display_funcs pch_split_display_funcs = {
        .get_pipe_config = ilk_get_pipe_config,
        .crtc_enable = ilk_crtc_enable,
        .crtc_disable = ilk_crtc_disable,
@@ -8343,7 +8341,7 @@ static const struct drm_i915_display_funcs pch_split_display_funcs = {
        .get_initial_plane_config = i9xx_get_initial_plane_config,
 };
 
-static const struct drm_i915_display_funcs vlv_display_funcs = {
+static const struct intel_display_funcs vlv_display_funcs = {
        .get_pipe_config = i9xx_get_pipe_config,
        .crtc_enable = valleyview_crtc_enable,
        .crtc_disable = i9xx_crtc_disable,
@@ -8351,7 +8349,7 @@ static const struct drm_i915_display_funcs vlv_display_funcs = {
        .get_initial_plane_config = i9xx_get_initial_plane_config,
 };
 
-static const struct drm_i915_display_funcs i9xx_display_funcs = {
+static const struct intel_display_funcs i9xx_display_funcs = {
        .get_pipe_config = i9xx_get_pipe_config,
        .crtc_enable = i9xx_crtc_enable,
        .crtc_disable = i9xx_crtc_disable,
@@ -8374,16 +8372,16 @@ void intel_init_display_hooks(struct drm_i915_private *dev_priv)
        intel_dpll_init_clock_hook(dev_priv);
 
        if (DISPLAY_VER(dev_priv) >= 9) {
-               dev_priv->display = &skl_display_funcs;
+               dev_priv->display.funcs.display = &skl_display_funcs;
        } else if (HAS_DDI(dev_priv)) {
-               dev_priv->display = &ddi_display_funcs;
+               dev_priv->display.funcs.display = &ddi_display_funcs;
        } else if (HAS_PCH_SPLIT(dev_priv)) {
-               dev_priv->display = &pch_split_display_funcs;
+               dev_priv->display.funcs.display = &pch_split_display_funcs;
        } else if (IS_CHERRYVIEW(dev_priv) ||
                   IS_VALLEYVIEW(dev_priv)) {
-               dev_priv->display = &vlv_display_funcs;
+               dev_priv->display.funcs.display = &vlv_display_funcs;
        } else {
-               dev_priv->display = &i9xx_display_funcs;
+               dev_priv->display.funcs.display = &i9xx_display_funcs;
        }
 
        intel_fdi_init_hook(dev_priv);
@@ -8456,7 +8454,7 @@ static void sanitize_watermarks(struct drm_i915_private *dev_priv)
        int i;
 
        /* Only supported on platforms that use atomic watermark design */
-       if (!dev_priv->wm_disp->optimize_watermarks)
+       if (!dev_priv->display.funcs.wm->optimize_watermarks)
                return;
 
        state = drm_atomic_state_alloc(&dev_priv->drm);
@@ -8687,8 +8685,6 @@ int intel_modeset_init_noirq(struct drm_i915_private *i915)
        i915->flip_wq = alloc_workqueue("i915_flip", WQ_HIGHPRI |
                                        WQ_UNBOUND, WQ_UNBOUND_MAX_ACTIVE);
 
-       i915->window2_delay = 0; /* No DSB so no window2 delay */
-
        intel_mode_config_init(i915);
 
        ret = intel_cdclk_init(i915);