diff mbox

[05/21,v2] drm/i915: Initialize skylake scalers

Message ID 1426896282-23215-6-git-send-email-chandra.konduru@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Chandra Konduru March 21, 2015, 12:04 a.m. UTC
Initializing scalers with supported values during crtc init.

v2:
-initialize single copy of min/max values (Matt)

Signed-off-by: Chandra Konduru <chandra.konduru@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c |   53 ++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

Comments

Matt Roper March 25, 2015, 5:14 a.m. UTC | #1
On Fri, Mar 20, 2015 at 05:04:26PM -0700, Chandra Konduru wrote:
> Initializing scalers with supported values during crtc init.
> 
> v2:
> -initialize single copy of min/max values (Matt)
> 
> Signed-off-by: Chandra Konduru <chandra.konduru@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c |   53 ++++++++++++++++++++++++++++++++++
>  1 file changed, 53 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 89299b6..e6ea9e0 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -103,6 +103,8 @@ static void chv_prepare_pll(struct intel_crtc *crtc,
>  			    const struct intel_crtc_state *pipe_config);
>  static void intel_begin_crtc_commit(struct drm_crtc *crtc);
>  static void intel_finish_crtc_commit(struct drm_crtc *crtc);
> +static void skl_init_scalers(struct drm_device *dev, int pipe,
> +	struct intel_crtc_state *crtc_state);
>  
>  static struct intel_encoder *intel_find_encoder(struct intel_connector *connector, int pipe)
>  {
> @@ -12750,6 +12752,54 @@ static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev,
>  	return &cursor->base;
>  }
>  
> +static void skl_init_scalers(struct drm_device *dev, int pipe,
> +	struct intel_crtc_state *crtc_state)
> +{
> +	int i;
> +	struct intel_scaler *intel_scaler;
> +	struct intel_crtc_scaler_state *scaler_state = &crtc_state->scaler_state;
> +	if (INTEL_INFO(dev)->gen < 9)
> +		return;

It's probably better to move this guard out to the callsite so that we
can more easily extend this for future platforms.  Unless you plan to
just extend this function in the future, in which case we should
probably drop the 'skl_' prefix.


Matt

> +
> +	scaler_state->num_scalers = SKL_NUM_SCALERS;
> +	for (i = 0; i < SKL_NUM_SCALERS; i++) {
> +		intel_scaler = &scaler_state->scalers[i];
> +		intel_scaler->in_use = 0;
> +		intel_scaler->id = i;
> +
> +		intel_scaler->mode = PS_SCALER_MODE_DYN;
> +		intel_scaler->filter = PS_FILTER_MEDIUM;
> +	}
> +
> +	/* down scaling ratio: 2.99 --> 1, i.e., 34% of original */
> +	scaler_state->min_hsr = 34;
> +	scaler_state->min_vsr = 34;
> +	scaler_state->max_hsr = 500;
> +	scaler_state->max_vsr = 500;
> +
> +	/* down scaling ratio: 2.99x2.99 --> 1x1, i.e., 12% of original */
> +	scaler_state->min_hvsr = 12;
> +	scaler_state->max_hvsr = 2500;
> +
> +	/* src_w & dst_w range 8 - 4096 */
> +	scaler_state->min_src_w = 8;
> +	scaler_state->max_src_w = 4096;
> +	scaler_state->min_dst_w = 8;
> +	scaler_state->max_dst_w = 4096;
> +
> +	/* src_h & dst_h range 8 - 2304 */
> +	scaler_state->min_src_h = 8;
> +	scaler_state->max_src_h = 2304;
> +	scaler_state->min_dst_h = 8;
> +	scaler_state->max_dst_h = 2304;
> +
> +	/* pipe C has one scaler */
> +	if (pipe == PIPE_C) {
> +		scaler_state->num_scalers = 1;
> +	}
> +	scaler_state->scaler_id = -1;
> +}
> +
>  static void intel_crtc_init(struct drm_device *dev, int pipe)
>  {
>  	struct drm_i915_private *dev_priv = dev->dev_private;
> @@ -12769,6 +12819,9 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
>  	intel_crtc_set_state(intel_crtc, crtc_state);
>  	crtc_state->base.crtc = &intel_crtc->base;
>  
> +	/* initialize shared scalers */
> +	skl_init_scalers(dev, pipe, crtc_state);
> +
>  	primary = intel_primary_plane_create(dev, pipe);
>  	if (!primary)
>  		goto fail;
> -- 
> 1.7.9.5
>
Daniel Vetter March 25, 2015, 1:24 p.m. UTC | #2
On Tue, Mar 24, 2015 at 10:14:01PM -0700, Matt Roper wrote:
> On Fri, Mar 20, 2015 at 05:04:26PM -0700, Chandra Konduru wrote:
> > +static void skl_init_scalers(struct drm_device *dev, int pipe,
> > +	struct intel_crtc_state *crtc_state)
> > +{
> > +	int i;
> > +	struct intel_scaler *intel_scaler;
> > +	struct intel_crtc_scaler_state *scaler_state = &crtc_state->scaler_state;
> > +	if (INTEL_INFO(dev)->gen < 9)
> > +		return;
> 
> It's probably better to move this guard out to the callsite so that we
> can more easily extend this for future platforms.  Unless you plan to
> just extend this function in the future, in which case we should
> probably drop the 'skl_' prefix.

Naming rule is that platform-specific stuff is named with the first
platform codename that uses it. So skl_ is still fine even if we extend
this for bxt or skl+1. intel_ should only be used for truly generic
driver-wide stuff.
-Daniel
Chandra Konduru March 25, 2015, 4:56 p.m. UTC | #3
> -----Original Message-----
> From: Roper, Matthew D
> Sent: Tuesday, March 24, 2015 10:14 PM
> To: Konduru, Chandra
> Cc: intel-gfx@lists.freedesktop.org; Vetter, Daniel; Conselvan De Oliveira, Ander
> Subject: Re: [PATCH 05/21 v2] drm/i915: Initialize skylake scalers
> 
> On Fri, Mar 20, 2015 at 05:04:26PM -0700, Chandra Konduru wrote:
> > Initializing scalers with supported values during crtc init.
> >
> > v2:
> > -initialize single copy of min/max values (Matt)
> >
> > Signed-off-by: Chandra Konduru <chandra.konduru@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_display.c |   53
> ++++++++++++++++++++++++++++++++++
> >  1 file changed, 53 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_display.c
> > b/drivers/gpu/drm/i915/intel_display.c
> > index 89299b6..e6ea9e0 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -103,6 +103,8 @@ static void chv_prepare_pll(struct intel_crtc *crtc,
> >  			    const struct intel_crtc_state *pipe_config);  static
> void
> > intel_begin_crtc_commit(struct drm_crtc *crtc);  static void
> > intel_finish_crtc_commit(struct drm_crtc *crtc);
> > +static void skl_init_scalers(struct drm_device *dev, int pipe,
> > +	struct intel_crtc_state *crtc_state);
> >
> >  static struct intel_encoder *intel_find_encoder(struct
> > intel_connector *connector, int pipe)  { @@ -12750,6 +12752,54 @@
> > static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev,
> >  	return &cursor->base;
> >  }
> >
> > +static void skl_init_scalers(struct drm_device *dev, int pipe,
> > +	struct intel_crtc_state *crtc_state) {
> > +	int i;
> > +	struct intel_scaler *intel_scaler;
> > +	struct intel_crtc_scaler_state *scaler_state = &crtc_state->scaler_state;
> > +	if (INTEL_INFO(dev)->gen < 9)
> > +		return;
> 
> It's probably better to move this guard out to the callsite so that we can more
> easily extend this for future platforms.  Unless you plan to just extend this
> function in the future, in which case we should probably drop the 'skl_' prefix.

That is a slip. Will move the check to callsite and send out update.

> 
> 
> Matt
> 
> > +
> > +	scaler_state->num_scalers = SKL_NUM_SCALERS;
> > +	for (i = 0; i < SKL_NUM_SCALERS; i++) {
> > +		intel_scaler = &scaler_state->scalers[i];
> > +		intel_scaler->in_use = 0;
> > +		intel_scaler->id = i;
> > +
> > +		intel_scaler->mode = PS_SCALER_MODE_DYN;
> > +		intel_scaler->filter = PS_FILTER_MEDIUM;
> > +	}
> > +
> > +	/* down scaling ratio: 2.99 --> 1, i.e., 34% of original */
> > +	scaler_state->min_hsr = 34;
> > +	scaler_state->min_vsr = 34;
> > +	scaler_state->max_hsr = 500;
> > +	scaler_state->max_vsr = 500;
> > +
> > +	/* down scaling ratio: 2.99x2.99 --> 1x1, i.e., 12% of original */
> > +	scaler_state->min_hvsr = 12;
> > +	scaler_state->max_hvsr = 2500;
> > +
> > +	/* src_w & dst_w range 8 - 4096 */
> > +	scaler_state->min_src_w = 8;
> > +	scaler_state->max_src_w = 4096;
> > +	scaler_state->min_dst_w = 8;
> > +	scaler_state->max_dst_w = 4096;
> > +
> > +	/* src_h & dst_h range 8 - 2304 */
> > +	scaler_state->min_src_h = 8;
> > +	scaler_state->max_src_h = 2304;
> > +	scaler_state->min_dst_h = 8;
> > +	scaler_state->max_dst_h = 2304;
> > +
> > +	/* pipe C has one scaler */
> > +	if (pipe == PIPE_C) {
> > +		scaler_state->num_scalers = 1;
> > +	}
> > +	scaler_state->scaler_id = -1;
> > +}
> > +
> >  static void intel_crtc_init(struct drm_device *dev, int pipe)  {
> >  	struct drm_i915_private *dev_priv = dev->dev_private; @@ -12769,6
> > +12819,9 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
> >  	intel_crtc_set_state(intel_crtc, crtc_state);
> >  	crtc_state->base.crtc = &intel_crtc->base;
> >
> > +	/* initialize shared scalers */
> > +	skl_init_scalers(dev, pipe, crtc_state);
> > +
> >  	primary = intel_primary_plane_create(dev, pipe);
> >  	if (!primary)
> >  		goto fail;
> > --
> > 1.7.9.5
> >
> 
> --
> Matt Roper
> Graphics Software Engineer
> IoTG Platform Enabling & Development
> Intel Corporation
> (916) 356-2795
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 89299b6..e6ea9e0 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -103,6 +103,8 @@  static void chv_prepare_pll(struct intel_crtc *crtc,
 			    const struct intel_crtc_state *pipe_config);
 static void intel_begin_crtc_commit(struct drm_crtc *crtc);
 static void intel_finish_crtc_commit(struct drm_crtc *crtc);
+static void skl_init_scalers(struct drm_device *dev, int pipe,
+	struct intel_crtc_state *crtc_state);
 
 static struct intel_encoder *intel_find_encoder(struct intel_connector *connector, int pipe)
 {
@@ -12750,6 +12752,54 @@  static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev,
 	return &cursor->base;
 }
 
+static void skl_init_scalers(struct drm_device *dev, int pipe,
+	struct intel_crtc_state *crtc_state)
+{
+	int i;
+	struct intel_scaler *intel_scaler;
+	struct intel_crtc_scaler_state *scaler_state = &crtc_state->scaler_state;
+	if (INTEL_INFO(dev)->gen < 9)
+		return;
+
+	scaler_state->num_scalers = SKL_NUM_SCALERS;
+	for (i = 0; i < SKL_NUM_SCALERS; i++) {
+		intel_scaler = &scaler_state->scalers[i];
+		intel_scaler->in_use = 0;
+		intel_scaler->id = i;
+
+		intel_scaler->mode = PS_SCALER_MODE_DYN;
+		intel_scaler->filter = PS_FILTER_MEDIUM;
+	}
+
+	/* down scaling ratio: 2.99 --> 1, i.e., 34% of original */
+	scaler_state->min_hsr = 34;
+	scaler_state->min_vsr = 34;
+	scaler_state->max_hsr = 500;
+	scaler_state->max_vsr = 500;
+
+	/* down scaling ratio: 2.99x2.99 --> 1x1, i.e., 12% of original */
+	scaler_state->min_hvsr = 12;
+	scaler_state->max_hvsr = 2500;
+
+	/* src_w & dst_w range 8 - 4096 */
+	scaler_state->min_src_w = 8;
+	scaler_state->max_src_w = 4096;
+	scaler_state->min_dst_w = 8;
+	scaler_state->max_dst_w = 4096;
+
+	/* src_h & dst_h range 8 - 2304 */
+	scaler_state->min_src_h = 8;
+	scaler_state->max_src_h = 2304;
+	scaler_state->min_dst_h = 8;
+	scaler_state->max_dst_h = 2304;
+
+	/* pipe C has one scaler */
+	if (pipe == PIPE_C) {
+		scaler_state->num_scalers = 1;
+	}
+	scaler_state->scaler_id = -1;
+}
+
 static void intel_crtc_init(struct drm_device *dev, int pipe)
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
@@ -12769,6 +12819,9 @@  static void intel_crtc_init(struct drm_device *dev, int pipe)
 	intel_crtc_set_state(intel_crtc, crtc_state);
 	crtc_state->base.crtc = &intel_crtc->base;
 
+	/* initialize shared scalers */
+	skl_init_scalers(dev, pipe, crtc_state);
+
 	primary = intel_primary_plane_create(dev, pipe);
 	if (!primary)
 		goto fail;