| .. | .. |
|---|
| 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); |
|---|