From 62a4401c590d6afcd7296b39a73515120784c22d Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 28 Jan 2015 15:30:26 +0800 Subject: [PATCH] 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 --- drivers/iommu/rockchip-iommu.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) mode change 100755 => 100644 drivers/iommu/rockchip-iommu.c 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) { -- 2.34.1