diff options
Diffstat (limited to 'drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c')
-rw-r--r-- | drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c b/drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c index fc6016c..1eb8d63 100644 --- a/drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c +++ b/drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c @@ -83,7 +83,12 @@ void fimg2d4x_bitblt(struct fimg2d_control *info) goto blitend; if (cmd->image[IDST].addr.type != ADDR_PHYS) { - pgd = (unsigned long *)ctx->mm->pgd; + if ((cmd->image[IDST].addr.type == ADDR_USER_CONTIG) || + (cmd->image[ISRC].addr.type == ADDR_USER_CONTIG)) + pgd = (unsigned long *)ctx->pgd_clone; + else + pgd = (unsigned long *)ctx->mm->pgd; + s5p_sysmmu_enable(info->dev, (unsigned long)virt_to_phys(pgd)); fimg2d_debug("sysmmu enable: pgd %p ctx %p seq_no(%u)\n", pgd, ctx, cmd->seq_no); @@ -98,6 +103,8 @@ void fimg2d4x_bitblt(struct fimg2d_control *info) info->run(info); fimg2d4x_blit_wait(info, cmd); + if (info->fault_addr) + fimg2d_mmutable_value_replace(cmd, info->fault_addr, 0); #ifdef PERF_PROFILE perf_end(cmd->ctx, PERF_BLIT); #endif |