On Wed, 24 Sep 2025, Ville Syrjala <ville.syrj...@linux.intel.com> wrote: > 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))
Both have old_cdclk_state, making this always true. Side note, perhaps the whole function should be renamed dg2_cdclk_pcode_pre_notify(), because the additional dg2 check in dg2_power_well_count() felt weird until I realized this is all dg2 only. BR, Jani. > 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) -- Jani Nikula, Intel