Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752864AbdG1Utp (ORCPT ); Fri, 28 Jul 2017 16:49:45 -0400 Received: from lelnx193.ext.ti.com ([198.47.27.77]:41361 "EHLO lelnx193.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752494AbdG1Utn (ORCPT ); Fri, 28 Jul 2017 16:49:43 -0400 From: Josue Albarran To: Joerg Roedel CC: , , Suman Anna , Laurent Pinchart , , Subject: [PATCH 1/2] iommu/omap: Fix disabling of MMU upon a fault Date: Fri, 28 Jul 2017 15:49:13 -0500 Message-ID: <1501274954-20973-2-git-send-email-j-albarran@ti.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1501274954-20973-1-git-send-email-j-albarran@ti.com> References: <1501274954-20973-1-git-send-email-j-albarran@ti.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1503 Lines: 41 From: Fernando Guzman Lugo The IOMMU framework lets its client users be notified on a MMU fault and allows them to either handle the interrupt by dynamic reloading of an appropriate TLB/PTE for the offending fault address or to completely restart/recovery the device and its IOMMU. The OMAP remoteproc driver performs the latter option, and does so after unwinding the previous mappings. The OMAP IOMMU fault handler however disables the MMU and cuts off the clock upon a MMU fault at present, resulting in an interconnect abort during any subsequent operation that touches the MMU registers. So, disable the IP-level fault interrupts instead of disabling the MMU, to allow continued MMU register operations as well as to avoid getting interrupted again. Signed-off-by: Fernando Guzman Lugo [s-anna@ti.com: add commit description] Signed-off-by: Suman Anna Signed-off-by: Josue Albarran --- drivers/iommu/omap-iommu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c index 641e035cf866..10c9de8de45d 100644 --- a/drivers/iommu/omap-iommu.c +++ b/drivers/iommu/omap-iommu.c @@ -786,7 +786,7 @@ static irqreturn_t iommu_fault_handler(int irq, void *data) if (!report_iommu_fault(domain, obj->dev, da, 0)) return IRQ_HANDLED; - iommu_disable(obj); + iommu_write_reg(obj, 0, MMU_IRQENABLE); iopgd = iopgd_offset(obj, da); -- 2.7.4