Initializing scalers with supported values during crtc init.

Signed-off-by: Chandra Konduru <[email protected]>
---
 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
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to