diff --git a/drivers/video/rockchip/mpp/hack/mpp_hack_px30.c b/drivers/video/rockchip/mpp/hack/mpp_hack_px30.c index 379049eaf8fc..07912bcc3436 100644 --- a/drivers/video/rockchip/mpp/hack/mpp_hack_px30.c +++ b/drivers/video/rockchip/mpp/hack/mpp_hack_px30.c @@ -19,6 +19,7 @@ #include "../mpp_common.h" #include "../mpp_iommu.h" #include "mpp_hack_px30.h" +#include #define RK_MMU_DTE_ADDR 0x00 /* Directory table address */ #define RK_MMU_STATUS 0x04 @@ -177,7 +178,17 @@ int px30_workaround_combo_init(struct mpp_dev *mpp) iommu->grf_val = mpp->grf_info->val & MPP_GRF_VAL_MASK; if (mpp->hw_ops->clk_on) mpp->hw_ops->clk_on(mpp); - iommu->dte_addr = mpp_iommu_get_dte_addr(iommu); + /* + * ensure that iommu is enable, so that read valid dte value + */ + if (rockchip_iommu_is_enabled(mpp->dev)) + iommu->dte_addr = mpp_iommu_get_dte_addr(iommu); + else { + rockchip_iommu_enable(mpp->dev); + iommu->dte_addr = mpp_iommu_get_dte_addr(iommu); + rockchip_iommu_disable(mpp->dev); + } + dev_err(mpp->dev, "%s dte_addr %08x\n", __func__, iommu->dte_addr); if (mpp->hw_ops->clk_off) mpp->hw_ops->clk_off(mpp); INIT_LIST_HEAD(&iommu->link);