Message ID | 20191219111430.17527-1-ville.syrjala@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915: Introduce intel_crtc_state_alloc() | expand |
On Thu, 2019-12-19 at 13:14 +0200, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > We have several places where we want to allocate a pristine > crtc state. Some of those currently call intel_crtc_state_reset() > to properly initialize all the non-zero defaults in the state, but > some places do not. Let's add intel_crtc_state_alloc() to do both > the alloc and the reset, and call that everywhere we need a fresh > crtc state. > > Cc: José Roberto de Souza <jose.souza@intel.com> > Cc: Manasi Navare <manasi.d.navare@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/display/intel_display.c | 30 +++++++++++++----- > -- > 1 file changed, 19 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > b/drivers/gpu/drm/i915/display/intel_display.c > index 25af0ffe1c3a..fe7453afafbf 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -168,6 +168,7 @@ static void skylake_pfit_enable(const struct > intel_crtc_state *crtc_state); > static void ironlake_pfit_enable(const struct intel_crtc_state > *crtc_state); > static void intel_modeset_setup_hw_state(struct drm_device *dev, > struct drm_modeset_acquire_ctx > *ctx); > +static struct intel_crtc_state *intel_crtc_state_alloc(struct > intel_crtc *crtc); > > struct intel_limit { > struct { > @@ -8054,11 +8055,10 @@ int vlv_force_pll_on(struct drm_i915_private > *dev_priv, enum pipe pipe, > struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, > pipe); > struct intel_crtc_state *pipe_config; > > - pipe_config = kzalloc(sizeof(*pipe_config), GFP_KERNEL); > + pipe_config = intel_crtc_state_alloc(crtc); > if (!pipe_config) > return -ENOMEM; > > - pipe_config->uapi.crtc = &crtc->base; > pipe_config->cpu_transcoder = (enum transcoder)pipe; > pipe_config->pixel_multiplier = 1; > pipe_config->dpll = *dpll; > @@ -11649,6 +11649,18 @@ static void intel_crtc_state_reset(struct > intel_crtc_state *crtc_state, > crtc_state->scaler_state.scaler_id = -1; > } > > +static struct intel_crtc_state *intel_crtc_state_alloc(struct > intel_crtc *crtc) > +{ > + struct intel_crtc_state *crtc_state; > + > + crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); Minor but maybe change to kmalloc() as intel_crtc_state_reset() will memset crtc_state to 0. Will leave to you to decide. Reviewed-by: José Roberto de Souza <jose.souza@intel.com> > + > + if (crtc_state) > + intel_crtc_state_reset(crtc_state, crtc); > + > + return crtc_state; > +} > + > /* Returns the currently programmed mode of the given encoder. */ > struct drm_display_mode * > intel_encoder_current_mode(struct intel_encoder *encoder) > @@ -11668,14 +11680,12 @@ intel_encoder_current_mode(struct > intel_encoder *encoder) > if (!mode) > return NULL; > > - crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); > + crtc_state = intel_crtc_state_alloc(crtc); > if (!crtc_state) { > kfree(mode); > return NULL; > } > > - intel_crtc_state_reset(crtc_state, crtc); > - > if (!dev_priv->display.get_pipe_config(crtc, crtc_state)) { > kfree(crtc_state); > kfree(mode); > @@ -12612,11 +12622,11 @@ static void > intel_crtc_copy_hw_to_uapi_state(struct intel_crtc_state *crtc_state > static int > intel_crtc_prepare_cleared_state(struct intel_crtc_state > *crtc_state) > { > - struct drm_i915_private *dev_priv = > - to_i915(crtc_state->uapi.crtc->dev); > + struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > struct intel_crtc_state *saved_state; > > - saved_state = kzalloc(sizeof(*saved_state), GFP_KERNEL); > + saved_state = intel_crtc_state_alloc(crtc); > if (!saved_state) > return -ENOMEM; > > @@ -15737,14 +15747,12 @@ static struct intel_crtc > *intel_crtc_alloc(void) > if (!crtc) > return ERR_PTR(-ENOMEM); > > - crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); > + crtc_state = intel_crtc_state_alloc(crtc); > if (!crtc_state) { > kfree(crtc); > return ERR_PTR(-ENOMEM); > } > > - intel_crtc_state_reset(crtc_state, crtc); > - > crtc->base.state = &crtc_state->uapi; > crtc->config = crtc_state; >
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 25af0ffe1c3a..fe7453afafbf 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -168,6 +168,7 @@ static void skylake_pfit_enable(const struct intel_crtc_state *crtc_state); static void ironlake_pfit_enable(const struct intel_crtc_state *crtc_state); static void intel_modeset_setup_hw_state(struct drm_device *dev, struct drm_modeset_acquire_ctx *ctx); +static struct intel_crtc_state *intel_crtc_state_alloc(struct intel_crtc *crtc); struct intel_limit { struct { @@ -8054,11 +8055,10 @@ int vlv_force_pll_on(struct drm_i915_private *dev_priv, enum pipe pipe, struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); struct intel_crtc_state *pipe_config; - pipe_config = kzalloc(sizeof(*pipe_config), GFP_KERNEL); + pipe_config = intel_crtc_state_alloc(crtc); if (!pipe_config) return -ENOMEM; - pipe_config->uapi.crtc = &crtc->base; pipe_config->cpu_transcoder = (enum transcoder)pipe; pipe_config->pixel_multiplier = 1; pipe_config->dpll = *dpll; @@ -11649,6 +11649,18 @@ static void intel_crtc_state_reset(struct intel_crtc_state *crtc_state, crtc_state->scaler_state.scaler_id = -1; } +static struct intel_crtc_state *intel_crtc_state_alloc(struct intel_crtc *crtc) +{ + struct intel_crtc_state *crtc_state; + + crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); + + if (crtc_state) + intel_crtc_state_reset(crtc_state, crtc); + + return crtc_state; +} + /* Returns the currently programmed mode of the given encoder. */ struct drm_display_mode * intel_encoder_current_mode(struct intel_encoder *encoder) @@ -11668,14 +11680,12 @@ intel_encoder_current_mode(struct intel_encoder *encoder) if (!mode) return NULL; - crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); + crtc_state = intel_crtc_state_alloc(crtc); if (!crtc_state) { kfree(mode); return NULL; } - intel_crtc_state_reset(crtc_state, crtc); - if (!dev_priv->display.get_pipe_config(crtc, crtc_state)) { kfree(crtc_state); kfree(mode); @@ -12612,11 +12622,11 @@ static void intel_crtc_copy_hw_to_uapi_state(struct intel_crtc_state *crtc_state static int intel_crtc_prepare_cleared_state(struct intel_crtc_state *crtc_state) { - struct drm_i915_private *dev_priv = - to_i915(crtc_state->uapi.crtc->dev); + struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); struct intel_crtc_state *saved_state; - saved_state = kzalloc(sizeof(*saved_state), GFP_KERNEL); + saved_state = intel_crtc_state_alloc(crtc); if (!saved_state) return -ENOMEM; @@ -15737,14 +15747,12 @@ static struct intel_crtc *intel_crtc_alloc(void) if (!crtc) return ERR_PTR(-ENOMEM); - crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); + crtc_state = intel_crtc_state_alloc(crtc); if (!crtc_state) { kfree(crtc); return ERR_PTR(-ENOMEM); } - intel_crtc_state_reset(crtc_state, crtc); - crtc->base.state = &crtc_state->uapi; crtc->config = crtc_state;