From: Ville Syrjälä <ville.syrj...@linux.intel.com>

Extract the code to determine the DG2 pipe power well count
into a small helper. I'll have other uses for this later.

TODO: need to move this power well stuff out from the cdclk code...

v2: Don't lose the early return from intel_cdclk_pcode_pre_notify()
    (kernel test robot)

Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_cdclk.c | 33 +++++++++++++---------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c 
b/drivers/gpu/drm/i915/display/intel_cdclk.c
index 05d9f488895e..f190cfb85a34 100644
--- a/drivers/gpu/drm/i915/display/intel_cdclk.c
+++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
@@ -2591,6 +2591,12 @@ static void intel_set_cdclk(struct intel_display 
*display,
        }
 }
 
+static bool dg2_power_well_count(struct intel_display *display,
+                                const struct intel_cdclk_state *cdclk_state)
+{
+       return display->platform.dg2 ? hweight8(cdclk_state->active_pipes) : 0;
+}
+
 static void intel_cdclk_pcode_pre_notify(struct intel_atomic_state *state)
 {
        struct intel_display *display = to_intel_display(state);
@@ -2603,16 +2609,16 @@ static void intel_cdclk_pcode_pre_notify(struct 
intel_atomic_state *state)
 
        if (!intel_cdclk_changed(&old_cdclk_state->actual,
                                 &new_cdclk_state->actual) &&
-                                new_cdclk_state->active_pipes ==
-                                old_cdclk_state->active_pipes)
+           dg2_power_well_count(display, old_cdclk_state) ==
+           dg2_power_well_count(display, old_cdclk_state))
                return;
 
        /* According to "Sequence Before Frequency Change", voltage level set 
to 0x3 */
        voltage_level = DISPLAY_TO_PCODE_VOLTAGE_MAX;
 
        change_cdclk = new_cdclk_state->actual.cdclk != 
old_cdclk_state->actual.cdclk;
-       update_pipe_count = hweight8(new_cdclk_state->active_pipes) >
-                           hweight8(old_cdclk_state->active_pipes);
+       update_pipe_count = dg2_power_well_count(display, new_cdclk_state) >
+               dg2_power_well_count(display, old_cdclk_state);
 
        /*
         * According to "Sequence Before Frequency Change",
@@ -2630,7 +2636,7 @@ static void intel_cdclk_pcode_pre_notify(struct 
intel_atomic_state *state)
         * no action if it is decreasing, before the change
         */
        if (update_pipe_count)
-               num_active_pipes = hweight8(new_cdclk_state->active_pipes);
+               num_active_pipes = dg2_power_well_count(display, 
new_cdclk_state);
 
        intel_pcode_notify(display, voltage_level, num_active_pipes, cdclk,
                           change_cdclk, update_pipe_count);
@@ -2650,8 +2656,8 @@ static void intel_cdclk_pcode_post_notify(struct 
intel_atomic_state *state)
        voltage_level = new_cdclk_state->actual.voltage_level;
 
        update_cdclk = new_cdclk_state->actual.cdclk != 
old_cdclk_state->actual.cdclk;
-       update_pipe_count = hweight8(new_cdclk_state->active_pipes) <
-                           hweight8(old_cdclk_state->active_pipes);
+       update_pipe_count = dg2_power_well_count(display, new_cdclk_state) <
+               dg2_power_well_count(display, old_cdclk_state);
 
        /*
         * According to "Sequence After Frequency Change",
@@ -2667,7 +2673,7 @@ static void intel_cdclk_pcode_post_notify(struct 
intel_atomic_state *state)
         * no action if it is increasing, after the change
         */
        if (update_pipe_count)
-               num_active_pipes = hweight8(new_cdclk_state->active_pipes);
+               num_active_pipes = dg2_power_well_count(display, 
new_cdclk_state);
 
        intel_pcode_notify(display, voltage_level, num_active_pipes, cdclk,
                           update_cdclk, update_pipe_count);
@@ -3248,15 +3254,14 @@ static bool intel_cdclk_need_serialize(struct 
intel_display *display,
                                       const struct intel_cdclk_state 
*old_cdclk_state,
                                       const struct intel_cdclk_state 
*new_cdclk_state)
 {
-       bool power_well_cnt_changed = hweight8(old_cdclk_state->active_pipes) !=
-                                     hweight8(new_cdclk_state->active_pipes);
-       bool cdclk_changed = intel_cdclk_changed(&old_cdclk_state->actual,
-                                                &new_cdclk_state->actual);
        /*
-        * We need to poke hw for gen >= 12, because we notify PCode if
+        * We need to poke hw for DG2, because we notify PCode if
         * pipe power well count changes.
         */
-       return cdclk_changed || (display->platform.dg2 && 
power_well_cnt_changed);
+       return intel_cdclk_changed(&old_cdclk_state->actual,
+                                  &new_cdclk_state->actual) ||
+               dg2_power_well_count(display, old_cdclk_state) !=
+               dg2_power_well_count(display, new_cdclk_state);
 }
 
 int intel_modeset_calc_cdclk(struct intel_atomic_state *state)
-- 
2.49.1

Reply via email to