.. | .. |
---|
19 | 19 | #include "../mpp_common.h" |
---|
20 | 20 | #include "../mpp_iommu.h" |
---|
21 | 21 | #include "mpp_hack_px30.h" |
---|
| 22 | +#include <soc/rockchip/rockchip_iommu.h> |
---|
22 | 23 | |
---|
23 | 24 | #define RK_MMU_DTE_ADDR 0x00 /* Directory table address */ |
---|
24 | 25 | #define RK_MMU_STATUS 0x04 |
---|
.. | .. |
---|
177 | 178 | iommu->grf_val = mpp->grf_info->val & MPP_GRF_VAL_MASK; |
---|
178 | 179 | if (mpp->hw_ops->clk_on) |
---|
179 | 180 | mpp->hw_ops->clk_on(mpp); |
---|
180 | | - iommu->dte_addr = mpp_iommu_get_dte_addr(iommu); |
---|
| 181 | + /* |
---|
| 182 | + * ensure that iommu is enable, so that read valid dte value |
---|
| 183 | + */ |
---|
| 184 | + if (rockchip_iommu_is_enabled(mpp->dev)) |
---|
| 185 | + iommu->dte_addr = mpp_iommu_get_dte_addr(iommu); |
---|
| 186 | + else { |
---|
| 187 | + rockchip_iommu_enable(mpp->dev); |
---|
| 188 | + iommu->dte_addr = mpp_iommu_get_dte_addr(iommu); |
---|
| 189 | + rockchip_iommu_disable(mpp->dev); |
---|
| 190 | + } |
---|
| 191 | + dev_err(mpp->dev, "%s dte_addr %08x\n", __func__, iommu->dte_addr); |
---|
181 | 192 | if (mpp->hw_ops->clk_off) |
---|
182 | 193 | mpp->hw_ops->clk_off(mpp); |
---|
183 | 194 | INIT_LIST_HEAD(&iommu->link); |
---|