From patchwork Wed Dec 12 20:38:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012271 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="RCM4sHVD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTWw0P2gz9s7h for ; Thu, 13 Dec 2018 07:52:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727210AbeLLUwG (ORCPT ); Wed, 12 Dec 2018 15:52:06 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:38064 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726294AbeLLUwF (ORCPT ); Wed, 12 Dec 2018 15:52:05 -0500 Received: by mail-pl1-f194.google.com with SMTP id e5so9156143plb.5; Wed, 12 Dec 2018 12:52:05 -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=m4Qv/57YSOuii7c1Tuz+KC/jZPl9gkkiFtIGT0hxDTM=; b=RCM4sHVDxxwA1NCrJP56E2CynuY78JvUNZO8MeiZkQt9qx+HBEC2XDOwP8QoTOdk2F jsOjFFuvJJuLeHnnkgrCEBvmymkl98FfFg1+wFRh8dlT1COwCZeQezVsSRMs9NWSg4KT QzNFWGMxw5oAzow2Yas69/N0EvzF27iLaFruWPVaEu9DJs+4bXCG67NyIrM5GG+EenYz lwDNMvvZiXReDBnJZfDNGJ11h377gyOZIaXZodzFE6quJpoBmEsAagrfoKZrqfGynkwu l4z8GU5qeRrarlyRxOYk/fnSg1HpzHcOPHzJoBEnJT3FYkVR7yHT5CEToNlmenuJ+aVn bYvw== 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=m4Qv/57YSOuii7c1Tuz+KC/jZPl9gkkiFtIGT0hxDTM=; b=PA8tP9nVpX70IN/49C8b22uKZEzhO/C5sM77RKrPvgbnXYbVuSYERcpTjwU1zSB8Sz oB6UwxsIH5pucVwUUtVuT3Z7Z14+EnjOiWPVYPN4O5gaWTWOSNCMRxnnEjdQt9unw96P x0nrTaE8vJcVqXEPNqHlQBSAAzPCdhso0WcG0xVwBuuZk+aDbuJYBFkY/WqmZ2xx8WYP +gf6smQZOhks6TLb8kD6BMFAO58lRI9EiJ+bHza//8Xo9qsbYXZSFL+AoLrbVfdjSZX7 kUF1SeTIMmXaAPbn9mFnVZGNucckRBZGlsRtZ9kPCIJFM20zG0O47wPOCNMb2XFRRPLh +Qjw== X-Gm-Message-State: AA+aEWb+WTUMhVMfzSplUUt1mO6dtI/JuQKCKPSE5CZ5sG7HLPMIu01l 9HWGCaOytlVnFJISamxO8ss= X-Google-Smtp-Source: AFSGD/UK79UJzdtSvpz00LmCrGtLELv75uTlKdO+AXwRWWEdRNTbv/Is7TJ12yK+WRdicL/qCT9YvQ== X-Received: by 2002:a17:902:7044:: with SMTP id h4mr20947759plt.35.1544647925047; Wed, 12 Dec 2018 12:52:05 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.51.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:52:04 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 01/24] iommu/tegra: gart: Remove pr_fmt and clean up includes Date: Wed, 12 Dec 2018 23:38:44 +0300 Message-Id: <20181212203907.23461-2-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Remove unneeded headers inclusion and sort the headers in alphabet order. Remove pr_fmt macro since there is no pr_*() in the code and it doesn't affect dev_*() functions. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index da6a4e357b2b..ff75cf60117b 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -19,22 +19,15 @@ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. */ -#define pr_fmt(fmt) "%s(): " fmt, __func__ - #include +#include +#include +#include #include -#include -#include +#include #include +#include #include -#include -#include -#include -#include -#include -#include - -#include /* bitmap of the page sizes currently supported */ #define GART_IOMMU_PGSIZES (SZ_4K) From patchwork Wed Dec 12 20:38:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012272 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="ga163BcJ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTX30h4dz9s7T for ; Thu, 13 Dec 2018 07:52:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727856AbeLLUwM (ORCPT ); Wed, 12 Dec 2018 15:52:12 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:37345 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726294AbeLLUwM (ORCPT ); Wed, 12 Dec 2018 15:52:12 -0500 Received: by mail-pf1-f193.google.com with SMTP id y126so9443798pfb.4; Wed, 12 Dec 2018 12:52:11 -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=QmJLG8/4S02Vk83xdfor+8cYOiPQL97wonxSbJV1350=; b=ga163BcJXr9u5EjngUdZ3pUTdUQaCvKYDpE+BjMRc8Yxx46MBsD+ixAA9mlgWXQXYy E3w87DOJR06/9F8/ObIkY6fi1adWgKHlpL+Pzy0isF5d5GwySWp4CcQqH0UB/JZmcCP4 Xkq50sjqd8Y7qh4xi12yEAcFWGczhPSQDMnDvYzgFMM/1Ti2XbWe7bewkmicYo384jvu qb4UQ+9RsvP2BGCiDZtQg6aIRI358Pk9ysJAfN7Cvwjn8bnQ5UNOgs3xjpYELIoGMKzG ZDBI17n90PtUJh/imCU9JPPYvKdLTOyxFtazQ2yPOIMh2YVeacH+qu3oTZHrhPQFXRhw T2pg== 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=QmJLG8/4S02Vk83xdfor+8cYOiPQL97wonxSbJV1350=; b=hLYVwFSv2QdhXW66RqU++F1YsSqT722Q8Y+P5YJxf1DQSATp5hIVG0NYYZhXKuKQrY BZs7KEYlqw7aYpBW0Qh+q6U5MvFKsLPYtWOmQ5rimr8uga3YgQe4lwc20gbWI7PT45Lu 5tcPFefp+lfEg7xLkCxVbVJ7Cx6GbtTg/G6wuloTUlNQw6ei56EBoM93Rn7o/V086MkM V5cFkh99+m+HbSZSJ175kohQUVl6dW8j6RjYyJoGJODU5BiLFsUQfR00nSN7xQfPvXz9 Vukrgi46znOODSzE3DhgvRrg8KTuzw/ROuwvUzA4xGPb5urWcv5LUs+yyOpUZcMfKrbF Nm6w== X-Gm-Message-State: AA+aEWYEMY1RL640aPBmSfoD0GX8m7n4qP/45khue1s0BJaQPzoe1FpR 0HiadHRbdTxjaPGPHSc5md3qSNfS X-Google-Smtp-Source: AFSGD/W/WnkPT7eW9459QalIVJd1X9QiI8krsRWpu3VrJNSVsU1bQIwPhfHzrKd/Bg6wh2t11FxTtw== X-Received: by 2002:a63:5e43:: with SMTP id s64mr19728980pgb.101.1544647931326; Wed, 12 Dec 2018 12:52:11 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.52.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:52:10 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 02/24] iommu/tegra: gart: Clean up driver probe errors handling Date: Wed, 12 Dec 2018 23:38:45 +0300 Message-Id: <20181212203907.23461-3-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Properly clean up allocated resources on the drivers probe failure and remove unneeded checks. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index ff75cf60117b..1cd470b2beea 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -411,9 +411,6 @@ static int tegra_gart_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; int ret; - if (gart_handle) - return -EIO; - BUILD_BUG_ON(PAGE_SHIFT != GART_PAGE_SHIFT); /* the GART memory aperture is required */ @@ -448,8 +445,7 @@ static int tegra_gart_probe(struct platform_device *pdev) ret = iommu_device_register(&gart->iommu); if (ret) { dev_err(dev, "Failed to register IOMMU\n"); - iommu_device_sysfs_remove(&gart->iommu); - return ret; + goto remove_sysfs; } gart->dev = &pdev->dev; @@ -463,7 +459,8 @@ static int tegra_gart_probe(struct platform_device *pdev) gart->savedata = vmalloc(array_size(sizeof(u32), gart->page_count)); if (!gart->savedata) { dev_err(dev, "failed to allocate context save area\n"); - return -ENOMEM; + ret = -ENOMEM; + goto unregister_iommu; } platform_set_drvdata(pdev, gart); @@ -472,6 +469,13 @@ static int tegra_gart_probe(struct platform_device *pdev) gart_handle = gart; return 0; + +unregister_iommu: + iommu_device_unregister(&gart->iommu); +remove_sysfs: + iommu_device_sysfs_remove(&gart->iommu); + + return ret; } static const struct dev_pm_ops tegra_gart_pm_ops = { From patchwork Wed Dec 12 20:38:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012273 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="I5RmiOiW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTX36LZPz9s7h for ; Thu, 13 Dec 2018 07:52:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728170AbeLLUwT (ORCPT ); Wed, 12 Dec 2018 15:52:19 -0500 Received: from mail-pg1-f196.google.com ([209.85.215.196]:40733 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726294AbeLLUwS (ORCPT ); Wed, 12 Dec 2018 15:52:18 -0500 Received: by mail-pg1-f196.google.com with SMTP id z10so8886036pgp.7; Wed, 12 Dec 2018 12:52:17 -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=EvZF4Cwn2c8hVYMCApGqp+umeo8NNVKrUr+shTKYQ9M=; b=I5RmiOiWnSD5upJYiAC2be5GBtZc5iXSf5nXQsyuAhHYiVERF0xPHAeFVH0TZzJ3SH /D11Shu2344PAZYMRmhIoXIc51GWr3waKj/XJ346J55A5Z/7eyh6pEdT2bNKSqbgLEpP WtlynAkGsowXyRnpHQT3d5fRFUv6Cj1gegH0+O7RRUuO5F5OWzt5GjaybLeqYbiDPX2I uS0LyzrJlYTHwYdqWDjCxkEzZ/4b5CstMatKf8PyFYR7P6UKCmiVZrQB8ZizMGF4K8Vd eotM6x+Y7DYL/wEDbZWGplryusfn3IaNOCEM6lO0V8x9sOkaMcdbDaxd9bMqS7SigFn9 xdzQ== 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=EvZF4Cwn2c8hVYMCApGqp+umeo8NNVKrUr+shTKYQ9M=; b=oIGjRosdqWo6jhnke0rYY3H9/LBMh0b3BMVQkalWreOjoE+de6TBOdzoM8vigTIQlI cBBx826a4IPvu6+JcYNo8GMC2+/GDIyo871zP1wNuMXX6JnPkUPrh+6s6WT1mbVgqcE8 Rvn6AeA3TlWajpBm3GfN14qWEmh2UCL8rMAgGdZwdm7UWCxl8FnkFvlFPwBWSP2cSVNI WUdDvc6plf+wcUznMSavWBdb0AwzIJHSj+PaDIhz3+8/rhzYbRF5qEE7ps8ugNP65dLr wgmnLl7PQVkuj/WupEqCCRBt1TiF10jIGukxzqfxbx5MgZbOsX7134HDEgGjbac8y494 U8rw== X-Gm-Message-State: AA+aEWZW5AtEG6u5/FzVfE/AAjKXJd21in2BNMqdIWs9CGjziDz+JRdP XpI2LkMnFmegYqsklpgxr2s= X-Google-Smtp-Source: AFSGD/WCE9yLC+qPf556+bKf9N9jMpoJhTj3d/W9VPuiP6v3tNTaSB0YjaLvuT6HJ1C4LphPrGv05Q== X-Received: by 2002:a63:1d59:: with SMTP id d25mr5696761pgm.180.1544647937635; Wed, 12 Dec 2018 12:52:17 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.52.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:52:17 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 03/24] iommu/tegra: gart: Ignore devices without IOMMU phandle in DT Date: Wed, 12 Dec 2018 23:38:46 +0300 Message-Id: <20181212203907.23461-4-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 GART can't handle all devices, hence ignore devices that aren't related to GART. IOMMU phandle must be explicitly assign to devices in the device tree. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 1cd470b2beea..37a76388ff7e 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -345,8 +345,12 @@ static bool gart_iommu_capable(enum iommu_cap cap) static int gart_iommu_add_device(struct device *dev) { - struct iommu_group *group = iommu_group_get_for_dev(dev); + struct iommu_group *group; + if (!dev->iommu_fwspec) + return -ENODEV; + + group = iommu_group_get_for_dev(dev); if (IS_ERR(group)) return PTR_ERR(group); @@ -363,6 +367,12 @@ static void gart_iommu_remove_device(struct device *dev) iommu_device_unlink(&gart_handle->iommu, dev); } +static int gart_iommu_of_xlate(struct device *dev, + struct of_phandle_args *args) +{ + return 0; +} + static const struct iommu_ops gart_iommu_ops = { .capable = gart_iommu_capable, .domain_alloc = gart_iommu_domain_alloc, @@ -376,6 +386,7 @@ static const struct iommu_ops gart_iommu_ops = { .unmap = gart_iommu_unmap, .iova_to_phys = gart_iommu_iova_to_phys, .pgsize_bitmap = GART_IOMMU_PGSIZES, + .of_xlate = gart_iommu_of_xlate, }; static int tegra_gart_suspend(struct device *dev) @@ -441,6 +452,7 @@ static int tegra_gart_probe(struct platform_device *pdev) } iommu_device_set_ops(&gart->iommu, &gart_iommu_ops); + iommu_device_set_fwnode(&gart->iommu, dev->fwnode); ret = iommu_device_register(&gart->iommu); if (ret) { From patchwork Wed Dec 12 20:38:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012274 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="jX4FGEC3"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTXB0dQQz9s8r for ; Thu, 13 Dec 2018 07:52:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728291AbeLLUwZ (ORCPT ); Wed, 12 Dec 2018 15:52:25 -0500 Received: from mail-pg1-f196.google.com ([209.85.215.196]:33779 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728283AbeLLUwY (ORCPT ); Wed, 12 Dec 2018 15:52:24 -0500 Received: by mail-pg1-f196.google.com with SMTP id z11so8894588pgu.0; Wed, 12 Dec 2018 12:52:24 -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=fTGPE9YNACJvCR+fV/r+m5dOzoRDSwugBy/hHkWDi6w=; b=jX4FGEC3iTuYfWluKCBm4wXIIYakuq3oXrslTKMMIOLs9Reqpsz1sSbJj9katxvwaZ C7trbLUtMbv2wmNJb2hBmEWjfrzBIymlrFHgKOwLEu5Av+VKuqNu5mqfXjLvUc/We0R0 w8QBvLXAyJ2w6tbEI9BqZz0OizIlYp9SAqMBaFy9VCG1WbW9VQuWfBWuH/1XRs0EEdRZ 08L279G1MzSGLpBH7LyJCGXjvsH3HuI+Wkd4VR4gsVI427gq77KPqe4kswYrZtA9IwC8 zMlUjMu1T/y4kcci63OImlR+zpkHCkRAK0S7zU0nYnkzQs7Uix8nIaxt79lJvjh9ekyH yX8w== 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=fTGPE9YNACJvCR+fV/r+m5dOzoRDSwugBy/hHkWDi6w=; b=Vpp9Y8H+xKhAvZbjfusrY90sZgJShxCSE8L8kfar6BJdh/4dWz31QJmbF+HkF9WVt5 2PfLYbJZCM85Y8wB2wonCqAZ0JuFXuSIWv84Y3zja4wIoFXl00tMkzY+GMeUEXv0dWL2 oW3UmZR/5UDVDJnd/ImuDeiiWMti+sSdGzd4smQx6Gn2kFie+xhqAN+0cgsYwoZfSChS lpS6dvnuQlmQyESZiIMe+HRRoiNhExI1VuF5LpKuP3aE/qOREGCpYizAfIyV/TVDd12L 4ti9XSYZMHLExO99sn6w8AkF6PgPNPpXC4VKy+WbVWEjIewViAVObZXv0vLV05wloTOW wy8A== X-Gm-Message-State: AA+aEWYqfwbJ2ZcN4qUARL7fnHD37f6RgikZlYfy8+rNIvBfKdiLCHzN 6PDHR6BN9mHlreqvPH7cSz8= X-Google-Smtp-Source: AFSGD/VekcQKnyF/dM3TNcCNcFQ+vf4ZiOWVIbDTDp6hqgDM0O2XERGVlmpc+HnC9y51QUl84R5XCQ== X-Received: by 2002:a62:9683:: with SMTP id s3mr21452065pfk.60.1544647943871; Wed, 12 Dec 2018 12:52:23 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.52.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:52:23 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 04/24] iommu: Introduce iotlb_sync_map callback Date: Wed, 12 Dec 2018 23:38:47 +0300 Message-Id: <20181212203907.23461-5-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Introduce iotlb_sync_map() callback that is invoked in the end of iommu_map(). This new callback allows IOMMU drivers to avoid syncing after mapping of each contiguous chunk and sync only when the whole mapping is completed, optimizing performance of the mapping operation. Signed-off-by: Dmitry Osipenko Reviewed-by: Robin Murphy Reviewed-by: Thierry Reding --- drivers/iommu/iommu.c | 8 ++++++-- include/linux/iommu.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index cc25ec6d4c06..79e7c49ed16a 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -1582,13 +1582,14 @@ static size_t iommu_pgsize(struct iommu_domain *domain, int iommu_map(struct iommu_domain *domain, unsigned long iova, phys_addr_t paddr, size_t size, int prot) { + const struct iommu_ops *ops = domain->ops; unsigned long orig_iova = iova; unsigned int min_pagesz; size_t orig_size = size; phys_addr_t orig_paddr = paddr; int ret = 0; - if (unlikely(domain->ops->map == NULL || + if (unlikely(ops->map == NULL || domain->pgsize_bitmap == 0UL)) return -ENODEV; @@ -1617,7 +1618,7 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova, pr_debug("mapping: iova 0x%lx pa %pa pgsize 0x%zx\n", iova, &paddr, pgsize); - ret = domain->ops->map(domain, iova, paddr, pgsize, prot); + ret = ops->map(domain, iova, paddr, pgsize, prot); if (ret) break; @@ -1626,6 +1627,9 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova, size -= pgsize; } + if (ops->iotlb_sync_map) + ops->iotlb_sync_map(domain); + /* unroll mapping in case something went wrong */ if (ret) iommu_unmap(domain, orig_iova, orig_size - size); diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 11db18b9ffe8..0e90c5cc72db 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -201,6 +201,7 @@ struct iommu_ops { void (*flush_iotlb_all)(struct iommu_domain *domain); void (*iotlb_range_add)(struct iommu_domain *domain, unsigned long iova, size_t size); + void (*iotlb_sync_map)(struct iommu_domain *domain); void (*iotlb_sync)(struct iommu_domain *domain); phys_addr_t (*iova_to_phys)(struct iommu_domain *domain, dma_addr_t iova); int (*add_device)(struct device *dev); From patchwork Wed Dec 12 20:38:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012276 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="lavKos1Y"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTXQ0TcGz9s9G for ; Thu, 13 Dec 2018 07:52:38 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728316AbeLLUwb (ORCPT ); Wed, 12 Dec 2018 15:52:31 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:43882 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726294AbeLLUwa (ORCPT ); Wed, 12 Dec 2018 15:52:30 -0500 Received: by mail-pg1-f193.google.com with SMTP id v28so8877086pgk.10; Wed, 12 Dec 2018 12:52:30 -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=kU2Eh+wKq+ENzmEj80WdRyExzQltslyeqOLAnTZMbZw=; b=lavKos1YyP7Q/dEQ12FA7Mylpl7HhrOa+utkSJblEtGSpn4gq0uIwjlvuLN1zkvCO7 fwdGwhbOG745/Jj4XzV/DFZc5rF32jS/7aHemM0aYjoxmKEjkswPe3UmoMI94mhSnDIJ 4OMDx/uiGgFzAWo29MrsFRAU6VLWSWu5E3ra8Yv0iVpZqyUdrICazAsGeAhQqhOetrWv I0Ej2vrPyZXAI++sDx/fk/0rxHAVn4W26JFeYjvyONfiBEb+PkrX6OMW2GICEUSuP8X7 5d8s7jXLXDxgkMiRZw8JczSO3/woprOeHk/PqBoxZHKnuaoY1JM4i7f/hn2H/yYEP4aJ Onjw== 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=kU2Eh+wKq+ENzmEj80WdRyExzQltslyeqOLAnTZMbZw=; b=RKxfU5cUIP2N5c+nAttfelzDt4n/1DPQPFL4OC8TRFcX6G3bc3EsZC/aeOZuhZXj7n SSfMsM19QbOjLqKeGFwkwrJPVpakpnJjXBYzHg2LzLs2XTdoGJbSgLtDoxbj7QqJxw6q m8iiWtnW1L2m1w4Mx4BkgHlzyxJq+BN6HlefVz7q8C5OQWtZ/QMGxzCuwrA5nx0J0Tic EUtGQf2RhP0/k1+/Wn/7D53TnFNE1xdYP4jexPzzbMWyrQHsvctc3NM/J9V0cAEb7ohr sAKZ4PoLvhAV5sOW0xJOJO13ckOt0ni/CtHACb9NcNTX2PB8LSt0Gly8dh2RWLCzZ9W9 1Xmw== X-Gm-Message-State: AA+aEWY+RhAjfSjrr7vpsjMKjvLRt5crF6ztxFUeHFBCttXTVx6J24En BNk41zgFVPoKmONmstmDY1g= X-Google-Smtp-Source: AFSGD/VkiwFEQxGFMkkXJAJS8S0WAORIOXCS6Tc528n0CFUZIv5J2Xd3aaSfLT4J2i9VWDvEN7a3Yw== X-Received: by 2002:a63:64c:: with SMTP id 73mr19409062pgg.373.1544647950091; Wed, 12 Dec 2018 12:52:30 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.52.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:52:29 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 05/24] iommu/tegra: gart: Optimize mapping / unmapping performance Date: Wed, 12 Dec 2018 23:38:48 +0300 Message-Id: <20181212203907.23461-6-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Currently GART writes one page entry at a time. More optimal would be to aggregate the writes and flush BUS buffer in the end, this gives map/unmap 10-40% performance boost (depending on size of mapping) in comparison to flushing after each page entry update. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 37a76388ff7e..835fea461c59 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -290,7 +290,6 @@ static int gart_iommu_map(struct iommu_domain *domain, unsigned long iova, } } gart_set_pte(gart, iova, GART_PTE(pfn)); - FLUSH_GART_REGS(gart); spin_unlock_irqrestore(&gart->pte_lock, flags); return 0; } @@ -307,7 +306,6 @@ static size_t gart_iommu_unmap(struct iommu_domain *domain, unsigned long iova, spin_lock_irqsave(&gart->pte_lock, flags); gart_set_pte(gart, iova, 0); - FLUSH_GART_REGS(gart); spin_unlock_irqrestore(&gart->pte_lock, flags); return bytes; } @@ -373,6 +371,14 @@ static int gart_iommu_of_xlate(struct device *dev, return 0; } +static void gart_iommu_sync(struct iommu_domain *domain) +{ + struct gart_domain *gart_domain = to_gart_domain(domain); + struct gart_device *gart = gart_domain->gart; + + FLUSH_GART_REGS(gart); +} + static const struct iommu_ops gart_iommu_ops = { .capable = gart_iommu_capable, .domain_alloc = gart_iommu_domain_alloc, @@ -387,6 +393,8 @@ static const struct iommu_ops gart_iommu_ops = { .iova_to_phys = gart_iommu_iova_to_phys, .pgsize_bitmap = GART_IOMMU_PGSIZES, .of_xlate = gart_iommu_of_xlate, + .iotlb_sync_map = gart_iommu_sync, + .iotlb_sync = gart_iommu_sync, }; static int tegra_gart_suspend(struct device *dev) From patchwork Wed Dec 12 20:38:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012277 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="KegQ2IEt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTXS0qWmz9s7T for ; Thu, 13 Dec 2018 07:52:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728337AbeLLUwh (ORCPT ); Wed, 12 Dec 2018 15:52:37 -0500 Received: from mail-pf1-f194.google.com ([209.85.210.194]:42508 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726294AbeLLUwh (ORCPT ); Wed, 12 Dec 2018 15:52:37 -0500 Received: by mail-pf1-f194.google.com with SMTP id 64so9434071pfr.9; Wed, 12 Dec 2018 12:52:36 -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=4FKM4LRemwvTIhAkZE8YXR98dvGdEFBr7fGQqgFFRso=; b=KegQ2IEtO59NJQ4kpE2qSbYdTLx/95cFRSEy61bIa4LNn/1kbe+ZUZXKEgRwYzQju4 G4NQ658VzQcd+sfD6bKqralBesX/m8r4QjtTSNlp7wJpiC3yfCuMFKchjUn4GT85o2lA XYN9O7Yg/+8pxV4OPN2QV0oQEG9W9GCaIJxCIjYyR7mR6H6YORHa8jMWKnf1w2KBAssU r0095D/9XPYG/kmGHKC6gY49ucBMEGWW42mlUVciLFHZ2fLpQ5bYCLw1kYC8B5V78goV d8CCzQ/QVTUtml4qKK00oTXm7i06tQSsIyunUXw3DcSNAmPA6aAS4YW/pB+QOsCjlBGB 5abw== 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=4FKM4LRemwvTIhAkZE8YXR98dvGdEFBr7fGQqgFFRso=; b=Jw+scD3Ny1vDhCp9ucm0LZyq/m3h0lU/VEzseo4DNC4rLsfVKJxre4yy1z5OVFp9Di ZZpyKRhNXhG5JnQeby1ViMwXatEa7xETEjsKKSHRJPvNaRBwsTetZXAmnv+oAaHHd8pc Da2DRNwF3WsqRv3BOusyVVVQifNGD6iqcj8youG4mV5L486T8F6r3ueURD0fVGF3ZOoO HUI/6KyRpUw9mwnW1inavVvTKqq3LG6q75lNjs0QiN1oKCIZC88ZI+F82W7qzx0pKllv L8ufnGpScrSxSSb+jiO+OowlXvFcMFMpBPylu3YzMX9+C11giAvh0EQTepfDfw/OYtLS VkSw== X-Gm-Message-State: AA+aEWarHmK9vyIon8FnSZIuSV9l/Bcu9NBhAyU00S3nfWL/4wTzV1AK zpe6T4qdovtFJ/Nsoib5fno= X-Google-Smtp-Source: AFSGD/VUKnoUXfA1kAw+mJ2ozF6tG3ol8GBldP/nqzyrdqXEwVXAk/5nvclaaX+5fNWylhKMFaE/Lg== X-Received: by 2002:aa7:81d0:: with SMTP id c16mr21355962pfn.153.1544647956261; Wed, 12 Dec 2018 12:52:36 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.52.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:52:35 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 06/24] dt-bindings: memory: tegra: Squash tegra20-gart into tegra20-mc Date: Wed, 12 Dec 2018 23:38:49 +0300 Message-Id: <20181212203907.23461-7-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Splitting GART and Memory Controller wasn't a good decision that was made back in the day. Given that the GART driver wasn't ever been used by anything in the kernel, we decided that it will be better to correct the mistakes of the past and merge two bindings into a single one. As a result there is a DT ABI change for the Memory Controller that allows not to break newer kernels using older DT and not to break older kernels using newer DT, that is done by changing the 'compatible' of the node to 'tegra20-mc-gart' and adding a new-required clock property. The new clock property also puts the tegra20-mc binding in line with the bindings of the later Tegra generations. Signed-off-by: Dmitry Osipenko Reviewed-by: Rob Herring Acked-by: Thierry Reding --- .../bindings/iommu/nvidia,tegra20-gart.txt | 14 ---------- .../memory-controllers/nvidia,tegra20-mc.txt | 27 +++++++++++++------ 2 files changed, 19 insertions(+), 22 deletions(-) delete mode 100644 Documentation/devicetree/bindings/iommu/nvidia,tegra20-gart.txt diff --git a/Documentation/devicetree/bindings/iommu/nvidia,tegra20-gart.txt b/Documentation/devicetree/bindings/iommu/nvidia,tegra20-gart.txt deleted file mode 100644 index 099d9362ebc1..000000000000 --- a/Documentation/devicetree/bindings/iommu/nvidia,tegra20-gart.txt +++ /dev/null @@ -1,14 +0,0 @@ -NVIDIA Tegra 20 GART - -Required properties: -- compatible: "nvidia,tegra20-gart" -- reg: Two pairs of cells specifying the physical address and size of - the memory controller registers and the GART aperture respectively. - -Example: - - gart { - compatible = "nvidia,tegra20-gart"; - reg = <0x7000f024 0x00000018 /* controller registers */ - 0x58000000 0x02000000>; /* GART aperture */ - }; diff --git a/Documentation/devicetree/bindings/memory-controllers/nvidia,tegra20-mc.txt b/Documentation/devicetree/bindings/memory-controllers/nvidia,tegra20-mc.txt index 7d60a50a4fa1..e55328237df4 100644 --- a/Documentation/devicetree/bindings/memory-controllers/nvidia,tegra20-mc.txt +++ b/Documentation/devicetree/bindings/memory-controllers/nvidia,tegra20-mc.txt @@ -1,26 +1,37 @@ NVIDIA Tegra20 MC(Memory Controller) Required properties: -- compatible : "nvidia,tegra20-mc" -- reg : Should contain 2 register ranges(address and length); see the - example below. Note that the MC registers are interleaved with the - GART registers, and hence must be represented as multiple ranges. +- compatible : "nvidia,tegra20-mc-gart" +- reg : Should contain 2 register ranges: physical base address and length of + the controller's registers and the GART aperture respectively. +- clocks: Must contain an entry for each entry in clock-names. + See ../clocks/clock-bindings.txt for details. +- clock-names: Must include the following entries: + - mc: the module's clock input - interrupts : Should contain MC General interrupt. - #reset-cells : Should be 1. This cell represents memory client module ID. The assignments may be found in header file or in the TRM documentation. +- #iommu-cells: Should be 0. This cell represents the number of cells in an + IOMMU specifier needed to encode an address. GART supports only a single + address space that is shared by all devices, therefore no additional + information needed for the address encoding. Example: mc: memory-controller@7000f000 { - compatible = "nvidia,tegra20-mc"; - reg = <0x7000f000 0x024 - 0x7000f03c 0x3c4>; - interrupts = <0 77 0x04>; + compatible = "nvidia,tegra20-mc-gart"; + reg = <0x7000f000 0x400 /* controller registers */ + 0x58000000 0x02000000>; /* GART aperture */ + clocks = <&tegra_car TEGRA20_CLK_MC>; + clock-names = "mc"; + interrupts = ; #reset-cells = <1>; + #iommu-cells = <0>; }; video-codec@6001a000 { compatible = "nvidia,tegra20-vde"; ... resets = <&mc TEGRA20_MC_RESET_VDE>; + iommus = <&mc>; }; From patchwork Wed Dec 12 20:38:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012278 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="rOy0lhNj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTXf5Vmyz9s9G for ; Thu, 13 Dec 2018 07:52:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728363AbeLLUwo (ORCPT ); Wed, 12 Dec 2018 15:52:44 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:37507 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728341AbeLLUwn (ORCPT ); Wed, 12 Dec 2018 15:52:43 -0500 Received: by mail-pg1-f195.google.com with SMTP id 80so8891285pge.4; Wed, 12 Dec 2018 12:52:42 -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=v69aHLFvfy/7W5kF/1wqVBEZr3a+tgiAo+VuWb8wLUA=; b=rOy0lhNj6rwoN1virV5gfDokfzJeAs9cCawWNTXoJwpyHcsKGR1RmZAtJRkEV8ceU8 zeZWVevjvg8dQz7VLwt6wW2XJ6ab9QlLFDWxXS1L4E/YpAm7VXajBTP5nVbarmMN9fMO Mfc6+BoXnJgUHIofA9koTAnse5owp5k2wLPumNBMYOvKZMJIx9E1SarOW5HUJ8jt0w1A K8+UAqhUtVjwkOWQVTn5N5/5NKCFMAFT1JNk0rTGDgVFhz64dm0Ca/nxVzu8iTO3DjtP M8CCstr0EQvGTpp4CBAY3JNJRzbsM32hqlhIXsXTfDBCIrQmIkWnX7FR6Vd7dDDVwnKd mU3g== 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=v69aHLFvfy/7W5kF/1wqVBEZr3a+tgiAo+VuWb8wLUA=; b=eWnnHom6TvTZsyCJOgOv1wBDD/gvolb/dwpBIZzhEmk4WAhJzOMlXk3wj8Yl/CI+4L qzeGkQyY+YbBV4QyMy1Jsx8ffh9tokM/SCPr02WryaLAwT8mkW7X1uH/qUumw8817aos UWzoDSDxnJc04XY7BbMWNDjyBb3A63WGUSr9qJgaQMpa7Rc+A5jebguyj0qiFnK1R07Z /c9AaHcZP1zdDaJ4sDIVXeTu+qasUxAq1R9EIRBzE9CjguDylQXt/rygagUzjy8EaEgq +xu7z6jNzpEKj7K9n0X76i6Hz9kwwUiJs9xluuwlc/hmT4bi/mKh1Vv0mNPLOqSvyXls KZnA== X-Gm-Message-State: AA+aEWbU4U7E2LzPfU2hqXpmRroTkuxqkt2akcnl+cY3L8bIBXL341yc KFCPOZww5KcjiRnCQZDdiz4hqa8p X-Google-Smtp-Source: AFSGD/VqpfBJCw/lEZF+t09E8CwDFGM5rxK6B6oYmWwUuK2ls4gcfzIIfBm+JPEG80lwG5+GFJfing== X-Received: by 2002:a62:46d0:: with SMTP id o77mr21794456pfi.172.1544647962541; Wed, 12 Dec 2018 12:52:42 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.52.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:52:42 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 07/24] ARM: dts: tegra20: Update Memory Controller node to the new binding Date: Wed, 12 Dec 2018 23:38:50 +0300 Message-Id: <20181212203907.23461-8-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Device tree binding of Memory Controller has been changed: GART has been squashed into the MC, there are a new mandatory clock and #iommu-cells properties, the compatible has been changed to 'tegra20-mc-gart'. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- arch/arm/boot/dts/tegra20.dtsi | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index dcad6d6128cf..8c942e60703e 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi @@ -616,17 +616,14 @@ }; mc: memory-controller@7000f000 { - compatible = "nvidia,tegra20-mc"; - reg = <0x7000f000 0x024 - 0x7000f03c 0x3c4>; + compatible = "nvidia,tegra20-mc-gart"; + reg = <0x7000f000 0x400 /* controller registers */ + 0x58000000 0x02000000>; /* GART aperture */ + clocks = <&tegra_car TEGRA20_CLK_MC>; + clock-names = "mc"; interrupts = ; #reset-cells = <1>; - }; - - iommu@7000f024 { - compatible = "nvidia,tegra20-gart"; - reg = <0x7000f024 0x00000018 /* controller registers */ - 0x58000000 0x02000000>; /* GART aperture */ + #iommu-cells = <0>; }; memory-controller@7000f400 { From patchwork Wed Dec 12 20:38:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012279 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="mDCeYsFJ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTXm3YwZz9s8r for ; Thu, 13 Dec 2018 07:52:56 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728382AbeLLUwu (ORCPT ); Wed, 12 Dec 2018 15:52:50 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:42626 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727121AbeLLUwt (ORCPT ); Wed, 12 Dec 2018 15:52:49 -0500 Received: by mail-pg1-f193.google.com with SMTP id d72so8881338pga.9; Wed, 12 Dec 2018 12:52: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=1jTAKXOxUqIS7qMJZ/cOzO/lJyZZGoS6ctb+zjRYbHw=; b=mDCeYsFJUeeKzPRwC3TFQ+tZubwK3LOV43LJUM822g/1lGzvHYpKNb4WSShzTcal6L vwLxldm2DdoLc0S9tTIoHTIx1kO8i+ffrgpv6PJzDl90PkELY5o2bAAaIVtfmgTJMimo usozCUfv7ynaUq724CrgpyyJT2XuEZiqWUVhNLvw5SZdxfR5T+wixDtHm3O+puoEPi/A 8Cw818c+EEsm2O0FGrSgQo3WnhSz0UGvz6SY52KQwebT0MoAsxJANU6gITlRPBPKvfsX OCLoFtKqMEJmO/1o/K6FXMdTXKbwWq2LLl9DHvtKRVVT2POuBo0JNw+Pl43ssVJSjknJ ptRQ== 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=1jTAKXOxUqIS7qMJZ/cOzO/lJyZZGoS6ctb+zjRYbHw=; b=HY+KALQKO21xH4CN1xpGe5QPdi9kYinLSgk3Pv6WQk3DLJQJxnSpeaGNCrlGXLGTvI c39Zgd+kI6nKzgHaD9s6GFzbWmtWWMyK9LdrMXLn7l3O+O5LVD8fNpcMXjYWXVzWBgQf IArDMguRBRJ7cvLzxG4wiFzTLy/QSdLPvWtD11zrlGhtws1mUTdpn+JPE3B4dFhS5Z+Z L742/qoxpWrYbrYiAIJ5n7CGL3LvLQ8wjfaDF4+XcrC9CCQEvMRI3ch4JFibVS+p3Gk3 MKvKPlP8C6wag2zrIP8kF3TLjL+Y/c+FgvqXyQCWhzP/1zEuoJAW68EMShUsoyhWqmdP qzuQ== X-Gm-Message-State: AA+aEWY1+2bvNF0vTNWZbkfiHW5XeL2offJi8L5K1GOSoTvGxgdpFKag 7UdtHkvdA91VEyU0+hyxoXo= X-Google-Smtp-Source: AFSGD/UdTePp7+J4aAC4rQyUexiNuhpeIj636QOVz2XvPVXkqGMfuBfEnie2qnw0lbyRhWertJS14g== X-Received: by 2002:a65:4ccb:: with SMTP id n11mr19991514pgt.257.1544647968817; Wed, 12 Dec 2018 12:52:48 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.52.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:52:48 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 08/24] memory: tegra: Don't invoke Tegra30+ specific memory timing setup on Tegra20 Date: Wed, 12 Dec 2018 23:38:51 +0300 Message-Id: <20181212203907.23461-9-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 This fixes irrelevant "tegra-mc 7000f000.memory-controller: no memory timings for RAM code 0 registered" warning message during of kernels boot-up on Tegra20. Fixes: a8d502fd3348 ("memory: tegra: Squash tegra20-mc into common tegra-mc driver") Signed-off-by: Dmitry Osipenko Acked-by: Jon Hunter Acked-by: Thierry Reding --- drivers/memory/tegra/mc.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index 24afc36833bf..b99f3c620f6c 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -664,12 +664,13 @@ static int tegra_mc_probe(struct platform_device *pdev) } isr = tegra_mc_irq; - } - err = tegra_mc_setup_timings(mc); - if (err < 0) { - dev_err(&pdev->dev, "failed to setup timings: %d\n", err); - return err; + err = tegra_mc_setup_timings(mc); + if (err < 0) { + dev_err(&pdev->dev, "failed to setup timings: %d\n", + err); + return err; + } } mc->irq = platform_get_irq(pdev, 0); From patchwork Wed Dec 12 20:38:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012280 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="rpNTgT+N"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTXw02dFz9s8r for ; Thu, 13 Dec 2018 07:53:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728397AbeLLUw4 (ORCPT ); Wed, 12 Dec 2018 15:52:56 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:41346 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727121AbeLLUw4 (ORCPT ); Wed, 12 Dec 2018 15:52:56 -0500 Received: by mail-pg1-f195.google.com with SMTP id 70so8884520pgh.8; Wed, 12 Dec 2018 12:52:55 -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=ggBfXP6l/+oP1F4ldRTa0ftP5Vt/IYY0ozY6n85+iyU=; b=rpNTgT+NQyXqIWwz22oROpL3JLgvy9BKEupuosVRTfj/NlnsJB8xOPlKbDc3vAOy1N 5/r8FmfcJHw6yZ4nQLKhtX2UPvmCAZozBNOod/JsDbqGP9HbchJLz9gUkrDFrX1X7bWF fWWOZ8BOKhhsm+ZXIN6XCLjIqKk+NgfOBc8V1hHDaOINTolKCj2RTGlEBo+TrGvqL1cg 5LDP/dMH8+N7JwGj6a5hrI3IsK7gSmH+twhqRAYSVDraZ4/Tf2NPMJS6+uoVUNy69eWt 89HqEOV+KKIW1SS7hygBorvMVYjJ9gSN/b5nEzxptfeLdpPSDJaEie8xbQcVgynaWGtV HOFg== 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=ggBfXP6l/+oP1F4ldRTa0ftP5Vt/IYY0ozY6n85+iyU=; b=stttoLPSFIitrX74KY57JK3IzvpvQv2cfWeb0R7WxczXkzZdRS/PfyRjXc0e0aTGew wUCrIFE9xuWOECdn9yXTqlrvuvPQVfzW7H1SQfyT3JDtZ8oi0qD4PWTI8I2lCM67IRPo 4ojKCd/z8wcv3gzYTmDr5tAxqZDoLQMBaISy+vDMUQG+HCR5imJr8JLrp1r9fAoorqfa xGvQtzEYxED/UuDYexdpG+l6Est1w40s4u7fTfuful9uQgFz1/lxhsZ11BWfAZ4YIaSP FwW6pOvm9ym/bh9brAM52YnLc2QFLBp/UlYvhFwT/ajLIE9opHFojuKcrX40fz7DDzyJ 7gfQ== X-Gm-Message-State: AA+aEWbBbykihDExkGImzqCLbjHlgPwa61m89qLy4T7h8YzG+7ahliN5 DfiYJXSAfWLfVS5dPWer/F8= X-Google-Smtp-Source: AFSGD/VzKpAO++Ma3czxRvbNiHQQ8r++yIiBIo5InVyA5jbS1ku3/nX8VLEnPISnwWJz5hVQxDvwhg== X-Received: by 2002:a65:49cd:: with SMTP id t13mr19824703pgs.376.1544647975017; Wed, 12 Dec 2018 12:52:55 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.52.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:52:54 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 09/24] memory: tegra: Adapt to Tegra20 device-tree binding changes Date: Wed, 12 Dec 2018 23:38:52 +0300 Message-Id: <20181212203907.23461-10-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 The tegra20-mc device-tree binding has been changed, GART has been squashed into Memory Controller and now the clock property is mandatory for Tegra20, the DT compatible has been changed as well. Adapt driver to the DT changes. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/memory/tegra/mc.c | 21 ++++++++------------- drivers/memory/tegra/mc.h | 6 ------ include/soc/tegra/mc.h | 2 +- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index b99f3c620f6c..59db13287b47 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -51,7 +51,7 @@ static const struct of_device_id tegra_mc_of_match[] = { #ifdef CONFIG_ARCH_TEGRA_2x_SOC - { .compatible = "nvidia,tegra20-mc", .data = &tegra20_mc_soc }, + { .compatible = "nvidia,tegra20-mc-gart", .data = &tegra20_mc_soc }, #endif #ifdef CONFIG_ARCH_TEGRA_3x_SOC { .compatible = "nvidia,tegra30-mc", .data = &tegra30_mc_soc }, @@ -638,24 +638,19 @@ static int tegra_mc_probe(struct platform_device *pdev) if (IS_ERR(mc->regs)) return PTR_ERR(mc->regs); + mc->clk = devm_clk_get(&pdev->dev, "mc"); + if (IS_ERR(mc->clk)) { + dev_err(&pdev->dev, "failed to get MC clock: %ld\n", + PTR_ERR(mc->clk)); + return PTR_ERR(mc->clk); + } + #ifdef CONFIG_ARCH_TEGRA_2x_SOC if (mc->soc == &tegra20_mc_soc) { - res = platform_get_resource(pdev, IORESOURCE_MEM, 1); - mc->regs2 = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(mc->regs2)) - return PTR_ERR(mc->regs2); - isr = tegra20_mc_irq; } else #endif { - mc->clk = devm_clk_get(&pdev->dev, "mc"); - if (IS_ERR(mc->clk)) { - dev_err(&pdev->dev, "failed to get MC clock: %ld\n", - PTR_ERR(mc->clk)); - return PTR_ERR(mc->clk); - } - err = tegra_mc_setup_latency_allowance(mc); if (err < 0) { dev_err(&pdev->dev, "failed to setup latency allowance: %d\n", diff --git a/drivers/memory/tegra/mc.h b/drivers/memory/tegra/mc.h index 01065f12ebeb..9856f085e487 100644 --- a/drivers/memory/tegra/mc.h +++ b/drivers/memory/tegra/mc.h @@ -26,18 +26,12 @@ static inline u32 mc_readl(struct tegra_mc *mc, unsigned long offset) { - if (mc->regs2 && offset >= 0x24) - return readl(mc->regs2 + offset - 0x3c); - return readl(mc->regs + offset); } static inline void mc_writel(struct tegra_mc *mc, u32 value, unsigned long offset) { - if (mc->regs2 && offset >= 0x24) - return writel(value, mc->regs2 + offset - 0x3c); - writel(value, mc->regs + offset); } diff --git a/include/soc/tegra/mc.h b/include/soc/tegra/mc.h index b43f37fea096..db5bfdf589b4 100644 --- a/include/soc/tegra/mc.h +++ b/include/soc/tegra/mc.h @@ -144,7 +144,7 @@ struct tegra_mc_soc { struct tegra_mc { struct device *dev; struct tegra_smmu *smmu; - void __iomem *regs, *regs2; + void __iomem *regs; struct clk *clk; int irq; From patchwork Wed Dec 12 20:38:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012295 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="Zoio9Bim"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTZm1dRGz9s7h for ; Thu, 13 Dec 2018 07:54:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727131AbeLLUxD (ORCPT ); Wed, 12 Dec 2018 15:53:03 -0500 Received: from mail-pl1-f193.google.com ([209.85.214.193]:35208 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727121AbeLLUxC (ORCPT ); Wed, 12 Dec 2018 15:53:02 -0500 Received: by mail-pl1-f193.google.com with SMTP id p8so9162180plo.2; Wed, 12 Dec 2018 12:53:02 -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=UMYR9IeA85noSAK/OpqYWRb/I0AEsHldjTDUqxIg6JE=; b=Zoio9BimUIeRW9c2FqcHN+1aH4DMVmN5BbCImJe3ewRhrlZJSdi6z7ZNDX9g0QqUtG 3+xeMiB/w4nFVxgnjsXvCkM9n6gDmvnN1ICd9GEatlo3AGGDjUt/hp+7+prcwiTWRwPk ejodRYN2oBNUkXvGCixQk7uYppgPfcCWqdF0li3qS2DrOyyuUDw0gBvgXYw+kG0Wa3Ks WyRLpzw0eKNsN5daTJxuR4df3vN8NggB6ZESV915Vczj1oO67oCmVFBRpz5lEBOUXOfX Ynx44wTg9RH4HvYiThDkXyTvg7GFmGQiVFfOs0oPTm+yypeoV5q/lb1pdkkUkVyh113M YmnQ== 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=UMYR9IeA85noSAK/OpqYWRb/I0AEsHldjTDUqxIg6JE=; b=D8S1jSo2dpGjKKZ52zINx608ZupLaXkvnV9a/xN1ANicJxiiPiLr6GdngKDuo0vw7v IW4BCB/gy6nZc8GH/4oG3Ro63TvYDc4lWR4OyRTgjAbhJfo3Ne9/17kBRYsDT5sfRKzl vYr0zCf7eJ0YawcV3otcQTd1M5aWhjPFHZIaRjzlUYS5TfJTwNy9X4hWmYRd2M/oR+Ma vtI+7bcc8vn+iNuNAw0SE7aZy/0MMowi+5j3Hg7i5CMRa24HBoMbDBm1s34jIXtF4V+v DgvV0e9WjEA9mN8Q0g7GIZFP6vIl3Z4BszgW1Pg9IrTwipSo0CXNOKypRFri1Jbvzqbo gZ/A== X-Gm-Message-State: AA+aEWbcINMuyA26I/UZf+p5J8PKQY3TgIxQm354ylneBudWej42YRx0 aRHYMYPmfn4IUethuf4ySeM= X-Google-Smtp-Source: AFSGD/Wkt+hDr6n7IbAqDWIELiPWn8A0Gs4jByK3GJajcIZk+mI3A+1GyWL2ABph9/L2983WYPc4cA== X-Received: by 2002:a17:902:b7c7:: with SMTP id v7mr21288663plz.75.1544647981338; Wed, 12 Dec 2018 12:53:01 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.52.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:00 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 10/24] memory: tegra: Read client ID on GART page fault Date: Wed, 12 Dec 2018 23:38:53 +0300 Message-Id: <20181212203907.23461-11-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 With the device tree binding changes, now Memory Controller has access to GART registers. Hence it is now possible to read client ID on GART page fault to get information about what memory client causes the fault. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/memory/tegra/mc.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index 59db13287b47..ce8cf81b55d7 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -38,6 +38,7 @@ #define MC_ERR_ADR 0x0c +#define MC_GART_ERROR_REQ 0x30 #define MC_DECERR_EMEM_OTHERS_STATUS 0x58 #define MC_SECURITY_VIOLATION_STATUS 0x74 @@ -575,8 +576,15 @@ static __maybe_unused irqreturn_t tegra20_mc_irq(int irq, void *data) break; case MC_INT_INVALID_GART_PAGE: - dev_err_ratelimited(mc->dev, "%s\n", error); - continue; + reg = MC_GART_ERROR_REQ; + value = mc_readl(mc, reg); + + id = (value >> 1) & mc->soc->client_id_mask; + desc = error_names[2]; + + if (value & BIT(0)) + direction = "write"; + break; case MC_INT_SECURITY_VIOLATION: reg = MC_SECURITY_VIOLATION_STATUS; From patchwork Wed Dec 12 20:38:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012281 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="pwdFZiuW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTY2382Qz9s9G for ; Thu, 13 Dec 2018 07:53:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728429AbeLLUxI (ORCPT ); Wed, 12 Dec 2018 15:53:08 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:38846 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727121AbeLLUxI (ORCPT ); Wed, 12 Dec 2018 15:53:08 -0500 Received: by mail-pf1-f193.google.com with SMTP id q1so9438868pfi.5; Wed, 12 Dec 2018 12:53:07 -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=NzJ2UJcv0IijldET0TY8b0MrUWAwCpAgCdaywzTWseI=; b=pwdFZiuWIZ1MXZY0988tnB23jPnPkyVrQb1lDChIDFUAQ6Fp2DjIRe2xc+fETMmuXV 6xFIKci8lGm+3m2ySaNg4G/lEmLB7t6WODZNRwUTqyDepDTwrEYfaBRAOO9sCezeunik 7z9zurFp6z8zB762CGztQcEOsIWFhPsFdkndgqG24own2ONsZG9PsSMfqQ3cQ7exLxBN +uyU22OzsjJqHiB2xu9dDbB4iz5g5I5f2Sapj4NloHvGfsYZCqJcSBZH4nmJb/2Zp+S9 d4hR47vZPw2EbT1TCifEZRuVwpyDRmqR+jAr3TMOO1iIXtvy5uSvMzOTLfyP7rNHChR7 rLfg== 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=NzJ2UJcv0IijldET0TY8b0MrUWAwCpAgCdaywzTWseI=; b=VpgRMaFqZTJ3VOJ5P6qXrnL3XcUOiiM915NysWcGklglO7wKFk9SuGk2595aebxfnG iHThQsWB1XJ9KrRR8AGkLu5Mu5bvR9VCip1e+8JEUaQpJgEjWXGhevifk/URBfxcjrjl h8gaGflntnUX3RChkoBkYBPmN1Lj4PIVCkK51dvCPszS8jP+w4j/8kFBuqBguRl5r4mv GA5UX/sUOnuLZzEVHZAjglE66GWPCNpHUlouxCrrqCCjI+e7TOnbz18bVfjBdv9XBqoq V2nrMVjB+KfxDuE2ue463QxJKLJeJeil5tkinZ3pclUrqd9AdFmWtqSu/quGrmGWToLZ 34xA== X-Gm-Message-State: AA+aEWZiPLPkpDkbB95z9o2TMZzDImTM37k69XZU2oSGd31yHK9IgNy8 tMrlp61fhxDznWMhloqpNo4= X-Google-Smtp-Source: AFSGD/Vs0pcO5uQEfs3Pq+La8WohBZQKN/10LscKS+7S3pxW6hazjzOWG3Aw2UzdIv/JUaX788p2iw== X-Received: by 2002:a62:938f:: with SMTP id r15mr21453642pfk.27.1544647987548; Wed, 12 Dec 2018 12:53:07 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:07 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 11/24] memory: tegra: Use of_device_get_match_data() Date: Wed, 12 Dec 2018 23:38:54 +0300 Message-Id: <20181212203907.23461-12-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 There is no need to match device with the DT node since it was already matched, use of_device_get_match_data() helper to get the match-data. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/memory/tegra/mc.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index ce8cf81b55d7..55ecfb2d8cfd 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -619,23 +620,18 @@ static __maybe_unused irqreturn_t tegra20_mc_irq(int irq, void *data) static int tegra_mc_probe(struct platform_device *pdev) { - const struct of_device_id *match; struct resource *res; struct tegra_mc *mc; void *isr; int err; - match = of_match_node(tegra_mc_of_match, pdev->dev.of_node); - if (!match) - return -ENODEV; - mc = devm_kzalloc(&pdev->dev, sizeof(*mc), GFP_KERNEL); if (!mc) return -ENOMEM; platform_set_drvdata(pdev, mc); spin_lock_init(&mc->lock); - mc->soc = match->data; + mc->soc = of_device_get_match_data(&pdev->dev); mc->dev = &pdev->dev; /* length of MC tick in nanoseconds */ From patchwork Wed Dec 12 20:38:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012282 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="bE7SvWkR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTY82xG3z9s9h for ; Thu, 13 Dec 2018 07:53:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727848AbeLLUxP (ORCPT ); Wed, 12 Dec 2018 15:53:15 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:44436 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727121AbeLLUxO (ORCPT ); Wed, 12 Dec 2018 15:53:14 -0500 Received: by mail-pf1-f193.google.com with SMTP id u6so9430186pfh.11; Wed, 12 Dec 2018 12:53:14 -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=D3IhCZ33Eo81tdSj/+KDeNpIwacUrTZ4TzMO/OThHFk=; b=bE7SvWkRXYlkvEep1jYGWnFv1bOLsjytbAL9hdZSQoIYmfrb3iCohPwmr2iT/E0q9Q 7/JURAS4P+vCJMWH037Q/peUy29NEskNAlxsHj3c/wSqdoukhX6rbyClTkr4owf0jROd 1LqUA++aEnJdCnWliFgLOFv5Pr4N/hpY/gYJqyHV1WhSFMkySGTZHH+fSDXE4jsmOTio 9PPuCdiR3QfuMaE1OS9CwB6EGP8TWIcy7cQNFSbkuga2nLz7hg5QBHukLPjjMttHulB7 iN+ChUh5gnr1ywyAMq/dA1GkuOkh1lE6Rcyaq4bEMHiRhp+2MqV7C9elmX0i5X0OIA/q 5o4w== 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=D3IhCZ33Eo81tdSj/+KDeNpIwacUrTZ4TzMO/OThHFk=; b=LYAsLGtQ4qF4GNCUksF6dkckkeADCa01/vHWn4pQKIGnvrsQN1eLiLVQG01lrZI2KO i1zsZfv4ir7bxvGM46WjI5Qj4HACL4oMouuAHTEBeUkLaYbjWHGp1eHhNAiLHJVksdGY ylNM4xamHEZevjepZtmj7nsdMMW2I6lgPjlWo9u7aFi/H6d7O8eNcFKR9mbK7NW4NAfM rlgXs3/aM9/aIs9PwA5kiWVjyVNK5wJkzZ7ygt9jADIl5ewT6LSepl6hwgDzFW6EcoNl DBmczdyYi6WV+PrTmUISa1nwuEAWc4nTocmw/ibeVHgoMDVcyYa4RQT0ye6RtXBkrJ1d elhw== X-Gm-Message-State: AA+aEWbZ87uXdQJcxD4wRrcH+XclWt+aoTmBv/4DlxmAUClNFMHufPZx 56EmfniU2EXP8ZBiiNGODcU= X-Google-Smtp-Source: AFSGD/XRB1a4yfnbtIDh6wB1lCiHhPtUXMy5kBk35I8/XpskuvZYb4zufaRxUqFNWKw53xS6BITgDw== X-Received: by 2002:a63:5b48:: with SMTP id l8mr16811291pgm.80.1544647993762; Wed, 12 Dec 2018 12:53:13 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:13 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 12/24] memory: tegra: Use relaxed versions of readl/writel Date: Wed, 12 Dec 2018 23:38:55 +0300 Message-Id: <20181212203907.23461-13-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 There is no need for inserting of memory barriers to access registers of Memory Controller. Hence use the relaxed versions of the accessors. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/memory/tegra/mc.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/memory/tegra/mc.h b/drivers/memory/tegra/mc.h index 9856f085e487..887a3b07334f 100644 --- a/drivers/memory/tegra/mc.h +++ b/drivers/memory/tegra/mc.h @@ -26,13 +26,13 @@ static inline u32 mc_readl(struct tegra_mc *mc, unsigned long offset) { - return readl(mc->regs + offset); + return readl_relaxed(mc->regs + offset); } static inline void mc_writel(struct tegra_mc *mc, u32 value, unsigned long offset) { - writel(value, mc->regs + offset); + writel_relaxed(value, mc->regs + offset); } extern const struct tegra_mc_reset_ops terga_mc_reset_ops_common; From patchwork Wed Dec 12 20:38:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012285 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="LKOjOaXl"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTYf3zZKz9s7T for ; Thu, 13 Dec 2018 07:53:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728337AbeLLUxX (ORCPT ); Wed, 12 Dec 2018 15:53:23 -0500 Received: from mail-pf1-f194.google.com ([209.85.210.194]:47092 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728442AbeLLUxV (ORCPT ); Wed, 12 Dec 2018 15:53:21 -0500 Received: by mail-pf1-f194.google.com with SMTP id c73so9420323pfe.13; Wed, 12 Dec 2018 12:53:20 -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=kgjxxr5LADsKEDQ8XJOBwtYJJM+vGk03P6qjWe7HyrM=; b=LKOjOaXlxjRNHRCh3Pqf3Msdvz2Jtw6VWJdqxtTRb3QCfLGrg58qXpXRMX+PLf0C4q rpuSxOvxeRuasdhJQ6uDD9sJGR0RqPRBqj0YM5j8mf4CQ0XQhc/nYb9n5g8bbLCLhpot eFyD7OwwxB559IBypqGJkMmiua8Gfuaj13OrEW6ihP2lOVyaJDVtn0CDPiHkJdqAVzOK KHXBCgPi9E3oP76mS66f75jc/vuW+Z/go3OkpZJe44udo3rWFfdmD8bvh0/rApJvQYFg iaeX3t6naiT5h2OfPrkKJc1ALtulgrutlsURbWApqme5sdbB0db4b2IiNIsg2KsVNY13 oAwg== 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=kgjxxr5LADsKEDQ8XJOBwtYJJM+vGk03P6qjWe7HyrM=; b=mabkvxcsEpPVxX4xsBj/2SX9Ydz87lywhH00fcpjIvLDt3aPHbNd+IE7xn+Pgy2rbH HVbQ957vKXb356j9rJon1Hm4p98ip2HCr3ou5axtbcfvIY/vFeZwhHXaF/SsLRPtmwK6 kH50B2W0p5WLmL48//S5wXa42uSPTSTX3foAlmYds0S4hhx84Jmru7tU7A+SBTzxD7Am dqAKyip83WJM9dxLwWySYuGN0LVHqFIawrzYd5iyiN0sGy6zur6aHDu41FAgfT8+9a7E 36fbPu/gALJxqTRcN/z2kK7DmfYEYHCqUTNAw5THXuC5YCDQkLxrTBwFl743xdPOwPGB 9ucA== X-Gm-Message-State: AA+aEWakGDBCleRqX5Yv8+OwLzGHoYfUxq5FCtXeGy75lpW4SbqkIiIH wp4AfURIfvy2s14suLpVNtQ= X-Google-Smtp-Source: AFSGD/XasLnkkYm0vWxLzObfp9sOJfkziB7gGJ/p29FEhhb1KlEjL4QXzxiEnBGpeIekAFDcwynctw== X-Received: by 2002:a65:624c:: with SMTP id q12mr19603641pgv.379.1544648000355; Wed, 12 Dec 2018 12:53:20 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:19 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 13/24] iommu/tegra: gart: Integrate with Memory Controller driver Date: Wed, 12 Dec 2018 23:38:56 +0300 Message-Id: <20181212203907.23461-14-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 The device-tree binding has been changed. There is no separate GART device anymore, it is squashed into the Memory Controller. Integrate GART module with the MC in a way it is done for the SMMU on Tegra30+. Signed-off-by: Dmitry Osipenko --- drivers/iommu/Kconfig | 1 + drivers/iommu/tegra-gart.c | 71 ++++++++++---------------------------- drivers/memory/tegra/mc.c | 43 +++++++++++++++++++++++ include/soc/tegra/mc.h | 25 ++++++++++++++ 4 files changed, 87 insertions(+), 53 deletions(-) diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig index d9a25715650e..83c099bb7288 100644 --- a/drivers/iommu/Kconfig +++ b/drivers/iommu/Kconfig @@ -282,6 +282,7 @@ config ROCKCHIP_IOMMU config TEGRA_IOMMU_GART bool "Tegra GART IOMMU Support" depends on ARCH_TEGRA_2x_SOC + depends on TEGRA_MC select IOMMU_API help Enables support for remapping discontiguous physical memory diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 835fea461c59..b35ffa312a83 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -19,16 +19,17 @@ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. */ -#include #include #include #include #include -#include +#include #include #include #include +#include + /* bitmap of the page sizes currently supported */ #define GART_IOMMU_PGSIZES (SZ_4K) @@ -397,9 +398,8 @@ static const struct iommu_ops gart_iommu_ops = { .iotlb_sync = gart_iommu_sync, }; -static int tegra_gart_suspend(struct device *dev) +int tegra_gart_suspend(struct gart_device *gart) { - struct gart_device *gart = dev_get_drvdata(dev); unsigned long iova; u32 *data = gart->savedata; unsigned long flags; @@ -411,9 +411,8 @@ static int tegra_gart_suspend(struct device *dev) return 0; } -static int tegra_gart_resume(struct device *dev) +int tegra_gart_resume(struct gart_device *gart) { - struct gart_device *gart = dev_get_drvdata(dev); unsigned long flags; spin_lock_irqsave(&gart->pte_lock, flags); @@ -422,41 +421,33 @@ static int tegra_gart_resume(struct device *dev) return 0; } -static int tegra_gart_probe(struct platform_device *pdev) +struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc) { struct gart_device *gart; - struct resource *res, *res_remap; + struct resource *res_remap; void __iomem *gart_regs; - struct device *dev = &pdev->dev; int ret; BUILD_BUG_ON(PAGE_SHIFT != GART_PAGE_SHIFT); /* the GART memory aperture is required */ - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - res_remap = platform_get_resource(pdev, IORESOURCE_MEM, 1); - if (!res || !res_remap) { + res_remap = platform_get_resource(to_platform_device(dev), + IORESOURCE_MEM, 1); + if (!res_remap) { dev_err(dev, "GART memory aperture expected\n"); - return -ENXIO; + return ERR_PTR(-ENXIO); } gart = devm_kzalloc(dev, sizeof(*gart), GFP_KERNEL); if (!gart) { dev_err(dev, "failed to allocate gart_device\n"); - return -ENOMEM; - } - - gart_regs = devm_ioremap(dev, res->start, resource_size(res)); - if (!gart_regs) { - dev_err(dev, "failed to remap GART registers\n"); - return -ENXIO; + return ERR_PTR(-ENOMEM); } - ret = iommu_device_sysfs_add(&gart->iommu, &pdev->dev, NULL, - dev_name(&pdev->dev)); + ret = iommu_device_sysfs_add(&gart->iommu, dev, NULL, "gart"); if (ret) { dev_err(dev, "Failed to register IOMMU in sysfs\n"); - return ret; + return ERR_PTR(ret); } iommu_device_set_ops(&gart->iommu, &gart_iommu_ops); @@ -468,7 +459,8 @@ static int tegra_gart_probe(struct platform_device *pdev) goto remove_sysfs; } - gart->dev = &pdev->dev; + gart->dev = dev; + gart_regs = mc->regs + GART_REG_BASE; spin_lock_init(&gart->pte_lock); spin_lock_init(&gart->client_lock); INIT_LIST_HEAD(&gart->client); @@ -483,46 +475,19 @@ static int tegra_gart_probe(struct platform_device *pdev) goto unregister_iommu; } - platform_set_drvdata(pdev, gart); do_gart_setup(gart, NULL); gart_handle = gart; - return 0; + return gart; unregister_iommu: iommu_device_unregister(&gart->iommu); remove_sysfs: iommu_device_sysfs_remove(&gart->iommu); - return ret; -} - -static const struct dev_pm_ops tegra_gart_pm_ops = { - .suspend = tegra_gart_suspend, - .resume = tegra_gart_resume, -}; - -static const struct of_device_id tegra_gart_of_match[] = { - { .compatible = "nvidia,tegra20-gart", }, - { }, -}; - -static struct platform_driver tegra_gart_driver = { - .probe = tegra_gart_probe, - .driver = { - .name = "tegra-gart", - .pm = &tegra_gart_pm_ops, - .of_match_table = tegra_gart_of_match, - .suppress_bind_attrs = true, - }, -}; - -static int __init tegra_gart_init(void) -{ - return platform_driver_register(&tegra_gart_driver); + return ERR_PTR(ret); } -subsys_initcall(tegra_gart_init); module_param(gart_debug, bool, 0644); MODULE_PARM_DESC(gart_debug, "Enable GART debugging"); diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index 55ecfb2d8cfd..e684e234361a 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -702,13 +702,56 @@ static int tegra_mc_probe(struct platform_device *pdev) PTR_ERR(mc->smmu)); } + if (IS_ENABLED(CONFIG_TEGRA_IOMMU_GART) && !mc->soc->smmu) { + mc->gart = tegra_gart_probe(&pdev->dev, mc); + if (IS_ERR(mc->gart)) { + dev_err(&pdev->dev, "failed to probe GART: %ld\n", + PTR_ERR(mc->gart)); + mc->gart = NULL; + } + } + + return 0; +} + +static int tegra_mc_suspend(struct device *dev) +{ + struct tegra_mc *mc = dev_get_drvdata(dev); + int err; + + if (IS_ENABLED(CONFIG_TEGRA_IOMMU_GART) && mc->gart) { + err = tegra_gart_suspend(mc->gart); + if (err) + return err; + } + return 0; } +static int tegra_mc_resume(struct device *dev) +{ + struct tegra_mc *mc = dev_get_drvdata(dev); + int err; + + if (IS_ENABLED(CONFIG_TEGRA_IOMMU_GART) && mc->gart) { + err = tegra_gart_resume(mc->gart); + if (err) + return err; + } + + return 0; +} + +static const struct dev_pm_ops tegra_mc_pm_ops = { + .suspend = tegra_mc_suspend, + .resume = tegra_mc_resume, +}; + static struct platform_driver tegra_mc_driver = { .driver = { .name = "tegra-mc", .of_match_table = tegra_mc_of_match, + .pm = &tegra_mc_pm_ops, .suppress_bind_attrs = true, }, .prevent_deferred_probe = true, diff --git a/include/soc/tegra/mc.h b/include/soc/tegra/mc.h index db5bfdf589b4..e489a028ec9f 100644 --- a/include/soc/tegra/mc.h +++ b/include/soc/tegra/mc.h @@ -9,6 +9,7 @@ #ifndef __SOC_TEGRA_MC_H__ #define __SOC_TEGRA_MC_H__ +#include #include #include @@ -77,6 +78,7 @@ struct tegra_smmu_soc { struct tegra_mc; struct tegra_smmu; +struct gart_device; #ifdef CONFIG_TEGRA_IOMMU_SMMU struct tegra_smmu *tegra_smmu_probe(struct device *dev, @@ -96,6 +98,28 @@ static inline void tegra_smmu_remove(struct tegra_smmu *smmu) } #endif +#ifdef CONFIG_TEGRA_IOMMU_GART +struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc); +int tegra_gart_suspend(struct gart_device *gart); +int tegra_gart_resume(struct gart_device *gart); +#else +static inline struct gart_device * +tegra_gart_probe(struct device *dev, struct tegra_mc *mc) +{ + return ERR_PTR(-ENODEV); +} + +static inline int tegra_gart_suspend(struct gart_device *gart) +{ + return -ENODEV; +} + +static inline int tegra_gart_resume(struct gart_device *gart) +{ + return -ENODEV; +} +#endif + struct tegra_mc_reset { const char *name; unsigned long id; @@ -144,6 +168,7 @@ struct tegra_mc_soc { struct tegra_mc { struct device *dev; struct tegra_smmu *smmu; + struct gart_device *gart; void __iomem *regs; struct clk *clk; int irq; From patchwork Wed Dec 12 20:38:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012283 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="V8UlK5qP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTYV2Dgpz9s8r for ; Thu, 13 Dec 2018 07:53:34 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728464AbeLLUx2 (ORCPT ); Wed, 12 Dec 2018 15:53:28 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:38403 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728442AbeLLUx1 (ORCPT ); Wed, 12 Dec 2018 15:53:27 -0500 Received: by mail-pg1-f195.google.com with SMTP id g189so8894209pgc.5; Wed, 12 Dec 2018 12:53:27 -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=BswpiJIyXYCwIJYSExUCFoa3NjAwWquTTA/r0TBkUb8=; b=V8UlK5qPGIR9B1+BVZ2tdP1Q1DKqmRhq7y8yzoINTF83u9MqgyAUEO9T5KzNArzxW7 0gYOYjC0Ek8wUIoSuxI9f/H2eXR+elh0WvUjSwyq7toHHYRD2+umGUMMfcX1mZBbkD0x wFOr3jFGtDlKPhqMKGzqEWNppcW0Cd4OsWyXdbqJHeY+UNwv3mo7+mcpOLN3MgnpoKjJ 7wPDF1N39YkI0WoZaTkfP4Z7TtAD5EYtF3/cjYpsPbxWgk7Ucgl6MX8AtT5eTNeoFr7H mJM/6htgcyWdlVO3BGjGwAjl5hH7cnLt9VQiQzhc9mC32eYLOeRYIPNARM/H4vImNBdn aEKQ== 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=BswpiJIyXYCwIJYSExUCFoa3NjAwWquTTA/r0TBkUb8=; b=NnKBDTuJk2Cg7xbHgoTBeImc2ZVkultPt0fbceUkEz8ECVCQHUfwhRhj+Pb1uzdpal qO1yMGlb+2YqTUMsVB5PWRnXHcZ05tXAGe8+fPc/Ehh7FGq1fOkrytzf6+Auvwhi4Wsd z/aSTUUK4SZxK11RJXCLCvBoRGJg6rriCWgbpmcQts7wKO1wFr8Jirj639UrqiDD30ms vHMKAoyov7grpLoPVTIa0krbKzXY1p4uy9TphX6Ev/Q3O6ksfKb7tAe3fvNe3kIAuTfh GPnJAz2FFQzOg47PLazY7w2zMIxCyprhXu6YMRv5jsTet0xirlFVP6xmzop2ylijLoAy buWg== X-Gm-Message-State: AA+aEWbkZBKe5EohjHDuDTdHt80bnwOKCLVHDuUhA6I5sx5m0TgVbpyP M6gm1ZwxBVEWOifY9BdZ/jOU31Hm X-Google-Smtp-Source: AFSGD/V380Pkd448YVbrBCv3pPw7+vpOrVKBaj/cNNSqiAYckPEYC+iA7HPXQfT/e0MuzJIVpPs5Ng== X-Received: by 2002:a63:6b05:: with SMTP id g5mr18989426pgc.15.1544648006717; Wed, 12 Dec 2018 12:53:26 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:26 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 14/24] memory: tegra: Do not try to probe SMMU on Tegra20 Date: Wed, 12 Dec 2018 23:38:57 +0300 Message-Id: <20181212203907.23461-15-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Tegra20 doesn't have SMMU. Move out checking of the SMMU presence from the SMMU driver into the Memory Controller driver. This change makes code consistent in regards to how GART/SMMU presence checking is performed. Signed-off-by: Dmitry Osipenko --- drivers/iommu/tegra-smmu.c | 4 ---- drivers/memory/tegra/mc.c | 6 ++++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c index 97b3c0461831..32ea81e9f012 100644 --- a/drivers/iommu/tegra-smmu.c +++ b/drivers/iommu/tegra-smmu.c @@ -982,10 +982,6 @@ struct tegra_smmu *tegra_smmu_probe(struct device *dev, u32 value; int err; - /* This can happen on Tegra20 which doesn't have an SMMU */ - if (!soc) - return NULL; - smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL); if (!smmu) return ERR_PTR(-ENOMEM); diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index e684e234361a..3545868c51c0 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -695,11 +695,13 @@ static int tegra_mc_probe(struct platform_device *pdev) dev_err(&pdev->dev, "failed to register reset controller: %d\n", err); - if (IS_ENABLED(CONFIG_TEGRA_IOMMU_SMMU)) { + if (IS_ENABLED(CONFIG_TEGRA_IOMMU_SMMU) && mc->soc->smmu) { mc->smmu = tegra_smmu_probe(&pdev->dev, mc->soc->smmu, mc); - if (IS_ERR(mc->smmu)) + if (IS_ERR(mc->smmu)) { dev_err(&pdev->dev, "failed to probe SMMU: %ld\n", PTR_ERR(mc->smmu)); + mc->smmu = NULL; + } } if (IS_ENABLED(CONFIG_TEGRA_IOMMU_GART) && !mc->soc->smmu) { From patchwork Wed Dec 12 20:38:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012284 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="lWvYH8K+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTYc5H8qz9s7T for ; Thu, 13 Dec 2018 07:53:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728504AbeLLUxe (ORCPT ); Wed, 12 Dec 2018 15:53:34 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:36440 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728442AbeLLUxd (ORCPT ); Wed, 12 Dec 2018 15:53:33 -0500 Received: by mail-pg1-f195.google.com with SMTP id n2so8885712pgm.3; Wed, 12 Dec 2018 12:53:33 -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=iVwmO7SZrAhknWmyPu5SI5ep1kjQEGZC07hnwWCuuv4=; b=lWvYH8K+7wCWACvoPEET68iOMpRIJpbyCErsnsNg3QAm/R4PRrwxisc4xT42VmMNUd D/OP6zxKXcWiHA1Gt6rWWaCMR4gk+GYs1iBU7rMklnLvcwXvFyF3/B6MnCxIrdhylthT OBCk8NIV+fdAdIn9EzrhtQXgO2PrN8DPK3zg2/r8nJSVo4YacJ3Vj67yYHumkOmBmt33 HhnbIGB0MLe4l2H2Pc72Zz9oW+FoMCEvapWVz/pss+FAAnkldFqY4vFcwYkoWnGegZ5D JmSESP7uqu6uS2EIymwkvRRgSZkFAmOtHViavJ/O/sT43Otu4MSv+4rv/b2JjgJArOet lctQ== 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=iVwmO7SZrAhknWmyPu5SI5ep1kjQEGZC07hnwWCuuv4=; b=iRSH9QSgDuF9TXrcLg6aM8ptQqOBPLu5u9PlF4NVzzM7U44JxWTy9DyLcyD1yZd/Jq 1QirCGjELYG+NNfE7kgPLJeeCJy39GdSnrUR3lbeFbk6yPiQgib8OXmy5WT6zPOFovmG SduYOs3hHWdB7W/o37Sa5fI7BPijx2KS3RR3l6kqav2qZYZNQrEAiMr9JFGLzejGQYur bCblZciusJbFM7JJ/PhBH4kY0lv5j81UrZWA/amzgTnRsSki08M4jWcOJkniElWZSE39 hjtpq2dC3zyB5AAek017dgkIQ/jtkQ7rCY6i747eZJY0rNEOlnOToJIU7sJgdYD+kbSG mLRA== X-Gm-Message-State: AA+aEWbvnj24o/E3T2EklWi5Uyr8i7dn9Y4w6jyoffwEsV/L+nrDv9/E uJlxwSNZuYVIGxMgVP0diG8= X-Google-Smtp-Source: AFSGD/VfRKcHD2+uU5g37UpRBlVIIVhi9bpTJbCRAYd7HtVaGU3qlN9PCSx+0sFEnUdkVJWw9wyPdg== X-Received: by 2002:a63:9b11:: with SMTP id r17mr19769127pgd.416.1544648012949; Wed, 12 Dec 2018 12:53:32 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:32 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 15/24] memory: tegra: Do not ask for IRQ sharing Date: Wed, 12 Dec 2018 23:38:58 +0300 Message-Id: <20181212203907.23461-16-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Memory Controller driver never shared IRQ with any other driver and very unlikely that it will. Hence there is no need to request IRQ sharing and the corresponding flag can be dropped safely. Signed-off-by: Dmitry Osipenko --- drivers/memory/tegra/mc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index 3545868c51c0..570da2129fa6 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -682,7 +682,7 @@ static int tegra_mc_probe(struct platform_device *pdev) mc_writel(mc, mc->soc->intmask, MC_INTMASK); - err = devm_request_irq(&pdev->dev, mc->irq, isr, IRQF_SHARED, + err = devm_request_irq(&pdev->dev, mc->irq, isr, 0, dev_name(&pdev->dev), mc); if (err < 0) { dev_err(&pdev->dev, "failed to request IRQ#%u: %d\n", mc->irq, From patchwork Wed Dec 12 20:38:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012286 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="uCLqBgju"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTYg20gbz9s7h for ; Thu, 13 Dec 2018 07:53:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726888AbeLLUxk (ORCPT ); Wed, 12 Dec 2018 15:53:40 -0500 Received: from mail-pl1-f196.google.com ([209.85.214.196]:45779 "EHLO mail-pl1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726973AbeLLUxj (ORCPT ); Wed, 12 Dec 2018 15:53:39 -0500 Received: by mail-pl1-f196.google.com with SMTP id a14so9145889plm.12; Wed, 12 Dec 2018 12:53:39 -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=X9TkCBVQUr3Qivq/7xJgeeQht3EZWXdqA5vbsgS4/Hk=; b=uCLqBgjuRgaTwZeRkrIqtuIYK/gh2RVd92by1U+wAwsY83LEsQMXwr/ZtBWPT4PLwZ NybyjDjULg/ubLbnW8sy14V1NNB1UR5hC9+B4jjE7xTNmW3Lmsh5lEWYs3gWhemoe7VW Wi9AUHQoO2PTVCCUQKzH200g2qbf63Tbgya5FfPDTk0id4BJUmSCyI7HFNjXHtWgjECQ hXkEiqonN0SXwwdqsYe46AEh9qhYv92LeNVW4hjoHpY+tPmsmdX/axAy71s6JfUniYTg gr2CRdrncqKeRVOvNilA28nb7f9GzGOAsQzibyjQgZUwpGs84G4LpbdvTgiJXStdyuwa 1bgw== 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=X9TkCBVQUr3Qivq/7xJgeeQht3EZWXdqA5vbsgS4/Hk=; b=TLpx2tL4kAul35OJYDJxd73qm8yDBxxYoGjpF55pgS+AWQK2QljhJgStFrOIcXshsd UHLXOqHksZVaGB7fRRx/bV77OMxre4e0iUtWJKUY6AsoGFinA9GZ4gr0uOOPxnXOh8sE e6Vgl9xv2QkDcEfaXdadjHpja7s0LvynG7pxJoUD16RP4/zYaYwzZQMv2DP5RySsWDzj IpZQXD8/dGrWvwn6GOtd9M9/kN+f2JgQJ3+mDX4iwjm5hbMFpW4zRUrVIgI8Kn2HeW9D CttEC5AW2MZI7o0BiCeMqlIXWVHKPxdnZkKXrcy3RxjslmUaK4k7uvrKgeWdnA3XqyST Abmg== X-Gm-Message-State: AA+aEWb6npf5c5I5387RF5A9ewqq/lktvpRzT4vCi9IZql2PNsJEO00V mkCz/o1pbmRi9uoorI0sOxPqMzdd X-Google-Smtp-Source: AFSGD/XGRj+As/5ntQRgpnkqCeavfw55L9zQxvnlunaFJDUSaIf9cWuK9gIVa/F9KcI9piuMy1Obiw== X-Received: by 2002:a17:902:8541:: with SMTP id d1mr21617108plo.205.1544648019165; Wed, 12 Dec 2018 12:53:39 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:38 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 16/24] memory: tegra: Clean up error messages Date: Wed, 12 Dec 2018 23:38:59 +0300 Message-Id: <20181212203907.23461-17-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Make all messages to start with a lower case and don't unnecessarily go over 80 chars in the code. Signed-off-by: Dmitry Osipenko --- drivers/memory/tegra/mc.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index 570da2129fa6..0a53598d982f 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -163,7 +163,7 @@ static int tegra_mc_hotreset_assert(struct reset_controller_dev *rcdev, /* block clients DMA requests */ err = rst_ops->block_dma(mc, rst); if (err) { - dev_err(mc->dev, "Failed to block %s DMA: %d\n", + dev_err(mc->dev, "failed to block %s DMA: %d\n", rst->name, err); return err; } @@ -173,7 +173,7 @@ static int tegra_mc_hotreset_assert(struct reset_controller_dev *rcdev, /* wait for completion of the outstanding DMA requests */ while (!rst_ops->dma_idling(mc, rst)) { if (!retries--) { - dev_err(mc->dev, "Failed to flush %s DMA\n", + dev_err(mc->dev, "failed to flush %s DMA\n", rst->name); return -EBUSY; } @@ -186,7 +186,7 @@ static int tegra_mc_hotreset_assert(struct reset_controller_dev *rcdev, /* clear clients DMA requests sitting before arbitration */ err = rst_ops->hotreset_assert(mc, rst); if (err) { - dev_err(mc->dev, "Failed to hot reset %s: %d\n", + dev_err(mc->dev, "failed to hot reset %s: %d\n", rst->name, err); return err; } @@ -215,7 +215,7 @@ static int tegra_mc_hotreset_deassert(struct reset_controller_dev *rcdev, /* take out client from hot reset */ err = rst_ops->hotreset_deassert(mc, rst); if (err) { - dev_err(mc->dev, "Failed to deassert hot reset %s: %d\n", + dev_err(mc->dev, "failed to deassert hot reset %s: %d\n", rst->name, err); return err; } @@ -225,7 +225,7 @@ static int tegra_mc_hotreset_deassert(struct reset_controller_dev *rcdev, /* allow new DMA requests to proceed to arbitration */ err = rst_ops->unblock_dma(mc, rst); if (err) { - dev_err(mc->dev, "Failed to unblock %s DMA : %d\n", + dev_err(mc->dev, "failed to unblock %s DMA : %d\n", rst->name, err); return err; } @@ -657,7 +657,8 @@ static int tegra_mc_probe(struct platform_device *pdev) { err = tegra_mc_setup_latency_allowance(mc); if (err < 0) { - dev_err(&pdev->dev, "failed to setup latency allowance: %d\n", + dev_err(&pdev->dev, + "failed to setup latency allowance: %d\n", err); return err; } @@ -678,7 +679,7 @@ static int tegra_mc_probe(struct platform_device *pdev) return mc->irq; } - WARN(!mc->soc->client_id_mask, "Missing client ID mask for this SoC\n"); + WARN(!mc->soc->client_id_mask, "missing client ID mask for this SoC\n"); mc_writel(mc, mc->soc->intmask, MC_INTMASK); From patchwork Wed Dec 12 20:39:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012287 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="YJyG5eQh"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTYy2xvLz9sBn for ; Thu, 13 Dec 2018 07:53:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728012AbeLLUxq (ORCPT ); Wed, 12 Dec 2018 15:53:46 -0500 Received: from mail-pl1-f196.google.com ([209.85.214.196]:37238 "EHLO mail-pl1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726973AbeLLUxq (ORCPT ); Wed, 12 Dec 2018 15:53:46 -0500 Received: by mail-pl1-f196.google.com with SMTP id b5so9157153plr.4; Wed, 12 Dec 2018 12:53:45 -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=eTNlGZU9inIb5w7gPDwEa+MxY0Vrr9+k5li1fWVyioc=; b=YJyG5eQhu70ECWvydYtPnRSE6oTbcdHgrnX7uuJ82DTJDcNYVsvx+Xy3ig9O1kBHI4 SrbR4Msb25Vqv6XvHxxdWyrDNhMabEbdq0J4/1iZjbHao5lmntPLsIjomEBA6xIfeH3o YYqRcHPfNjarj/aik7AJhkX6Pnk3eay5iKw0gLu2E9AgUs7XV8XDb8MJ/3HZepBgKfjD QEjc/rVf7SPIdRX2xcLNdRmtTwg1PEm5cZ/NGnQrAIjD7MOfu0LpelUz4ktOSI5A0vfg ln0AQYfWnbCn9eqzum90dMEBxXFr10AHqI56KyHRSyfZad7YHwZ7P+6IEk1uSZMi9qgl iRLA== 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=eTNlGZU9inIb5w7gPDwEa+MxY0Vrr9+k5li1fWVyioc=; b=GNBRE9AK7FlidLIYSnV329qWrbYur/G4nYEip/8BOfvfBRgPvJQ0I08Zh0yrh4Jv4d zEGm217M83ipYUeH9d4R33nxGjTnIo8IQr/OTzqlLzT2clbAqfKUI3w8JwcZEA2u7Laa 9d27fKGRKosD8u++8H5kRMxHTNFbmb3zbjT/AsV4MowTNJ1D3s0yQaA4Z2sSfAZsK9Yr C7pWQ8xjBmehBo7IlQGU/4Sm+QYqK32JXF1SViHgmP0yo+y1G6D2f3GcK8ceC2y1JDND Xu/A1Pdh0qRpgstGDZw6G+liUA4nZdLHFejpy7d/eZiclTwO16DrKhizkrWo0tyBCAg8 v3lA== X-Gm-Message-State: AA+aEWY1hhIzYfMVIJ61cT8H93g+kjdBoeUOASK/hjtibbq27pDQlcoo 6AH3ksDQ80DUimHjqwOXvWM= X-Google-Smtp-Source: AFSGD/WhELHkKn6okVjCJPwH6Xg2JjaNE/3McvrEar/CFgB2eQZzvHhdi5RS2CxBRIGqACCzxXKDLA== X-Received: by 2002:a17:902:f082:: with SMTP id go2mr21234390plb.115.1544648025352; Wed, 12 Dec 2018 12:53:45 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:44 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 17/24] iommu/tegra: gart: Fix spinlock recursion Date: Wed, 12 Dec 2018 23:39:00 +0300 Message-Id: <20181212203907.23461-18-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Fix spinlock recursion bug that happens on IOMMU domain destruction if any of the allocated domains have devices attached to them. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index b35ffa312a83..a7a9400e0cd8 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -197,25 +197,33 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain, return err; } -static void gart_iommu_detach_dev(struct iommu_domain *domain, - struct device *dev) +static void __gart_iommu_detach_dev(struct iommu_domain *domain, + struct device *dev) { struct gart_domain *gart_domain = to_gart_domain(domain); struct gart_device *gart = gart_domain->gart; struct gart_client *c; - spin_lock(&gart->client_lock); - list_for_each_entry(c, &gart->client, list) { if (c->dev == dev) { list_del(&c->list); devm_kfree(gart->dev, c); dev_dbg(gart->dev, "Detached %s\n", dev_name(dev)); - goto out; + return; } } - dev_err(gart->dev, "Couldn't find\n"); -out: + + dev_err(gart->dev, "Couldn't find %s to detach\n", dev_name(dev)); +} + +static void gart_iommu_detach_dev(struct iommu_domain *domain, + struct device *dev) +{ + struct gart_domain *gart_domain = to_gart_domain(domain); + struct gart_device *gart = gart_domain->gart; + + spin_lock(&gart->client_lock); + __gart_iommu_detach_dev(domain, dev); spin_unlock(&gart->client_lock); } @@ -255,7 +263,7 @@ static void gart_iommu_domain_free(struct iommu_domain *domain) struct gart_client *c; list_for_each_entry(c, &gart->client, list) - gart_iommu_detach_dev(domain, c->dev); + __gart_iommu_detach_dev(domain, c->dev); } spin_unlock(&gart->client_lock); } From patchwork Wed Dec 12 20:39:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012288 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="Jm3j8T3X"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTZ04063z9s7h for ; Thu, 13 Dec 2018 07:54:00 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726973AbeLLUxx (ORCPT ); Wed, 12 Dec 2018 15:53:53 -0500 Received: from mail-pf1-f196.google.com ([209.85.210.196]:46110 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726440AbeLLUxw (ORCPT ); Wed, 12 Dec 2018 15:53:52 -0500 Received: by mail-pf1-f196.google.com with SMTP id c73so9420943pfe.13; Wed, 12 Dec 2018 12:53:51 -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=NxK9RMJELvGUwh2e48DLDAyybI+xi2gMHKnphksiQDk=; b=Jm3j8T3XYVm5XweSGJ4YXa3gKZJ+kHSCZ2KFbyBMCmhRfIaMJlDm4+aJELMo87au3C AFIcOI+oOlXwBtI2lBWhyr4XsaJPbn6LVclk6Y3a0eLo6ls1ParqkNUr8OQhEmuKPfG4 1+QENbJASkBny2jtwyQgDV3uZQZNzJx6sntiBZzAMxtopivXfchyBTjb1slF4wjVfvHu ZngCGUCRqLTYu2rNouayCAfgAmeobA/aED+xDglrEfbVWFkNw5jEKBDyjFJt2wCQrrtg 23n9WmkUQz1qkdeLJKXgHJo0/PiViGc5OSFxOQCKtSaE/2zUObCtaarHffmrR0KCBaxV UeFA== 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=NxK9RMJELvGUwh2e48DLDAyybI+xi2gMHKnphksiQDk=; b=nEz03lHuNdsrieA49XZjRvbkISDJJleNizqgvs9hSaVIoGf0ZeIoTaH2mK3OF+P0ji 5tl0wZc6j6Zw9zjlu24vP+ElcJ4KZhOjt3C31Sk0WroaG4Vx/ofr1b1X1EXGWpeHA9Vx +vNixlqY4T7wU15YD8dvjB4cPcXVCokSmBN4KvM0a1uvg+0/5jvRrWfz6jt2lfLZ2zuT wv2E4a3C+OuKinGH5b+Wrm0QilDKGnnpQYJXKjywCKqUBF+9ED4+6EBh1V3QBNZ7ALqC ufCez96eiw/zX0fRLwLAQLFzUiRkjXzXkqKVDGzk6qSdMzclG3RBAOPMVMjEW5/ykUaf WOoQ== X-Gm-Message-State: AA+aEWYhrA7f+Z1nrIVFSuossjcnXeg0rjnBrFKVe8vYoxVPfU+J3lRp rL1DEj0zY+WC5CC8mZ2fUq8= X-Google-Smtp-Source: AFSGD/U9B3gsdGNLR3lNaD54fkIbUbvkXMtWQ43dc7taCUX02C0SYr/PQwI08HI2b39z0Yiz6tZC3g== X-Received: by 2002:a62:5793:: with SMTP id i19mr21807340pfj.49.1544648031557; Wed, 12 Dec 2018 12:53:51 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:51 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 18/24] iommu/tegra: gart: Fix NULL pointer dereference Date: Wed, 12 Dec 2018 23:39:01 +0300 Message-Id: <20181212203907.23461-19-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Fix NULL pointer dereference on IOMMU domain destruction that happens because clients list is being iterated unsafely and its elements are getting deleted during the iteration. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index a7a9400e0cd8..7fdd8b12efd5 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -260,9 +260,9 @@ static void gart_iommu_domain_free(struct iommu_domain *domain) if (gart) { spin_lock(&gart->client_lock); if (!list_empty(&gart->client)) { - struct gart_client *c; + struct gart_client *c, *tmp; - list_for_each_entry(c, &gart->client, list) + list_for_each_entry_safe(c, tmp, &gart->client, list) __gart_iommu_detach_dev(domain, c->dev); } spin_unlock(&gart->client_lock); From patchwork Wed Dec 12 20:39:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012289 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="B9ed7zXr"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTZ245cjz9s7T for ; Thu, 13 Dec 2018 07:54:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727900AbeLLUx7 (ORCPT ); Wed, 12 Dec 2018 15:53:59 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:34944 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726440AbeLLUx7 (ORCPT ); Wed, 12 Dec 2018 15:53:59 -0500 Received: by mail-pg1-f193.google.com with SMTP id s198so8894929pgs.2; Wed, 12 Dec 2018 12:53:58 -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=8Tj1qjXBLfnkSsUTvtTCTA5DtXU5UPAVlSS29eIqWoA=; b=B9ed7zXr5XKp9qIXeR1KqSLSAjNAYea42kG5h9kS+kXbwfdRhnGyVwj+YlYQpoujd9 fbxSplbBUUwbXjHHB8iOltO2Opbdf9r6h06rbY5CCllk628TPtqhPZBihS26hMAjYj4t i26CzokaIRGneISdPEUvDooZIJzTvBvbTNZHuBXqDBMrLPjezpl2UcEo/uEQtgBpbQLC jH7rqHOOO+FlqZd28st1w2JZGL3WlA32mW0QglIRWKvleZ5UsUjmu0Y75I7TWeMiRHlY TaJCyFqZH9NHUNzGSrR7KqDUm1tFw2H7IB/BDcVZpGQMegLrzKgYqXRrC1drCiiw17pl oHJA== 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=8Tj1qjXBLfnkSsUTvtTCTA5DtXU5UPAVlSS29eIqWoA=; b=Hk8BE7vWSR8K0euPjS9X9iNnwYP8plxXNaojtVaoFtZK95J3sfXhinC5Uhj4OtNedE NX6LWjsz7FiJgj3YJSDeYxRsHV8DUmgEMOy3ihR4nuKfHkfdyG0woxT3SIzmVmMqsnTw KQQFs7kOzWYcgOzZp6qSAk5szAnng1L9Z4EgbGeh1eEWFx4E88d/npPdN6leECyVXkVF yT71+RECrF/mK45PXx/jDbLC/3e4r/vwidQceycE0sXgxyH4HalTzuIeN9N0YFxSZxDu iCclDwhlhkNauLOlDE43XMBnmOmcw4h2SP03G392EMlyftebpTBNNmVQxw23LOTvi2GK aYrQ== X-Gm-Message-State: AA+aEWaomKaDX9+taL+micetOSIhpcPIPD4BVoRoguJ+DvczUVctC7XM 64iEiYlHfeBOuBiazkNNsX0= X-Google-Smtp-Source: AFSGD/XuWdTJEIuIHBSRWwGd6X+5LyYf8AGc9j+bfFnrZIRHiRDJsI7aNbwnvImk+NP74gax8AHZeQ== X-Received: by 2002:a63:26c1:: with SMTP id m184mr1038815pgm.367.1544648038165; Wed, 12 Dec 2018 12:53:58 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:53:57 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 19/24] iommu/tegra: gart: Allow only one active domain at a time Date: Wed, 12 Dec 2018 23:39:02 +0300 Message-Id: <20181212203907.23461-20-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 GART has a single address space that is shared by all devices, hence only one domain could be active at a time. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 7fdd8b12efd5..71ff22be9560 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -57,6 +57,7 @@ struct gart_device { spinlock_t pte_lock; /* for pagetable */ struct list_head client; spinlock_t client_lock; /* for client list */ + struct iommu_domain *active_domain; /* current active domain */ struct device *dev; struct iommu_device iommu; /* IOMMU Core handle */ @@ -186,6 +187,12 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain, goto fail; } } + if (gart->active_domain && gart->active_domain != domain) { + dev_err(gart->dev, "Only one domain can be active at a time\n"); + err = -EINVAL; + goto fail; + } + gart->active_domain = domain; list_add(&client->list, &gart->client); spin_unlock(&gart->client_lock); dev_dbg(gart->dev, "Attached %s\n", dev_name(dev)); @@ -208,6 +215,8 @@ static void __gart_iommu_detach_dev(struct iommu_domain *domain, if (c->dev == dev) { list_del(&c->list); devm_kfree(gart->dev, c); + if (list_empty(&gart->client)) + gart->active_domain = NULL; dev_dbg(gart->dev, "Detached %s\n", dev_name(dev)); return; } From patchwork Wed Dec 12 20:39:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012290 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="sv/MOEQt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTZD1XKpz9s7h for ; Thu, 13 Dec 2018 07:54:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727491AbeLLUyF (ORCPT ); Wed, 12 Dec 2018 15:54:05 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:35284 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726440AbeLLUyF (ORCPT ); Wed, 12 Dec 2018 15:54:05 -0500 Received: by mail-pl1-f194.google.com with SMTP id p8so9163295plo.2; Wed, 12 Dec 2018 12:54:04 -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=lXvQwdbHaj44s+GSM9FyQCJ3qWTi2wyKfG/w69V/isE=; b=sv/MOEQtCOAjKAsdEJir5wLaL8TNycVxti96zt/VYLAm+4gkGzrR2ycQ9JURflrFrM 99B3mqO83+ABeSZLZmgHszxmuOW/HTuRWYQKy4PVBpPn3esEdbGVYgEHwH9i1YbkThmV DsosZQrnkEzNpIkGGNpxuxyEEi3gncDJ7y5EGT2oHX3e09HSvZJAnhca+r3U5Q6+UblI oPQbmLcWPGOygs8Zo1x9mTEweDRB9wRWWTPkotxb+i2vH3xxxlWJWRwIQr43LC8HMgoj x2uKZEo1aDYiM4N+jR11aOl9WHgWcpUYpL7F/ZHm4mYeBJoRtrWvrQLfzBFVE9bJK2q4 V7wg== 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=lXvQwdbHaj44s+GSM9FyQCJ3qWTi2wyKfG/w69V/isE=; b=ORmwK/KduUsCb3EGcm5QXmC7wG4dAZRVK754M7f5GI01m2IlRHA0qo9IG03mit2QnN pXccGv0G5J/QMJLYqcIU1aXWyaVYia5mzQm05RkT7iPbnfm4JItrCrMJkTvH3TvqBPJ+ QIYoVxzr80jt3vW1FTUZNBpec8iUj5WCt10x7zFWStMU4720OKv37xK/qOXtWmbW0AWR 5huruxiTA0U7BqkJRba7Qbe9RmsfxAAQTi8p0N6sgjpQC1RqvjB1zRT0xfsvwvgFzHoH qJPb6KFlbV/leqG6EXpzIlGRGMv/DX6jRJd2MNBxcBq3cdoKZhqJqWP4OArmFyo9a6SC ryDA== X-Gm-Message-State: AA+aEWaWH4VVGF3+2p8T6Ff0AxEzwlxH3W3NURvHIfIkSSN2LTGIBuLQ 7rAHo9Ku28InReaptBLWTOg= X-Google-Smtp-Source: AFSGD/V1PctVGVbTIiUMI0XOsAfZiqh40B2tdYxhRkeKWzW0yjwqH+GujxNZOXEZPmTnKyqVC/Kf2Q== X-Received: by 2002:a17:902:654a:: with SMTP id d10mr20795561pln.324.1544648044429; Wed, 12 Dec 2018 12:54:04 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.53.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:54:03 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 20/24] iommu/tegra: gart: Don't use managed resources Date: Wed, 12 Dec 2018 23:39:03 +0300 Message-Id: <20181212203907.23461-21-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 GART is a part of the Memory Controller driver that is always built-in, hence there is no benefit from the use of managed resources. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 71ff22be9560..2e0e6aff8f70 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -173,7 +173,7 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain, struct gart_client *client, *c; int err = 0; - client = devm_kzalloc(gart->dev, sizeof(*c), GFP_KERNEL); + client = kzalloc(sizeof(*c), GFP_KERNEL); if (!client) return -ENOMEM; client->dev = dev; @@ -199,7 +199,7 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain, return 0; fail: - devm_kfree(gart->dev, client); + kfree(client); spin_unlock(&gart->client_lock); return err; } @@ -214,7 +214,7 @@ static void __gart_iommu_detach_dev(struct iommu_domain *domain, list_for_each_entry(c, &gart->client, list) { if (c->dev == dev) { list_del(&c->list); - devm_kfree(gart->dev, c); + kfree(c); if (list_empty(&gart->client)) gart->active_domain = NULL; dev_dbg(gart->dev, "Detached %s\n", dev_name(dev)); @@ -455,7 +455,7 @@ struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc) return ERR_PTR(-ENXIO); } - gart = devm_kzalloc(dev, sizeof(*gart), GFP_KERNEL); + gart = kzalloc(sizeof(*gart), GFP_KERNEL); if (!gart) { dev_err(dev, "failed to allocate gart_device\n"); return ERR_PTR(-ENOMEM); @@ -464,7 +464,7 @@ struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc) ret = iommu_device_sysfs_add(&gart->iommu, dev, NULL, "gart"); if (ret) { dev_err(dev, "Failed to register IOMMU in sysfs\n"); - return ERR_PTR(ret); + goto free_gart; } iommu_device_set_ops(&gart->iommu, &gart_iommu_ops); @@ -502,6 +502,8 @@ struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc) iommu_device_unregister(&gart->iommu); remove_sysfs: iommu_device_sysfs_remove(&gart->iommu); +free_gart: + kfree(gart); return ERR_PTR(ret); } From patchwork Wed Dec 12 20:39:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012291 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="JxUrRZkI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTZL4nfWz9s7h for ; Thu, 13 Dec 2018 07:54:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726960AbeLLUyL (ORCPT ); Wed, 12 Dec 2018 15:54:11 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:42724 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726440AbeLLUyL (ORCPT ); Wed, 12 Dec 2018 15:54:11 -0500 Received: by mail-pg1-f193.google.com with SMTP id d72so8882805pga.9; Wed, 12 Dec 2018 12:54:10 -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=8e+kFe+qiuioT/9U25HTRBMffLJQU7a5rkqBRxg8ljQ=; b=JxUrRZkIrrU1QX110oMxC2kJK/kYOjm5ceFveGmV9z1+1CX83fePZisrn8VC2Ydfzu ee2MfCOGGlLPu7P8IYg0AsO4GwcGwQj9R4pEgxI8fEuM8uiZhnSa0p7YrHgRcg9UTSYi PmZP0dNNWbbPSi9bPeh4KvkGgb26CrUatGJEf6dZQbpMt21SLd3dWAJ5EDlEeUUXliPN c4GWVLXvsMQgytPDztuaJF85KfCGfd++eCCmbbfJ6gfakvKnXX1gn9ikdMUnDWzgeU7R lJCXfu53S9wsgLePWjHR0FJFf0KQ0H8npi8ucQTo9sOGhS3Cpl+vFzPtftWGqjxG7VEf jDIA== 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=8e+kFe+qiuioT/9U25HTRBMffLJQU7a5rkqBRxg8ljQ=; b=tqsbYdevTaLkAU2ftnTeQ8ECZ/5S5UPcB5fUJ/RwRt25bfLKHaigYjCIWLDeE/f+8e Am2KgY2GZ9IpsmWHHzUNQRKupan6XSc6od8oM5dz1hy89u+UvxdAMICfmKXo9FQStIR9 JLSo2rqEhBWRsOniKq4EJYsYZvzf/ycdJf39ABaZE84SKeLD0hiAvgpiZTaUY9eGuxQ0 UY8Sz223XYWPR1/zN2Tlldk+mrWNUxCn5pOoJlzwMGsTzcLUrqojxgosTRGuRbHNrXTe /O1mR6skZ2vQDCrekY3i0LGVIDto34lvRQW7awdWsSWfJCRjNL5luEms6TeV7WTnulS2 5RvQ== X-Gm-Message-State: AA+aEWbqZSwFsJN6GZRqCttapmmERsaeDeUh1alQlAv7VmJvtJyxLyDe 9TC+dyjo6PI8dMdopIEnITLmdMNA X-Google-Smtp-Source: AFSGD/VGH/Jk8y7pfzFxTUjFqI5b3dBQaPW2eujRhf5xqa4XraPOaJtRyalXiK+3ymnQ015fQBE6HA== X-Received: by 2002:a63:64c:: with SMTP id 73mr19414097pgg.373.1544648050705; Wed, 12 Dec 2018 12:54:10 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.54.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:54:10 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 21/24] iommu/tegra: gart: Prepend error/debug messages with "gart:" Date: Wed, 12 Dec 2018 23:39:04 +0300 Message-Id: <20181212203907.23461-22-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 GART became a part of Memory Controller, hence now the drivers device is Memory Controller and not GART. As a result all printed messages are prepended with the "tegra-mc 7000f000.memory-controller:", so let's prepend GART's messages with "gart:" in order to differentiate them from the MC. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 2e0e6aff8f70..a3ce6918577d 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -19,6 +19,8 @@ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. */ +#define dev_fmt(fmt) "gart: " fmt + #include #include #include From patchwork Wed Dec 12 20:39:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012292 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="LjT2amFZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTZT6By2z9s7T for ; Thu, 13 Dec 2018 07:54:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728053AbeLLUyS (ORCPT ); Wed, 12 Dec 2018 15:54:18 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:34103 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726440AbeLLUyR (ORCPT ); Wed, 12 Dec 2018 15:54:17 -0500 Received: by mail-pg1-f195.google.com with SMTP id 17so8895308pgg.1; Wed, 12 Dec 2018 12:54:17 -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=iR42oOqYi5przQZm71AZ12CGa/gTigN611ZJ7xxK3x8=; b=LjT2amFZbkDjL/nUmJ6evYMVE5n4wX4DcbTRFHLukVjjqxmoX71elhgB37rrWko5St VP5aFLFs6mKtWXkQa+JQs82zuh3p9ieGzl/fzaAEncKcQBWzmRbSSVwvZNrNbF+1HeSx b8Ru308L2D7CLCvpKa9CdcAkwez58+7ad+jb8LmfPPfvMKrQ8VSP1dplmEVx5BBuBkX/ rqZyH7JAVr04/mGzaTR0zJCU2CsC7yYoJA2KtS4iZX2BnPIe+QFbGA2exPjpBRIqnwg5 oaI0vRH0xUGts7oDOkJO47h63vmaP3oAPYTJJwiLRYGX+TycawzoadQqEqxnzxOKkBMO FVEw== 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=iR42oOqYi5przQZm71AZ12CGa/gTigN611ZJ7xxK3x8=; b=jzDtOO0CB2fqc1V5tiDE+74d8GMjHOplmCJ8v8Gx9ip+qZuUCntXlPWyXq0a5Lm4c4 K9xkgiYe6JLXGDnPmH4bcK8FoV30LysWIVQ8w6JDgDEvcEY/ksWfOd/Ab49JRkW8S6Tp cnrZETmr8r5Xfh07cmuUPjCqC6k9Nr6AZgvm1i2Y7nuI9XDWrezAVBu+JowD99EcJBa3 5NtbLf3zdQlSFM+/fMz28debgch2WP1bqVLAP5eWnQ8tVL/AdaJDBtrIPU6jwuAn0a3K QvSEAIXF0wM4hfIsOAm7JOpFQ7i3Jl1lEZkhIh85Qjsp/zYZg4K/9GWCThfYsrKenJzT GZtg== X-Gm-Message-State: AA+aEWb5bk+5zbzN7Uvbvkp0mw/IlXLZ++6AEYQi8XhS6/nN9mwU4kGI czJRo9H1f03RBx1xu+iqhWdrovfL X-Google-Smtp-Source: AFSGD/WFbC64OAcvt0NyeZDUvsWoOvO0HPm8RFl08C0lBJ+APieq3M4my3bLDAPZJTInHRlHzB2GQQ== X-Received: by 2002:a62:6204:: with SMTP id w4mr21824210pfb.5.1544648057001; Wed, 12 Dec 2018 12:54:17 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.54.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:54:16 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 22/24] iommu/tegra: gart: Don't detach devices from inactive domains Date: Wed, 12 Dec 2018 23:39:05 +0300 Message-Id: <20181212203907.23461-23-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 There could be unlimited number of allocated domains, but only one domain can be active at a time. Hence devices must be detached only from the active domain. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index a3ce6918577d..74c9be13f043 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -171,7 +171,7 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain, struct device *dev) { struct gart_domain *gart_domain = to_gart_domain(domain); - struct gart_device *gart = gart_domain->gart; + struct gart_device *gart = gart_handle; struct gart_client *client, *c; int err = 0; @@ -195,6 +195,7 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain, goto fail; } gart->active_domain = domain; + gart_domain->gart = gart; list_add(&client->list, &gart->client); spin_unlock(&gart->client_lock); dev_dbg(gart->dev, "Attached %s\n", dev_name(dev)); @@ -217,8 +218,10 @@ static void __gart_iommu_detach_dev(struct iommu_domain *domain, if (c->dev == dev) { list_del(&c->list); kfree(c); - if (list_empty(&gart->client)) + if (list_empty(&gart->client)) { gart->active_domain = NULL; + gart_domain->gart = NULL; + } dev_dbg(gart->dev, "Detached %s\n", dev_name(dev)); return; } @@ -254,7 +257,6 @@ static struct iommu_domain *gart_iommu_domain_alloc(unsigned type) if (!gart_domain) return NULL; - gart_domain->gart = gart; gart_domain->domain.geometry.aperture_start = gart->iovmm_base; gart_domain->domain.geometry.aperture_end = gart->iovmm_base + gart->page_count * GART_PAGE_SIZE - 1; From patchwork Wed Dec 12 20:39:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012293 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="B5lCuC5K"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTZb4QC8z9s7h for ; Thu, 13 Dec 2018 07:54:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728586AbeLLUyZ (ORCPT ); Wed, 12 Dec 2018 15:54:25 -0500 Received: from mail-pf1-f196.google.com ([209.85.210.196]:36088 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726440AbeLLUyY (ORCPT ); Wed, 12 Dec 2018 15:54:24 -0500 Received: by mail-pf1-f196.google.com with SMTP id b85so9452744pfc.3; Wed, 12 Dec 2018 12:54:23 -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=1ZGlWu/lf7RD7rEcG5k2DEnU2bThPk3OLWzd63nA3lA=; b=B5lCuC5KhAv8yr2gcAI34HdHbsY6QqjdJvclVh/eHhi7FJaUnqAXSFgWPx4QXisj7e 67Ywl13UBTDpW7RmtoeilvPu3pRDe+G1nUoXsANmtkyTvDwSdf8/lxvEVm7psP2Oy1k8 nSl+nO3w+MfV5Vt697BRs7FUnPefnKx2jsqmqSb2HAP50rW5YHTg1WZgRTQSTXyR3gYM zJ6bjzronRHxrGg3og0JbVHPVwO1GJLRBPMq3U7Hz3XdlpBMIelRVS1YIUokT8mCsEv2 AnY9az9eriyI9XHKVqp6gpl4Kx0u35mrWrq+msVBsmfIzQN6ii3MI0s9S5j05lZYyKEZ a0cA== 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=1ZGlWu/lf7RD7rEcG5k2DEnU2bThPk3OLWzd63nA3lA=; b=SGCrVbMmR45qofNoF22rvTWgXy8K4iHp22PinDTX2DWQ0NWUxz1ZIxcqSpDdoGUBTe ojW9bH/Ncz1VtYEz26mjM+4BNx2GLdQNb4BddWWgJKqqmD/CJHm3FUbUEU6sQ2FIiC/S AsP/WTt4q6m+U5ZwnQ793YOwz8ZfGDeiKhAYUFRh+MPo0J27WVBaIQMPHxor/k7eSLFt n0K2IzQV2OVUCthwFUYYhtKmlpZ0992gksv2X0PzTFndNwx8XfXHIRMXPUz72oPJUayE ROqq1lyq74SwWBfp7SySI7qpZ+oBP5OmdXG6hp+q2NSiRTLf0dQbqE1f0CE7Rb5CqP7H 5ISg== X-Gm-Message-State: AA+aEWaD7XpMD/mFD1IloRrNOe+7Xof7oupBTelLZ7eNERnE17mCUn6N 3Zxyy6UrrU7LEwUsLtET1LfH5YVA X-Google-Smtp-Source: AFSGD/XQsjTF0A+lANBhF1nQIoZo2JX0QWtz6L20TZgYYZCeojo8VNmVbYvdQaN8vIrSUM6qcnVszA== X-Received: by 2002:a62:6dc7:: with SMTP id i190mr18838219pfc.166.1544648063248; Wed, 12 Dec 2018 12:54:23 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.54.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:54:22 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 23/24] iommu/tegra: gart: Simplify clients-tracking code Date: Wed, 12 Dec 2018 23:39:06 +0300 Message-Id: <20181212203907.23461-24-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 GART is a simple IOMMU provider that has single address space. There is no need to setup global clients list and manage it for tracking of the active domain, hence lot's of code could be safely removed and replaced with a simpler alternative. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 155 ++++++++++--------------------------- 1 file changed, 40 insertions(+), 115 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 74c9be13f043..ad348c61d5e7 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -23,7 +23,6 @@ #include #include -#include #include #include #include @@ -46,30 +45,20 @@ #define GART_PAGE_MASK \ (~(GART_PAGE_SIZE - 1) & ~GART_ENTRY_PHYS_ADDR_VALID) -struct gart_client { - struct device *dev; - struct list_head list; -}; - struct gart_device { void __iomem *regs; u32 *savedata; u32 page_count; /* total remappable size */ dma_addr_t iovmm_base; /* offset to vmm_area */ spinlock_t pte_lock; /* for pagetable */ - struct list_head client; - spinlock_t client_lock; /* for client list */ + spinlock_t dom_lock; /* for active domain */ + unsigned int active_devices; /* number of active devices */ struct iommu_domain *active_domain; /* current active domain */ struct device *dev; struct iommu_device iommu; /* IOMMU Core handle */ }; -struct gart_domain { - struct iommu_domain domain; /* generic domain handle */ - struct gart_device *gart; /* link to gart device */ -}; - static struct gart_device *gart_handle; /* unique for a system */ static bool gart_debug; @@ -77,11 +66,6 @@ static bool gart_debug; #define GART_PTE(_pfn) \ (GART_ENTRY_PHYS_ADDR_VALID | ((_pfn) << PAGE_SHIFT)) -static struct gart_domain *to_gart_domain(struct iommu_domain *dom) -{ - return container_of(dom, struct gart_domain, domain); -} - /* * Any interaction between any block on PPSB and a block on APB or AHB * must have these read-back to ensure the APB/AHB bus transaction is @@ -170,125 +154,70 @@ static inline bool gart_iova_range_valid(struct gart_device *gart, static int gart_iommu_attach_dev(struct iommu_domain *domain, struct device *dev) { - struct gart_domain *gart_domain = to_gart_domain(domain); struct gart_device *gart = gart_handle; - struct gart_client *client, *c; - int err = 0; - - client = kzalloc(sizeof(*c), GFP_KERNEL); - if (!client) - return -ENOMEM; - client->dev = dev; - - spin_lock(&gart->client_lock); - list_for_each_entry(c, &gart->client, list) { - if (c->dev == dev) { - dev_err(gart->dev, - "%s is already attached\n", dev_name(dev)); - err = -EINVAL; - goto fail; - } - } - if (gart->active_domain && gart->active_domain != domain) { - dev_err(gart->dev, "Only one domain can be active at a time\n"); - err = -EINVAL; - goto fail; - } - gart->active_domain = domain; - gart_domain->gart = gart; - list_add(&client->list, &gart->client); - spin_unlock(&gart->client_lock); - dev_dbg(gart->dev, "Attached %s\n", dev_name(dev)); - return 0; + int ret = 0; -fail: - kfree(client); - spin_unlock(&gart->client_lock); - return err; -} + spin_lock(&gart->dom_lock); -static void __gart_iommu_detach_dev(struct iommu_domain *domain, - struct device *dev) -{ - struct gart_domain *gart_domain = to_gart_domain(domain); - struct gart_device *gart = gart_domain->gart; - struct gart_client *c; - - list_for_each_entry(c, &gart->client, list) { - if (c->dev == dev) { - list_del(&c->list); - kfree(c); - if (list_empty(&gart->client)) { - gart->active_domain = NULL; - gart_domain->gart = NULL; - } - dev_dbg(gart->dev, "Detached %s\n", dev_name(dev)); - return; - } + if (gart->active_domain && gart->active_domain != domain) { + ret = -EBUSY; + } else if (dev->archdata.iommu != domain) { + dev->archdata.iommu = domain; + gart->active_domain = domain; + gart->active_devices++; } - dev_err(gart->dev, "Couldn't find %s to detach\n", dev_name(dev)); + spin_unlock(&gart->dom_lock); + + return ret; } static void gart_iommu_detach_dev(struct iommu_domain *domain, struct device *dev) { - struct gart_domain *gart_domain = to_gart_domain(domain); - struct gart_device *gart = gart_domain->gart; + struct gart_device *gart = gart_handle; + + spin_lock(&gart->dom_lock); - spin_lock(&gart->client_lock); - __gart_iommu_detach_dev(domain, dev); - spin_unlock(&gart->client_lock); + if (dev->archdata.iommu == domain) { + dev->archdata.iommu = NULL; + + if (--gart->active_devices == 0) + gart->active_domain = NULL; + } + + spin_unlock(&gart->dom_lock); } static struct iommu_domain *gart_iommu_domain_alloc(unsigned type) { - struct gart_domain *gart_domain; - struct gart_device *gart; + struct gart_device *gart = gart_handle; + struct iommu_domain *domain; if (type != IOMMU_DOMAIN_UNMANAGED) return NULL; - gart = gart_handle; - if (!gart) - return NULL; - - gart_domain = kzalloc(sizeof(*gart_domain), GFP_KERNEL); - if (!gart_domain) - return NULL; - - gart_domain->domain.geometry.aperture_start = gart->iovmm_base; - gart_domain->domain.geometry.aperture_end = gart->iovmm_base + + domain = kzalloc(sizeof(*domain), GFP_KERNEL); + if (domain) { + domain->geometry.aperture_start = gart->iovmm_base; + domain->geometry.aperture_end = gart->iovmm_base + gart->page_count * GART_PAGE_SIZE - 1; - gart_domain->domain.geometry.force_aperture = true; + domain->geometry.force_aperture = true; + } - return &gart_domain->domain; + return domain; } static void gart_iommu_domain_free(struct iommu_domain *domain) { - struct gart_domain *gart_domain = to_gart_domain(domain); - struct gart_device *gart = gart_domain->gart; - - if (gart) { - spin_lock(&gart->client_lock); - if (!list_empty(&gart->client)) { - struct gart_client *c, *tmp; - - list_for_each_entry_safe(c, tmp, &gart->client, list) - __gart_iommu_detach_dev(domain, c->dev); - } - spin_unlock(&gart->client_lock); - } - - kfree(gart_domain); + WARN_ON(gart_handle->active_domain == domain); + kfree(domain); } static int gart_iommu_map(struct iommu_domain *domain, unsigned long iova, phys_addr_t pa, size_t bytes, int prot) { - struct gart_domain *gart_domain = to_gart_domain(domain); - struct gart_device *gart = gart_domain->gart; + struct gart_device *gart = gart_handle; unsigned long flags; unsigned long pfn; unsigned long pte; @@ -319,8 +248,7 @@ static int gart_iommu_map(struct iommu_domain *domain, unsigned long iova, static size_t gart_iommu_unmap(struct iommu_domain *domain, unsigned long iova, size_t bytes) { - struct gart_domain *gart_domain = to_gart_domain(domain); - struct gart_device *gart = gart_domain->gart; + struct gart_device *gart = gart_handle; unsigned long flags; if (!gart_iova_range_valid(gart, iova, bytes)) @@ -335,8 +263,7 @@ static size_t gart_iommu_unmap(struct iommu_domain *domain, unsigned long iova, static phys_addr_t gart_iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova) { - struct gart_domain *gart_domain = to_gart_domain(domain); - struct gart_device *gart = gart_domain->gart; + struct gart_device *gart = gart_handle; unsigned long pte; phys_addr_t pa; unsigned long flags; @@ -395,8 +322,7 @@ static int gart_iommu_of_xlate(struct device *dev, static void gart_iommu_sync(struct iommu_domain *domain) { - struct gart_domain *gart_domain = to_gart_domain(domain); - struct gart_device *gart = gart_domain->gart; + struct gart_device *gart = gart_handle; FLUSH_GART_REGS(gart); } @@ -483,8 +409,7 @@ struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc) gart->dev = dev; gart_regs = mc->regs + GART_REG_BASE; spin_lock_init(&gart->pte_lock); - spin_lock_init(&gart->client_lock); - INIT_LIST_HEAD(&gart->client); + spin_lock_init(&gart->dom_lock); gart->regs = gart_regs; gart->iovmm_base = (dma_addr_t)res_remap->start; gart->page_count = (resource_size(res_remap) >> GART_PAGE_SHIFT); From patchwork Wed Dec 12 20:39:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1012294 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="ct2xjrPc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43FTZj6vCFz9s7h for ; Thu, 13 Dec 2018 07:54:37 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728329AbeLLUyb (ORCPT ); Wed, 12 Dec 2018 15:54:31 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:33443 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726440AbeLLUyb (ORCPT ); Wed, 12 Dec 2018 15:54:31 -0500 Received: by mail-pf1-f193.google.com with SMTP id c123so9461583pfb.0; Wed, 12 Dec 2018 12:54:30 -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=raT/d3auLRA3RnbndJJvxSiFBwRphLCGTrXGl41n2+E=; b=ct2xjrPcfnS8VQk3RRjKZo6YpeDN3j1JiOYElv2evs1CFs+JhLPC/xs+2V3n2+OFZm IG51/vLkROp8pNln9591bJJhhULKIGuQMa48e3+mvRybxzZzIrVrx7ZAvkKG/7sUZF4j uwKIjocs54yQhhkqWQsjQdRhtQwG+fn4pkE2hvfVBXk8CpTSjzzxV9HZzurEH6VnnSUk hZdDqteEY8KC/rLOqGDIJSz3NVAohqRbxTm4fIsFMb0Gutg1Ce4wSGIOoYv7n1HeNNNq xGk5VlHw6XEcr4aWkoPXsr2JPHvmOheYHJBhCkLtRozkidAMW4hZbCVqrGqVikQMnwXS DqGg== 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=raT/d3auLRA3RnbndJJvxSiFBwRphLCGTrXGl41n2+E=; b=EwORhatMqGQkeqNjn0s2cNUwx/Fjl4JwAbJg494vQNVCbosckszqZZ630ACByuvENk eUAAFE9xQCbiPpgvluOXNonagN1Y5cf1euSq/qt7RT+KprZSk2S+OKdt0u13a9ZrMwV3 okNTjQn5m877qlJiZoYoKzI7dm1z16tNZK4qgRweYOSiE8Oh2A0MH+0K9re8v/43tvoS e7xDFHUPjQgSaG0bKmWQp74SNR5qB1KnziqU/IqckT6Lq0QMdvu6lua3RvoKEXQisQe4 2BqzfQB4EvdJEq959Wxx8mYguk2Lqr1YtGQqIInC71ZASTCjLueeWnYjh7gcjazga8GS X1mA== X-Gm-Message-State: AA+aEWbePIgV2Vw1hxn1tfd5cHm6H1U4EnwCQyPvG3D5+GxwgtO3TTFK zHKTtch9oh54gAUsMxxzcIE= X-Google-Smtp-Source: AFSGD/UfD4TBx6S1x8Xl/GBicld3Woq3GPk2MgxWEJtbQr7RfVIR6xWHMfIUwjq6WPQOax1n+2V6tQ== X-Received: by 2002:a62:2c4d:: with SMTP id s74mr21331450pfs.6.1544648069872; Wed, 12 Dec 2018 12:54:29 -0800 (PST) Received: from localhost.localdomain ([94.29.36.169]) by smtp.gmail.com with ESMTPSA id p2sm34753860pgc.94.2018.12.12.12.54.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Dec 2018 12:54:29 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Joerg Roedel Cc: Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 24/24] iommu/tegra: gart: Perform code refactoring Date: Wed, 12 Dec 2018 23:39:07 +0300 Message-Id: <20181212203907.23461-25-digetx@gmail.com> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181212203907.23461-1-digetx@gmail.com> References: <20181212203907.23461-1-digetx@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 Removed redundant safety-checks in the code and some debug code that isn't actually very useful for debugging, like enormous pagetable dump on each fault. The majority of the changes are code reshuffling, variables/whitespaces clean up and removal of debug messages that duplicate messages of the IOMMU-core. Now the GART translation is kept disabled while GART is suspended. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 253 +++++++++++++++---------------------- 1 file changed, 105 insertions(+), 148 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index ad348c61d5e7..4d8057916552 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -1,5 +1,5 @@ /* - * IOMMU API for GART in Tegra20 + * IOMMU API for Graphics Address Relocation Table on Tegra20 * * Copyright (c) 2010-2012, NVIDIA CORPORATION. All rights reserved. * @@ -31,70 +31,63 @@ #include -/* bitmap of the page sizes currently supported */ -#define GART_IOMMU_PGSIZES (SZ_4K) - #define GART_REG_BASE 0x24 #define GART_CONFIG (0x24 - GART_REG_BASE) #define GART_ENTRY_ADDR (0x28 - GART_REG_BASE) #define GART_ENTRY_DATA (0x2c - GART_REG_BASE) -#define GART_ENTRY_PHYS_ADDR_VALID (1 << 31) + +#define GART_ENTRY_PHYS_ADDR_VALID BIT(31) #define GART_PAGE_SHIFT 12 #define GART_PAGE_SIZE (1 << GART_PAGE_SHIFT) -#define GART_PAGE_MASK \ - (~(GART_PAGE_SIZE - 1) & ~GART_ENTRY_PHYS_ADDR_VALID) +#define GART_PAGE_MASK GENMASK(30, GART_PAGE_SHIFT) + +/* bitmap of the page sizes currently supported */ +#define GART_IOMMU_PGSIZES (GART_PAGE_SIZE) struct gart_device { void __iomem *regs; u32 *savedata; - u32 page_count; /* total remappable size */ - dma_addr_t iovmm_base; /* offset to vmm_area */ + unsigned long iovmm_base; /* offset to vmm_area start */ + unsigned long iovmm_end; /* offset to vmm_area end */ spinlock_t pte_lock; /* for pagetable */ spinlock_t dom_lock; /* for active domain */ unsigned int active_devices; /* number of active devices */ struct iommu_domain *active_domain; /* current active domain */ - struct device *dev; - struct iommu_device iommu; /* IOMMU Core handle */ + struct device *dev; }; static struct gart_device *gart_handle; /* unique for a system */ static bool gart_debug; -#define GART_PTE(_pfn) \ - (GART_ENTRY_PHYS_ADDR_VALID | ((_pfn) << PAGE_SHIFT)) - /* * Any interaction between any block on PPSB and a block on APB or AHB * must have these read-back to ensure the APB/AHB bus transaction is * complete before initiating activity on the PPSB block. */ -#define FLUSH_GART_REGS(gart) ((void)readl((gart)->regs + GART_CONFIG)) +#define FLUSH_GART_REGS(gart) readl_relaxed((gart)->regs + GART_CONFIG) #define for_each_gart_pte(gart, iova) \ for (iova = gart->iovmm_base; \ - iova < gart->iovmm_base + GART_PAGE_SIZE * gart->page_count; \ + iova < gart->iovmm_end; \ iova += GART_PAGE_SIZE) static inline void gart_set_pte(struct gart_device *gart, - unsigned long offs, u32 pte) + unsigned long iova, unsigned long pte) { - writel(offs, gart->regs + GART_ENTRY_ADDR); - writel(pte, gart->regs + GART_ENTRY_DATA); - - dev_dbg(gart->dev, "%s %08lx:%08x\n", - pte ? "map" : "unmap", offs, pte & GART_PAGE_MASK); + writel_relaxed(iova, gart->regs + GART_ENTRY_ADDR); + writel_relaxed(pte, gart->regs + GART_ENTRY_DATA); } static inline unsigned long gart_read_pte(struct gart_device *gart, - unsigned long offs) + unsigned long iova) { unsigned long pte; - writel(offs, gart->regs + GART_ENTRY_ADDR); - pte = readl(gart->regs + GART_ENTRY_DATA); + writel_relaxed(iova, gart->regs + GART_ENTRY_ADDR); + pte = readl_relaxed(gart->regs + GART_ENTRY_DATA); return pte; } @@ -106,49 +99,20 @@ static void do_gart_setup(struct gart_device *gart, const u32 *data) for_each_gart_pte(gart, iova) gart_set_pte(gart, iova, data ? *(data++) : 0); - writel(1, gart->regs + GART_CONFIG); + writel_relaxed(1, gart->regs + GART_CONFIG); FLUSH_GART_REGS(gart); } -#ifdef DEBUG -static void gart_dump_table(struct gart_device *gart) -{ - unsigned long iova; - unsigned long flags; - - spin_lock_irqsave(&gart->pte_lock, flags); - for_each_gart_pte(gart, iova) { - unsigned long pte; - - pte = gart_read_pte(gart, iova); - - dev_dbg(gart->dev, "%s %08lx:%08lx\n", - (GART_ENTRY_PHYS_ADDR_VALID & pte) ? "v" : " ", - iova, pte & GART_PAGE_MASK); - } - spin_unlock_irqrestore(&gart->pte_lock, flags); -} -#else -static inline void gart_dump_table(struct gart_device *gart) +static inline bool gart_iova_range_invalid(struct gart_device *gart, + unsigned long iova, size_t bytes) { + return unlikely(iova < gart->iovmm_base || bytes != GART_PAGE_SIZE || + iova + bytes > gart->iovmm_end); } -#endif -static inline bool gart_iova_range_valid(struct gart_device *gart, - unsigned long iova, size_t bytes) +static inline bool gart_pte_valid(struct gart_device *gart, unsigned long iova) { - unsigned long iova_start, iova_end, gart_start, gart_end; - - iova_start = iova; - iova_end = iova_start + bytes - 1; - gart_start = gart->iovmm_base; - gart_end = gart_start + gart->page_count * GART_PAGE_SIZE - 1; - - if (iova_start < gart_start) - return false; - if (iova_end > gart_end) - return false; - return true; + return !!(gart_read_pte(gart, iova) & GART_ENTRY_PHYS_ADDR_VALID); } static int gart_iommu_attach_dev(struct iommu_domain *domain, @@ -191,7 +155,6 @@ static void gart_iommu_detach_dev(struct iommu_domain *domain, static struct iommu_domain *gart_iommu_domain_alloc(unsigned type) { - struct gart_device *gart = gart_handle; struct iommu_domain *domain; if (type != IOMMU_DOMAIN_UNMANAGED) @@ -199,9 +162,8 @@ static struct iommu_domain *gart_iommu_domain_alloc(unsigned type) domain = kzalloc(sizeof(*domain), GFP_KERNEL); if (domain) { - domain->geometry.aperture_start = gart->iovmm_base; - domain->geometry.aperture_end = gart->iovmm_base + - gart->page_count * GART_PAGE_SIZE - 1; + domain->geometry.aperture_start = gart_handle->iovmm_base; + domain->geometry.aperture_end = gart_handle->iovmm_end - 1; domain->geometry.force_aperture = true; } @@ -214,34 +176,45 @@ static void gart_iommu_domain_free(struct iommu_domain *domain) kfree(domain); } +static inline int __gart_iommu_map(struct gart_device *gart, unsigned long iova, + unsigned long pa) +{ + if (unlikely(gart_debug && gart_pte_valid(gart, iova))) { + dev_err(gart->dev, "Page entry is in-use\n"); + return -EINVAL; + } + + gart_set_pte(gart, iova, GART_ENTRY_PHYS_ADDR_VALID | pa); + + return 0; +} + static int gart_iommu_map(struct iommu_domain *domain, unsigned long iova, phys_addr_t pa, size_t bytes, int prot) { struct gart_device *gart = gart_handle; - unsigned long flags; - unsigned long pfn; - unsigned long pte; + int ret; - if (!gart_iova_range_valid(gart, iova, bytes)) + if (gart_iova_range_invalid(gart, iova, bytes)) return -EINVAL; - spin_lock_irqsave(&gart->pte_lock, flags); - pfn = __phys_to_pfn(pa); - if (!pfn_valid(pfn)) { - dev_err(gart->dev, "Invalid page: %pa\n", &pa); - spin_unlock_irqrestore(&gart->pte_lock, flags); + spin_lock(&gart->pte_lock); + ret = __gart_iommu_map(gart, iova, (unsigned long)pa); + spin_unlock(&gart->pte_lock); + + return ret; +} + +static inline int __gart_iommu_unmap(struct gart_device *gart, + unsigned long iova) +{ + if (unlikely(gart_debug && !gart_pte_valid(gart, iova))) { + dev_err(gart->dev, "Page entry is invalid\n"); return -EINVAL; } - if (gart_debug) { - pte = gart_read_pte(gart, iova); - if (pte & GART_ENTRY_PHYS_ADDR_VALID) { - spin_unlock_irqrestore(&gart->pte_lock, flags); - dev_err(gart->dev, "Page entry is in-use\n"); - return -EBUSY; - } - } - gart_set_pte(gart, iova, GART_PTE(pfn)); - spin_unlock_irqrestore(&gart->pte_lock, flags); + + gart_set_pte(gart, iova, 0); + return 0; } @@ -249,15 +222,16 @@ static size_t gart_iommu_unmap(struct iommu_domain *domain, unsigned long iova, size_t bytes) { struct gart_device *gart = gart_handle; - unsigned long flags; + int err; - if (!gart_iova_range_valid(gart, iova, bytes)) + if (gart_iova_range_invalid(gart, iova, bytes)) return 0; - spin_lock_irqsave(&gart->pte_lock, flags); - gart_set_pte(gart, iova, 0); - spin_unlock_irqrestore(&gart->pte_lock, flags); - return bytes; + spin_lock(&gart->pte_lock); + err = __gart_iommu_unmap(gart, iova); + spin_unlock(&gart->pte_lock); + + return err ? 0 : bytes; } static phys_addr_t gart_iommu_iova_to_phys(struct iommu_domain *domain, @@ -265,24 +239,15 @@ static phys_addr_t gart_iommu_iova_to_phys(struct iommu_domain *domain, { struct gart_device *gart = gart_handle; unsigned long pte; - phys_addr_t pa; - unsigned long flags; - if (!gart_iova_range_valid(gart, iova, 0)) + if (gart_iova_range_invalid(gart, iova, GART_PAGE_SIZE)) return -EINVAL; - spin_lock_irqsave(&gart->pte_lock, flags); + spin_lock(&gart->pte_lock); pte = gart_read_pte(gart, iova); - spin_unlock_irqrestore(&gart->pte_lock, flags); + spin_unlock(&gart->pte_lock); - pa = (pte & GART_PAGE_MASK); - if (!pfn_valid(__phys_to_pfn(pa))) { - dev_err(gart->dev, "No entry for %08llx:%pa\n", - (unsigned long long)iova, &pa); - gart_dump_table(gart); - return -EINVAL; - } - return pa; + return pte & GART_PAGE_MASK; } static bool gart_iommu_capable(enum iommu_cap cap) @@ -322,9 +287,7 @@ static int gart_iommu_of_xlate(struct device *dev, static void gart_iommu_sync(struct iommu_domain *domain) { - struct gart_device *gart = gart_handle; - - FLUSH_GART_REGS(gart); + FLUSH_GART_REGS(gart_handle); } static const struct iommu_ops gart_iommu_ops = { @@ -347,84 +310,78 @@ static const struct iommu_ops gart_iommu_ops = { int tegra_gart_suspend(struct gart_device *gart) { - unsigned long iova; u32 *data = gart->savedata; - unsigned long flags; + unsigned long iova; + + /* + * All GART users shall be suspended at this point. Disable + * address translation to trap all GART accesses as invalid + * memory accesses. + */ + writel_relaxed(0, gart->regs + GART_CONFIG); + FLUSH_GART_REGS(gart); - spin_lock_irqsave(&gart->pte_lock, flags); for_each_gart_pte(gart, iova) *(data++) = gart_read_pte(gart, iova); - spin_unlock_irqrestore(&gart->pte_lock, flags); + return 0; } int tegra_gart_resume(struct gart_device *gart) { - unsigned long flags; - - spin_lock_irqsave(&gart->pte_lock, flags); do_gart_setup(gart, gart->savedata); - spin_unlock_irqrestore(&gart->pte_lock, flags); + return 0; } struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc) { struct gart_device *gart; - struct resource *res_remap; - void __iomem *gart_regs; - int ret; + struct resource *res; + int err; BUILD_BUG_ON(PAGE_SHIFT != GART_PAGE_SHIFT); /* the GART memory aperture is required */ - res_remap = platform_get_resource(to_platform_device(dev), - IORESOURCE_MEM, 1); - if (!res_remap) { - dev_err(dev, "GART memory aperture expected\n"); + res = platform_get_resource(to_platform_device(dev), IORESOURCE_MEM, 1); + if (!res) { + dev_err(dev, "Memory aperture resource unavailable\n"); return ERR_PTR(-ENXIO); } gart = kzalloc(sizeof(*gart), GFP_KERNEL); - if (!gart) { - dev_err(dev, "failed to allocate gart_device\n"); + if (!gart) return ERR_PTR(-ENOMEM); - } - ret = iommu_device_sysfs_add(&gart->iommu, dev, NULL, "gart"); - if (ret) { - dev_err(dev, "Failed to register IOMMU in sysfs\n"); + gart_handle = gart; + + gart->dev = dev; + gart->regs = mc->regs + GART_REG_BASE; + gart->iovmm_base = res->start; + gart->iovmm_end = res->end + 1; + spin_lock_init(&gart->pte_lock); + spin_lock_init(&gart->dom_lock); + + do_gart_setup(gart, NULL); + + err = iommu_device_sysfs_add(&gart->iommu, dev, NULL, "gart"); + if (err) goto free_gart; - } iommu_device_set_ops(&gart->iommu, &gart_iommu_ops); iommu_device_set_fwnode(&gart->iommu, dev->fwnode); - ret = iommu_device_register(&gart->iommu); - if (ret) { - dev_err(dev, "Failed to register IOMMU\n"); + err = iommu_device_register(&gart->iommu); + if (err) goto remove_sysfs; - } - gart->dev = dev; - gart_regs = mc->regs + GART_REG_BASE; - spin_lock_init(&gart->pte_lock); - spin_lock_init(&gart->dom_lock); - gart->regs = gart_regs; - gart->iovmm_base = (dma_addr_t)res_remap->start; - gart->page_count = (resource_size(res_remap) >> GART_PAGE_SHIFT); - - gart->savedata = vmalloc(array_size(sizeof(u32), gart->page_count)); + gart->savedata = vmalloc(resource_size(res) / GART_PAGE_SIZE * + sizeof(u32)); if (!gart->savedata) { - dev_err(dev, "failed to allocate context save area\n"); - ret = -ENOMEM; + err = -ENOMEM; goto unregister_iommu; } - do_gart_setup(gart, NULL); - - gart_handle = gart; - return gart; unregister_iommu: @@ -434,7 +391,7 @@ struct gart_device *tegra_gart_probe(struct device *dev, struct tegra_mc *mc) free_gart: kfree(gart); - return ERR_PTR(ret); + return ERR_PTR(err); } module_param(gart_debug, bool, 0644);