diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index 93208193ca78..72296d6b8f79 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -1382,6 +1382,18 @@ int rockchip_iommu_enable(struct device *dev) } EXPORT_SYMBOL(rockchip_iommu_enable); +bool rockchip_iommu_is_enabled(struct device *dev) +{ + struct rk_iommu *iommu; + + iommu = rk_iommu_from_dev(dev); + if (!iommu) + return false; + + return rk_iommu_is_paging_enabled(iommu); +} +EXPORT_SYMBOL(rockchip_iommu_is_enabled); + static void rk_iommu_detach_device(struct iommu_domain *domain, struct device *dev) { diff --git a/include/soc/rockchip/rockchip_iommu.h b/include/soc/rockchip/rockchip_iommu.h index c379f71a9d35..804f0fdc44a4 100644 --- a/include/soc/rockchip/rockchip_iommu.h +++ b/include/soc/rockchip/rockchip_iommu.h @@ -12,6 +12,7 @@ int rockchip_iommu_enable(struct device *dev); int rockchip_iommu_disable(struct device *dev); int rockchip_pagefault_done(struct device *master_dev); void __iomem *rockchip_get_iommu_base(struct device *master_dev, int idx); +bool rockchip_iommu_is_enabled(struct device *dev); #else static inline int rockchip_iommu_enable(struct device *dev) { @@ -29,6 +30,10 @@ static inline void __iomem *rockchip_get_iommu_base(struct device *master_dev, i { return NULL; } +static inline bool rockchip_iommu_is_enabled(struct device *dev) +{ + return false; +} #endif #endif