From: Ville Syrjälä <[email protected]>

Use explicit old/new states instead of relying on obj->state.

Reviewed-by: Maarten Lankhorst <[email protected]>
Signed-off-by: Ville Syrjälä <[email protected]>
---
 drivers/gpu/drm/i915/i915_drv.h  |  9 +++++++++
 drivers/gpu/drm/i915/intel_drv.h |  8 ++++++++
 drivers/gpu/drm/i915/intel_pm.c  | 30 +++++++++++++++---------------
 3 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 7587ef53026b..1072fbd70eae 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -569,6 +569,15 @@ struct i915_hotplug {
             (__i)++) \
                for_each_if (plane_state)
 
+#define for_each_oldnew_intel_plane_in_state(__state, plane, old_plane_state, 
new_plane_state, __i) \
+       for ((__i) = 0; \
+            (__i) < (__state)->base.dev->mode_config.num_total_plane && \
+                    ((plane) = 
to_intel_plane((__state)->base.planes[__i].ptr), \
+                     (old_plane_state) = 
to_intel_plane_state((__state)->base.planes[__i].old_state), \
+                     (new_plane_state) = 
to_intel_plane_state((__state)->base.planes[__i].new_state), 1); \
+            (__i)++) \
+               for_each_if (plane)
+
 struct drm_i915_private;
 struct i915_mm_struct;
 struct i915_mmu_object;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 9a7c7dd0ea84..e2e9b8215864 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1191,6 +1191,14 @@ hdmi_to_dig_port(struct intel_hdmi *intel_hdmi)
 }
 
 static inline struct intel_crtc_state *
+intel_atomic_get_old_crtc_state(struct intel_atomic_state *state,
+                               struct intel_crtc *crtc)
+{
+       return to_intel_crtc_state(drm_atomic_get_old_crtc_state(&state->base,
+                                                                &crtc->base));
+}
+
+static inline struct intel_crtc_state *
 intel_atomic_get_new_crtc_state(struct intel_atomic_state *state,
                                struct intel_crtc *crtc)
 {
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index d5ff0b9f999f..b9cbc5fec909 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -1322,21 +1322,21 @@ static int g4x_compute_pipe_wm(struct intel_crtc_state 
*crtc_state)
        int num_active_planes = hweight32(crtc_state->active_planes &
                                          ~BIT(PLANE_CURSOR));
        const struct g4x_pipe_wm *raw;
-       struct intel_plane_state *plane_state;
+       const struct intel_plane_state *old_plane_state;
+       const struct intel_plane_state *new_plane_state;
        struct intel_plane *plane;
        enum plane_id plane_id;
        int i, level;
        unsigned int dirty = 0;
 
-       for_each_intel_plane_in_state(state, plane, plane_state, i) {
-               const struct intel_plane_state *old_plane_state =
-                       to_intel_plane_state(plane->base.state);
-
-               if (plane_state->base.crtc != &crtc->base &&
+       for_each_oldnew_intel_plane_in_state(state, plane,
+                                            old_plane_state,
+                                            new_plane_state, i) {
+               if (new_plane_state->base.crtc != &crtc->base &&
                    old_plane_state->base.crtc != &crtc->base)
                        continue;
 
-               if (g4x_raw_plane_wm_compute(crtc_state, plane_state))
+               if (g4x_raw_plane_wm_compute(crtc_state, new_plane_state))
                        dirty |= BIT(plane->id);
        }
 
@@ -1831,21 +1831,21 @@ static int vlv_compute_pipe_wm(struct intel_crtc_state 
*crtc_state)
        int num_active_planes = hweight32(crtc_state->active_planes &
                                          ~BIT(PLANE_CURSOR));
        bool needs_modeset = drm_atomic_crtc_needs_modeset(&crtc_state->base);
-       struct intel_plane_state *plane_state;
+       const struct intel_plane_state *old_plane_state;
+       const struct intel_plane_state *new_plane_state;
        struct intel_plane *plane;
        enum plane_id plane_id;
        int level, ret, i;
        unsigned int dirty = 0;
 
-       for_each_intel_plane_in_state(state, plane, plane_state, i) {
-               const struct intel_plane_state *old_plane_state =
-                       to_intel_plane_state(plane->base.state);
-
-               if (plane_state->base.crtc != &crtc->base &&
+       for_each_oldnew_intel_plane_in_state(state, plane,
+                                            old_plane_state,
+                                            new_plane_state, i) {
+               if (new_plane_state->base.crtc != &crtc->base &&
                    old_plane_state->base.crtc != &crtc->base)
                        continue;
 
-               if (vlv_raw_plane_wm_compute(crtc_state, plane_state))
+               if (vlv_raw_plane_wm_compute(crtc_state, new_plane_state))
                        dirty |= BIT(plane->id);
        }
 
@@ -1864,7 +1864,7 @@ static int vlv_compute_pipe_wm(struct intel_crtc_state 
*crtc_state)
        /* cursor changes don't warrant a FIFO recompute */
        if (dirty & ~BIT(PLANE_CURSOR)) {
                const struct intel_crtc_state *old_crtc_state =
-                       to_intel_crtc_state(crtc->base.state);
+                       intel_atomic_get_old_crtc_state(state, crtc);
                const struct vlv_fifo_state *old_fifo_state =
                        &old_crtc_state->wm.vlv.fifo_state;
 
-- 
2.13.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to