Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp2511975imm; Mon, 24 Sep 2018 05:43:12 -0700 (PDT) X-Google-Smtp-Source: ACcGV62k0M+JnslFPz2dBh/jdKLXr67yMMJY9chsbIhuE6c5uMKQ+wUPyKtqG4VBp4NrEZ6N+/yo X-Received: by 2002:a17:902:622:: with SMTP id 31-v6mr10627975plg.315.1537792992690; Mon, 24 Sep 2018 05:43:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537792992; cv=none; d=google.com; s=arc-20160816; b=YpYAt3Th8fSKYTLOY+848nd6t4edL8b0HuF5jXuCL6WJy5PPh3DV6vW/n+tfhLe7ht /EZ5lxRfhxuA9HyRVuDFRmcfpUct4zuf9YHqBaci0guIBryngw9nCrMx2uuaE+aRba8K KTjVzjG78z5RaW9Rnnjciwti7RZxB/0uCpLNYvlvZ0cpDR501lgqS0YXrELiAGFurIlm UlFIymWzsgjWon7kc+SmfNMFrXWgcUKW101Qv+TNeKRcIFmAxkVdyKPzQZ1PTgGtUxoi C+fmhuCl0wEPzbU+t7YrWc6+FnUGr7ONhhSN0Cfl+yoLJqjE7vRsJ20hwgyvUwxVAx9G Luig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from; bh=2LHj+aGMeH9UDW1XThTGQydCeQclZCE1ubVam7Lvczs=; b=Vhnei2x8fohD9IXEBV1c1nfzCOTMZj/ojwOVC5GB4RN68mKMgNEvEE41rRrI46Ja/c y9ALhJJltinBtEi46PSf4wShiurWkPMY8YZD16zmBupY3D7VIMfI08vuCqjcQzMDQ96m RXawBhM5nAu1zxBgT6utDc7DFYB58Y7o8b5PTQSs4loi2akoHThwSwvdwqK6f2CmeQr4 Bjnh3YrSZ3kKYqEx+V9kKrVbOaDhHBMfHVVOjU9p2Ql/VwT4OFIgYODcR7h4RblrmBaG kzNaxUj1srTpHihf27wUE0PpDeQ0GJMNhc0+U7cekM171aNBfbCZ5Ba8cMixTanopEql 1e3Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 73-v6si3302176pfv.139.2018.09.24.05.42.56; Mon, 24 Sep 2018 05:43:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388889AbeIXSoF (ORCPT + 99 others); Mon, 24 Sep 2018 14:44:05 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:59276 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388102AbeIXSoF (ORCPT ); Mon, 24 Sep 2018 14:44:05 -0400 Received: from localhost (ip-213-127-77-73.ip.prioritytelecom.net [213.127.77.73]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 33831109F; Mon, 24 Sep 2018 12:42:06 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thierry Reding , Christoph Hellwig , Robin Murphy , Nicolas Chauvet , Ben Skeggs , Sasha Levin Subject: [PATCH 4.18 186/235] drm/nouveau: tegra: Detach from ARM DMA/IOMMU mapping Date: Mon, 24 Sep 2018 13:52:52 +0200 Message-Id: <20180924113123.154710693@linuxfoundation.org> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20180924113103.999624566@linuxfoundation.org> References: <20180924113103.999624566@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Thierry Reding [ Upstream commit b59fb482b52269977ee5de205308e5b236a03917 ] Depending on the kernel configuration, early ARM architecture setup code may have attached the GPU to a DMA/IOMMU mapping that transparently uses the IOMMU to back the DMA API. Tegra requires special handling for IOMMU backed buffers (a special bit in the GPU's MMU page tables indicates the memory path to take: via the SMMU or directly to the memory controller). Transparently backing DMA memory with an IOMMU prevents Nouveau from properly handling such memory accesses and causes memory access faults. As a side-note: buffers other than those allocated in instance memory don't need to be physically contiguous from the GPU's perspective since the GPU can map them into contiguous buffers using its own MMU. Mapping these buffers through the IOMMU is unnecessary and will even lead to performance degradation because of the additional translation. One exception to this are compressible buffers which need large pages. In order to enable these large pages, multiple small pages will have to be combined into one large (I/O virtually contiguous) mapping via the IOMMU. However, that is a topic outside the scope of this fix and isn't currently supported. An implementation will want to explicitly create these large pages in the Nouveau driver, so detaching from a DMA/IOMMU mapping would still be required. Signed-off-by: Thierry Reding Acked-by: Christoph Hellwig Reviewed-by: Robin Murphy Tested-by: Nicolas Chauvet Signed-off-by: Ben Skeggs Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c @@ -23,6 +23,10 @@ #ifdef CONFIG_NOUVEAU_PLATFORM_DRIVER #include "priv.h" +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU) +#include +#endif + static int nvkm_device_tegra_power_up(struct nvkm_device_tegra *tdev) { @@ -105,6 +109,15 @@ nvkm_device_tegra_probe_iommu(struct nvk unsigned long pgsize_bitmap; int ret; +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU) + if (dev->archdata.mapping) { + struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); + + arm_iommu_detach_device(dev); + arm_iommu_release_mapping(mapping); + } +#endif + if (!tdev->func->iommu_bit) return;