disp: msm: sde: update sspp multi rect programming

Current SDE driver allows staging of rect1 only configuration. When a
real plane is disabled sspp multi rect configuration is not updated.
This can lead to iommu faults and ping pong timeouts as framebuffer of
disabled plane is unmapped. This change fixes it by updating multi rect
config accordingly when a plane is disabled.

Change-Id: I67ae45ad0e607184c7fc49f4b220220ba1d8a2ae
Signed-off-by: Prabhanjan Kandula <pkandula@codeaurora.org>
This commit is contained in:
Prabhanjan Kandula
2020-06-17 00:54:06 -07:00
szülő 743dc695c4
commit f946219084
3 fájl változott, egészen pontosan 26 új sor hozzáadva és 12 régi sor törölve

Fájl megtekintése

@@ -193,7 +193,8 @@ static inline int _sspp_subblk_offset(struct sde_hw_pipe *ctx,
return rc;
}
static void sde_hw_sspp_setup_multirect(struct sde_hw_pipe *ctx,
static void sde_hw_sspp_update_multirect(struct sde_hw_pipe *ctx,
bool enable,
enum sde_sspp_multirect_index index,
enum sde_sspp_multirect_mode mode)
{
@@ -212,8 +213,13 @@ static void sde_hw_sspp_setup_multirect(struct sde_hw_pipe *ctx,
mode_mask = 0;
} else {
mode_mask = SDE_REG_READ(&ctx->hw, SSPP_MULTIRECT_OPMODE + idx);
mode_mask |= index;
if (mode == SDE_SSPP_MULTIRECT_TIME_MX)
if (enable)
mode_mask |= index;
else
mode_mask &= ~index;
if (enable && (mode == SDE_SSPP_MULTIRECT_TIME_MX))
mode_mask |= BIT(2);
else
mode_mask &= ~BIT(2);
@@ -1232,7 +1238,7 @@ static void _setup_layer_ops(struct sde_hw_pipe *c,
}
if (sde_hw_sspp_multirect_enabled(c->cap))
c->ops.setup_multirect = sde_hw_sspp_setup_multirect;
c->ops.update_multirect = sde_hw_sspp_update_multirect;
if (test_bit(SDE_SSPP_SCALER_QSEED3, &features) ||
test_bit(SDE_SSPP_SCALER_QSEED3LITE, &features)) {