msm: sde: Fix SMMU fault in SDE rotator for secure playback
When playing secure content, framebuffer is setup as secure in the rotator. But the sw timestamp is not going through the secure route, and must clear out the secure setting, otherwise a smmu fault will be issued. This fix make sure the secure buffer status is cleared during the sw timestamp submission. CRs-Fixed: 1059620 Change-Id: Ifb0f9928fa1d948351e6fc1ad925a070a7f50a96 Signed-off-by: Benjamin Chan <bkchan@codeaurora.org>
This commit is contained in:
parent
aaf356abef
commit
aeb8d34871
1 changed files with 16 additions and 0 deletions
|
@ -434,6 +434,14 @@ static void sde_hw_rotator_setup_timestamp_packet(
|
||||||
SDE_REGDMA_BLKWRITE_DATA(wrptr, 0x03020100);
|
SDE_REGDMA_BLKWRITE_DATA(wrptr, 0x03020100);
|
||||||
SDE_REGDMA_BLKWRITE_DATA(wrptr, 0x80000000);
|
SDE_REGDMA_BLKWRITE_DATA(wrptr, 0x80000000);
|
||||||
SDE_REGDMA_BLKWRITE_DATA(wrptr, ctx->timestamp);
|
SDE_REGDMA_BLKWRITE_DATA(wrptr, ctx->timestamp);
|
||||||
|
/*
|
||||||
|
* Must clear secure buffer setting for SW timestamp because
|
||||||
|
* SW timstamp buffer allocation is always non-secure region.
|
||||||
|
*/
|
||||||
|
if (ctx->is_secure) {
|
||||||
|
SDE_REGDMA_WRITE(wrptr, ROT_SSPP_SRC_ADDR_SW_STATUS, 0);
|
||||||
|
SDE_REGDMA_WRITE(wrptr, ROT_WB_DST_ADDR_SW_STATUS, 0);
|
||||||
|
}
|
||||||
SDE_REGDMA_BLKWRITE_INC(wrptr, ROT_WB_DST_FORMAT, 4);
|
SDE_REGDMA_BLKWRITE_INC(wrptr, ROT_WB_DST_FORMAT, 4);
|
||||||
SDE_REGDMA_BLKWRITE_DATA(wrptr, 0x000037FF);
|
SDE_REGDMA_BLKWRITE_DATA(wrptr, 0x000037FF);
|
||||||
SDE_REGDMA_BLKWRITE_DATA(wrptr, 0);
|
SDE_REGDMA_BLKWRITE_DATA(wrptr, 0);
|
||||||
|
@ -611,6 +619,9 @@ static void sde_hw_rotator_setup_fetchengine(struct sde_hw_rotator_context *ctx,
|
||||||
if (flags & SDE_ROT_FLAG_SECURE_OVERLAY_SESSION) {
|
if (flags & SDE_ROT_FLAG_SECURE_OVERLAY_SESSION) {
|
||||||
SDE_REGDMA_WRITE(wrptr, ROT_SSPP_SRC_ADDR_SW_STATUS, 0xF);
|
SDE_REGDMA_WRITE(wrptr, ROT_SSPP_SRC_ADDR_SW_STATUS, 0xF);
|
||||||
ctx->is_secure = true;
|
ctx->is_secure = true;
|
||||||
|
} else {
|
||||||
|
SDE_REGDMA_WRITE(wrptr, ROT_SSPP_SRC_ADDR_SW_STATUS, 0);
|
||||||
|
ctx->is_secure = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update command queue write ptr */
|
/* Update command queue write ptr */
|
||||||
|
@ -703,6 +714,11 @@ static void sde_hw_rotator_setup_wbengine(struct sde_hw_rotator_context *ctx,
|
||||||
SDE_REGDMA_WRITE(wrptr, ROT_WB_OUT_XY,
|
SDE_REGDMA_WRITE(wrptr, ROT_WB_OUT_XY,
|
||||||
cfg->dst_rect->x | (cfg->dst_rect->y << 16));
|
cfg->dst_rect->x | (cfg->dst_rect->y << 16));
|
||||||
|
|
||||||
|
if (flags & SDE_ROT_FLAG_SECURE_OVERLAY_SESSION)
|
||||||
|
SDE_REGDMA_WRITE(wrptr, ROT_WB_DST_ADDR_SW_STATUS, 0x1);
|
||||||
|
else
|
||||||
|
SDE_REGDMA_WRITE(wrptr, ROT_WB_DST_ADDR_SW_STATUS, 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* setup Downscale factor
|
* setup Downscale factor
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue