From patchwork Sun Dec 9 20:29:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010136 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="jWmHpgVk"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdBw065Gz9s47 for ; Mon, 10 Dec 2018 07:31:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726254AbeLIUbA (ORCPT ); Sun, 9 Dec 2018 15:31:00 -0500 Received: from mail-lf1-f67.google.com ([209.85.167.67]:33171 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726249AbeLIUbA (ORCPT ); Sun, 9 Dec 2018 15:31:00 -0500 Received: by mail-lf1-f67.google.com with SMTP id i26so6523514lfc.0; Sun, 09 Dec 2018 12:30: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=Lj29166vEedOd0lY9Ey+tMd6cTWK5w4fd0anT0Vb+Ew=; b=jWmHpgVkVkspMAvO3hQfil/xros1OIfV+rUF1Jb1mjZqzJqj/WWu511hdLJD8r62IK 9SO5wAbPGyZMiOFT/pEBke+zV3dOhYkDuSz6BOohTktSIRTS4SfWiRC6y2r3uimZd5nW Z0Mbv77mf0jjAqtrpW8IR01EZ6wQFpx+jy27ayBaHjRpEo2bJa1YjVKXGwFzLnoGD6Wi qEXDwS1i2zGmeSHFxnghdJRwPknUuh1eVtq2T5tm0G9AGtnK+QL7CaOvceeO5tZcBZQo gZRdjDflJQkjLJCe46zKEMfMwsdVG64Hutwh2jNugZKT3buM0LKC778zVAZq1xxr9Lst k3pg== 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=Lj29166vEedOd0lY9Ey+tMd6cTWK5w4fd0anT0Vb+Ew=; b=VAUTSKLm3CKssvn4ZabaDJ7NqiiMESKwyYpdylA6iNmApxeDg4hu9A5/QeE52bsa68 BNhF71aqzZVEdjcZCvH8b5Yf2KXZfn1XVlZ0o26rYMMh1+a4Dqh1TsHqKvpGAXImhVDJ enXKUVtLboJe850tOBjhlSPnn/6ltF2vg8F9gYLh4MiSAaI8Nquz2RMXaJEn7ievOnSZ 6xGc3rZCSrLDMNhiW9sQq74AlcQV4STh74y43hF38O2uzyf25EkP1vhKNcOvvlEqI7S7 cIOPuZc1593wKYlhQiNvJyNiTceup79eaYmZ1hxgMrg5UAaYuH2uukzKujHXTgfsfHPF yw2w== X-Gm-Message-State: AA+aEWbnqkIIBdZBqmmKboBFQJjySWps/MQ9tPugM3lxgTz2gEr0G/Lh XCR0uQRwQn3ZUc8wK5BZXno= X-Google-Smtp-Source: AFSGD/WrTftwYAR+NjDC4JwMXDqPKCuF4c/O+7/Nv9EwoWaW9WsuPCZRjR74NEI4oKJHujzFIOuWvg== X-Received: by 2002:a19:d90c:: with SMTP id q12mr5102391lfg.24.1544387458105; Sun, 09 Dec 2018 12:30:58 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.30.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:30: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 v6 01/21] iommu/tegra: gart: Remove pr_fmt and clean up includes Date: Sun, 9 Dec 2018 23:29:30 +0300 Message-Id: <20181209202950.31486-2-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010159 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="L2tLO/5f"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdFG5D2hz9s47 for ; Mon, 10 Dec 2018 07:33:06 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726614AbeLIUdA (ORCPT ); Sun, 9 Dec 2018 15:33:00 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:42723 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726250AbeLIUbB (ORCPT ); Sun, 9 Dec 2018 15:31:01 -0500 Received: by mail-lj1-f195.google.com with SMTP id l15-v6so7756381lja.9; Sun, 09 Dec 2018 12:31:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=f8zEUgX4a8J2cNkJXLbNNOJsQrSudg+v+E4H0iBG8o4=; b=L2tLO/5frf+FmDHilL7lkklum0tOADGKNrlbPEImy7rTdW6dIFbq+/iTCN3MM+XyMM zF6qDVDQEDAIIOJCgMiVwVQrW+D1BVFdYQuHMdn9D4NSTZmxVhOmzBzBcxIk+La97G6N LWtQVlVqJI3mxWIjanVCiWLkDms0z0eajiOW66KwLSlqnlFqKN44Re8qjNCJtl6VCRo7 wR2fLU+gMhZKgAixeA6LHltr85W8VLc3ORwtgcZgQHbKvk2vDLI3+j0umcbodaZo9/GD nxQh984onV/xxWF4ii/zSzjdbcXl6pGrVKx9Pr+8lhdjRqVG37AdkqTDj7GzNwFMNJdJ MJNQ== 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=f8zEUgX4a8J2cNkJXLbNNOJsQrSudg+v+E4H0iBG8o4=; b=U8g+ClYb1T0mnV6mA0FcczdiE4Iv8iBD8CTjUogAT7wu25s+joLwYfXdMJJi95EsSM q/adrJdIzBkvVUU35y59fGWdxzaruhnet6AOAvNfi3tTPn1SdnU2vrybvsTebIeH0k6E f3uXHX1w0EEZPf7cEM59kqbY4NfX2CW2Al2Xy9+2WqNOcdgogl7hhDQ2N87lx4P7U32x s/FHeaym2Qbndu4oWG3PhYedI8Wz/6yvGAWSGuUbrfY/nLIL41pwyXMApRzA8qskgEsa kNxdjC6L3oFN+aNRrEdeWqECYAw7IzLVS4VflVGfu0FuSCRqCx/7VSzvMK0EmNro2iZD Ickw== X-Gm-Message-State: AA+aEWYKDS8Nv3UAYGMCvTzYrQ681Z/a+yJx30FUMLRL6B1yHLeP3ODX 8JaP/ePTvYy0+tvUlrHyFYk= X-Google-Smtp-Source: AFSGD/Vl7fz3bDhb7ehdKLU5LYLO5fa8AnIK3dl8FW3WZVyP+S0iUU3YeWfebvRF427nVuO5gyf65A== X-Received: by 2002:a2e:9d86:: with SMTP id c6-v6mr5417998ljj.146.1544387459440; Sun, 09 Dec 2018 12:30:59 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.30.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:30:58 -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 v6 02/21] iommu/tegra: gart: Clean up driver probe errors handling Date: Sun, 9 Dec 2018 23:29:31 +0300 Message-Id: <20181209202950.31486-3-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010156 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="ONgd+SJ8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdF42WNYz9s47 for ; Mon, 10 Dec 2018 07:32:56 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726310AbeLIUbD (ORCPT ); Sun, 9 Dec 2018 15:31:03 -0500 Received: from mail-lf1-f67.google.com ([209.85.167.67]:35853 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726249AbeLIUbC (ORCPT ); Sun, 9 Dec 2018 15:31:02 -0500 Received: by mail-lf1-f67.google.com with SMTP id a16so6520932lfg.3; Sun, 09 Dec 2018 12:31:01 -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=cgwCQscgq5+zWM4UdqreWOmsuVch50Kck+PS511Xu4I=; b=ONgd+SJ8cyD0POXRqcGuzZEsJjZ85TYO9A1aT3xm/wIdzeXNe0I+FrZMnYxmX0cQHm RSLQfXkWWhoii3h+pmxViSwoczPT6uJADMFjto5vMesDZhslHVLKzio6CLyuhzgnHmmp lx22zqWNQ1WvwWbNPedy375Qm4Me0fdC8SAuWHSICzGKExZjWXG9W3BvqWp/LAkSMtLb +5NCVeOpROTwOHSE/ZhbZ0GR/IEmF+hyQ6UIwdrB0HFrxg4gajsoUTAoFnB/xqzU636j 504jPqKwQMHyjg5EwqjhKkM78svQ6asrQqpC2rKOQWVY8KObqcO1qfe/32xtgnrFkcw2 +UKA== 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=cgwCQscgq5+zWM4UdqreWOmsuVch50Kck+PS511Xu4I=; b=BTt6ydfmD3fI+tu3rP12UVWYDerHNcEuROFH8zgUFIWvtsQaAzNE81Fh+ieYwPgtzV J/+n1VPHkKEJE5k0SYVdSYhdzeBai4OsWmVoywMhh/PRHQ/AEREYBlm9jidJud94RCzJ ZDSLcg0elbrgA4zsBJl4ILTLeSNgLVBIsMIpBo+MfluLAKAhK21mAo2gskTMXtR2oyyC ewVPqBjmjZPiqUlqQctLxFZKVz7/LfdkRFbPH6J4f956PtRTuXCHfHGnTHsfCKDZ2E5e VO704TMBpBxPMbKyTToXnLtFH0hOyeAn8pS19RznmZpSN4a9MQJmyxwkeYGGzn6YE0LD TwcA== X-Gm-Message-State: AA+aEWZ/e9fI+fMHc44mYPEslV28Us+p7OBsLQtiEagTJYItSezweY58 wpHzpnK+aDab5l2uQQJdKa9bQMqA X-Google-Smtp-Source: AFSGD/WbT9bm1WH6kNg1x1Bf98K3E9ml1w0tFJhrUG/KRoCYwagQ5LcSI5s7PIVLNkZwEoEhkxcQVw== X-Received: by 2002:a19:40cc:: with SMTP id n195mr5283526lfa.40.1544387460532; Sun, 09 Dec 2018 12:31:00 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.30.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:30:59 -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 v6 03/21] iommu/tegra: gart: Ignore devices without IOMMU phandle in DT Date: Sun, 9 Dec 2018 23:29:32 +0300 Message-Id: <20181209202950.31486-4-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010155 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="KaCJINMi"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdF25K1kz9s7T for ; Mon, 10 Dec 2018 07:32:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726236AbeLIUbE (ORCPT ); Sun, 9 Dec 2018 15:31:04 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:44365 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726248AbeLIUbE (ORCPT ); Sun, 9 Dec 2018 15:31:04 -0500 Received: by mail-lf1-f65.google.com with SMTP id z13so6482539lfe.11; Sun, 09 Dec 2018 12:31: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=/KROOJ4+zTlc7KCwk20hN1Vfb/+p4i3alU9eDRo23WI=; b=KaCJINMiUJg4HD+yDpECX7oW/8LpBPy4yWzNKjJu2DH1D+AQB159lOi4EHHiElyyJM q+U7VtUyUL4PBJq6M7RvLKsC+twm6NgeI6vmYR3zSAgGXLfz26JXNFifUxBJehrPuhwV +WNsP8HM7z9DsTkNsjJc92uOlhI1ZiqUZSjf3GLHbKz2DD3jq3Cm/2Nt5Z2ddQWjRcZG 4ZqFAsUy1i3Ctlf6sH7JdxtdeHe93lzRbO0Z/qilggJHbquSiLNUTr9ujgH/Z2kOpDNg GAWqPaaVVeWZGPiYD8RK1ZvtUmO122yvACNY3fcfCP1duU9yCvyVvbcYSMPVH1kv/fi/ mfEA== 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=/KROOJ4+zTlc7KCwk20hN1Vfb/+p4i3alU9eDRo23WI=; b=FOebi968269b21gRYq34bBkvNQm2xvZ/x/KzMajDOnkmFh4XP1Rpac/pDVPBlE1gow Z57G7jc4giJa1QZMRVjGcHcto8uPjAEJ5SdeZY9b55LDNBzf4DyzkPuyVk3WBlUH5Oth WhaK8CzhdPSyyVNI19PLr2IxkErewEuDxz8iU6OAHRlQGfFrowvixBwlzB8z4FcvK2pN fZEzHhkiVgIQr0/H4XUZSKSpP5s8tSaMn7H3AeTJJsxl7JLng/uJ2gB6ViWdPiDMm79P T3xBKOYxXurM92GTK65QAqXMSyXFEuoBIbntnAQbEBUqu/R71UvRPQXNctwKvhRBzWKJ zwQQ== X-Gm-Message-State: AA+aEWa1NKwan8hV5sNH4hGbkRZu5ahs+yr6a8v8FvKvfXvG4eAWx/H2 4ZuNf8PUMPIi64vHxLzcO+8= X-Google-Smtp-Source: AFSGD/X5uYtcIeBLrXeAnxjsSSI/iuBP64uiJH2DWUATeMNXPJ+33Irri3b2z73MFkh0RHfm6D1kwg== X-Received: by 2002:a19:db4a:: with SMTP id s71mr5549654lfg.36.1544387461550; Sun, 09 Dec 2018 12:31:01 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:01 -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 v6 04/21] iommu: Introduce iotlb_sync_map callback Date: Sun, 9 Dec 2018 23:29:33 +0300 Message-Id: <20181209202950.31486-5-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010154 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="nnVDUek7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdF0699kz9s47 for ; Mon, 10 Dec 2018 07:32:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726248AbeLIUcp (ORCPT ); Sun, 9 Dec 2018 15:32:45 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:46489 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726324AbeLIUbF (ORCPT ); Sun, 9 Dec 2018 15:31:05 -0500 Received: by mail-lf1-f68.google.com with SMTP id f23so6465217lfc.13; Sun, 09 Dec 2018 12:31:03 -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=kpbVQdi3ZHraVtNMpZOmbkfIijQq1T8JT2z9yI28PUY=; b=nnVDUek7S1WqdznHy6x3EbaJlLM3C7ZkkkJyzuHkjx5xbL03fG7k/A8AErDeIpEROo 6zllwFV8c498/IDOCoCOB3Q3OEeHTLMtFmlobH2Piv1x7A8VvcyNDYLCJk5FPxtz1kR6 XKySAuPo+M4oVm64oLQllJhqjFyqOBSOKYJak4vrNkXC+5OlacCQ8Jxg3kqy960fP5lc nq6PUzJ5rlP4twtipHVOOSDpM4BH4YwYZ0jFVrRT0Hf0siC/RI6IkyygBBfjYo2P+RON RoDs2tFBRttTLan2qTpuLgiVhj99X0Wi1fxF5FOklEKKOsiaDu7rf9F9bjR+ULghV0JG zcNw== 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=kpbVQdi3ZHraVtNMpZOmbkfIijQq1T8JT2z9yI28PUY=; b=IG06S4TQ6toC//tXehCkZo/+iWD9Ez05gmiXbvg+a1AUXvTQhfM24ZVa3AMI5xEy2q 6lg+hLhthYkDjf6U/IuPTkB0IpE4JBdZQNACMuU9RlitDXU3Ktyh4yyylX1a7zq86j2j oprx+HkNdu5+VDXr9chZSELfjUXpYE/83I7kPvuBgwMf7/T57JH8TS/agRyapfBZEW93 T60SACds+TVgmavxt5ZXQ48i2OdtuCFOMkgBZfbMZ7I83ujGRBYPAqDI1fXcx/mvZUlf KcR3IqprMuZqrxNEyZUqWbYPO7oYtLJx0C50tV1Em5oAx0QxTdkJYpn0MCuS4tHkyy5I DOsg== X-Gm-Message-State: AA+aEWYMRULEqmrJkVOnO6RWnOKZIB2QwW5dOhv7XibPWpvbbthJb6oq qJCWt1mkkhLWFVkuxfqGyGE= X-Google-Smtp-Source: AFSGD/Xcz8tBvamzVy0Zxv6iRXV15iEc0jW1eno8IJ+dwLIglWub6yyqnkZFrPw7dQfmPWh6/QBz5A== X-Received: by 2002:a19:9e11:: with SMTP id h17mr5742419lfe.73.1544387462571; Sun, 09 Dec 2018 12:31:02 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:02 -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 v6 05/21] iommu/tegra: gart: Optimize mapping / unmapping performance Date: Sun, 9 Dec 2018 23:29:34 +0300 Message-Id: <20181209202950.31486-6-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010152 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="g5983n0R"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdDs1vK2z9s47 for ; Mon, 10 Dec 2018 07:32:45 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726359AbeLIUbI (ORCPT ); Sun, 9 Dec 2018 15:31:08 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:37048 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726249AbeLIUbH (ORCPT ); Sun, 9 Dec 2018 15:31:07 -0500 Received: by mail-lf1-f66.google.com with SMTP id p17so6521311lfh.4; Sun, 09 Dec 2018 12:31: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=k7NTxHD7UaCoUTgU+v8hwkvIH2LVxT97k7Jd0a6pcZY=; b=g5983n0Ro0+JH6CuvExtbKYfIoPtxdN6XGZzzOXnKHNiqukMlLPwBnuu29SXaYzUj8 crXTN8Uhrb5m2619QoKVt569L3cqxEL19poQytji58YXFV69H2ottL99WYCGFhwaXbR7 NY3aKhODkRiwXTcPFzSOjEQ5JuF1mhrYTICDYSXCHUTL5ZozT/RaXi1qd/uKLwaEURNi yEg8DN0B6zNNzq/tqvFWaV5YkXVDb8vy9OzB3XWi/B8XnT5xOmtf7BVe+DOvBNKXzsj5 hjFRcQpe2RCqpYJjyb0r1cqfcWmBCsOMai/aOCpQEI10j0bf5r5/U7fycGJsZ/vgg52R Np5A== 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=k7NTxHD7UaCoUTgU+v8hwkvIH2LVxT97k7Jd0a6pcZY=; b=aavBOax2XYbvzxeJIMrD/7TbcGUYQnD65n1lQgccgs5xPs3U6whSNPgyFL0uOXLzJz RCTKLEpVyNGIfaiw2t0Kipm22hMP9WpNp7PwyEXgspjE+6/vEbUdPVfieUAdRpcWZYS6 FtmvqsH94OmueFOHZ/uE2ETRc5VVAY/I+ux97iaID/Rs93dh/08aWryUJMVV2eUCqj81 /nW4/cuXkCuo3eFXEsUXKdHrI5ovyDSr/mOwEWM1UdthOqLVKLoAThaqGLlQXSPbQsE8 gs/XDC1xLf0K3se3Pp1MIZyXrS1TPxmrh7cQ9kZ0wFNjq0V83GEw3CxQpQSXJsfgZKp7 9lKQ== X-Gm-Message-State: AA+aEWZ0URqk0TxUfZnhZ3UTF4MZxR0acdZ2/0ducVbTU64E22FybyRm sBwccLAa7CMm/Hq5RMBp4TU= X-Google-Smtp-Source: AFSGD/W9XHkO3hY32VJpccRdUozIvd8GV/8EG/sxZO6hRHqNqAw8oyAnEcclZhi0ROdZmxbUCkTfEg== X-Received: by 2002:a19:5510:: with SMTP id n16mr5206937lfe.68.1544387463606; Sun, 09 Dec 2018 12:31:03 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31: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 v6 06/21] dt-bindings: memory: tegra: Squash tegra20-gart into tegra20-mc Date: Sun, 9 Dec 2018 23:29:35 +0300 Message-Id: <20181209202950.31486-7-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010153 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="UR1TG2h8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdDt0yqTz9s3C for ; Mon, 10 Dec 2018 07:32:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726355AbeLIUbH (ORCPT ); Sun, 9 Dec 2018 15:31:07 -0500 Received: from mail-lj1-f194.google.com ([209.85.208.194]:41768 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726343AbeLIUbH (ORCPT ); Sun, 9 Dec 2018 15:31:07 -0500 Received: by mail-lj1-f194.google.com with SMTP id k15-v6so7761814ljc.8; Sun, 09 Dec 2018 12:31: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=e34Nm1WV2akdw7lRe24Ur4h5DQ35+UooTwGQ4UYjV/k=; b=UR1TG2h8aEMOUnnQR4kWPbex+sXVUIvSkEDp2Kg0B9y/mqMMu/eQzBYDYuu8x5pxMQ m1f/kTJDJ/XCHs2aJEASX/lI32ScnaFZj1lUYOdB21CiJMA0mI6IZS+6DG2cTyO4xdnl fG4Bn6OvL3sBTo+jpyj/yVS60oyf3yhVNJxh2ubftavcjXRBOuw77NCsR/jimu7QJxRa zOY0nedBO7tgFkBgKw+Q7d8ZEGDt5kPqr7wO5L9tHmdw2wfQZXQXey2MKw3Vl29nJKwG s6A3LOqb7PIP+BlgdFe/4vmsEEp1z75XlCv/u35N4frJZ6tmkwhd/c69nrTS2HrtrP+A 6L9A== 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=e34Nm1WV2akdw7lRe24Ur4h5DQ35+UooTwGQ4UYjV/k=; b=dkpisLpXLm4cheGjSUWidZHvHRCvdmaJPVCs3I22IhFviNAn2r4eCU1Dp34OQO/uVm YRRcFcrWzK3g3/xwYx77EYm1qDu/qNJOsUo9qWCNrP3EwZB0RKmqxf73DRv3K59v8oRb KwDYmvielKhCOaBGTrIZMAB+rmC0dsYQ7xMyKmkp2VHFcs2K4ivEUPbtvGx1ROZW9Www 4FlppnH43vMYLO/ci8XgVG3VULazTQGF+EWAe3Vapn0OczaQiD+cy1ZaPQkfT/pq/y0i puL79UJ7ihrEInWqHGFMfPKb6bsgKJI9GVNlhEJhCcuyUMUM/r8W21yL2ULGyH1F9rSt GTGQ== X-Gm-Message-State: AA+aEWaVlekSVpJdO2sw6zkb/LaQgmaekCahr085eduzWePv3311x9s+ GEaqCVotPQ7XK6Et/jXtZxw= X-Google-Smtp-Source: AFSGD/Vwa/dhcQedQOcet93jdt6mH2COHxY1iCIvg+WGvZIt0LQ5ZixKspy8HQqlVuB9FhmL4QBY0A== X-Received: by 2002:a2e:9dcb:: with SMTP id x11-v6mr6155336ljj.158.1544387464657; Sun, 09 Dec 2018 12:31:04 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31: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 v6 07/21] ARM: dts: tegra20: Update Memory Controller node to the new binding Date: Sun, 9 Dec 2018 23:29:36 +0300 Message-Id: <20181209202950.31486-8-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010151 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="o2v3Ommw"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdDr31f6z9s5c for ; Mon, 10 Dec 2018 07:32:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726328AbeLIUch (ORCPT ); Sun, 9 Dec 2018 15:32:37 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:45317 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726248AbeLIUbI (ORCPT ); Sun, 9 Dec 2018 15:31:08 -0500 Received: by mail-lf1-f66.google.com with SMTP id b20so6469788lfa.12; Sun, 09 Dec 2018 12:31: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=f8tWnqfTImTopunu8sUlacPuJT6sCtuddL2Qd9mEEDg=; b=o2v3OmmwFZ7+TbqFMu/BPxZ8TR/KA7olZiTUxpfJaJ/JOefVWqmltSLlG4X3ZxDSOB pZSWVMpl6ooYX3NmiS46ZsX29uJsewWg1ob6+UZiqb4LhrqUIwR1F8qn6SQ8YN5nqi/l XGxaJFBryNvWk6KaEzWYju+tZM3/d3IRzuv7e84xxUZhtua99CI2PtsFvprPZO/8yXhi K3mQJkzyiOe9eLzQuFFvypXsYlFvR6FvGYQkk/GVOqFj1aqqW0bXRXvIOoKy+F84cw1J KNYbJ/xom9y5msRwCZOXgfST0zWUmgOdvOHoZ2h/fArt8QlUYgcCP8fJKkNy13nm7/9J k9PQ== 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=f8tWnqfTImTopunu8sUlacPuJT6sCtuddL2Qd9mEEDg=; b=jft1wozx6/OCheOq9GJfX6+hZ0pGnj7ZaEnm3pPwQAGLSYIF5IGvvn20KBRMFUWdyc LWtGVLimkundowevOHCtoqbwc0TLDeA1rTqFY9Plzej6T9YjOsrJ2tDXwUMJui/Hi4ki SfR7YVZb15uzWu2gu0/zw71mU59gGkzqRgWeD7BVoqZs1osD0/6aNCH8s5d9M6VhPAgu 1ryWbC5OzYqHWyXvZuNfGS70d/TQi5Kyd8scOSg0X2Fim9/3lsBJ5FQfQW9EX/uFqdJ7 07aO8E3H55noq8L7nj6Xzmr0Koaz/1D3TarGNB7Ua5M1qocD4VHOx7ZPnh7N/7BaQr85 EogQ== X-Gm-Message-State: AA+aEWYU2vOebTEKz2okSUge+PV59/aWBlC8rX2jv5VkqQsVcfIqQkgr TgtfaeVu+3Ew62aYb5wPYx8= X-Google-Smtp-Source: AFSGD/VhzRuqckB1ezIXchcv4HFYBuPO75GaZFOuKIZfYRJxcPWdEXMMBtETbyreO6wio9o5fpG8mA== X-Received: by 2002:a19:4ace:: with SMTP id x197mr5034313lfa.39.1544387466521; Sun, 09 Dec 2018 12:31:06 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:05 -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 v6 08/21] memory: tegra: Don't invoke Tegra30+ specific memory timing setup on Tegra20 Date: Sun, 9 Dec 2018 23:29:37 +0300 Message-Id: <20181209202950.31486-9-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010148 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="bPUSK8as"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdDg6Vs7z9s47 for ; Mon, 10 Dec 2018 07:32:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726563AbeLIUcY (ORCPT ); Sun, 9 Dec 2018 15:32:24 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:33044 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726357AbeLIUbK (ORCPT ); Sun, 9 Dec 2018 15:31:10 -0500 Received: by mail-lj1-f195.google.com with SMTP id v1-v6so7816841ljd.0; Sun, 09 Dec 2018 12:31:08 -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=6JVMbk4XZ3boK+Wu7ilSs//m2kUIEmMXZzqXljfLTDo=; b=bPUSK8asqZo8DNk15nbYRXACtCYUG9EeYfZ9Q0el1pP7jfQ8yY+ShtQExyskJdh9dk seN1xFY7uQ4pJIYVW9KCIuWEDrqekSiko5PJczyyjOSLHtgQrwXuz8ycD11b+nJ6IOSv H76oJNTI18j3Ci2LR8UL1lCwNNN36+2g5x0s/DrA+KSsPRQ2FYvrEoQih8fDyY8EMz1l pNkm886o70V0J0JkcBlf/trOTFC7QXZ8n60s9xDqp+Su8nY4kj8XSCqr5Ra4w8jBN/JQ uWzFd94ElfBeIouQbP9qEG46If/0E2Vx3zIY3Z6SQabrzn2Cl9uyYoMRKODVJ6Us1jIE kMgQ== 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=6JVMbk4XZ3boK+Wu7ilSs//m2kUIEmMXZzqXljfLTDo=; b=JNXdl+WUQ+pB6tzKtt78oebx90eRCAiOkPg31eArVqyqYp5N5JscEoh279bRb6BINV 2JSibKGvpuNmbPLoOMUlj8HZQYBzqEqoYqMIQyyO6uXiKEe76SxABPIB5EyH9zu6V80/ 0d2Fqnt5wcxZGEJPVGgujzymYxVg4aVZqBx6raB+dEmEM7LzSCwYVQmYsea+/1+RCb7p naUErdOX9tpbvCmn3ZmjC2ZvPofY853CZhSmC70vaEEnxJCL2wPdeK2ETCV7xSC+LIxx TaRYhgzE1C23EvOT9QTXW8wxdYJqL79I5+stIb6B6smPK9JSZ/9cDW5+if0RWsKqvda+ 6s6A== X-Gm-Message-State: AA+aEWZCTs37R03+jAroaVrn2YQs+NqCDPwF6RHOz77Zq7Z92TqxsVzD h6fG5w3xK6a9BXSX4mgaPx8= X-Google-Smtp-Source: AFSGD/WDNLETbB2TblZ5bsSM4vLzgC6JeIL5JVhGcqMpVQ/i0H6AdmbiQ8TVsgoEdNpvsHSG+7YWIA== X-Received: by 2002:a2e:914b:: with SMTP id q11-v6mr5374535ljg.164.1544387467659; Sun, 09 Dec 2018 12:31:07 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31: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 v6 09/21] memory: tegra: Adapt to Tegra20 device-tree binding changes Date: Sun, 9 Dec 2018 23:29:38 +0300 Message-Id: <20181209202950.31486-10-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010149 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="amy+OVam"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdDk0yZTz9s5c for ; Mon, 10 Dec 2018 07:32:38 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726555AbeLIUcY (ORCPT ); Sun, 9 Dec 2018 15:32:24 -0500 Received: from mail-lj1-f196.google.com ([209.85.208.196]:42729 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726366AbeLIUbL (ORCPT ); Sun, 9 Dec 2018 15:31:11 -0500 Received: by mail-lj1-f196.google.com with SMTP id l15-v6so7756560lja.9; Sun, 09 Dec 2018 12:31:09 -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=ukU2nsrKjiF6glqzjylQ07Vd1ixac0NtcTFyTtmpwus=; b=amy+OVamESmMx2KKD6Qo14DYuChhGt9VrpVySVfH0gp+Ca9WLVhboClT6SffVrBCH2 1+daAvZs4f1ywRI8EkjWqsDuXm6qX4ikgZPYohekwZa5jFxIYtyLB3VBu5jPpJks9Sbc 0sIP1u4YRpM150up1h3KciE2UVahDiNG5L3rQ1Thb5Zx3cyzdeRKEuO94PqjJUwST8xX 4adIqUsict96r+vS+5iTHcDIsg6m17OcH7i2pvlNxOFWl280edaKp/Gkj+jOxzF23Hv6 pvx7/UIuwItA3TngQt7hy4TdOzQOqZeIxtNkW7yzaovEd7pQf/H8xz0tWHsml9+WcX9o Wy/w== 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=ukU2nsrKjiF6glqzjylQ07Vd1ixac0NtcTFyTtmpwus=; b=bYhzfGXLvQ1RVXx+hvKC0OaBeNXVQqw/EcxuHn9vj5j+K6Lck4MUMvy1dpYeb3p7O8 ua7zZvjX+TVhpwRtaVQv5fwXA3uoJFX2hV4Xxa87AyGPgJIwGDS/Q5pcfzt2MbYz2kOj 5JH0c0WPp2OJJDu7oUudAG+y/6ka9meEXPZrSQPzJ8sQ9zv8qu6udCBNEIKpdFmdXMRw /LUQLx4GxTlzXL0Ie2569/PVfpQJwi8kN5y6Ie/EV1K8IrC3NRMPap5C/5CqjPRGChNP 4s1B8AEMKs20Cq3yD9MkSpR5TBRr/2eyLD/8Rou6ZanG8fVmDXkmNwQg/43u6kEQtHBi y3bw== X-Gm-Message-State: AA+aEWY4/NkIlo1hA8iNgQU8JKA/7dlgQyTiDYZ2/5UzcvkpgNbEILgZ SSulvewo87ZDQ2w6LSW7ACc= X-Google-Smtp-Source: AFSGD/WwqFZgeBF0KByHXasmiSBC7o7dGMKc0tFhYqyY4EcOe4vWh5KXdYMkGfz0QgcxkhKz+6G1kg== X-Received: by 2002:a2e:5555:: with SMTP id j82-v6mr6353064ljb.69.1544387468844; Sun, 09 Dec 2018 12:31:08 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:08 -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 v6 10/21] memory: tegra: Read client ID on GART page fault Date: Sun, 9 Dec 2018 23:29:39 +0300 Message-Id: <20181209202950.31486-11-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010147 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="OZN0KDZb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdDT0QlYz9s7T for ; Mon, 10 Dec 2018 07:32:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726541AbeLIUcS (ORCPT ); Sun, 9 Dec 2018 15:32:18 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:43467 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726371AbeLIUbM (ORCPT ); Sun, 9 Dec 2018 15:31:12 -0500 Received: by mail-lj1-f195.google.com with SMTP id 83-v6so7762778ljf.10; Sun, 09 Dec 2018 12:31: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=5T0VgQndGqhggBHHHuen16xLL3seZN19sOFULo4ZQO8=; b=OZN0KDZbZC4I7dhhMemYVqDRKw12o35rBO/zu7O/OofHHGWUXnzSTfrApqi3E7m/dr xRTswITKYr5b4zLsurLH+0pkQm9osQJh8Urwix8v0pAwhAOLWApu2sdNP+pt95eVrPDX VvlOSLP0Umr3u5PgyvSvY3cjRio2KXXoaBrNDPVuG6GcXmLU7b+Q7sYi2do5M0r1edxj AryX7glhVqVJeSBeMfGTIDx8nv2uCfg2PBOFO4k1xmre19PypgOOe8Kw7mJNGiBZjoZY 3BxQUzUGArqkQ1ebiw50YjrkBEDnUJB1ji8gF5w0ow7NA4vyoeUvWlp7TUTtrEvrkvWm 9WzQ== 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=5T0VgQndGqhggBHHHuen16xLL3seZN19sOFULo4ZQO8=; b=bfW6KZaZ4Ua3Up/aeU3jDLaqy59vyduC8K1VcYws2QyQSug1Lf7f9MT6vhF37qZGzR jefPaBUMwz4tZ8oGYQKmLmdeMpG7NsBHah33YZ9C2M7f+sW6qZ9gfmAibikP+FwV3Qvv PSFzmXK8LBGLM90EujTkVuXM2UaKJLsmjQ0DdrZ/mG6GadyTZzYa1XlvammeJ/DHDFDN PF5yze2YVvUXkS2j8XhhDXAOzC0ZH6JKb73NZPa+ZMRQIW4iEuh0i5uolLz8vBuWIuCr C3sKC/HS5jiJEjDxwwtsglrvaXM7yz3gQluuRCiYkBzKj3HtdPxs6CzWU/IWYv3XFDt8 7q3A== X-Gm-Message-State: AA+aEWba6YffSKJ+u2xXBC24MiWYcemVR3zmmrWlvn5JKgQeej905LwB 6K6hZMQ4H3Njjfyqjk8N/KA= X-Google-Smtp-Source: AFSGD/XwOta9/6Kb8bqdxbfmEiKpwfUQesLNW4YZM2DvhSdrVclE2/bwTyrYjZnFUXPgx1pG8Cnq5w== X-Received: by 2002:a2e:5703:: with SMTP id l3-v6mr6064467ljb.106.1544387469979; Sun, 09 Dec 2018 12:31:09 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:09 -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 v6 11/21] memory: tegra: Use of_device_get_match_data() Date: Sun, 9 Dec 2018 23:29:40 +0300 Message-Id: <20181209202950.31486-12-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010137 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="Q1zMZg3r"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdC86Crpz9s8F for ; Mon, 10 Dec 2018 07:31:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726388AbeLIUbN (ORCPT ); Sun, 9 Dec 2018 15:31:13 -0500 Received: from mail-lj1-f194.google.com ([209.85.208.194]:33045 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726343AbeLIUbN (ORCPT ); Sun, 9 Dec 2018 15:31:13 -0500 Received: by mail-lj1-f194.google.com with SMTP id v1-v6so7816907ljd.0; Sun, 09 Dec 2018 12:31: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=AL9mgVWYAaaAVSfCK2qUoA1QSddHFwi3ukVWb4sw/HA=; b=Q1zMZg3rzLkAKm5UcjO4zLrmqbVWFkD9XfDHDxLIZXNr/5OkWR2HgZU/N8Nr53frQb UJwR5DDq5B1uzHa0ue2043pLykYwTgXBfht5LFVGFwo15S3mrpEWNghedRu/rihtArSd M8isOn46HLaODcG8hfqT9DJPzaeGatX8dlZok2xCDIegtDRRzg7ZVMXX49CMalYkL6eV OownIV6J3BXeut+rs73zwrya4UdtkdxsaIv8s8cTk2syWEb79ykCd7RGQHbunLY5DTTz glQFxaARRMgLYNf5n4EwWfENgxSWZxOjzLHMPQCoq4ITCPW67XKk2xIN4q4P0sXpLoW1 BNRw== 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=AL9mgVWYAaaAVSfCK2qUoA1QSddHFwi3ukVWb4sw/HA=; b=obzZHrgwral1TNsuKHhHkQHio972ctA9xnA0peIky7ofvI8NLa8JF4jj8e1L2/TLl/ R1OtdwLagrcCbF/tsl6vOvf5VtATwAu5n2xYvZ4UAWxBtRBGwMEUPM72o1F4sDrWhkpk sPPkNCLhTDcmIDL4H6t12lyN3rKPVzzaIaCYkYPfzkr1Dk4z3NrQ27HM691wJqQaAeoh p7ByC/wT0Lc0Y2uRu3Mc5i+Fict7eaOrbH10s6+Y4P+cwVVPN+3fzabS3Vb+uXrYrZ3u F3QQF5Qq87Y3n+smdYeAgkfNF1Jb502YcZDBJ6v17Sv2ArrR9xwwuB/Re8akVV7Hq6Vd xL0Q== X-Gm-Message-State: AA+aEWaxSDlD13hOvlAvuclDFStA0ZAeJQqR7lRm4V8qFCad9xyGJJNR /zj4wTFac2HhKJtUfzNRf2rN1s+4 X-Google-Smtp-Source: AFSGD/UGZeYGGcKcj+uA/B4Yc6ns0pUqduLlr6pSDq8ri3MsNwkfFjOKthAj9QMd1ofiRVQQqfulJQ== X-Received: by 2002:a2e:9c52:: with SMTP id t18-v6mr4625797ljj.149.1544387471172; Sun, 09 Dec 2018 12:31:11 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31: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 v6 12/21] memory: tegra: Use relaxed versions of readl/writel Date: Sun, 9 Dec 2018 23:29:41 +0300 Message-Id: <20181209202950.31486-13-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 Sun Dec 9 20:29:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010146 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="u3KAC+Se"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdDJ29t3z9s7T for ; Mon, 10 Dec 2018 07:32:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726397AbeLIUbP (ORCPT ); Sun, 9 Dec 2018 15:31:15 -0500 Received: from mail-lj1-f193.google.com ([209.85.208.193]:46413 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726382AbeLIUbO (ORCPT ); Sun, 9 Dec 2018 15:31:14 -0500 Received: by mail-lj1-f193.google.com with SMTP id v15-v6so7733442ljh.13; Sun, 09 Dec 2018 12:31:13 -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=4jVgWBH8Ms13CbWDpHLyPY3XEHphsp/c5H1K55U5XS8=; b=u3KAC+SelbzjTy+oDln03bESgCY7XrCsCM5/yZbcADNVapEMG9PnC6aWXfgBbMJw9S kDeTQ4vccQnod4aA79NyopFOVhldYMkztW8KpMSxmDFzY82J/szmwxogKEw3ybtAfGXu N4lOeo5joGKy4YyvPNv8dAajkQEhezGfFkwl+nFwIuomUss95XUp693Vthm3ASd6hT3A MO4uFDkiBlSVCL01Rl32yfYtur8xfCgMR6ogroG61rI2OY8y/hnyXKU9DwPOhUB9QpWN mNOp1hhAuHcKuvhtFUi+Ylg5O2jw6vQC1GeWBDCjgoPLnFCcAnkI7maaTw1IpTL3Pr4D UN8w== 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=4jVgWBH8Ms13CbWDpHLyPY3XEHphsp/c5H1K55U5XS8=; b=qNE5i+eMp56a0fM/zllRPUVzIhNx6TJMxcpokeP7RbGgZRheaaGkkWhfawrrB13X/G NYPOI4V9Eixp7zUxx9nXxhoBxQEPse1h3FY9pLtxEoFxm7xhzrlY4m+ayq/BH/uIhAVP m2yMb2bNZ6oCYXyza+lzwDEjdZoenB+V7G7qXngnSNoFPf0gX+rpLeTiEPrebYVjIL6d wi4m9/rkpaCrN9j0xmXXamBilyC3waLyl8C7hck/TMBGmou3wwWSzwVHge9ro2hwoZtN +FYWuThnzUXpVWq6cIQ1Fr7o4f4nprunUKIcfB0aRxcBz0erA+Oq3fRr2o5+ZUXVm8sk KqOw== X-Gm-Message-State: AA+aEWYPC++BJ5IseXzIibRTIXH0q3TufHHweiXp7BoVXYHU4KeGK41B sIioXSMaiSKUqD/34rmk1MM= X-Google-Smtp-Source: AFSGD/VooiZq8Ta30M6UZCjRkzN+O1bq+HzZ4M3+yTu6bkH2rPPryNSeUWY5G1jImLedOlwQvVC2lA== X-Received: by 2002:a2e:63cd:: with SMTP id s74-v6mr5388710lje.117.1544387472565; Sun, 09 Dec 2018 12:31:12 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:11 -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 v6 13/21] iommu/tegra: gart: Integrate with Memory Controller driver Date: Sun, 9 Dec 2018 23:29:42 +0300 Message-Id: <20181209202950.31486-14-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 of Tegra30+. Signed-off-by: Dmitry Osipenko --- drivers/iommu/Kconfig | 1 + drivers/iommu/tegra-gart.c | 77 ++++++++++++-------------------------- drivers/memory/tegra/mc.c | 41 ++++++++++++++++++++ include/soc/tegra/mc.h | 27 +++++++++++++ 4 files changed, 93 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..0a72b6afa842 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,39 @@ 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, + const struct tegra_smmu_soc *soc, + 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); + /* Tegra30+ has an SMMU and no GART */ + if (soc) + return NULL; + /* 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; + return ERR_PTR(-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; - } - - 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 +465,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 +481,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..4cae1c3a853b 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -702,13 +702,54 @@ static int tegra_mc_probe(struct platform_device *pdev) PTR_ERR(mc->smmu)); } + if (IS_ENABLED(CONFIG_TEGRA_IOMMU_GART)) { + mc->gart = tegra_gart_probe(&pdev->dev, mc->soc->smmu, mc); + if (IS_ERR(mc->gart)) + dev_err(&pdev->dev, "failed to probe GART: %ld\n", + PTR_ERR(mc->gart)); + } + + return 0; +} + +static int tegra_mc_suspend(struct device *dev) +{ + struct tegra_mc *mc = dev_get_drvdata(dev); + int err; + + if (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 (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..5da42e3fb801 100644 --- a/include/soc/tegra/mc.h +++ b/include/soc/tegra/mc.h @@ -77,6 +77,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 +97,31 @@ 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, + const struct tegra_smmu_soc *soc, + 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, const struct tegra_smmu_soc *soc, + struct tegra_mc *mc) +{ + return NULL; +} + +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 +170,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 Sun Dec 9 20:29:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1010145 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="aHCD/1eW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdDF4ncdz9s6w for ; Mon, 10 Dec 2018 07:32:13 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726354AbeLIUcH (ORCPT ); Sun, 9 Dec 2018 15:32:07 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:41103 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726393AbeLIUbQ (ORCPT ); Sun, 9 Dec 2018 15:31:16 -0500 Received: by mail-lf1-f66.google.com with SMTP id c16so6487561lfj.8; Sun, 09 Dec 2018 12:31: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=yvtE3j8jv8WMI+maoi1pX5b2nmVnfMXNrNVRmb/ZtBk=; b=aHCD/1eW3UYK8kmvflCjYqnlxh8qUYWEMnxxjuJGY1zhNnZHNfMAr0KwjkvMRsZ2oR kH2E9apPiWaGV+vdRYAuqKbjpbxXlkWcO1MD8+3J2W8duIMWnRhHDTxUEo6vdMdQJG/X fL5mnomATOJ4qKkJa+zLvBjP+mNxIF219Oo4anfus/fFs0i7tbDmMjxXXMjL8hCMnf3k 7fvrriCeijJPKhwmNnyRPv07i6/gYEFcg7sVzOfE3aNtWv5SPlSCLV3K036wF79KuXmN 6fkBBRc86U7Tq83ZElF19f7zCYk4lI0mYQpBYVoFqsQQNUpfCOTsC6RBxYA0Q1ssgaKZ /IFQ== 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=yvtE3j8jv8WMI+maoi1pX5b2nmVnfMXNrNVRmb/ZtBk=; b=UNfWjHXGYDWadn35F/L2wZ9Q41ZdUKE8J6AEV7Hy9F+jkRm7U5DrWvPMwb2c/G9X19 1Ehz0UY1zbh52qnvM/p6hFn3pNDeb/3uaPWB38FFxeQQq3y156AhdBBtPaF73U9y7W0l dyiI1UQiY915AG81fUEtqqz28GXGhFklGhwTA7J4uLwt8uCG60aPUFnvPc2kwrs+Du9v eKS74HL7WQu8TR7Io1Hk9dgbOKqLlwu26qLYrHuTMk/STKsJZ3CAGhrbkJk7fikfkOxn q2yLUOp4zTHw7qAr1S5vCXy4oVUcXJxJx6F6whYhaXMe3zaJJUs6f+uX3Md6LQgA4KRu 9LFg== X-Gm-Message-State: AA+aEWaTxjrjBxL/6G3ZN/gSWG2jbWGr0N6mZRjDRJv8Kab9ucH/GJZf mrjDnPP9YMoPv3VSESwJJE8= X-Google-Smtp-Source: AFSGD/Vq2o3gt6WyzdTVIcKqyn1K8c4u2/ZjrkrbNrBzqNz0RlY+jnrNsFQR8o+NUIFVX26vDd6CFA== X-Received: by 2002:a19:c203:: with SMTP id l3mr5123243lfc.113.1544387473861; Sun, 09 Dec 2018 12:31:13 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31: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 v6 14/21] iommu/tegra: gart: Fix spinlock recursion Date: Sun, 9 Dec 2018 23:29:43 +0300 Message-Id: <20181209202950.31486-15-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 0a72b6afa842..d4a642c636f1 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 Sun Dec 9 20:29: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: 1010144 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="rHVd1liL"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdD63rJbz9s5c for ; Mon, 10 Dec 2018 07:32:06 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726276AbeLIUcA (ORCPT ); Sun, 9 Dec 2018 15:32:00 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:41988 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726402AbeLIUbR (ORCPT ); Sun, 9 Dec 2018 15:31:17 -0500 Received: by mail-lf1-f66.google.com with SMTP id l10so6499377lfh.9; Sun, 09 Dec 2018 12:31:15 -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=Ur6yZmpOECfjIx1ZyKaCDp3sDOh8eXxt4l9d1E6ThK4=; b=rHVd1liLqJeME2WJMppE2AywmTMX+DTS4mXEujIOjMyXy9mkw9hAdYFa3B79ml9v5V pw1CKjb0ZW6lvxO+5WGLI/xgoUaV71oMx/rbgsLJbA58U9Av0oNdAW1bwYwsO+FURgSe xKo2/2KhbHBKNnjeYailaQ9jzp/rNFfs4unEyGgHFlJBVd06/+nK7dYcR/LUtozHy0pt 6Z7b4cWb8ckPell9BsUmEp8rttBnYYksPZj/2oTX7z2aIal/oAS7NSv5KoT0giaDjZqw XgBWw8Cp6yg61QS8GnWqIWSwNxY3EbtuLKY8AJyhfvcUwQC7UJWvYWnLk2H7SDbcDYue ebUQ== 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=Ur6yZmpOECfjIx1ZyKaCDp3sDOh8eXxt4l9d1E6ThK4=; b=hirSv9SKeGw8o46NZJ/HWVKA4lV4talrwcuTezAlFCFE2wa61S/TKzwhsLBcXFyJ9Y V/um2MAsHbwE4urCPQhaxT5To6QdFpxMVjFNsMq2jge3+vuFh1C99OrUFR16QBYYkVN0 vhO97N9ey7XdH29NsSmtIQbR2S6YnpB0rqYr5anQM8dc3mfceT8Kg2nT4lYqZZYzGCo6 YnajByfE6S8o0aU1Ux3Vti6MwsaUakyR11zTJYnp5CB02bmEfq04E3J1mvkYbRJ7LjWT /Fumbg0wbbgEiOuG1X1UfNdJ9V75Cx9SkAwM0GGzAjmxZ+OYaNsphIslU3U3Wf9dqKxu EuZA== X-Gm-Message-State: AA+aEWYWbxBBKw4okBIvblGrqsR1azwmNnmOLFxdSQx4PYZVaaOYwAjY nc7H1WS+uaa6zJEhLBMIcGk= X-Google-Smtp-Source: AFSGD/VmgMfOckelExF87Bh3hGwTXAhXCERfDAybAITab4vHumHk/GfT5AxfPdLyWcFXAm3rAnIRoQ== X-Received: by 2002:a19:690d:: with SMTP id e13mr5273429lfc.84.1544387475036; Sun, 09 Dec 2018 12:31:15 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:14 -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 v6 15/21] iommu/tegra: gart: Fix NULL pointer dereference Date: Sun, 9 Dec 2018 23:29:44 +0300 Message-Id: <20181209202950.31486-16-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 d4a642c636f1..bb5303b06845 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 Sun Dec 9 20:29: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: 1010142 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="MW6LuAE1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdCy3Kfdz9sBQ for ; Mon, 10 Dec 2018 07:31:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726432AbeLIUbU (ORCPT ); Sun, 9 Dec 2018 15:31:20 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:43151 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726416AbeLIUbT (ORCPT ); Sun, 9 Dec 2018 15:31:19 -0500 Received: by mail-lf1-f68.google.com with SMTP id u18so6489281lff.10; Sun, 09 Dec 2018 12:31: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=/BRH3guyXjR1Gzp08Whw7GlnOA5eJBdBF2Ah4nroPQU=; b=MW6LuAE1E+kNbgea0E54JRrReA3MejMHqYlMidDHArFoaAQGfrk28oDxIlQsvaphrT drYu2Xb2N+x+jMq+wB6XFK+Jg3GB2tYrxn11ZQfpUfEEAPl/0/IclNj6Pn4IevMIGS3M +ZpHiLPl7FIBkHbpPjBfRbL41SZocXRt+4kYNDAwxbp0nyVRwnCV6oG50PZpChbqFqHw RpFlVJvjqxoByKpn6UQjQRWHtSEPZnEXaaXFiOzy9SLSudmsxQ6K61/FIrC/AZ7tL2ux iMQUFo6CjJFptdf/ws3EPPyNj/9PyVZZEMC16XDGRDq9oWKdgHCwnIsGk4d8dUypsaSL E27g== 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=/BRH3guyXjR1Gzp08Whw7GlnOA5eJBdBF2Ah4nroPQU=; b=DOIs39kOuq6rh9CxsE4wDFac2mv365V1YloXMxgypfkGCo/IjKy1wE3wvu4RgfU8fk nxxw3AwJFhIKtNkniIlyOMzdr7KLudDIQwMx8dENU/mh5BopbKurnxW0gP/2eO2qPRub SvIhDl1VOrxJURY0YnWPXQ5UWAy//gUaaA5QXAK3ym7CDJspl+ZxpYqGPQ0WrAYF1YJL O+pE16Fv+35AuzAiJS4zOseu5nXe52AGzeCGKzTU2YM4+Pin1Hrcm7J34p84QEM0w89e ijNU8Q4z6RsROalMJXnWYOH5Ik8QtCifO4vrWJ6KUOZAWu46O4aLq/r1otmlgVHpg0oC zSiw== X-Gm-Message-State: AA+aEWaMpSMVUJpCKddOmmIRtr95jX/bLVngzQKWMZyKBXgWkjEh6W3k +7zp2BJqHLni+at3ErQOSRA4LDBd X-Google-Smtp-Source: AFSGD/VhOneilHoYYuTroqyRnWgr/FX6/dzfUUjjvVG5VnFOhJO7zR9wiF7Blg5QrfDNMn4XdhTG8w== X-Received: by 2002:a19:d9d6:: with SMTP id s83mr5630535lfi.57.1544387476377; Sun, 09 Dec 2018 12:31:16 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:15 -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 v6 16/21] iommu/tegra: gart: Allow only one active domain at a time Date: Sun, 9 Dec 2018 23:29:45 +0300 Message-Id: <20181209202950.31486-17-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 bb5303b06845..1be595d15e7e 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 Sun Dec 9 20:29: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: 1010143 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="PwOW4eOx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdCz2JTgz9s8J for ; Mon, 10 Dec 2018 07:31:59 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726382AbeLIUbU (ORCPT ); Sun, 9 Dec 2018 15:31:20 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:34755 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726417AbeLIUbT (ORCPT ); Sun, 9 Dec 2018 15:31:19 -0500 Received: by mail-lf1-f66.google.com with SMTP id p6so6529451lfc.1; Sun, 09 Dec 2018 12:31:18 -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=HTX3y++j0yuzOQfGcZM+ZpkGPkoc/4Fc3P4h/vDhnhU=; b=PwOW4eOxH84dTAPcK9LinSL7WK9NILopnHvJHBRdEzevZekZuRtPja2yhoGWqe0Zn+ Dgk78aymTSHLiwBQ86uBt2ItRJQRXHkV29M3JXMJZaTSDBbSWOmER13QjN/PC1E9ClRG nL6W8HVy6W6gsPJShAm97BA4ZpG6fwkpVS1qvOSEmPsyv03R9txFAjY+M/769D/llUD+ aEqNgsnhO4eanAOB5PooWb8LAhjDY3L0NuQPWmIFlYX9Ej6AOjV+7Go87oyKR/TFz/Up PLCF4vYNjO0CkyXfiJ7ihknXHSL2MiFPcajNRJbIrKJHaXK47qnIx6lvSMFZGbPITozL X7gQ== 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=HTX3y++j0yuzOQfGcZM+ZpkGPkoc/4Fc3P4h/vDhnhU=; b=MhXKtLWe5ugkG+pLLi25kJFn2TeaZ7Kzb1y6eUrdkyKUGoZE9+5M8cv9KmF5IP73mn kOOO8SZ1K4HTDLhEX4HIZiCZytZqIWidqZaW5rI5Fel9UF0KMfewqXQNlOBEHXBfejs2 nwcYMxB2sC5nmXyIer6G11rAQC+sCa2oMqpAFMSOhMOkvn5FIiVZ7sZXMCQgwQ2RHIJN /YTR8Kmz7/Hb7IQBpgpNqyMEo5hAYFqaXGDvFj22QYHVS612JsGhwT//UdzgY2Z0OQR3 nMUbrSWY1mbKIUzPNyrAwsKqneqseMQWnFHeRemKD+gYLWlKwMImjFWWM0MTL2k25Jtc toTw== X-Gm-Message-State: AA+aEWZTu5dpE74iDgZUi+tpGR1VEs3kjXPL8f0wI0om/xDtEM11cD9D VEovFxRo7IvfskrWwuBMFg0= X-Google-Smtp-Source: AFSGD/X8ROvl3TQhQlFaB2t92jR3+4ZJUvLSfOZN5LtTu3mnlHcY2FxQ4OPqud/e4dpKMZGdOTJzMw== X-Received: by 2002:a19:914b:: with SMTP id y11mr4926814lfj.98.1544387477463; Sun, 09 Dec 2018 12:31:17 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31: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 v6 17/21] iommu/tegra: gart: Don't use managed resources Date: Sun, 9 Dec 2018 23:29:46 +0300 Message-Id: <20181209202950.31486-18-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 1be595d15e7e..99afdbf8860c 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)); @@ -461,7 +461,7 @@ struct gart_device *tegra_gart_probe(struct device *dev, 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); @@ -470,7 +470,7 @@ struct gart_device *tegra_gart_probe(struct device *dev, 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); @@ -508,6 +508,8 @@ struct gart_device *tegra_gart_probe(struct device *dev, iommu_device_unregister(&gart->iommu); remove_sysfs: iommu_device_sysfs_remove(&gart->iommu); +free_gart: + kfree(gart); return ERR_PTR(ret); } From patchwork Sun Dec 9 20:29: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: 1010141 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="LGKRb1m1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdCw5D8bz9s47 for ; Mon, 10 Dec 2018 07:31:56 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726318AbeLIUbt (ORCPT ); Sun, 9 Dec 2018 15:31:49 -0500 Received: from mail-lf1-f67.google.com ([209.85.167.67]:41991 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726427AbeLIUbV (ORCPT ); Sun, 9 Dec 2018 15:31:21 -0500 Received: by mail-lf1-f67.google.com with SMTP id l10so6499432lfh.9; Sun, 09 Dec 2018 12:31:19 -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=2wj2cnV5NfgWAeq4QRBAjBkMHkVET0shlG5K+DrgkR8=; b=LGKRb1m1CaKNBImC5Wcz03HIovpkSc7hCibA4ZQ5cDBTPuN+nITP2tBRW5TEL/WOGm c+QxeESEt4T2rMCeF2XY3FLdhjbL9bt2KrKMeUeyPMm4quz7TgC1YifFXorZH+ApKzJy cHKL1DC1qf1QwaqwQbvaiizsT/WTWgq7q1J4fOBhNw8gvXsb01P7W3eEdRXL2lmQMevd Ysln4zgJqNisJuogQQUVp6+pFrhxMvt7SUttJsmKjT3f3JJQZ36Ql9psPsMFRh7IyVJP c+vAn/hplwoMlhhfRWrmHft0pdtuZBDOW2FhRYE/20dSLjguwFGCz6Y71BmnOTiTdq0M ksow== 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=2wj2cnV5NfgWAeq4QRBAjBkMHkVET0shlG5K+DrgkR8=; b=edHiUwd9dWDHTcfpGmQikS79VSUvLA4Ot49sUBp9/ABlMh4e4afhfJ0SetYb6F24cl QV3f9VfS/py3v2+fNNq7B2Eo3hdwdCkYzJK7VuxJJk/Jf5FXMBhDjUe5ovCrKzWPQbOZ ejWM9u+VFYI6gUk88rhi/gfxtHOL//vR30vhEzKzoYzLuVT+B0bI6uMkzFhpoEZyVuOL ZpiU5mAKJFhXVj95Wkfns7x8UQgfufuPBAEbqc/Ic4NwPLqSKbr/19Whk2Livv5nnaJh J3QJxrligxFWEs3NePmoqKRjAhR9jpxFoixNhtPdNEyMlxUfgF40wbjBzTCzaXNuD0Qq DFQA== X-Gm-Message-State: AA+aEWaKGOKt5NR1xa1tyNG2cKpLQ2MWoNQ+U4m49U6EOIHTll0/B1Qv k+lputGhRx0yi32qMZnq8xk= X-Google-Smtp-Source: AFSGD/WlKla8eHMeM6QO9j/NVn2EpNiYvtkLe0oHNfIrCX977I/zw8rwUqxvc7RFPSqWptOQQqIncg== X-Received: by 2002:a19:1d0d:: with SMTP id d13mr5162356lfd.74.1544387478798; Sun, 09 Dec 2018 12:31:18 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:18 -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 v6 18/21] iommu/tegra: gart: Prepend error/debug messages with "gart:" Date: Sun, 9 Dec 2018 23:29:47 +0300 Message-Id: <20181209202950.31486-19-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 99afdbf8860c..9d2df43ce50b 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 Sun Dec 9 20:29: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: 1010140 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="iT3yHxTI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdCp0936z9s7T for ; Mon, 10 Dec 2018 07:31:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726446AbeLIUbX (ORCPT ); Sun, 9 Dec 2018 15:31:23 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:43475 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726437AbeLIUbX (ORCPT ); Sun, 9 Dec 2018 15:31:23 -0500 Received: by mail-lj1-f195.google.com with SMTP id 83-v6so7762957ljf.10; Sun, 09 Dec 2018 12:31: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=CDyXCzzCJ8q4lb4wCIqGHfi6dS+V04hC5Lh6johlwDU=; b=iT3yHxTIYz10cliQ6PAvHxLv1NaFTMad552TYNDlQduphLBeqrXmGG2oJpPwnDndfW tPymPIWfmvgJjaM0mOxznjZB4sZToInrK2YYFxmDqatAPVs/ERVNsx4jkV0Re5PxS9d5 QKQMevWb5T/5adZqWJUI9rQKojXk9ohcPtR+YqEtqoCTHVPlBQngvd3fUUzAe7/tPJHa z9sB71oIst/SKVX3kqAPKJNOrUrm+h5qnVVGnK5wHN8wn9bTDQwKuEdsw9Zvh9Jljr7V fDzKMpVRdnjWTNhzURIa8FZPVllvjuK2OXANZjeEIqM5aFiE30EgkXgKU9p/BTLz6938 mEIA== 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=CDyXCzzCJ8q4lb4wCIqGHfi6dS+V04hC5Lh6johlwDU=; b=Q8PHDsnLIBqOAQ2oP+EAXebVPP/l1jWBPBFS7WU82g2dgqmMMFxMF1UviSdJlvGCvG 1Awfk74sf4/yp4zuZDaWkSGO8z4OGks+aWV5k3IVZAorsXeGdAd2kxxKl1xTn0BehOxQ gUK7Ts8sopE0rg4afP/c+8j+eZ4IkswWjtG7s0zqC9on2yWcnQKSEMtP+eIDNRx9zGtd xa4Kn/PK632lt9LY3FqPIOJl/ayCLyL/skseBP98zgbtsG7B7d8brSl+65LKdvxsWH2p wemx3XWyiq2G8Pf+6j2cNuQbHNgAzSseJpwVqNkYsjipDIWjvT4M/WU79Vb668zlbw9a NVLA== X-Gm-Message-State: AA+aEWZt9Vc80UN687R2ShBs9XRIKoQSFdvdjPi0dpzWLxmiarI195ob 1r/0xWdkcr81oabd8BRGpwA= X-Google-Smtp-Source: AFSGD/UiLfGN5JCqDMvU5GGjZY+V2QTemjwEIio1MArjbrRJojiCJmw0HPlxqLo1/FN78+bujK3Mvw== X-Received: by 2002:a2e:9783:: with SMTP id y3-v6mr5407324lji.167.1544387480190; Sun, 09 Dec 2018 12:31:20 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31: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 v6 19/21] iommu/tegra: gart: Don't detach devices from inactive domains Date: Sun, 9 Dec 2018 23:29:48 +0300 Message-Id: <20181209202950.31486-20-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 9d2df43ce50b..f2dc7e72be80 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 Sun Dec 9 20:29: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: 1010139 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="OrsgwfI8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdCm72tTz9s9h for ; Mon, 10 Dec 2018 07:31:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726239AbeLIUbl (ORCPT ); Sun, 9 Dec 2018 15:31:41 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:34758 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726439AbeLIUbY (ORCPT ); Sun, 9 Dec 2018 15:31:24 -0500 Received: by mail-lf1-f65.google.com with SMTP id p6so6529513lfc.1; Sun, 09 Dec 2018 12:31:22 -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=ASq2D6tW3eZzmxu1kXDh0GYheKCVARnQbJAO/oXHJwc=; b=OrsgwfI8xhWcuiz3tX0rs6eJNz4WTJwjHavjZBUkBc6FlbwrV4tAKTX6Bq4rFB0zWw Li0VMxpfub2S3xgQPjrZaKXvWQC25cejhjteLBBIZS11tLMpcw7yXau0x3ykezJv5u/f 1HCJI7no2E+iwo0JfUWPQUIDVP76h7Cf5TeRtA/Hv18m4N8U3liKx2Qt0ouPAzGm2rPZ PZPuZgYotIDqI5gpeXbQk+09ttQKC1LY7/Mjc9UA4dQGkoxjrlMSSuZq1dSSWfiJ00T+ LGrJ9BKeY1o4WZUcjOdOsIZXLFuqqY9uzIenx+Ns9IDJVuDsRg/7Lts9jkEstfIXmHnl drdw== 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=ASq2D6tW3eZzmxu1kXDh0GYheKCVARnQbJAO/oXHJwc=; b=WzeIMRTlAmYuIOOXNBxx+skG9nnTcyLbk9q1xGJc7pITexMNgagEnoe9NSh1kDJufA uVXl8sX6WwpNNM1GUFaJQInLuyyYiJr6H/2U/XkBte7gAce1EuxaZr0phJKzVdly5TTv yNLot3ATVZOIzG34tBiMXVGMZpzdHVONRV3UAs37C2HryUD2xxxI0ae+A7g6djmBPkHz dSIPcVNCsN1f9NHDs+rBsXuWm60Ok+ZZtTraZRzkXMiNF87QUPQZdxCfS+aBjd7vSovs 3wrLdqVPTZu84XLEYXZKgUcQCnL23Fje4XiUfu8ojkWabsAkgH/zu/R6P2h0RVFnYqli d1Wg== X-Gm-Message-State: AA+aEWaZX98GVAelAgHk/5P++jOU81mS9YhytjSEzQfnPqYGkmb5l2ey EJ9G1hCY8SVddeJddpUIgAc= X-Google-Smtp-Source: AFSGD/U46xyyqSO6sS/aZoLtuH+eRLad31hSnvkrjiP4hWAkLmIpM3yyz+/G1PxPF5C3s/yCIoH1Bg== X-Received: by 2002:ac2:41cb:: with SMTP id d11mr5564410lfi.3.1544387481253; Sun, 09 Dec 2018 12:31:21 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:20 -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 v6 20/21] iommu/tegra: gart: Simplify clients-tracking code Date: Sun, 9 Dec 2018 23:29:49 +0300 Message-Id: <20181209202950.31486-21-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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 f2dc7e72be80..71de54aa845c 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); } @@ -489,8 +415,7 @@ struct gart_device *tegra_gart_probe(struct device *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); + 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 Sun Dec 9 20:29: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: 1010138 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="P8fwAGJg"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CdCX56GJz9s6w for ; Mon, 10 Dec 2018 07:31:36 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726469AbeLIUb0 (ORCPT ); Sun, 9 Dec 2018 15:31:26 -0500 Received: from mail-lj1-f194.google.com ([209.85.208.194]:45150 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726444AbeLIUbZ (ORCPT ); Sun, 9 Dec 2018 15:31:25 -0500 Received: by mail-lj1-f194.google.com with SMTP id s5-v6so7733680ljd.12; Sun, 09 Dec 2018 12:31: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=1a4OJ0pMub/+4OQ5vBaj/FGKXBfZbEHYOH7ILj8c9js=; b=P8fwAGJgtfhyB3SQfEMo2YTQu5kN18A1V6M1/BXdlbOqmvc/gISaHtUUmv4EUNyV4Y CXzC2dhv+VDESK/atqMWjKpC8yxupLEEq6rekBW7OdzK6Nm91yQQNGNpuoiSqHRt0BmU sw9+tBdnhl2o468qlPvWEFnw4+Pr+X4rj1AHolFR08HmA5AzSviLmg4mEkOw+eyCCBEJ 7mGUxSTJ1miSNAsz4vYjSJ1r1fKl3LIHWrCta26cTg4LzTmt2pHg8pB1lL6Mi28/HBg2 mrPvAvnBMkA1wM6e60VwFSUmScxg6QtvKrY99QNF7gw3zgPGqy/oBhLfD83nslv82Rxv 0AVA== 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=1a4OJ0pMub/+4OQ5vBaj/FGKXBfZbEHYOH7ILj8c9js=; b=TFJTzxFAnhug8TuPnq5NT/dk7AftStIv96ShLNBY1B1tE8LxqdhYWZ1hY/gRl1EH7F Eeof6wgcS1Wrc17dlB+mGsfWmjPK6arl3EQT6YmmeYLhZK+qEgyb2wvrDRBHFk/j7ejK f3gmT08Dk8z/njpeDc7O8ZHx+0Q1O8GMLLPSM6RyLxW8Uzs8OCT+M0nCbcBJH6V5KTBv 3cGS4BK4+aGKBy6aQdt2vrR85bayNTmIP94n29300HN/+gR60JRVymAJSls6ed9dFox/ 4gNBA6mkw3/0GxzZM+LZo6IZ/YJzki3Zvg2AH3VO2atHuIr9gYHb7xKr0Ko3ifU6iVYy COrQ== X-Gm-Message-State: AA+aEWY86b8VfP8R2sxPBOGEFZGUumGbuY23EDLxVBgl0VrceFjLLypC uoFrqM4p9Q4HiXBmVRUSD38= X-Google-Smtp-Source: AFSGD/WpWdP2ePwrXwMKZpIc26KV3lZVJGuPu5rHO8cYiQ4SC/Igpyro0zQ4fz5uFYyhrcERF8qLOg== X-Received: by 2002:a2e:5747:: with SMTP id r7-v6mr5392527ljd.141.1544387482340; Sun, 09 Dec 2018 12:31:22 -0800 (PST) Received: from localhost.localdomain (ppp91-79-165-221.pppoe.mtu-net.ru. [91.79.165.221]) by smtp.gmail.com with ESMTPSA id c20sm1708346lfj.67.2018.12.09.12.31.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Dec 2018 12:31:21 -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 v6 21/21] iommu/tegra: gart: Perform code refactoring Date: Sun, 9 Dec 2018 23:29:50 +0300 Message-Id: <20181209202950.31486-22-digetx@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181209202950.31486-1-digetx@gmail.com> References: <20181209202950.31486-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. Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/iommu/tegra-gart.c | 244 +++++++++++++++---------------------- 1 file changed, 96 insertions(+), 148 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 71de54aa845c..c732c6a2a165 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,44 @@ static void gart_iommu_domain_free(struct iommu_domain *domain) kfree(domain); } +static 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 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 +221,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 +238,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 +286,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,24 +309,19 @@ 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; - 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; } @@ -373,9 +330,8 @@ 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); @@ -384,53 +340,45 @@ struct gart_device *tegra_gart_probe(struct device *dev, return NULL; /* 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: @@ -440,7 +388,7 @@ struct gart_device *tegra_gart_probe(struct device *dev, free_gart: kfree(gart); - return ERR_PTR(ret); + return ERR_PTR(err); } module_param(gart_debug, bool, 0644);