From a9175d765e7be98f48bb1a3c0152d48076c2ad1b Mon Sep 17 00:00:00 2001 From: Ding Wei Date: Tue, 26 Nov 2019 15:34:52 +0800 Subject: [PATCH] video: rockchip: mpp: deal with the case for iommu share In platform arm32, iommu is shared in different device, it must attach to ensure hardware working in current device. Change-Id: I854a362adf6145dcfd796885922683f8a6b7e131 Signed-off-by: Ding Wei --- drivers/video/rockchip/mpp/mpp_common.c | 9 +++++++++ drivers/video/rockchip/mpp/mpp_iommu.c | 3 +++ 2 files changed, 12 insertions(+) diff --git a/drivers/video/rockchip/mpp/mpp_common.c b/drivers/video/rockchip/mpp/mpp_common.c index 2ac23651b26f..e7c7e50a994c 100644 --- a/drivers/video/rockchip/mpp/mpp_common.c +++ b/drivers/video/rockchip/mpp/mpp_common.c @@ -806,6 +806,15 @@ static int mpp_task_run(struct mpp_dev *mpp, } else { mpp_set_grf(mpp->grf_info); } + /* + * for iommu share hardware, should attach to ensure + * working in current device + */ + ret = mpp_iommu_attach(mpp->iommu_info); + if (ret) { + dev_err(mpp->dev, "mpp_iommu_attach failed\n"); + return -ENODATA; + } mpp_power_on(mpp); mpp_debug_func(DEBUG_TASK_INFO, "pid %d run %s\n", diff --git a/drivers/video/rockchip/mpp/mpp_iommu.c b/drivers/video/rockchip/mpp/mpp_iommu.c index db98386da6cd..5ba44f54f5fe 100644 --- a/drivers/video/rockchip/mpp/mpp_iommu.c +++ b/drivers/video/rockchip/mpp/mpp_iommu.c @@ -388,6 +388,9 @@ int mpp_iommu_attach(struct mpp_iommu_info *info) if (!info) return 0; + if (info->domain == iommu_get_domain_for_dev(info->dev)) + return 0; + return iommu_attach_group(info->domain, info->group); }