diff --git a/drivers/media/platform/rockchip/isp/hw.c b/drivers/media/platform/rockchip/isp/hw.c index 1f587f95da03..5707b29ea975 100644 --- a/drivers/media/platform/rockchip/isp/hw.c +++ b/drivers/media/platform/rockchip/isp/hw.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "common.h" #include "dev.h" @@ -523,10 +524,6 @@ static inline bool is_iommu_enable(struct device *dev) void rkisp_soft_reset(struct rkisp_hw_dev *dev, bool is_secure) { void __iomem *base = dev->base_addr; - struct iommu_domain *domain = iommu_get_domain_for_dev(dev->dev); - - if (domain) - iommu_detach_device(domain, dev->dev); if (is_secure) { /* if isp working, cru reset isn't secure. @@ -549,8 +546,11 @@ void rkisp_soft_reset(struct rkisp_hw_dev *dev, bool is_secure) writel(0xffff, base + CIF_IRCL); udelay(10); - if (domain) - iommu_attach_device(domain, dev->dev); + /* refresh iommu after reset */ + if (dev->is_mmu) { + rockchip_iommu_disable(dev->dev); + rockchip_iommu_enable(dev->dev); + } } static void isp_config_clk(struct rkisp_hw_dev *dev, int on)