]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/i915: Introduce intel_crtc_readout_derived_state()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 12 Nov 2020 19:17:17 +0000 (21:17 +0200)
committerManasi Navare <manasi.d.navare@intel.com>
Fri, 13 Nov 2020 15:42:32 +0000 (07:42 -0800)
Collect up a bunch of derived state "readout" into
a common helper, which we can call from both
intel_encoder_get_config() and intel_crtc_get_pipe_config().

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Manasi Navare <manasi.d.navare@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201112191718.16683-6-ville.syrjala@linux.intel.com
drivers/gpu/drm/i915/display/intel_display.c

index ebf621ff7ef6f7e237311f332792aad0262b634d..07b8d945c41f535c75ec3d1cdefbe7d7317892ae 100644 (file)
@@ -8162,10 +8162,26 @@ static void intel_crtc_compute_pixel_rate(struct intel_crtc_state *crtc_state)
                        ilk_pipe_pixel_rate(crtc_state);
 }
 
+static void intel_crtc_readout_derived_state(struct intel_crtc_state *crtc_state)
+{
+       struct drm_display_mode *mode = &crtc_state->hw.mode;
+       struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
+
+       intel_mode_from_crtc_timings(adjusted_mode, adjusted_mode);
+
+       intel_crtc_compute_pixel_rate(crtc_state);
+
+       drm_mode_copy(mode, adjusted_mode);
+       mode->hdisplay = crtc_state->pipe_src_w;
+       mode->vdisplay = crtc_state->pipe_src_h;
+}
+
 static void intel_encoder_get_config(struct intel_encoder *encoder,
                                     struct intel_crtc_state *crtc_state)
 {
        encoder->get_config(encoder, crtc_state);
+
+       intel_crtc_readout_derived_state(crtc_state);
 }
 
 static int intel_crtc_compute_config(struct intel_crtc *crtc,
@@ -9046,9 +9062,6 @@ static void intel_get_pipe_src_size(struct intel_crtc *crtc,
        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->hw.mode.vdisplay = pipe_config->pipe_src_h;
-       pipe_config->hw.mode.hdisplay = pipe_config->pipe_src_w;
 }
 
 static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state)
@@ -11417,6 +11430,8 @@ static bool intel_crtc_get_pipe_config(struct intel_crtc_state *crtc_state)
 
        crtc_state->hw.active = true;
 
+       intel_crtc_readout_derived_state(crtc_state);
+
        return true;
 }
 
@@ -14469,8 +14484,6 @@ verify_crtc_state(struct intel_crtc *crtc,
                        intel_encoder_get_config(encoder, pipe_config);
        }
 
-       intel_crtc_compute_pixel_rate(pipe_config);
-
        if (!new_crtc_state->hw.active)
                return;
 
@@ -18839,15 +18852,6 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
                int min_cdclk = 0;
 
                if (crtc_state->hw.active) {
-                       struct drm_display_mode *mode = &crtc_state->hw.mode;
-
-                       intel_mode_from_crtc_timings(&crtc_state->hw.adjusted_mode,
-                                                    &crtc_state->hw.adjusted_mode);
-
-                       *mode = crtc_state->hw.adjusted_mode;
-                       mode->hdisplay = crtc_state->pipe_src_w;
-                       mode->vdisplay = crtc_state->pipe_src_h;
-
                        /*
                         * The initial mode needs to be set in order to keep
                         * the atomic core happy. It wants a valid mode if the
@@ -18859,8 +18863,6 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
                         */
                        crtc_state->inherited = true;
 
-                       intel_crtc_compute_pixel_rate(crtc_state);
-
                        intel_crtc_update_active_timings(crtc_state);
 
                        intel_crtc_copy_hw_to_uapi_state(crtc_state);