From patchwork Wed Apr 25 09:18:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 10361983 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 1580960225 for ; Wed, 25 Apr 2018 09:18:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0357328EC3 for ; Wed, 25 Apr 2018 09:18:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E6AAE28EC5; Wed, 25 Apr 2018 09:18:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6EB5D28EC3 for ; Wed, 25 Apr 2018 09:18:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A51896E1E9; Wed, 25 Apr 2018 09:18:36 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 408DE6E1D2; Wed, 25 Apr 2018 09:18:22 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id j4so5886718wme.1; Wed, 25 Apr 2018 02:18:22 -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=dGCrvcMxi1V+dFrZM2o6xJ0aTEZ2gR89vAb10Pb3O4U=; b=J5YNK8pmhKd5JFkh/f5SupVwg3SRza65/+WozKnIwfKTR0P+7t8T5zGAhY/F4cNWDa 9P+dRicimASiLRV/Pizv+n9gc8xfASA8v5d43LoAzYi1uV+zWQmb1BoHJi6b1lhTveBs N47qAD8qD8nH9m8XWFT4JG0XMP73qGaAqvMUl4vtZ4gvgnXSkB0iNbau0OwL+YMurecr iuOIQIGu4ZC4Er8zAMbZ0lAlAp0UflDhZkXF50TLz3638F4/XVR9YPzmtOKqahcBoE7r NR936MAtB/9SjuD/JdxDz0lhH3BMxxIzETKI9tbjxt4LoVLWr9Y4axZT91WSIwiWRbZz 6Iiw== 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=dGCrvcMxi1V+dFrZM2o6xJ0aTEZ2gR89vAb10Pb3O4U=; b=Vddi9BPrj3kbm8/sewZ5mHgZE8STmzAqeyECl/Vt/lT0ZFhSf96VP4JH5EaA4vQeWr aTxa5diI8yMnWDZ6DFpEzouitAOqYbcb6w2+MMyjFlpKhoGtnD/NyOwE7a2mBqe48M+J PfFCGuZlaR0nwwfGAMfxY4i5nGl9J0M5ZIpHk4uDoEE9PHHwyYnkUDabyGBtxvVBRFgi LFUpPFQa/MIsVVvICnZnrNYEQqw22d+cGRAuOJUsBCC0JMsT4T/5t5VbKwd+UreC2MZ2 wA/fJgBVhAW93cfDqsOhhvV+UAUQ7QL3Qy1aLqP1SWTFzvilPe/CwIFO+GJC9EovgMZe t66g== X-Gm-Message-State: ALQs6tB1pM93fDUNFKKH2N8ZYILDXg9KLEXkjHhUZVuQBlkzLegWcivL W9CcKxSFFIgvviP4b2BVBeE= X-Google-Smtp-Source: AIpwx4/cHCPiuz28ENB8aq6StVhWVbZGOPDtqsdciLGl4wohbKdmWZTXHjWPX7pYSZ7DKRvwdsT9Nw== X-Received: by 10.28.213.198 with SMTP id m189mr14290055wmg.28.1524647900432; Wed, 25 Apr 2018 02:18:20 -0700 (PDT) Received: from localhost (p200300E41F041C0032947E635CB49D15.dip0.t-ipconnect.de. [2003:e4:1f04:1c00:3294:7e63:5cb4:9d15]) by smtp.gmail.com with ESMTPSA id m16sm17302836wmb.42.2018.04.25.02.18.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 25 Apr 2018 02:18:19 -0700 (PDT) From: Thierry Reding To: Christoph Hellwig , Joerg Roedel Subject: [PATCH 3/4] ARM: dma-mapping: Implement arch_iommu_detach_device() Date: Wed, 25 Apr 2018 11:18:14 +0200 Message-Id: <20180425091815.16264-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180425091815.16264-1-thierry.reding@gmail.com> References: <20180425091815.16264-1-thierry.reding@gmail.com> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP 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 --- arch/arm/include/asm/dma-mapping.h | 3 +++ arch/arm/mm/dma-mapping-nommu.c | 4 ++++ arch/arm/mm/dma-mapping.c | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index 8436f6ade57d..d6d5bd44f962 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 arch_iommu_detach_device arch_iommu_detach_device +extern void arch_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 619f24a42d09..60fef97d8452 100644 --- a/arch/arm/mm/dma-mapping-nommu.c +++ b/arch/arm/mm/dma-mapping-nommu.c @@ -242,6 +242,10 @@ void arch_teardown_dma_ops(struct device *dev) { } +void arch_iommu_detach_device(struct device *dev) +{ +} + #define PREALLOC_DMA_DEBUG_ENTRIES 4096 static int __init dma_debug_do_init(void) diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 8c398fedbbb6..1957938d8c9c 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -2366,6 +2366,21 @@ static void arm_teardown_iommu_dma_ops(struct device *dev) arm_iommu_release_mapping(mapping); } +void arch_iommu_detach_device(struct device *dev) +{ + struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); + const struct dma_map_ops *dma_ops; + + if (!mapping) + return; + + arm_iommu_release_mapping(mapping); + arm_iommu_detach_device(dev); + + dma_ops = arm_get_dma_map_ops(dev->archdata.dma_coherent); + set_dma_ops(dev, dma_ops); +} + #else static bool arm_setup_iommu_dma_ops(struct device *dev, u64 dma_base, u64 size, @@ -2378,6 +2393,10 @@ static void arm_teardown_iommu_dma_ops(struct device *dev) { } #define arm_get_iommu_dma_map_ops arm_get_dma_map_ops +void arch_iommu_detach_device(struct device *dev) +{ +} + #endif /* CONFIG_ARM_DMA_USE_IOMMU */ static const struct dma_map_ops *arm_get_dma_map_ops(bool coherent)