Message ID | 20240528184945.24083-1-ville.syrjala@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] drm/i915/cdclk: Plumb the full atomic state deeper | expand |
On Tue, 28 May 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Various parts of the cdclk code need access the full atomic > state. Currently it's being dug out via the cdclk_state->base.state > pointer, which is not great as that pointer isn't always valid. > Instead plumb the full atomic state from the top so that it's > clear that it is in fact valid. > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/display/intel_cdclk.c | 60 +++++++++++++--------- > 1 file changed, 35 insertions(+), 25 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c b/drivers/gpu/drm/i915/display/intel_cdclk.c > index b78154c82a71..7ef8dcb1601a 100644 > --- a/drivers/gpu/drm/i915/display/intel_cdclk.c > +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c > @@ -113,7 +113,7 @@ struct intel_cdclk_funcs { > void (*set_cdclk)(struct drm_i915_private *i915, > const struct intel_cdclk_config *cdclk_config, > enum pipe pipe); > - int (*modeset_calc_cdclk)(struct intel_cdclk_state *state); > + int (*modeset_calc_cdclk)(struct intel_atomic_state *state); > u8 (*calc_voltage_level)(int cdclk); > }; > > @@ -130,10 +130,11 @@ static void intel_cdclk_set_cdclk(struct drm_i915_private *dev_priv, > dev_priv->display.funcs.cdclk->set_cdclk(dev_priv, cdclk_config, pipe); > } > > -static int intel_cdclk_modeset_calc_cdclk(struct drm_i915_private *dev_priv, > - struct intel_cdclk_state *cdclk_config) > +static int intel_cdclk_modeset_calc_cdclk(struct intel_atomic_state *state) > { > - return dev_priv->display.funcs.cdclk->modeset_calc_cdclk(cdclk_config); > + struct drm_i915_private *dev_priv = to_i915(state->base.dev); > + > + return dev_priv->display.funcs.cdclk->modeset_calc_cdclk(state); The dev_priv is an eyesore. Could already start doing: const struct intel_display *display = to_intel_display(state->base.dev); return display->funcs.cdclk->modeset_calc_cdclk(state); And if you wanted to, could also make to_intel_display() handle struct intel_atomic_state so it would only need to_intel_display(state). Regardless, Reviewed-by: Jani Nikula <jani.nikula@intel.com> > } > > static u8 intel_cdclk_calc_voltage_level(struct drm_i915_private *dev_priv, > @@ -2834,10 +2835,11 @@ int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state) > return min_cdclk; > } > > -static int intel_compute_min_cdclk(struct intel_cdclk_state *cdclk_state) > +static int intel_compute_min_cdclk(struct intel_atomic_state *state) > { > - struct intel_atomic_state *state = cdclk_state->base.state; > struct drm_i915_private *dev_priv = to_i915(state->base.dev); > + struct intel_cdclk_state *cdclk_state = > + intel_atomic_get_new_cdclk_state(state); > const struct intel_bw_state *bw_state; > struct intel_crtc *crtc; > struct intel_crtc_state *crtc_state; > @@ -2916,10 +2918,11 @@ static int intel_compute_min_cdclk(struct intel_cdclk_state *cdclk_state) > * future platforms this code will need to be > * adjusted. > */ > -static int bxt_compute_min_voltage_level(struct intel_cdclk_state *cdclk_state) > +static int bxt_compute_min_voltage_level(struct intel_atomic_state *state) > { > - struct intel_atomic_state *state = cdclk_state->base.state; > struct drm_i915_private *dev_priv = to_i915(state->base.dev); > + struct intel_cdclk_state *cdclk_state = > + intel_atomic_get_new_cdclk_state(state); > struct intel_crtc *crtc; > struct intel_crtc_state *crtc_state; > u8 min_voltage_level; > @@ -2952,13 +2955,14 @@ static int bxt_compute_min_voltage_level(struct intel_cdclk_state *cdclk_state) > return min_voltage_level; > } > > -static int vlv_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > +static int vlv_modeset_calc_cdclk(struct intel_atomic_state *state) > { > - struct intel_atomic_state *state = cdclk_state->base.state; > struct drm_i915_private *dev_priv = to_i915(state->base.dev); > + struct intel_cdclk_state *cdclk_state = > + intel_atomic_get_new_cdclk_state(state); > int min_cdclk, cdclk; > > - min_cdclk = intel_compute_min_cdclk(cdclk_state); > + min_cdclk = intel_compute_min_cdclk(state); > if (min_cdclk < 0) > return min_cdclk; > > @@ -2981,11 +2985,13 @@ static int vlv_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > return 0; > } > > -static int bdw_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > +static int bdw_modeset_calc_cdclk(struct intel_atomic_state *state) > { > + struct intel_cdclk_state *cdclk_state = > + intel_atomic_get_new_cdclk_state(state); > int min_cdclk, cdclk; > > - min_cdclk = intel_compute_min_cdclk(cdclk_state); > + min_cdclk = intel_compute_min_cdclk(state); > if (min_cdclk < 0) > return min_cdclk; > > @@ -3008,10 +3014,11 @@ static int bdw_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > return 0; > } > > -static int skl_dpll0_vco(struct intel_cdclk_state *cdclk_state) > +static int skl_dpll0_vco(struct intel_atomic_state *state) > { > - struct intel_atomic_state *state = cdclk_state->base.state; > struct drm_i915_private *dev_priv = to_i915(state->base.dev); > + struct intel_cdclk_state *cdclk_state = > + intel_atomic_get_new_cdclk_state(state); > struct intel_crtc *crtc; > struct intel_crtc_state *crtc_state; > int vco, i; > @@ -3045,15 +3052,17 @@ static int skl_dpll0_vco(struct intel_cdclk_state *cdclk_state) > return vco; > } > > -static int skl_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > +static int skl_modeset_calc_cdclk(struct intel_atomic_state *state) > { > + struct intel_cdclk_state *cdclk_state = > + intel_atomic_get_new_cdclk_state(state); > int min_cdclk, cdclk, vco; > > - min_cdclk = intel_compute_min_cdclk(cdclk_state); > + min_cdclk = intel_compute_min_cdclk(state); > if (min_cdclk < 0) > return min_cdclk; > > - vco = skl_dpll0_vco(cdclk_state); > + vco = skl_dpll0_vco(state); > > cdclk = skl_calc_cdclk(min_cdclk, vco); > > @@ -3076,17 +3085,18 @@ static int skl_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > return 0; > } > > -static int bxt_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > +static int bxt_modeset_calc_cdclk(struct intel_atomic_state *state) > { > - struct intel_atomic_state *state = cdclk_state->base.state; > struct drm_i915_private *dev_priv = to_i915(state->base.dev); > + struct intel_cdclk_state *cdclk_state = > + intel_atomic_get_new_cdclk_state(state); > int min_cdclk, min_voltage_level, cdclk, vco; > > - min_cdclk = intel_compute_min_cdclk(cdclk_state); > + min_cdclk = intel_compute_min_cdclk(state); > if (min_cdclk < 0) > return min_cdclk; > > - min_voltage_level = bxt_compute_min_voltage_level(cdclk_state); > + min_voltage_level = bxt_compute_min_voltage_level(state); > if (min_voltage_level < 0) > return min_voltage_level; > > @@ -3114,7 +3124,7 @@ static int bxt_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > return 0; > } > > -static int fixed_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > +static int fixed_modeset_calc_cdclk(struct intel_atomic_state *state) > { > int min_cdclk; > > @@ -3123,7 +3133,7 @@ static int fixed_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) > * check that the required minimum frequency doesn't exceed > * the actual cdclk frequency. > */ > - min_cdclk = intel_compute_min_cdclk(cdclk_state); > + min_cdclk = intel_compute_min_cdclk(state); > if (min_cdclk < 0) > return min_cdclk; > > @@ -3263,7 +3273,7 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state) > new_cdclk_state->active_pipes = > intel_calc_active_pipes(state, old_cdclk_state->active_pipes); > > - ret = intel_cdclk_modeset_calc_cdclk(dev_priv, new_cdclk_state); > + ret = intel_cdclk_modeset_calc_cdclk(state); > if (ret) > return ret;
diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c b/drivers/gpu/drm/i915/display/intel_cdclk.c index b78154c82a71..7ef8dcb1601a 100644 --- a/drivers/gpu/drm/i915/display/intel_cdclk.c +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c @@ -113,7 +113,7 @@ struct intel_cdclk_funcs { void (*set_cdclk)(struct drm_i915_private *i915, const struct intel_cdclk_config *cdclk_config, enum pipe pipe); - int (*modeset_calc_cdclk)(struct intel_cdclk_state *state); + int (*modeset_calc_cdclk)(struct intel_atomic_state *state); u8 (*calc_voltage_level)(int cdclk); }; @@ -130,10 +130,11 @@ static void intel_cdclk_set_cdclk(struct drm_i915_private *dev_priv, dev_priv->display.funcs.cdclk->set_cdclk(dev_priv, cdclk_config, pipe); } -static int intel_cdclk_modeset_calc_cdclk(struct drm_i915_private *dev_priv, - struct intel_cdclk_state *cdclk_config) +static int intel_cdclk_modeset_calc_cdclk(struct intel_atomic_state *state) { - return dev_priv->display.funcs.cdclk->modeset_calc_cdclk(cdclk_config); + struct drm_i915_private *dev_priv = to_i915(state->base.dev); + + return dev_priv->display.funcs.cdclk->modeset_calc_cdclk(state); } static u8 intel_cdclk_calc_voltage_level(struct drm_i915_private *dev_priv, @@ -2834,10 +2835,11 @@ int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state) return min_cdclk; } -static int intel_compute_min_cdclk(struct intel_cdclk_state *cdclk_state) +static int intel_compute_min_cdclk(struct intel_atomic_state *state) { - struct intel_atomic_state *state = cdclk_state->base.state; struct drm_i915_private *dev_priv = to_i915(state->base.dev); + struct intel_cdclk_state *cdclk_state = + intel_atomic_get_new_cdclk_state(state); const struct intel_bw_state *bw_state; struct intel_crtc *crtc; struct intel_crtc_state *crtc_state; @@ -2916,10 +2918,11 @@ static int intel_compute_min_cdclk(struct intel_cdclk_state *cdclk_state) * future platforms this code will need to be * adjusted. */ -static int bxt_compute_min_voltage_level(struct intel_cdclk_state *cdclk_state) +static int bxt_compute_min_voltage_level(struct intel_atomic_state *state) { - struct intel_atomic_state *state = cdclk_state->base.state; struct drm_i915_private *dev_priv = to_i915(state->base.dev); + struct intel_cdclk_state *cdclk_state = + intel_atomic_get_new_cdclk_state(state); struct intel_crtc *crtc; struct intel_crtc_state *crtc_state; u8 min_voltage_level; @@ -2952,13 +2955,14 @@ static int bxt_compute_min_voltage_level(struct intel_cdclk_state *cdclk_state) return min_voltage_level; } -static int vlv_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) +static int vlv_modeset_calc_cdclk(struct intel_atomic_state *state) { - struct intel_atomic_state *state = cdclk_state->base.state; struct drm_i915_private *dev_priv = to_i915(state->base.dev); + struct intel_cdclk_state *cdclk_state = + intel_atomic_get_new_cdclk_state(state); int min_cdclk, cdclk; - min_cdclk = intel_compute_min_cdclk(cdclk_state); + min_cdclk = intel_compute_min_cdclk(state); if (min_cdclk < 0) return min_cdclk; @@ -2981,11 +2985,13 @@ static int vlv_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) return 0; } -static int bdw_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) +static int bdw_modeset_calc_cdclk(struct intel_atomic_state *state) { + struct intel_cdclk_state *cdclk_state = + intel_atomic_get_new_cdclk_state(state); int min_cdclk, cdclk; - min_cdclk = intel_compute_min_cdclk(cdclk_state); + min_cdclk = intel_compute_min_cdclk(state); if (min_cdclk < 0) return min_cdclk; @@ -3008,10 +3014,11 @@ static int bdw_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) return 0; } -static int skl_dpll0_vco(struct intel_cdclk_state *cdclk_state) +static int skl_dpll0_vco(struct intel_atomic_state *state) { - struct intel_atomic_state *state = cdclk_state->base.state; struct drm_i915_private *dev_priv = to_i915(state->base.dev); + struct intel_cdclk_state *cdclk_state = + intel_atomic_get_new_cdclk_state(state); struct intel_crtc *crtc; struct intel_crtc_state *crtc_state; int vco, i; @@ -3045,15 +3052,17 @@ static int skl_dpll0_vco(struct intel_cdclk_state *cdclk_state) return vco; } -static int skl_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) +static int skl_modeset_calc_cdclk(struct intel_atomic_state *state) { + struct intel_cdclk_state *cdclk_state = + intel_atomic_get_new_cdclk_state(state); int min_cdclk, cdclk, vco; - min_cdclk = intel_compute_min_cdclk(cdclk_state); + min_cdclk = intel_compute_min_cdclk(state); if (min_cdclk < 0) return min_cdclk; - vco = skl_dpll0_vco(cdclk_state); + vco = skl_dpll0_vco(state); cdclk = skl_calc_cdclk(min_cdclk, vco); @@ -3076,17 +3085,18 @@ static int skl_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) return 0; } -static int bxt_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) +static int bxt_modeset_calc_cdclk(struct intel_atomic_state *state) { - struct intel_atomic_state *state = cdclk_state->base.state; struct drm_i915_private *dev_priv = to_i915(state->base.dev); + struct intel_cdclk_state *cdclk_state = + intel_atomic_get_new_cdclk_state(state); int min_cdclk, min_voltage_level, cdclk, vco; - min_cdclk = intel_compute_min_cdclk(cdclk_state); + min_cdclk = intel_compute_min_cdclk(state); if (min_cdclk < 0) return min_cdclk; - min_voltage_level = bxt_compute_min_voltage_level(cdclk_state); + min_voltage_level = bxt_compute_min_voltage_level(state); if (min_voltage_level < 0) return min_voltage_level; @@ -3114,7 +3124,7 @@ static int bxt_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) return 0; } -static int fixed_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) +static int fixed_modeset_calc_cdclk(struct intel_atomic_state *state) { int min_cdclk; @@ -3123,7 +3133,7 @@ static int fixed_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) * check that the required minimum frequency doesn't exceed * the actual cdclk frequency. */ - min_cdclk = intel_compute_min_cdclk(cdclk_state); + min_cdclk = intel_compute_min_cdclk(state); if (min_cdclk < 0) return min_cdclk; @@ -3263,7 +3273,7 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state) new_cdclk_state->active_pipes = intel_calc_active_pipes(state, old_cdclk_state->active_pipes); - ret = intel_cdclk_modeset_calc_cdclk(dev_priv, new_cdclk_state); + ret = intel_cdclk_modeset_calc_cdclk(state); if (ret) return ret;