Initializing scalers with supported values during crtc init. Signed-off-by: Chandra Konduru <chandra.konduru@xxxxxxxxx> --- drivers/gpu/drm/i915/intel_display.c | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 8dba8e8..ccddd81 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -12721,6 +12721,54 @@ static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev, return &cursor->base; } +static void skl_scalers_init(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; + + /* down scaling ratio: 2.99 --> 1, i.e., 34% of original */ + intel_scaler->min_hsr = 34; + intel_scaler->min_vsr = 34; + intel_scaler->max_hsr = 500; + intel_scaler->max_vsr = 500; + + /* down scaling ratio: 2.99x2.99 --> 1x1, i.e., 12% of original */ + intel_scaler->min_hvsr = 12; + intel_scaler->max_hvsr = 2500; + + /* src_w & dst_w range 8 - 4096 */ + intel_scaler->min_src_w = 8; + intel_scaler->max_src_w = 4096; + intel_scaler->min_dst_w = 8; + intel_scaler->max_dst_w = 4096; + + /* src_h & dst_h range 8 - 2304 */ + intel_scaler->min_src_h = 8; + intel_scaler->max_src_h = 2304; + intel_scaler->min_dst_h = 8; + intel_scaler->max_dst_h = 2304; + + intel_scaler->mode = PS_SCALER_MODE_DYN; + intel_scaler->filter = PS_FILTER_MEDIUM; + } + + /* 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; @@ -12740,6 +12788,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_scalers_init(dev, pipe, crtc_state); + primary = intel_primary_plane_create(dev, pipe); if (!primary) goto fail; -- 1.7.9.5 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx