Initializing scalers with supported values during crtc init. v2: -initialize single copy of min/max values (Matt) Signed-off-by: Chandra Konduru <chandra.konduru@xxxxxxxxx> --- 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; + + 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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx