From patchwork Fri Feb 1 13:28:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 10792753 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DBB90922 for ; Fri, 1 Feb 2019 13:28:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CD3AC32009 for ; Fri, 1 Feb 2019 13:28:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CB7C43201F; Fri, 1 Feb 2019 13:28:45 +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.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED 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 CA6E8320FF for ; Fri, 1 Feb 2019 13:28:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7F5316E1BA; Fri, 1 Feb 2019 13:28:42 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id 127486E1BA for ; Fri, 1 Feb 2019 13:28:41 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id m1so6126697wml.2 for ; Fri, 01 Feb 2019 05:28:40 -0800 (PST) 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:mime-version :content-transfer-encoding; bh=lYjbvBQ+KRlm/th3xSGviRTs6pQtmexDnVbiUf9ftyU=; b=QdYok1wCX9HAtd/kRIc1zEfBs9mR46XnOBDHGjGPi3VbnvZ1hphqzI94kKE1lIEts7 ZvsSfa29joosrZqL8Nbqkeyo3mL96yuR/FwtGjuVZZBYL5vHxMWajtuLWcS7FQ3EIpd7 HkTdFei2CXNMZ/iEMCTDUVrY2ZMfvOk6avkbAzd7uAU/NZtuk1eBhh4D0EX/ez3vGdup RqHXg0skKtNjwUkDU5pCRrNOYZoSwzwDGgrLxCHc2zgrWLiiwZCcWtrJWRCCD3KcGXq2 9u24iAt0xbwq1fxvKoqpxK63QEDasxjGyWSTV68WKAYCLa+wb5cCjwf4PCq9b8J97fyx W+qQ== X-Gm-Message-State: AHQUAuamz4N8x19bjaU1hOvNdxT9L2EuVuzwyn5XVYhXO3d3hm5WZKpO /4Rq82SZlvsibNlhLQMozYo= X-Google-Smtp-Source: AHgI3IbLfRQq5K54+JdZzsGzST1HrMUvSrl9PmsVdRuzrnFP+C5E14Iil0B1F6ZrgsLOvcvdsXv/Ag== X-Received: by 2002:a1c:e1d5:: with SMTP id y204mr2467089wmg.65.1549027719458; Fri, 01 Feb 2019 05:28:39 -0800 (PST) Received: from localhost (pD9E51040.dip0.t-ipconnect.de. [217.229.16.64]) by smtp.gmail.com with ESMTPSA id o16sm13319659wrn.11.2019.02.01.05.28.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Feb 2019 05:28:38 -0800 (PST) From: Thierry Reding To: Thierry Reding Subject: [PATCH v3 00/16] drm/tegra: Fix IOVA space on Tegra186 and later Date: Fri, 1 Feb 2019 14:28:21 +0100 Message-Id: <20190201132837.12327-1-thierry.reding@gmail.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 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: linux-tegra@vger.kernel.org, Dmitry Osipenko , dri-devel@lists.freedesktop.org, Mikko Perttunen Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Thierry Reding Tegra186 and later are different from earlier generations in that they use an ARM SMMU rather than the Tegra SMMU. The ARM SMMU driver behaves slightly differently in that the geometry for IOMMU domains is set only after a device was attached to it. This is to make sure that the SMMU instance that the domain belongs to is known, because each instance can have a different input address space (i.e. geometry). Work around this by moving all IOVA allocations to a point where the geometry of the domain is properly initialized. This second version of the series addresses all review comments and adds a number of patches that will actually allow host1x to work with an SMMU enabled on Tegra186. The patches also add programming required to address the full 40 bits of address space. The third version of the series fixes the 40-bit addressing code by making sure that wide opcodes are always written atomically to the push buffer. Another pair of patches are introduced to fix a long-standing bug where the HOST1X_CHANNEL_DMAEND register wasn't properly programmed and one push buffer memory optimization that avoid wasting almost one full memory page per push buffer. This supersedes the following patch: https://patchwork.kernel.org/patch/10775579/ Thierry Thierry Reding (16): gpu: host1x: Set up stream ID table gpu: host1x: Program the channel stream ID gpu: host1x: Introduce support for wide opcodes gpu: host1x: Support 40-bit addressing gpu: host1x: Use direct DMA with IOMMU API usage gpu: host1x: Restrict IOVA space to DMA mask gpu: host1x: Support 40-bit addressing on Tegra186 gpu: host1x: Use correct semantics for HOST1X_CHANNEL_DMAEND gpu: host1x: Optimize CDMA push buffer memory usage drm/tegra: Store parent pointer in Tegra DRM clients drm/tegra: vic: Load firmware on demand drm/tegra: Setup shared IOMMU domain after initialization drm/tegra: Restrict IOVA space to DMA mask drm/tegra: vic: Do not clear driver data drm/tegra: vic: Support stream ID register programming arm64: tegra: Enable SMMU for VIC on Tegra186 arch/arm64/boot/dts/nvidia/tegra186.dtsi | 1 + drivers/gpu/drm/tegra/drm.c | 57 +++++---- drivers/gpu/drm/tegra/drm.h | 1 + drivers/gpu/drm/tegra/vic.c | 75 ++++++++--- drivers/gpu/drm/tegra/vic.h | 9 ++ drivers/gpu/host1x/cdma.c | 132 ++++++++++++++++++-- drivers/gpu/host1x/cdma.h | 2 + drivers/gpu/host1x/dev.c | 49 +++++++- drivers/gpu/host1x/dev.h | 8 ++ drivers/gpu/host1x/hw/cdma_hw.c | 32 ++++- drivers/gpu/host1x/hw/channel_hw.c | 42 ++++++- drivers/gpu/host1x/hw/host1x06_hardware.h | 6 + drivers/gpu/host1x/hw/host1x07_hardware.h | 6 + drivers/gpu/host1x/hw/hw_host1x06_channel.h | 11 ++ drivers/gpu/host1x/hw/hw_host1x07_channel.h | 11 ++ include/trace/events/host1x.h | 26 ++++ 16 files changed, 404 insertions(+), 64 deletions(-) create mode 100644 drivers/gpu/host1x/hw/hw_host1x06_channel.h create mode 100644 drivers/gpu/host1x/hw/hw_host1x07_channel.h