From patchwork Wed May 30 14:06:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 922827 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="DEDVwHxS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40wspJ09tyz9s1b for ; Thu, 31 May 2018 00:06:32 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752752AbeE3OGb (ORCPT ); Wed, 30 May 2018 10:06:31 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:53616 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751844AbeE3OGa (ORCPT ); Wed, 30 May 2018 10:06:30 -0400 Received: by mail-wm0-f67.google.com with SMTP id a67-v6so47953694wmf.3 for ; Wed, 30 May 2018 07:06:30 -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=IfySumL2CjtsKoPphQR+ILzILHTWDa0FZxMi4FCgVWg=; b=DEDVwHxS61svtqtVHNSVZyiYcKY848UC4BhXnVbX8o5SliNojuXvWhBAlUP+gTZkFU Fvh4AqjUQ2CT8HCVND7xUnSVeS2GJ5zkPm71ke0CJm+0IKkl6+qw4RgO9F1wNMtRizYf 573rcrEnNNIdcoXVqW2dFDXreEuqd5S4lw9cA6zFS009X9TSglmE1fDZ7udfRWPVbiln aA1yPS+JpPsK5SxEq065OGswkexKCnPsg/X3f2Gskff5KQAcKxXbrF1lG+uB56Ewx0Rl 3OKhyexF8sQVQ1xUIiMZC3RTG2/wXstpPLlwAGIVHu2Hhttk0+biyXdj3fg6QczNLpOw mhzQ== 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=IfySumL2CjtsKoPphQR+ILzILHTWDa0FZxMi4FCgVWg=; b=iLWai1Fy0sScr/IWylvgi0g9EWX5blrSPrEtfJk72e9WOuOZrpB3dd3d4BwlJzhWVQ oNqBR5jKlD7HPOPOhh37c5Y+EOSvNfApVNAGgKDA1r/cs43G32zFM7/anfUbjNVK4o0k TFpXVBNalnDMLox9WgNoqmFTshLv01OhUttHC2najf3ldqmpTiKTGtuGtntEA+WQmvw6 w09+TbRoV89ScptkzleYupJrYpng3rEYSeOaudDSJ8XRmgL7aIPZwCNxD54RTLfY7XXK qx4cZBX3a1JEGNsy486oS9ighbe2VUII4+lhyUbpj1+IyJVcqRltnfoxjUxzPVFMN+rF YIkA== X-Gm-Message-State: APt69E3736ERDygHtIVtvVzG48ffVTVHtSCOl9EYxezFbCIy/tkrQILK 0dlKdHB/agXgR31GG/v5pAU= X-Google-Smtp-Source: ADUXVKJ8pgOQLYUlCQjFZD5GcawRaNSSyVEW1UZMx+y3Qe4uzdBadmc2n9SEVH4wxEd0Om/ykvZKcw== X-Received: by 2002:a1c:6d85:: with SMTP id b5-v6mr1508086wmi.135.1527689189645; Wed, 30 May 2018 07:06:29 -0700 (PDT) Received: from localhost (p2E5BEDA6.dip0.t-ipconnect.de. [46.91.237.166]) by smtp.gmail.com with ESMTPSA id j13-v6sm31758746wre.38.2018.05.30.07.06.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 May 2018 07:06:28 -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 v4 1/2] ARM: dma-mapping: Set proper DMA ops in arm_iommu_detach_device() Date: Wed, 30 May 2018 16:06:24 +0200 Message-Id: <20180530140625.21247-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180530140625.21247-1-thierry.reding@gmail.com> References: <20180530140625.21247-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 Instead of setting the DMA ops pointer to NULL, set the correct, non-IOMMU ops depending on the device's coherency setting. Signed-off-by: Thierry Reding Reviewed-by: Robin Murphy Acked-by: Russell King Acked-by: Christoph Hellwig --- Changes in v4: - new patch to fix existing arm_iommu_detach_device() to do what we need arch/arm/mm/dma-mapping.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index af27f1c22d93..87a0037574e4 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -1151,6 +1151,11 @@ int arm_dma_supported(struct device *dev, u64 mask) return __dma_supported(dev, mask, false); } +static const struct dma_map_ops *arm_get_dma_map_ops(bool coherent) +{ + return coherent ? &arm_coherent_dma_ops : &arm_dma_ops; +} + #ifdef CONFIG_ARM_DMA_USE_IOMMU static int __dma_info_to_prot(enum dma_data_direction dir, unsigned long attrs) @@ -2296,7 +2301,7 @@ void arm_iommu_detach_device(struct device *dev) iommu_detach_device(mapping->domain, dev); kref_put(&mapping->kref, release_iommu_mapping); to_dma_iommu_mapping(dev) = NULL; - set_dma_ops(dev, NULL); + set_dma_ops(dev, arm_get_dma_map_ops(dev->archdata.dma_coherent)); pr_debug("Detached IOMMU controller from %s device.\n", dev_name(dev)); } @@ -2357,11 +2362,6 @@ static void arm_teardown_iommu_dma_ops(struct device *dev) { } #endif /* CONFIG_ARM_DMA_USE_IOMMU */ -static const struct dma_map_ops *arm_get_dma_map_ops(bool coherent) -{ - return coherent ? &arm_coherent_dma_ops : &arm_dma_ops; -} - void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, const struct iommu_ops *iommu, bool coherent) {