Commit 549e2bfb authored by Chandra Konduru's avatar Chandra Konduru Committed by Daniel Vetter

drm/i915: Initialize skylake scalers

Initializing scalers with supported values during crtc init.

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

v3:
-moved gen check to callsite (Matt)

v4:
-squashed planes begin with no scaler to here (me)

v5:
-updated init function with updated scaler state structure (Matt)
Signed-off-by: default avatarChandra Konduru <chandra.konduru@intel.com>
Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 08e221fb
...@@ -103,6 +103,8 @@ static void chv_prepare_pll(struct intel_crtc *crtc, ...@@ -103,6 +103,8 @@ static void chv_prepare_pll(struct intel_crtc *crtc,
const struct intel_crtc_state *pipe_config); const struct intel_crtc_state *pipe_config);
static void intel_begin_crtc_commit(struct drm_crtc *crtc); static void intel_begin_crtc_commit(struct drm_crtc *crtc);
static void intel_finish_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, struct intel_crtc *intel_crtc,
struct intel_crtc_state *crtc_state);
static struct intel_encoder *intel_find_encoder(struct intel_connector *connector, int pipe) static struct intel_encoder *intel_find_encoder(struct intel_connector *connector, int pipe)
{ {
...@@ -12862,6 +12864,7 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev, ...@@ -12862,6 +12864,7 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev,
primary->can_scale = false; primary->can_scale = false;
primary->max_downscale = 1; primary->max_downscale = 1;
state->scaler_id = -1;
primary->pipe = pipe; primary->pipe = pipe;
primary->plane = pipe; primary->plane = pipe;
primary->check_plane = intel_check_primary_plane; primary->check_plane = intel_check_primary_plane;
...@@ -13026,6 +13029,7 @@ static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev, ...@@ -13026,6 +13029,7 @@ static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev,
cursor->max_downscale = 1; cursor->max_downscale = 1;
cursor->pipe = pipe; cursor->pipe = pipe;
cursor->plane = pipe; cursor->plane = pipe;
state->scaler_id = -1;
cursor->check_plane = intel_check_cursor_plane; cursor->check_plane = intel_check_cursor_plane;
cursor->commit_plane = intel_commit_cursor_plane; cursor->commit_plane = intel_commit_cursor_plane;
...@@ -13052,6 +13056,24 @@ static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev, ...@@ -13052,6 +13056,24 @@ static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev,
return &cursor->base; return &cursor->base;
} }
static void skl_init_scalers(struct drm_device *dev, struct intel_crtc *intel_crtc,
struct intel_crtc_state *crtc_state)
{
int i;
struct intel_scaler *intel_scaler;
struct intel_crtc_scaler_state *scaler_state = &crtc_state->scaler_state;
for (i = 0; i < intel_crtc->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;
}
scaler_state->scaler_id = -1;
}
static void intel_crtc_init(struct drm_device *dev, int pipe) static void intel_crtc_init(struct drm_device *dev, int pipe)
{ {
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
...@@ -13071,6 +13093,16 @@ static void intel_crtc_init(struct drm_device *dev, int pipe) ...@@ -13071,6 +13093,16 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
intel_crtc_set_state(intel_crtc, crtc_state); intel_crtc_set_state(intel_crtc, crtc_state);
crtc_state->base.crtc = &intel_crtc->base; crtc_state->base.crtc = &intel_crtc->base;
/* initialize shared scalers */
if (INTEL_INFO(dev)->gen >= 9) {
if (pipe == PIPE_C)
intel_crtc->num_scalers = 1;
else
intel_crtc->num_scalers = SKL_NUM_SCALERS;
skl_init_scalers(dev, intel_crtc, crtc_state);
}
primary = intel_primary_plane_create(dev, pipe); primary = intel_primary_plane_create(dev, pipe);
if (!primary) if (!primary)
goto fail; goto fail;
......
...@@ -1294,6 +1294,7 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane) ...@@ -1294,6 +1294,7 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
intel_plane->max_downscale = 1; intel_plane->max_downscale = 1;
intel_plane->update_plane = skl_update_plane; intel_plane->update_plane = skl_update_plane;
intel_plane->disable_plane = skl_disable_plane; intel_plane->disable_plane = skl_disable_plane;
state->scaler_id = -1;
plane_formats = skl_plane_formats; plane_formats = skl_plane_formats;
num_plane_formats = ARRAY_SIZE(skl_plane_formats); num_plane_formats = ARRAY_SIZE(skl_plane_formats);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment