From patchwork Fri Feb 1 13:28:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 1034769 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="XoTncePP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43rdH24myQz9sDX for ; Sat, 2 Feb 2019 00:29:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728007AbfBAN3C (ORCPT ); Fri, 1 Feb 2019 08:29:02 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:54075 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727943AbfBAN3C (ORCPT ); Fri, 1 Feb 2019 08:29:02 -0500 Received: by mail-wm1-f66.google.com with SMTP id d15so6137070wmb.3 for ; Fri, 01 Feb 2019 05:29:00 -0800 (PST) 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 :mime-version:content-transfer-encoding; bh=cUH3hZoO0g/LZ+pZUMo8PX/7722b7rvBvBxyOPDoCcc=; b=XoTncePP8V6Vc2QRdzQqzge3WCdrfAu5gnH0CUBRrit2yrhdHDBQ44ps6TZb4s8Pa8 klnEhnVbZrcWE24ioh9UZh/Zrbe6LuiuRjHAbbyVq+K0fYkHCXnnxLji9MwixoEY45zX A6V2wPlOfVu0GLM0wvqM96oRQmQdNZQrTzhgz39RrBgF/jLwcPcc/DGVvKrWxdy82o9b 7WNm+3tNh68lXzSKnlbXwm4kGn80R7RnDHaR9nYk3YPeQBaRbPw5dl01j0bczCR9yawE k/HfIp6asQjawiSDkr7DfnvYLNV/7ZOnEIT3829OUP+4jONDHXGKOysjJo9rlw/6MvKs 1zww== 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:mime-version:content-transfer-encoding; bh=cUH3hZoO0g/LZ+pZUMo8PX/7722b7rvBvBxyOPDoCcc=; b=braDnX/BlKUVPAoHxEJiN0UbAhheQ89bM1qkzGO8Ox94ZHD4HDZVVVFvN5IhMCgGkm Quy1EF3Z4z1Nkep382rFNw91Pv6x3nxIOPvvbQX64QcM9k4wxN8gac2UMVRhWXmsTcRs zSa5HkXroTVFxvqhoO5MpnArRSQQXAhps7VusLenUOhYAO/4/dQWBLi/cPjcsYCXQ4hR xdlSPH+n7AJ12huxnW/Tt+0yX0MKzmGcfMyjjpEy7z2OPBrLwmYlPKlzpzdjLf5SNjMn IJWflTeRF4EbQWO89a7D+qMn6LHrxv44PKg1IK2HIIn7aa+8ntUfe2yewAMZaDLG7mMG JOhQ== X-Gm-Message-State: AHQUAuY6k4RPqnh+7huJRwDhvKPiHffJwP0iAsBfZsWECKXznmPxDcs5 u+RU7WuTdHZzYUYbwRlMNkI= X-Google-Smtp-Source: AHgI3IYZams16bYkKw7SyylfQaT0UU0+K1Huz+TUWLb5CnsuuIh2CPuXuNoHn2wXUljuQ3WaRa5Lag== X-Received: by 2002:a1c:8484:: with SMTP id g126mr2550136wmd.117.1549027739404; Fri, 01 Feb 2019 05:28:59 -0800 (PST) Received: from localhost (pD9E51040.dip0.t-ipconnect.de. [217.229.16.64]) by smtp.gmail.com with ESMTPSA id m15sm10401476wrr.95.2019.02.01.05.28.58 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Feb 2019 05:28:58 -0800 (PST) From: Thierry Reding To: Thierry Reding Cc: Mikko Perttunen , Dmitry Osipenko , dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org Subject: [PATCH v3 13/16] drm/tegra: Restrict IOVA space to DMA mask Date: Fri, 1 Feb 2019 14:28:34 +0100 Message-Id: <20190201132837.12327-14-thierry.reding@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190201132837.12327-1-thierry.reding@gmail.com> References: <20190201132837.12327-1-thierry.reding@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding On Tegra186 and later, the ARM SMMU provides an input address space that is 48 bits wide. However, memory clients can only address up to 40 bits. If the geometry is used as-is, allocations of IOVA space can end up in a region that cannot be addressed by the memory clients. To fix this, restrict the IOVA space to the DMA mask of the host1x device. Note that, technically, the IOVA space needs to be restricted to the intersection of the DMA masks for all clients that are attached to the IOMMU domain. In practice using the DMA mask of the host1x device is sufficient because all host1x clients share the same DMA mask. Signed-off-by: Thierry Reding Reviewed-by: Dmitry Osipenko Tested-by: Dmitry Osipenko --- drivers/gpu/drm/tegra/drm.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index 271c7a5fc954..0c5f1e6a0446 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c @@ -136,11 +136,12 @@ static int tegra_drm_load(struct drm_device *drm, unsigned long flags) if (tegra->domain) { u64 carveout_start, carveout_end, gem_start, gem_end; + u64 dma_mask = dma_get_mask(&device->dev); dma_addr_t start, end; unsigned long order; - start = tegra->domain->geometry.aperture_start; - end = tegra->domain->geometry.aperture_end; + start = tegra->domain->geometry.aperture_start & dma_mask; + end = tegra->domain->geometry.aperture_end & dma_mask; gem_start = start; gem_end = end - CARVEOUT_SZ;