From 8323e849b7bb346e8290e367503faaf243d694cf Mon Sep 17 00:00:00 2001 From: Yandong Lin Date: Tue, 22 Aug 2023 11:24:42 +0800 Subject: [PATCH] video: rockchip: mpp: fix some iommu hdl register issue Signed-off-by: Yandong Lin Change-Id: Ic73bc4e330668b30e4519362b313bfb29ccecb24 --- drivers/video/rockchip/mpp/mpp_common.c | 1 + drivers/video/rockchip/mpp/mpp_iommu.c | 3 +++ drivers/video/rockchip/mpp/mpp_rkvdec.c | 2 +- drivers/video/rockchip/mpp/mpp_rkvdec2.c | 2 +- drivers/video/rockchip/mpp/mpp_rkvenc.c | 2 +- drivers/video/rockchip/mpp/mpp_rkvenc2.c | 3 +-- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/video/rockchip/mpp/mpp_common.c b/drivers/video/rockchip/mpp/mpp_common.c index 39df5053860b..0038df8308e6 100644 --- a/drivers/video/rockchip/mpp/mpp_common.c +++ b/drivers/video/rockchip/mpp/mpp_common.c @@ -586,6 +586,7 @@ static void mpp_task_timeout_work(struct work_struct *work_s) mpp_dev_reset(mpp); mpp_power_off(mpp); + mpp_iommu_dev_deactivate(mpp->iommu_info, mpp); set_bit(TASK_STATE_TIMEOUT, &task->state); set_bit(TASK_STATE_DONE, &task->state); /* Wake up the GET thread */ diff --git a/drivers/video/rockchip/mpp/mpp_iommu.c b/drivers/video/rockchip/mpp/mpp_iommu.c index 29685df3a1e5..116ec664ec00 100644 --- a/drivers/video/rockchip/mpp/mpp_iommu.c +++ b/drivers/video/rockchip/mpp/mpp_iommu.c @@ -455,6 +455,9 @@ static int mpp_iommu_handle(struct iommu_domain *iommu, return 0; } + if (mpp->cur_task) + mpp_task_dump_mem_region(mpp, mpp->cur_task); + if (mpp->dev_ops && mpp->dev_ops->dump_dev) mpp->dev_ops->dump_dev(mpp); else diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec.c b/drivers/video/rockchip/mpp/mpp_rkvdec.c index 1fcdbdc52902..4310a09a5ce0 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec.c @@ -1429,7 +1429,7 @@ static int rkvdec_3328_init(struct mpp_dev *mpp) goto done; } dec->aux_iova = -1; - mpp->iommu_info->hdl = rkvdec_3328_iommu_hdl; + mpp->fault_handler = rkvdec_3328_iommu_hdl; ret = rkvdec_devfreq_init(mpp); done: diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2.c b/drivers/video/rockchip/mpp/mpp_rkvdec2.c index 70aa1304288e..9d146c195503 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec2.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2.c @@ -1581,7 +1581,7 @@ static int rkvdec2_core_probe(struct platform_device *pdev) mpp->dev_ops->task_worker = rkvdec2_hard_ccu_worker; irq_proc = rkvdec2_hard_ccu_irq; } - mpp->iommu_info->hdl = rkvdec2_ccu_iommu_fault_handle; + mpp->fault_handler = rkvdec2_ccu_iommu_fault_handle; kthread_init_work(&mpp->work, mpp->dev_ops->task_worker); /* get irq request */ diff --git a/drivers/video/rockchip/mpp/mpp_rkvenc.c b/drivers/video/rockchip/mpp/mpp_rkvenc.c index 85a83f111028..c71c03fb91eb 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvenc.c +++ b/drivers/video/rockchip/mpp/mpp_rkvenc.c @@ -1232,7 +1232,7 @@ static int rkvenc_init(struct mpp_dev *mpp) } INIT_WORK(&enc->iommu_work, rkvenc_iommu_handle_work); - mpp->iommu_info->hdl = rkvenc_iommu_fault_handle; + mpp->fault_handler = rkvenc_iommu_fault_handle; return ret; } diff --git a/drivers/video/rockchip/mpp/mpp_rkvenc2.c b/drivers/video/rockchip/mpp/mpp_rkvenc2.c index 392ce4f46517..1843f3de2869 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvenc2.c +++ b/drivers/video/rockchip/mpp/mpp_rkvenc2.c @@ -2463,8 +2463,7 @@ static int rkvenc_core_probe(struct platform_device *pdev) } mpp->session_max_buffers = RKVENC_SESSION_MAX_BUFFERS; enc->hw_info = to_rkvenc_info(mpp->var->hw_info); - if (mpp->iommu_info) - mpp->iommu_info->hdl = rkvenc2_iommu_fault_handle; + mpp->fault_handler = rkvenc2_iommu_fault_handle; rkvenc_procfs_init(mpp); rkvenc_procfs_ccu_init(mpp);