rockchip: iommu: skip rk312x vop mmu stall operation,mask rk312x vop mmu interrupt
authorSimon <xxm@rock-chips.com>
Wed, 28 Jan 2015 07:30:26 +0000 (15:30 +0800)
committerSimon <xxm@rock-chips.com>
Wed, 28 Jan 2015 07:30:26 +0000 (15:30 +0800)
Video stress test failed, may have something relationship to vop mmu stall operation
skip it as a workaround

Reboot stress test failed, error showed a large number of vop/vop mmu interrupt,mask
vop mmu interrupt to avoid reboot stress test failed in rk312x

Signed-off-by: Simon <xxm@rock-chips.com>
drivers/iommu/rockchip-iommu.c [changed mode: 0755->0644]

old mode 100755 (executable)
new mode 100644 (file)
index 75eb620..797a5d3
@@ -232,9 +232,10 @@ static void rockchip_iommu_disable_stall(void __iomem *base)
                return;
        }
 
-       skip_vop_mmu_disable:
        __raw_writel(IOMMU_COMMAND_DISABLE_STALL, base + IOMMU_REGISTER_COMMAND);
 
+       skip_vop_mmu_disable:
+
        for (i = 0; i < IOMMU_REG_POLL_COUNT_FAST; ++i) {
                u32 status;
                
@@ -290,9 +291,10 @@ static bool rockchip_iommu_enable_stall(void __iomem *base)
                return false;
        }
 
-       skip_vop_mmu_enable:
        __raw_writel(IOMMU_COMMAND_ENABLE_STALL, base + IOMMU_REGISTER_COMMAND);
 
+       skip_vop_mmu_enable:
+
        for (i = 0; i < IOMMU_REG_POLL_COUNT_FAST; ++i) {
                if (base != rk312x_vop_mmu_base) {
                        mmu_status = __raw_readl(base + IOMMU_REGISTER_STATUS);
@@ -721,9 +723,11 @@ static int rockchip_iommu_enable(struct iommu_drvdata *data, unsigned long pgtab
                __raw_writel(IOMMU_COMMAND_ZAP_CACHE, data->res_bases[i] +
                             IOMMU_REGISTER_COMMAND);
 
-               __raw_writel(IOMMU_INTERRUPT_PAGE_FAULT |
-                            IOMMU_INTERRUPT_READ_BUS_ERROR,
+               if (strstr(data->dbgname, "isp")) {
+                       __raw_writel(IOMMU_INTERRUPT_PAGE_FAULT |
+                               IOMMU_INTERRUPT_READ_BUS_ERROR,
                             data->res_bases[i] + IOMMU_REGISTER_INT_MASK);
+               }
 
                ret = rockchip_iommu_enable_paging(data->res_bases[i]);
                if (!ret) {