drm/i915: Introduce intel_crtc_state_alloc()
diff mbox series

Message ID 20191219111430.17527-1-ville.syrjala@linux.intel.com
State New
Headers show
Series
  • drm/i915: Introduce intel_crtc_state_alloc()
Related show

Commit Message

Ville Syrjälä Dec. 19, 2019, 11:14 a.m. UTC
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(-)

Comments

José Roberto de Souza Dec. 19, 2019, 4:53 p.m. UTC | #1
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;
>

Patch
diff mbox series

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;