From 31889ca7f5a8cc5b6163c51b22c4a29d8264ed0c Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 1 Dec 2016 09:40:28 +0800 Subject: [PATCH] iommu/rockchip: Ignore isp reset when isp mmu attach Reset isp mmu would failed when attach,just ignore reset operation Change-Id: Ib323db151e7313635524526d5304e16b9b504201 Signed-off-by: Simon --- arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 ++ drivers/iommu/rockchip-iommu.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi index 9ab8cad27deb..0ac0c0a9a3d0 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi @@ -1684,6 +1684,7 @@ interrupts = ; interrupt-names = "isp0_mmu"; #iommu-cells = <0>; + rk_iommu,disable_reset_quirk; status = "disabled"; }; @@ -1693,6 +1694,7 @@ interrupts = ; interrupt-names = "isp1_mmu"; #iommu-cells = <0>; + rk_iommu,disable_reset_quirk; status = "disabled"; }; diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index ce1ed0deb384..a681df695f5b 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -90,6 +90,7 @@ struct rk_iommu { void __iomem **bases; int num_mmu; int irq; + bool reset_disabled; /* isp iommu reset operation would failed */ struct list_head node; /* entry in rk_iommu_domain.iommus */ struct iommu_domain *domain; /* domain to which iommu is attached */ }; @@ -414,6 +415,10 @@ static int rk_iommu_force_reset(struct rk_iommu *iommu) int ret, i; u32 dte_addr; + /* Workaround for isp mmus */ + if (iommu->reset_disabled) + return 0; + /* * Check if register DTE_ADDR is working by writing DTE_ADDR_DUMMY * and verifying that upper 5 nybbles are read back. @@ -1157,6 +1162,9 @@ static int rk_iommu_probe(struct platform_device *pdev) return -ENXIO; } + iommu->reset_disabled = device_property_read_bool(dev, + "rk_iommu,disable_reset_quirk"); + return 0; } -- 2.34.1