From: Simon Date: Wed, 28 Jan 2015 07:30:26 +0000 (+0800) Subject: rockchip: iommu: skip rk312x vop mmu stall operation,mask rk312x vop mmu interrupt X-Git-Tag: firefly_0821_release~4272 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=62a4401c590d6afcd7296b39a73515120784c22d;p=firefly-linux-kernel-4.4.55.git rockchip: iommu: skip rk312x vop mmu stall operation,mask rk312x vop mmu interrupt 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 --- diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c old mode 100755 new mode 100644 index 75eb620464b6..797a5d313421 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -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) {