drm/msm/sde: program pixel extension from scalar config from sde plane
Avoid implicit programming of pixel extension and scalar blocks
of an SSPP by programming them from sde plane.
Change-Id: Iac324e7d75f29ebf4b3d8bd2edc38b62c98d5193
Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org>
diff --git a/drivers/gpu/drm/msm/sde/sde_hw_sspp.c b/drivers/gpu/drm/msm/sde/sde_hw_sspp.c
index c7f6809..f8fa472 100644
--- a/drivers/gpu/drm/msm/sde/sde_hw_sspp.c
+++ b/drivers/gpu/drm/msm/sde/sde_hw_sspp.c
@@ -751,9 +751,7 @@
*/
static void sde_hw_sspp_setup_rects(struct sde_hw_pipe *ctx,
struct sde_hw_pipe_cfg *cfg,
- struct sde_hw_pixel_ext *pe_ext,
- enum sde_sspp_multirect_index rect_index,
- void *scale_cfg)
+ enum sde_sspp_multirect_index rect_index)
{
struct sde_hw_blk_reg_map *c;
u32 src_size, src_xy, dst_size, dst_xy, ystride0, ystride1;
@@ -778,9 +776,6 @@
out_xy_off = SSPP_OUT_XY_REC1;
}
- /* program pixel extension override */
- if (pe_ext)
- sde_hw_sspp_setup_pe_config(ctx, pe_ext);
/* src and dest rect programming */
src_xy = (cfg->src_rect.y << 16) | (cfg->src_rect.x);
@@ -811,7 +806,6 @@
/* program decimation */
decimation = ((1 << cfg->horz_decimation) - 1) << 8;
decimation |= ((1 << cfg->vert_decimation) - 1);
- ctx->ops.setup_scaler(ctx, cfg, pe_ext, scale_cfg);
}
/* rectangle register programming */
@@ -1000,6 +994,7 @@
c->ops.setup_rects = sde_hw_sspp_setup_rects;
c->ops.setup_sourceaddress = sde_hw_sspp_setup_sourceaddress;
c->ops.setup_solidfill = sde_hw_sspp_setup_solidfill;
+ c->ops.setup_pe = sde_hw_sspp_setup_pe_config;
}
if (test_bit(SDE_SSPP_EXCL_RECT, &features))
@@ -1016,16 +1011,16 @@
test_bit(SDE_SSPP_CSC_10BIT, &features))
c->ops.setup_csc = sde_hw_sspp_setup_csc;
- if (test_bit(SDE_SSPP_SCALER_QSEED2, &features))
+ if (test_bit(SDE_SSPP_SCALER_QSEED2, &features)) {
c->ops.setup_sharpening = sde_hw_sspp_setup_sharpening;
+ c->ops.setup_scaler = _sde_hw_sspp_setup_scaler;
+ }
if (sde_hw_sspp_multirect_enabled(c->cap))
c->ops.setup_multirect = sde_hw_sspp_setup_multirect;
if (test_bit(SDE_SSPP_SCALER_QSEED3, &features))
c->ops.setup_scaler = _sde_hw_sspp_setup_scaler3;
- else
- c->ops.setup_scaler = _sde_hw_sspp_setup_scaler;
if (test_bit(SDE_SSPP_HSIC, &features)) {
/* TODO: add version based assignment here as inline or macro */
diff --git a/drivers/gpu/drm/msm/sde/sde_hw_sspp.h b/drivers/gpu/drm/msm/sde/sde_hw_sspp.h
index d81f673..a224234 100644
--- a/drivers/gpu/drm/msm/sde/sde_hw_sspp.h
+++ b/drivers/gpu/drm/msm/sde/sde_hw_sspp.h
@@ -328,15 +328,19 @@
* setup_rects - setup pipe ROI rectangles
* @ctx: Pointer to pipe context
* @cfg: Pointer to pipe config structure
- * @pe_ext: Pointer to pixel ext settings
* @index: rectangle index in multirect
- * @scale_cfg: Pointer to scaler settings
*/
void (*setup_rects)(struct sde_hw_pipe *ctx,
struct sde_hw_pipe_cfg *cfg,
- struct sde_hw_pixel_ext *pe_ext,
- enum sde_sspp_multirect_index index,
- void *scale_cfg);
+ enum sde_sspp_multirect_index index);
+
+ /**
+ * setup_pe - setup pipe pixel extension
+ * @ctx: Pointer to pipe context
+ * @pe_ext: Pointer to pixel ext settings
+ */
+ void (*setup_pe)(struct sde_hw_pipe *ctx,
+ struct sde_hw_pixel_ext *pe_ext);
/**
* setup_excl_rect - setup pipe exclusion rectangle
diff --git a/drivers/gpu/drm/msm/sde/sde_plane.c b/drivers/gpu/drm/msm/sde/sde_plane.c
index 8ff08dc..e144a0d 100644
--- a/drivers/gpu/drm/msm/sde/sde_plane.c
+++ b/drivers/gpu/drm/msm/sde/sde_plane.c
@@ -1104,8 +1104,6 @@
psde->pipe_cfg.src_rect.w = psde->pipe_cfg.dst_rect.w;
psde->pipe_cfg.src_rect.h = psde->pipe_cfg.dst_rect.h;
- _sde_plane_setup_scaler(psde, fmt, 0);
-
if (psde->pipe_hw->ops.setup_format)
psde->pipe_hw->ops.setup_format(psde->pipe_hw,
fmt, SDE_SSPP_SOLID_FILL,
@@ -1113,9 +1111,13 @@
if (psde->pipe_hw->ops.setup_rects)
psde->pipe_hw->ops.setup_rects(psde->pipe_hw,
- &psde->pipe_cfg, &psde->pixel_ext,
- pstate->multirect_index,
- psde->scaler3_cfg);
+ &psde->pipe_cfg,
+ pstate->multirect_index);
+
+ _sde_plane_setup_scaler(psde, fmt, 0);
+ if (psde->pipe_hw->ops.setup_pe)
+ psde->pipe_hw->ops.setup_pe(psde->pipe_hw,
+ &psde->pixel_ext);
}
return 0;
@@ -1238,14 +1240,21 @@
/* skip remaining processing on color fill */
pstate->dirty = 0x0;
} else if (psde->pipe_hw->ops.setup_rects) {
- _sde_plane_setup_scaler(psde, fmt, pstate);
-
psde->pipe_hw->ops.setup_rects(psde->pipe_hw,
- &psde->pipe_cfg, &psde->pixel_ext,
- pstate->multirect_index,
- psde->scaler3_cfg);
+ &psde->pipe_cfg,
+ pstate->multirect_index);
}
+ _sde_plane_setup_scaler(psde, fmt, pstate);
+ if (psde->pipe_hw->ops.setup_pe)
+ psde->pipe_hw->ops.setup_pe(psde->pipe_hw,
+ &psde->pixel_ext);
+
+ if (psde->pipe_hw->ops.setup_scaler)
+ psde->pipe_hw->ops.setup_scaler(psde->pipe_hw,
+ &psde->pipe_cfg, &psde->pixel_ext,
+ psde->scaler3_cfg);
+
/* update excl rect */
if (psde->pipe_hw->ops.setup_excl_rect)
psde->pipe_hw->ops.setup_excl_rect(psde->pipe_hw,