From e026e105c8fab6247aa72d9960b6e17df33758bd Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Tue, 14 Dec 2021 08:43:41 +0800 Subject: [PATCH] video: rockchip: mpp: rkvdec2: fix pagefault on start Fix pagefault on decoder first task. [ 151.797045][ C0] rk_iommu fdc38700.iommu: Page fault at 0x00000000fefc0000 of type write [ 151.797071][ C0] rk_iommu fdc38700.iommu: iova = 0x00000000fefc0000: dte_index: 0x3fb pte_index: 0x3c0 page_offset: 0x0 [ 151.797080][ C0] rk_iommu fdc38700.iommu: mmu_dte_addr: 0x0000000000305000 dte@0x0000000000305fec: 0x34f001 valid: 1 pte@0x000000000034ff00: 0x77aec407 valid: 1 page@0x0000000477aec000 flags: 0x6 [ 151.797088][ C0] mpp_rkvdec2 fdc38100.rkvdec: fault addr 0xfefc0000 status 6b [ 151.797094][ C0] rk_vcodec: mpp_task_dump_mem_region:1654: --- dump mem region --- Signed-off-by: Herman Chen Change-Id: I991d86c931cdd07df85a6458cf1351c68ce87007 --- drivers/video/rockchip/mpp/mpp_rkvdec2.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2.c b/drivers/video/rockchip/mpp/mpp_rkvdec2.c index a5123631497c..0052cca615e0 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec2.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2.c @@ -302,6 +302,10 @@ static int rkvdec2_run(struct mpp_dev *mpp, struct mpp_task *mpp_task) e = s + req->size / sizeof(u32); mpp_write_req(mpp, task->reg, s, e, reg_en); } + + /* flush tlb before starting hardware */ + mpp_iommu_flush_tlb(mpp->iommu_info); + /* init current task */ mpp->cur_task = mpp_task; /* Flush the register before the start the device */