From patchwork Fri Feb 1 13:28:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 1034762 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="O0ylnupe"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43rdGr5TDHz9sDX for ; Sat, 2 Feb 2019 00:28:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726190AbfBAN2v (ORCPT ); Fri, 1 Feb 2019 08:28:51 -0500 Received: from mail-wr1-f66.google.com ([209.85.221.66]:33215 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726486AbfBAN2u (ORCPT ); Fri, 1 Feb 2019 08:28:50 -0500 Received: by mail-wr1-f66.google.com with SMTP id a16so1496550wrv.0 for ; Fri, 01 Feb 2019 05:28:49 -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=H6oxxYeF69Pq45FSTtSVXJ7NZYF5O9gE4IxYJVdAZDA=; b=O0ylnupen2DNZ0uuQD8CXrmyBc2BucUW/rDQwhobjJSLSr7DbKdomkMqWMQ/Odu3cn SQDJg4n1iSq6tLqKCGm7vaxCJWJ9GXLXZZzdwM8oLasa7zPtbLUkJRdJxBU7NZtiDDAw iEqvgrfgwF+WWjzftfz6ANEWbYprNRjIWA8rRVsF7mHuNi6vM0viGcT7kGiYGE+zFUf7 ljEVzq9yno/U0oHCTBpEAwtiHVORZ0x0kChlrOEnGkPRteqWBu8jOOww8FjyTUvWoV4r BLXWILcXHsz7AzVdwsdaR7+bwj5rQIjhA7kmXiYikrREl+KL9pY1QmboEt+hHm9w2diE SC1g== 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=H6oxxYeF69Pq45FSTtSVXJ7NZYF5O9gE4IxYJVdAZDA=; b=QoXjhJmJecknWoBLjyqwi1C5/4R8vBgdKewrOZLZedcNxvDrKzJmbAmaQB7+WXC9Dz nb93I8VoMaaMH29YuskrPeenGdlDM8rSG18NQLGS1HOcQI8Au566ZMiYKk0KWQJEvLYA z3uOofN8p6MkupkkEe9UleB7krTNjmME6l4AFXhWM4dA03GRfVKan+ipOZ5JGZG3g8AI KVq26Iyvspm2NEdRfOCYXQrV4izFH7moBxyKM3XaanNDtJ2JNp1mznGIxu5CVdUhN6ei Gq5wZYbNpL13X3zbM2zSW9uwEE58E+u+/HwPs+uIigzw5O8sT8fAaSxZ3GSCMZbFycMp iotQ== X-Gm-Message-State: AJcUukeL+XQpojLwsrrmcUzgZ/I6dICKrJHeyhxQtlkXPZzoJt1oilTF qr7R8+DR8TDB4B+ful4LmyA= X-Google-Smtp-Source: ALg8bN6gGfZkja8X3orQ4WQB+1XtEYJuV+sv3tz/pCTdzrf9YaMs9U7wNoNJ9yH5Z0PFkgEtWLmxxA== X-Received: by 2002:a5d:6988:: with SMTP id g8mr37073193wru.33.1549027728934; Fri, 01 Feb 2019 05:28:48 -0800 (PST) Received: from localhost (pD9E51040.dip0.t-ipconnect.de. [217.229.16.64]) by smtp.gmail.com with ESMTPSA id b13sm5597369wrn.28.2019.02.01.05.28.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Feb 2019 05:28:48 -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 06/16] gpu: host1x: Restrict IOVA space to DMA mask Date: Fri, 1 Feb 2019 14:28:27 +0100 Message-Id: <20190201132837.12327-7-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 is not addressable by the memory clients. To fix this, restrict the IOVA space to the DMA mask of the host1x device. Signed-off-by: Thierry Reding Reviewed-by: Dmitry Osipenko Tested-by: Dmitry Osipenko --- drivers/gpu/host1x/dev.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c index 4c044ee54fe6..544b67f2b3ff 100644 --- a/drivers/gpu/host1x/dev.c +++ b/drivers/gpu/host1x/dev.c @@ -283,6 +283,8 @@ static int host1x_probe(struct platform_device *pdev) host->group = iommu_group_get(&pdev->dev); if (host->group) { struct iommu_domain_geometry *geometry; + u64 mask = dma_get_mask(host->dev); + dma_addr_t start, end; unsigned long order; err = iova_cache_get(); @@ -310,11 +312,12 @@ static int host1x_probe(struct platform_device *pdev) } geometry = &host->domain->geometry; + start = geometry->aperture_start & mask; + end = geometry->aperture_end & mask; order = __ffs(host->domain->pgsize_bitmap); - init_iova_domain(&host->iova, 1UL << order, - geometry->aperture_start >> order); - host->iova_end = geometry->aperture_end; + init_iova_domain(&host->iova, 1UL << order, start >> order); + host->iova_end = end; } skip_iommu: