From patchwork Wed May 30 08:03:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 922606 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="kgfnnre/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40wjlr3ZJRz9s1R for ; Wed, 30 May 2018 18:03:52 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935863AbeE3IDv (ORCPT ); Wed, 30 May 2018 04:03:51 -0400 Received: from mail-wr0-f195.google.com ([209.85.128.195]:43917 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935827AbeE3IDt (ORCPT ); Wed, 30 May 2018 04:03:49 -0400 Received: by mail-wr0-f195.google.com with SMTP id d2-v6so13036583wrm.10 for ; Wed, 30 May 2018 01:03:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kTnrfqfSImUwZOKOmwM7VJG9DT1b06dc7jJxD+D3iFY=; b=kgfnnre/SwCFqFi7X0ZmscRAwHBvMGj+hekj1z6xK+WdztpXAvxJje1QuAICBJPONK DchluygTlFtgWxhsU2pG6FK+vgMc9FiXLvFgcOcNSplFlgcAUccpU2j3ujStgRhaL5w4 L1sAEOp7ZTG1Uq9T7/WqCyJueI23rt21wKneFg8OUhVgYQHXm/3e8MGeRNyyEiCPSEE3 mG0EYgWR0t6n1hf+tgZfii/Dv71caDGlOkWIKj3XLx35fR2jcSqsZ2LTrLSteioliw8F Ulpf1hch6emn+iWkeVlkV1w5PCCputcEltJfutKUSHXG3AF6/xgnPkKZQn87+yThViWh wncw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kTnrfqfSImUwZOKOmwM7VJG9DT1b06dc7jJxD+D3iFY=; b=coCP/ZR7569xvksGsL31eMGiKJkQMa4v7Rx3d3SwODDZvV1G5eGWTZsUuYIKZZLGZS LK4B7Tm4R7QvfT5W6rbfgdisR8cVHsILE2v42DUHiQrxdcHKumJKtlXrJ+egJoKSEKYJ MEiGlOR3XftaZ0bvXJtoKgjXDe9FBwoA5zMQRlqlQrZLmo666X8JRbv2lxeztM9tESl/ Ym5p8wVsHBVGmlACQZwSxLErDW8QX5x8pYUngzTh3DN3R6KW07bwjiEW2HvpU2892yC9 v25RRnDSml229LGQUSN4gXNZK7TikARgg8raX6CqM/vZWgIukqEH8PlIINYlxrd+6Xzm +y0g== X-Gm-Message-State: ALKqPwfBaJA8iDQgA6bFxRm6MH5yyayqEALlJS0OwHDMoFyj0/EAC/Ac L62xg3TpvU2tguSPE40dP64= X-Google-Smtp-Source: ADUXVKJs0Zd3GRPgM8Xn/zj5SWsDWGtExPr89FzFOVf132LHLyrnfqTaOyN4J5yVgubmmL2E4GTrAA== X-Received: by 2002:adf:f78d:: with SMTP id q13-v6mr1279637wrp.60.1527667428769; Wed, 30 May 2018 01:03:48 -0700 (PDT) Received: from localhost (p2E5BEDA6.dip0.t-ipconnect.de. [46.91.237.166]) by smtp.gmail.com with ESMTPSA id q7-v6sm28538029wrf.0.2018.05.30.01.03.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 May 2018 01:03:48 -0700 (PDT) From: Thierry Reding To: Ben Skeggs , Christoph Hellwig , Russell King Cc: Robin Murphy , Joerg Roedel , Daniel Vetter , Jordan Crouse , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org Subject: [PATCH v3 1/2] ARM: dma-mapping: Implement arm_dma_iommu_detach_device() Date: Wed, 30 May 2018 10:03:44 +0200 Message-Id: <20180530080345.2353-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180530080345.2353-1-thierry.reding@gmail.com> References: <20180530080345.2353-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Implement this function to enable drivers from detaching from any IOMMU domains that architecture code might have attached them to so that they can take exclusive control of the IOMMU via the IOMMU API. Signed-off-by: Thierry Reding --- Changes in v3: - make API 32-bit ARM specific - avoid extra local variable Changes in v2: - fix compilation arch/arm/include/asm/dma-mapping.h | 3 +++ arch/arm/mm/dma-mapping-nommu.c | 4 ++++ arch/arm/mm/dma-mapping.c | 16 ++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index 8436f6ade57d..5960e9f3a9d0 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h @@ -103,6 +103,9 @@ extern void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, #define arch_teardown_dma_ops arch_teardown_dma_ops extern void arch_teardown_dma_ops(struct device *dev); +#define arm_dma_iommu_detach_device arm_dma_iommu_detach_device +extern void arm_dma_iommu_detach_device(struct device *dev); + /* do not use this function in a driver */ static inline bool is_device_dma_coherent(struct device *dev) { diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c index f448a0663b10..eb781369377b 100644 --- a/arch/arm/mm/dma-mapping-nommu.c +++ b/arch/arm/mm/dma-mapping-nommu.c @@ -241,3 +241,7 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, void arch_teardown_dma_ops(struct device *dev) { } + +void arm_dma_iommu_detach_device(struct device *dev) +{ +} diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index af27f1c22d93..6d8af08b3e7d 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -2400,3 +2400,19 @@ void arch_teardown_dma_ops(struct device *dev) arm_teardown_iommu_dma_ops(dev); } + +void arm_dma_iommu_detach_device(struct device *dev) +{ +#ifdef CONFIG_ARM_DMA_USE_IOMMU + struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); + + if (!mapping) + return; + + arm_iommu_release_mapping(mapping); + arm_iommu_detach_device(dev); + + set_dma_ops(dev, arm_get_dma_map_ops(dev->archdata.dma_coherent)); +#endif +} +EXPORT_SYMBOL(arm_dma_iommu_detach_device);