Message ID | 1426896282-23215-6-git-send-email-chandra.konduru@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 >
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
> -----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 --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;
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(+)