This deletes some code and is closer to what the logic will look like
with atomic mode setting.

Signed-off-by: Ander Conselvan de Oliveira 
<ander.conselvan.de.olive...@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 58 ++++++++----------------------------
 1 file changed, 12 insertions(+), 46 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index fecffbb..96176c1 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3963,46 +3963,11 @@ found:
        return pll;
 }
 
-/**
- * intel_shared_dpll_start_config - start a new PLL staged config
- * @dev_priv: DRM device
- * @clear_pipes: mask of pipes that will have their PLLs freed
- *
- * Starts a new PLL staged config, copying the current config but
- * releasing the references of pipes specified in clear_pipes.
- */
-static int intel_shared_dpll_start_config(struct drm_i915_private *dev_priv,
-                                         struct intel_atomic_state *state,
-                                         unsigned clear_pipes)
-{
-       struct intel_shared_dpll_config *pll_config;
-       enum intel_dpll_id i;
-
-       /* FIXME: convert this to a simple memdup */
-
-       for (i = 0; i < dev_priv->num_shared_dpll; i++) {
-               pll_config = &dev_priv->display_state->shared_dpll[i];
-
-               memcpy(&state->shared_dpll[i], pll_config,
-                      sizeof *pll_config);
-               state->shared_dpll[i].crtc_mask &= ~clear_pipes;
-       }
-
-       return 0;
-}
-
-static void intel_shared_dpll_commit(struct drm_i915_private *dev_priv,
-                                    struct intel_atomic_state *state)
+static struct intel_atomic_state *
+intel_atomic_state_duplicate(struct drm_i915_private *dev_priv)
 {
-       struct intel_shared_dpll_config *pll_config;
-       enum intel_dpll_id i;
-
-       /* FIXME: convert this to a poiner swap */
-
-       for (i = 0; i < dev_priv->num_shared_dpll; i++) {
-               pll_config = &dev_priv->display_state->shared_dpll[i];
-               *pll_config = state->shared_dpll[i];
-       }
+       return kmemdup(dev_priv->display_state,
+                      sizeof *dev_priv->display_state, GFP_KERNEL);
 }
 
 static void cpt_verify_modeset(struct drm_device *dev, int pipe)
@@ -10405,14 +10370,15 @@ static bool intel_crtc_in_use(struct drm_crtc *crtc)
 
 static void
 intel_modeset_update_state(struct drm_device *dev, unsigned prepare_pipes,
-                          struct intel_atomic_state *state)
+                          struct intel_atomic_state **state)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_encoder *intel_encoder;
        struct intel_crtc *intel_crtc;
        struct drm_connector *connector;
 
-       intel_shared_dpll_commit(dev_priv, state);
+       /* Commit PLL and other global state */
+       swap(dev_priv->display_state, *state);
 
        for_each_intel_encoder(dev, intel_encoder) {
                if (!intel_encoder->base.crtc)
@@ -11020,13 +10986,13 @@ static int __intel_set_mode_setup_plls(struct 
drm_device *dev,
        unsigned clear_pipes = modeset_pipes | disable_pipes;
        struct intel_crtc *intel_crtc;
        int ret = 0;
+       int i;
 
        if (!dev_priv->display.crtc_compute_clock)
                return 0;
 
-       ret = intel_shared_dpll_start_config(dev_priv, state, clear_pipes);
-       if (ret)
-               return ret;
+       for (i = 0; i < dev_priv->num_shared_dpll; i++)
+               state->shared_dpll[i].crtc_mask &= ~clear_pipes;
 
        for_each_intel_crtc_masked(dev, modeset_pipes, intel_crtc) {
                struct intel_crtc_state *crtc_state = intel_crtc->new_config;
@@ -11077,7 +11043,7 @@ static int __intel_set_mode(struct drm_crtc *crtc,
                prepare_pipes &= ~disable_pipes;
        }
 
-       state = kzalloc(sizeof *state, GFP_KERNEL);
+       state = intel_atomic_state_duplicate(dev_priv);
        if (!state) {
                ret = -ENOMEM;
                goto done;
@@ -11120,7 +11086,7 @@ static int __intel_set_mode(struct drm_crtc *crtc,
 
        /* Only after disabling all output pipelines that will be changed can we
         * update the the output configuration. */
-       intel_modeset_update_state(dev, prepare_pipes, state);
+       intel_modeset_update_state(dev, prepare_pipes, &state);
 
        modeset_update_crtc_power_domains(dev);
 
-- 
2.1.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to