From patchwork Sat Aug 4 14:29:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 953463 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="vZWtgdzS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41jRLX6vRpz9sXY for ; Sun, 5 Aug 2018 00:36:36 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729624AbeHDQgX (ORCPT ); Sat, 4 Aug 2018 12:36:23 -0400 Received: from mail-ed1-f65.google.com ([209.85.208.65]:39152 "EHLO mail-ed1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727481AbeHDQgX (ORCPT ); Sat, 4 Aug 2018 12:36:23 -0400 Received: by mail-ed1-f65.google.com with SMTP id h4-v6so3138601edi.6; Sat, 04 Aug 2018 07:35:29 -0700 (PDT) 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; bh=/QwzNCaTcKwdo0mw7n9B9D4sysi6OHDqWMK7azzcgAk=; b=vZWtgdzSLtPtdNk0F/1T5CF18+rYXtnwPFjobldWMI4PxwzMx+Ffy7SkvF7Lc8kFQo eD68Qq/amCvTMRkrBmEG0+oMlf9+8A1qf7PBK+LpexfqrRVpovJbQFBw7b2XbggECb9Z 2DMJqYXd37crL4S3Azf6bvLAEOQUCs6baSxsSz1dZw4BI0dBIjH1W1GVzszvk5OpzcV6 Mp7d9iSRfhVehuWEcTqBihUqax2uLnaFsEJ0bUCISJfhHGTc7b5NS/Qfzx2sYWv2rlry GTh81Cb9m2lydTAkcOzg/o9H1m3VHsQ0fqm9B/HiRPpz3+9ZnTzX5adAJldhIHcKi170 h+AA== 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; bh=/QwzNCaTcKwdo0mw7n9B9D4sysi6OHDqWMK7azzcgAk=; b=rMci3DyrN0tc689WV1WMhxZhi+w72bn9EoQI6G7noI6HWjrKASNe2a/IxYKuSubXBl N18vOm69wW4QR1/s2pKpEJAgJgjuxb4T+gtPxxiedFwu8icJbmqPEYYIBCcNNpIaLEKs r7sE/S0oQVueF0B6BIj+xQK1LM2HNAJ/9XIOHJD71opgiFFXUxnoGYkLDgKmjeegCREN WoKT8vBgCXGGuZgpl8seawDHus6DaWySnChCtRoKIha9EnvsZz+Ofh+clvFHjPl0wNgb 4WRMAoX4DfweSOmBdC5PjhKA47BG2JyV0BtegHfm5MdUc8B209CMiCWPmVHbD/fChvOy q4Hg== X-Gm-Message-State: AOUpUlHXoVOaRBpeVOiStICrckyZ/KvZr4+zbVuH8D/Jv+R3qMCcMmGe fiY26uRQ8p467A/QdXwcwqc= X-Google-Smtp-Source: AAOMgpdWJU3aN99pTqfZ3QQTK8cXebYFWBWuD0z8WnCF6Td7EFWEKzbnfN5ADd9JQYgm0bwiOHYoJg== X-Received: by 2002:aa7:d4c1:: with SMTP id t1-v6mr11364322edr.121.1533393328634; Sat, 04 Aug 2018 07:35:28 -0700 (PDT) Received: from localhost.localdomain ([109.252.90.13]) by smtp.gmail.com with ESMTPSA id y20-v6sm589379edq.55.2018.08.04.07.35.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 Aug 2018 07:35:28 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Robin Murphy , Thierry Reding , Jonathan Hunter Cc: iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/8] memory: tegra: Provide facility for integration with the GART driver Date: Sat, 4 Aug 2018 17:29:56 +0300 Message-Id: <20180804143003.15817-2-digetx@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180804143003.15817-1-digetx@gmail.com> References: <20180804143003.15817-1-digetx@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org In order to report clients name and access direction on GART's page fault, MC driver need to access GART registers. Add facility that provides access to the GART. Signed-off-by: Dmitry Osipenko --- drivers/memory/tegra/mc.c | 26 +++++++++++++++++++++++--- include/soc/tegra/mc.h | 13 +++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c index e56862495f36..4940d72b5263 100644 --- a/drivers/memory/tegra/mc.c +++ b/drivers/memory/tegra/mc.c @@ -72,6 +72,8 @@ static const struct of_device_id tegra_mc_of_match[] = { }; MODULE_DEVICE_TABLE(of, tegra_mc_of_match); +static struct tegra_mc_gart_handle *gart_handle; + static int terga_mc_block_dma_common(struct tegra_mc *mc, const struct tegra_mc_reset *rst) { @@ -543,6 +545,11 @@ static irqreturn_t tegra_mc_irq(int irq, void *data) return IRQ_HANDLED; } +void tegra_mc_register_gart(struct tegra_mc_gart_handle *handle) +{ + WRITE_ONCE(gart_handle, handle); +} + static __maybe_unused irqreturn_t tegra20_mc_irq(int irq, void *data) { struct tegra_mc *mc = data; @@ -565,6 +572,7 @@ static __maybe_unused irqreturn_t tegra20_mc_irq(int irq, void *data) switch (BIT(bit)) { case MC_INT_DECERR_EMEM: reg = MC_DECERR_EMEM_OTHERS_STATUS; + addr = mc_readl(mc, reg + sizeof(u32)); value = mc_readl(mc, reg); id = value & mc->soc->client_id_mask; @@ -575,11 +583,24 @@ 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; + if (gart_handle == NULL) { + dev_err_ratelimited(mc->dev, "%s\n", error); + continue; + } + + addr = gart_handle->error_addr(gart_handle); + value = gart_handle->error_req(gart_handle); + + 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; + addr = mc_readl(mc, reg + sizeof(u32)); value = mc_readl(mc, reg); id = value & mc->soc->client_id_mask; @@ -596,7 +617,6 @@ static __maybe_unused irqreturn_t tegra20_mc_irq(int irq, void *data) } client = mc->soc->clients[id].name; - addr = mc_readl(mc, reg + sizeof(u32)); dev_err_ratelimited(mc->dev, "%s: %s%s @%pa: %s (%s)\n", client, secure, direction, &addr, error, diff --git a/include/soc/tegra/mc.h b/include/soc/tegra/mc.h index b43f37fea096..5bf72eb4dd51 100644 --- a/include/soc/tegra/mc.h +++ b/include/soc/tegra/mc.h @@ -162,4 +162,17 @@ struct tegra_mc { void tegra_mc_write_emem_configuration(struct tegra_mc *mc, unsigned long rate); unsigned int tegra_mc_get_emem_device_count(struct tegra_mc *mc); +struct tegra_mc_gart_handle { + u32 (*error_addr)(struct tegra_mc_gart_handle *handle); + u32 (*error_req)(struct tegra_mc_gart_handle *handle); +}; + +#ifdef CONFIG_TEGRA_MC +void tegra_mc_register_gart(struct tegra_mc_gart_handle *handle); +#else +static inline void tegra_mc_register_gart(struct tegra_mc_gart_handle *handle) +{ +} +#endif + #endif /* __SOC_TEGRA_MC_H__ */ From patchwork Sat Aug 4 14:29:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 953456 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="fvoYM3ma"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41jRKM1cs2z9sXb for ; Sun, 5 Aug 2018 00:35:35 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729704AbeHDQgZ (ORCPT ); Sat, 4 Aug 2018 12:36:25 -0400 Received: from mail-ed1-f68.google.com ([209.85.208.68]:33909 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726983AbeHDQgY (ORCPT ); Sat, 4 Aug 2018 12:36:24 -0400 Received: by mail-ed1-f68.google.com with SMTP id h1-v6so3146811eds.1; Sat, 04 Aug 2018 07:35:30 -0700 (PDT) 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; bh=XFX8eCBkoh/K6Ft+7LTRupJGBHBMFyrAhkrYXfUANkY=; b=fvoYM3maUUevZiT6OWE/08tE60kwUPhUVodrhceT4+XFzNhh7y7m6HTsVAOJahF/Wc 3KgFl1Vidlqao90E719TZVF70rjmaozl1XIz71CMWIL2IX0y7aegy1BwR4hrI4l5YJEt pC+ldAbP6YjStS/dTqaGLAqjuDp+HEThA4p22XbvnqqyWkE+DC51ElYb6enbhJYhEEB9 nUHIogiKheHqYi0QVRxbcUktzg+b+yuKVpfgvaJChWy2/jbH/qbPQbeRM3ypZn9Vdcf2 n9joVThO39n8IvQ8vnHbE8B2+xo7AUk+sYNg3ifyY9gceO5+Cp5l7jWm8WufZ8mEMDiA ELKw== 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; bh=XFX8eCBkoh/K6Ft+7LTRupJGBHBMFyrAhkrYXfUANkY=; b=B7dXGpnuyJr7Ov7Pc7FH9ZRBXY7YgPN7vag+HkbBZm+zFTWck+DOgcdFQ5/4phFPaN QkWlu840t0pCTLoICjq8Vok7XKSdaAEvba2mQQlpC/n5BZb6kpFvSgkv8llxN4dyIV5T nPhazsCTVgNCeEDt6HM9jPM5k0ZYQ3tZLSDsCdx/MDNxRedyOp8IWOdjn18NNSRgf6iL 5GvyX/mUVqrD2yn93LUPhSpuSOU/kpusHSOfhiElsCO3fwwNeUtg/EJSm861cMtl9tyU 4iLkN7wxU9mgszorM7vxZBJY0PtUl4ljoZto+Nx+yAiMPwODWT5s1ARz+hFh11z8nsUl URnw== X-Gm-Message-State: AOUpUlGE+mZ4GwmycJPLKE3s1K313LGtx+kRNsSfZh0TGztEKUu9SVx0 3APZ2Tulho+d6NtYZRMGqdk= X-Google-Smtp-Source: AAOMgpdkySK7K6s/Hf2Jha5jvWuq4Qcw23WM/Bv4mOhW4/+n7uYtZdaVByyI3W46dTkfI0kaLOXRKg== X-Received: by 2002:a50:9226:: with SMTP id i35-v6mr10923436eda.27.1533393329724; Sat, 04 Aug 2018 07:35:29 -0700 (PDT) Received: from localhost.localdomain ([109.252.90.13]) by smtp.gmail.com with ESMTPSA id y20-v6sm589379edq.55.2018.08.04.07.35.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 Aug 2018 07:35:29 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Robin Murphy , Thierry Reding , Jonathan Hunter Cc: iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/8] iommu/tegra: gart: Provide access to Memory Controller driver Date: Sat, 4 Aug 2018 17:29:57 +0300 Message-Id: <20180804143003.15817-3-digetx@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180804143003.15817-1-digetx@gmail.com> References: <20180804143003.15817-1-digetx@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org GART contain registers needed by the Memory Controller driver, provide access to the MC driver by utilizing its GART-integration facility. Signed-off-by: Dmitry Osipenko --- drivers/iommu/tegra-gart.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index a004f6da35f2..f8b653e25914 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -31,6 +31,8 @@ #include #include +#include + #include /* bitmap of the page sizes currently supported */ @@ -41,6 +43,8 @@ #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_ERROR_REQ (0x30 - GART_REG_BASE) +#define GART_ERROR_ADDR (0x34 - GART_REG_BASE) #define GART_PAGE_SHIFT 12 #define GART_PAGE_SIZE (1 << GART_PAGE_SHIFT) @@ -63,6 +67,8 @@ struct gart_device { struct device *dev; struct iommu_device iommu; /* IOMMU Core handle */ + + struct tegra_mc_gart_handle mc_gart_handle; }; struct gart_domain { @@ -408,6 +414,20 @@ static int tegra_gart_resume(struct device *dev) return 0; } +static u32 tegra_gart_error_addr(struct tegra_mc_gart_handle *handle) +{ + struct gart_device *gart = container_of(handle, struct gart_device, + mc_gart_handle); + return readl_relaxed(gart->regs + GART_ERROR_ADDR); +} + +static u32 tegra_gart_error_req(struct tegra_mc_gart_handle *handle) +{ + struct gart_device *gart = container_of(handle, struct gart_device, + mc_gart_handle); + return readl_relaxed(gart->regs + GART_ERROR_REQ); +} + static int tegra_gart_probe(struct platform_device *pdev) { struct gart_device *gart; @@ -464,6 +484,8 @@ static int tegra_gart_probe(struct platform_device *pdev) gart->regs = gart_regs; gart->iovmm_base = (dma_addr_t)res_remap->start; gart->page_count = (resource_size(res_remap) >> GART_PAGE_SHIFT); + gart->mc_gart_handle.error_addr = tegra_gart_error_addr; + gart->mc_gart_handle.error_req = tegra_gart_error_req; gart->savedata = vmalloc(array_size(sizeof(u32), gart->page_count)); if (!gart->savedata) { @@ -475,6 +497,7 @@ static int tegra_gart_probe(struct platform_device *pdev) do_gart_setup(gart, NULL); gart_handle = gart; + tegra_mc_register_gart(&gart->mc_gart_handle); return 0; } From patchwork Sat Aug 4 14:29:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 953462 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="kX11N8Cd"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41jRLM1y3Hz9sXY for ; Sun, 5 Aug 2018 00:36:27 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729709AbeHDQg0 (ORCPT ); Sat, 4 Aug 2018 12:36:26 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:42457 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727481AbeHDQgZ (ORCPT ); Sat, 4 Aug 2018 12:36:25 -0400 Received: by mail-ed1-f66.google.com with SMTP id r4-v6so3124880edp.9; Sat, 04 Aug 2018 07:35:31 -0700 (PDT) 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; bh=ARFNLcqbSOTKJmBSxpabm7kLQpdaLr0L+JzIeC7lego=; b=kX11N8Cd99Tk8CckRY5C4DNgLjHT0l8yfDnSuzkF9nXZI/0X5zNDkZUOxpEyka0QbJ xCE+Y71TPqFUq0B9DNDNX/mVqdnjIey6thCkWKWAY/MF8ViZbf44cQeYio3/rCOa4mdV xVzS2jUcrnCOiJWhIAzdtg2DyF7Jsor45pCgfywTb8KZGgYcGAIUmJdugrMTLstI56xB MlQi4K6Wa91osVSLWDjQnN803/XpPO3g7voYBM9WpVwEK1u5hFivp0hjP/WGFaMVyBlJ kl2f+xCjs6lMGwK3KgcdQHdaX5SFRo6MD6LjIq/B2c29SM/7qjMefA8UsxsG1+6Yxwjw X2eA== 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; bh=ARFNLcqbSOTKJmBSxpabm7kLQpdaLr0L+JzIeC7lego=; b=B1cSRlO6USwD6hmWCkNyP/x4GhiuJ0FdFNbhadZ5XTmgbg8jNQiuXZHHb8XhV4vdft 1e3tzLOL2+S65qIopQGpXjwSMMzOpfuYi3G3wlO9WZ+xijbfhGTuCbTP6npIa/DFoHvf Kc+GH59whxJkx/svrfAYLrIQgXeI72RNRcNz7ZK228A4t+2VaSVfnDP+XgFZAL9P/yyk ZXbyzbGmZhxQpHvqCpVSKu5MTezF+maGWgrrMoEL6bC0u88pqM/qEZitNGGDQZ19OuRJ dFSwcqrqEk4+r8yrJ3hkyWHO8dqCCcuXrG6WKq+1jGfzk+ip0JmXuRi+KqwtC6MaJbYU ml4A== X-Gm-Message-State: AOUpUlEciYpp5R+9nnaJw9JbPUcxl9Homtq2iXDmOfTq5b47CnY007vO j7MjyHE2RtogXigEdyfF38oNaxVM X-Google-Smtp-Source: AAOMgpeQXbk4Y5hfuEw3zqylI+w/U0O1WM9dObUbj03XHm8SdthxLmWOXHsEC+YQ8wuDVRfX43hqFQ== X-Received: by 2002:a50:9286:: with SMTP id k6-v6mr11239231eda.66.1533393330831; Sat, 04 Aug 2018 07:35:30 -0700 (PDT) Received: from localhost.localdomain ([109.252.90.13]) by smtp.gmail.com with ESMTPSA id y20-v6sm589379edq.55.2018.08.04.07.35.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 Aug 2018 07:35:30 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Robin Murphy , Thierry Reding , Jonathan Hunter Cc: iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/8] iommu/tegra: gart: Clean up drivers module code Date: Sat, 4 Aug 2018 17:29:58 +0300 Message-Id: <20180804143003.15817-4-digetx@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180804143003.15817-1-digetx@gmail.com> References: <20180804143003.15817-1-digetx@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org GART driver is built-in, hence it can't be unloaded and the module removal code is never used. This patch merely removes the dead code and makes GART driver explicitly built-in by dropping the drivers bind/unbind sysfs attributes. Lastly disallow to defer drivers probing, since it's a core driver and actually nothing should cause the deferred probe. Signed-off-by: Dmitry Osipenko --- drivers/iommu/tegra-gart.c | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index f8b653e25914..141ff0c79ee4 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -502,20 +502,6 @@ static int tegra_gart_probe(struct platform_device *pdev) return 0; } -static int tegra_gart_remove(struct platform_device *pdev) -{ - struct gart_device *gart = platform_get_drvdata(pdev); - - iommu_device_unregister(&gart->iommu); - iommu_device_sysfs_remove(&gart->iommu); - - writel(0, gart->regs + GART_CONFIG); - if (gart->savedata) - vfree(gart->savedata); - gart_handle = NULL; - return 0; -} - static const struct dev_pm_ops tegra_gart_pm_ops = { .suspend = tegra_gart_suspend, .resume = tegra_gart_resume, @@ -529,26 +515,21 @@ MODULE_DEVICE_TABLE(of, tegra_gart_of_match); static struct platform_driver tegra_gart_driver = { .probe = tegra_gart_probe, - .remove = tegra_gart_remove, .driver = { .name = "tegra-gart", .pm = &tegra_gart_pm_ops, .of_match_table = tegra_gart_of_match, + .suppress_bind_attrs = true, }, + .prevent_deferred_probe = true, }; -static int tegra_gart_init(void) +static int __init tegra_gart_init(void) { return platform_driver_register(&tegra_gart_driver); } - -static void __exit tegra_gart_exit(void) -{ - platform_driver_unregister(&tegra_gart_driver); -} - subsys_initcall(tegra_gart_init); -module_exit(tegra_gart_exit); + module_param(gart_debug, bool, 0644); MODULE_PARM_DESC(gart_debug, "Enable GART debugging"); From patchwork Sat Aug 4 14:29:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 953461 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="n7IMG2Gl"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41jRLG11fwz9sXZ for ; Sun, 5 Aug 2018 00:36:22 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729740AbeHDQg1 (ORCPT ); Sat, 4 Aug 2018 12:36:27 -0400 Received: from mail-ed1-f67.google.com ([209.85.208.67]:42459 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726983AbeHDQg0 (ORCPT ); Sat, 4 Aug 2018 12:36:26 -0400 Received: by mail-ed1-f67.google.com with SMTP id r4-v6so3124893edp.9; Sat, 04 Aug 2018 07:35:32 -0700 (PDT) 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; bh=xZFsKMHTLK8T8j2VEidYOcCIWo9hvsagpaz6nhB75A8=; b=n7IMG2GlBNuCInKdLg/T/6dq7Lp46kkJY7Dc6fc8yeboNIL88gL3B+F5W4ziwUuSlp DFlxH4eKc0O76uPnmCtYacL9LfoH/sQ6ytV+/cUwlIH/qTO+ZFHnw3KAGw4Xjia0RLXx wPBBysIueBMrhTZNRjegmbh+PoBWdMWlgLG0GNuxCvSn8B1IrzXfsd+rBzzrNSkCd1pJ h7YQXlW2DBE5SD3HqLf2KTK7VfGfepjSOr/SmsrWn/esEX9bA626Uypjq2o9yZM/6qsf ol7kBccHce0r1QM3ZlZoE5rusk8Df9oNFvc1+fGuVUoe3a6vZm3w/hVYdlxTNwX5dF50 OHzg== 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; bh=xZFsKMHTLK8T8j2VEidYOcCIWo9hvsagpaz6nhB75A8=; b=ZKdm2chJqPHeicI1J9/1cIKmtXGS9sMLhP/OfgwnmSdfmvihCnrPfreP/cmuM+TP5S cjg+gRvqWXhypIVd8En4sLQ8A8tLC/KDmwZfAZ6fT/qRXdMatht/1PGzDQ/w+R8e7qDX gHbNRZDCtmB1XnqGwhnJW2hdv8SHaS5mflyV0OeIKY8biQ7ACy8tZ9yr+4DIuZJyoSJe U7oUCTFCnkLZDslzWVm6ctIKXL3MjKtucozEp7CBkiApq6t1TgTQc2awCI6Ab07ONQWO zTuwj+E6V/nChKhC8zghRzlelJruBWGjNkW54S9L90Lxvx2U5s37VLYsjPWbVoV/I7vm ncXw== X-Gm-Message-State: AOUpUlEeeDtT3BbG/9R81sufm216X7Sta/1Wri5Yx7XZi+VppLESF+H3 Q6qsRrZWbdKjBpPxWc4uLeI= X-Google-Smtp-Source: AAOMgpeUOp1hfnKR8IKzfKfmAyGVYo3eEBRGHk3l3hATzgc6QB4Df5d+X+4mcKZqj2pfENfRS8KwOw== X-Received: by 2002:a50:940b:: with SMTP id p11-v6mr11290699eda.107.1533393331929; Sat, 04 Aug 2018 07:35:31 -0700 (PDT) Received: from localhost.localdomain ([109.252.90.13]) by smtp.gmail.com with ESMTPSA id y20-v6sm589379edq.55.2018.08.04.07.35.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 Aug 2018 07:35:31 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Robin Murphy , Thierry Reding , Jonathan Hunter Cc: iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/8] iommu/tegra: gart: Remove pr_fmt and clean up includes Date: Sat, 4 Aug 2018 17:29:59 +0300 Message-Id: <20180804143003.15817-5-digetx@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180804143003.15817-1-digetx@gmail.com> References: <20180804143003.15817-1-digetx@gmail.com> 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 --- 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 141ff0c79ee4..9a427cb35340 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -17,24 +17,17 @@ * 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 Sat Aug 4 14:30:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 953460 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NlieawVc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41jRLD1Skrz9sXY for ; Sun, 5 Aug 2018 00:36:20 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726983AbeHDQg2 (ORCPT ); Sat, 4 Aug 2018 12:36:28 -0400 Received: from mail-ed1-f65.google.com ([209.85.208.65]:42459 "EHLO mail-ed1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729724AbeHDQg2 (ORCPT ); Sat, 4 Aug 2018 12:36:28 -0400 Received: by mail-ed1-f65.google.com with SMTP id r4-v6so3124909edp.9; Sat, 04 Aug 2018 07:35:33 -0700 (PDT) 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; bh=qOQ2ykxdzgVaEjxf8lF/JmSRzKKzX8E1UBCHBgHjsjU=; b=NlieawVc4gAxP7oAxofIgt4Gc4TT8szcaTyTuwQeUFmr7C+I87P0ioYMBhkpPg3AUu F+8K5Xz2BsIm7TbOMDIgisrKD4Ze/eTnjr4EQoD90sIq9GRIJGC4nxZKuh1/rgKx1IK7 hJhvEb609Ii5r1rXPqYkEYsmyB6xoynDmUK/7EAU7nhB7McBfL5aZFjjz+keB1Jo74ut RrE3asLYdT/1uzpE7F5/xzTe3sFom/+MF26Iu0XAl+yn6BZC3sKtFl9hluaAfr1uYPRl q1Pd48i7W1G9na+UD85gstm3/+ZsXmZX2cLi0S9WKUu2FUETcvj5XOETaEIoiflu0pWa npSA== 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; bh=qOQ2ykxdzgVaEjxf8lF/JmSRzKKzX8E1UBCHBgHjsjU=; b=Ew+3mHtwOSvocTEF7ynwiOOWVvL7iame66DWmyGhbZuEH2/q6CGHqsE/dPVcY2Ky8B wHQIxETCpQnaFq0v1iEuwE0YDyME7Z9u5CjrXBKGto64SwPPktdjggj0gjmoRpysl/Y5 FXr2Ald7T1GSlKWk7EJeZR7A4+2gmf8xWEzw0i7klTtuqEd08yiQ4DY/rC81bj3OUavI j9Pn0RmKY01pp/qDsbsft2hrKLr6Zx+soCzw7qFGAF6P60ZlU8uq59HBKn7OqskKFcLh jku3079mHxJjbkMgCqLUujAElLO82KgPIpZ33ZcXp2ITHO6uCjcKQ6TK+k6RlfqqwOs/ Gxgw== X-Gm-Message-State: AOUpUlHKTtQuGxhfFkGc+UTzE6aQmGB58GUaX3aIGsBBc1DVM7boIcTB GEaBgd6FpggmFqLm3hfgC44= X-Google-Smtp-Source: AAOMgpdJ2tNHjEPEBOv3/UnxN0X7ig1RUZIOKWJZZeFo1i+Tw9OpXoROuazqLNO1lmbF20bOjBWNIw== X-Received: by 2002:a50:82c7:: with SMTP id 65-v6mr11161574edg.114.1533393333034; Sat, 04 Aug 2018 07:35:33 -0700 (PDT) Received: from localhost.localdomain ([109.252.90.13]) by smtp.gmail.com with ESMTPSA id y20-v6sm589379edq.55.2018.08.04.07.35.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 Aug 2018 07:35:32 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Robin Murphy , Thierry Reding , Jonathan Hunter Cc: iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 5/8] iommu/tegra: gart: Clean up driver probe errors handling Date: Sat, 4 Aug 2018 17:30:00 +0300 Message-Id: <20180804143003.15817-6-digetx@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180804143003.15817-1-digetx@gmail.com> References: <20180804143003.15817-1-digetx@gmail.com> 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 --- 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 9a427cb35340..def570bc88c4 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -429,9 +429,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 */ @@ -466,8 +463,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; @@ -483,7 +479,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); @@ -493,6 +490,13 @@ static int tegra_gart_probe(struct platform_device *pdev) tegra_mc_register_gart(&gart->mc_gart_handle); 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 Sat Aug 4 14:30:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 953457 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="aWonSiQv"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41jRKR3MpXz9sXd for ; Sun, 5 Aug 2018 00:35:39 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730039AbeHDQg3 (ORCPT ); Sat, 4 Aug 2018 12:36:29 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:40335 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729746AbeHDQg2 (ORCPT ); Sat, 4 Aug 2018 12:36:28 -0400 Received: by mail-ed1-f66.google.com with SMTP id e19-v6so3127577edq.7; Sat, 04 Aug 2018 07:35:34 -0700 (PDT) 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; bh=x6P3Wv19cLOAsi405hdR7itID5XxZbj2n6vytLRGHTk=; b=aWonSiQvLhtfOb0lYdoKYrJcAlkdNgCLyNYD8xJP/MqeBF6ebhsYaMEqJoiPNsrArH qSbbKgK59xzGbJz5iiq4ZZR0u2BHjVxFswc8DfZv5fxt7TliKIU3fU1XSrI1+ey/GzA0 lCsSz5wB7F2hfkplloXaUDOQt2C/4E3j5YAIybhBEti54HqxPyxy0R/MIQP2yxfQ0SWN Pu7CMJxoGMi3QilW8hO4WS8HsNZKo8Li6dXrkFfGrQ0IbrydkeltVxTb1m46Js5H7Bck 0emTrVfVh21UpOWYyL3uaQmTBmm3RzYBbCTuVLmzka6/ZK3CI6Zw7BV+3WqaDURsennX Sn/A== 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; bh=x6P3Wv19cLOAsi405hdR7itID5XxZbj2n6vytLRGHTk=; b=qAf7zpTpyc+NdwWD70KWUJmVommYVWiIVTUuMf+e/DJB/dMFDa8508UbXWm2RRQ9Og psZrlCnq+CXqGHRJeHt6ShFe/FdNqVitVzfEPpkJv0NENe6Zohfv6YtYI7sJA81veQu/ M2JErOs6eE7ceq3Pm29+Qm4EahvX0LMOVILTdqRkvtnz5ABNV0tJLesZKz2YjTTx6xc2 nyGXgjrw9aBkBXXNhkaWGqwJH1mz8yQok8GZw/92doZ/dpZsIwokumebYyUAzvgBwxJj rNNE4w+B68BmCHHuW3kjqWDpySRjRRUCFmKlrPa/Bh0FWs8S0ucCiwcgcHKQMiXAK0Np D/tQ== X-Gm-Message-State: AOUpUlFNQYX7B3mgiDFbne/Y4dGnsOKDfSeLWJOii86LUoX5tYKUzU/H O8M28k8NmpbPi4vT8kmXCz8= X-Google-Smtp-Source: AAOMgpcpWhcEp6FSTIzMmHYcctG4oG63Mtbxt8m5Q7GQYfBAh60YWHUdyTHbUiqoN58AntlZIYtQ7w== X-Received: by 2002:a50:f4d2:: with SMTP id v18-v6mr11531885edm.162.1533393334153; Sat, 04 Aug 2018 07:35:34 -0700 (PDT) Received: from localhost.localdomain ([109.252.90.13]) by smtp.gmail.com with ESMTPSA id y20-v6sm589379edq.55.2018.08.04.07.35.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 Aug 2018 07:35:33 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Robin Murphy , Thierry Reding , Jonathan Hunter Cc: iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 6/8] iommu/tegra: gart: Ignore devices without IOMMU phandle in DT Date: Sat, 4 Aug 2018 17:30:01 +0300 Message-Id: <20180804143003.15817-7-digetx@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180804143003.15817-1-digetx@gmail.com> References: <20180804143003.15817-1-digetx@gmail.com> 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 --- 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 def570bc88c4..bcdb8973a0ad 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -348,8 +348,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); @@ -366,6 +370,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, @@ -380,6 +390,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) @@ -459,6 +470,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 Sat Aug 4 14:30:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 953458 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="F7zyT8u+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41jRKS6sbNz9sXf for ; Sun, 5 Aug 2018 00:35:40 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730055AbeHDQgb (ORCPT ); Sat, 4 Aug 2018 12:36:31 -0400 Received: from mail-ed1-f67.google.com ([209.85.208.67]:33913 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729802AbeHDQga (ORCPT ); Sat, 4 Aug 2018 12:36:30 -0400 Received: by mail-ed1-f67.google.com with SMTP id h1-v6so3146863eds.1; Sat, 04 Aug 2018 07:35:35 -0700 (PDT) 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; bh=6CcvGzir+Pc3Rkt408mXoZUbFXaWdaiMloQs3Ib+E+Y=; b=F7zyT8u++JrS/+sUbBjeNvWFGzu1jdedwtBN8YgrLKpYPGuzy46GuYDfTCeJD3yj3g HI1YAijwxtkkTviRFv80RhjbmtXqGQZuWCzqrftRcN+TsC0ayycuX3ZpsL/Feb++qX9r 4W4CN3gSKKc+49lXz8jatY1CAFJTQ1fFxTWbk0PgkK2dCExKOe8uZhrzpR1VAkc1FBk7 hqhdH1I2ncfWe+Mx38HrEp37my3bOA/aHE/pmkdPaWMDC1ks0Tvmj0LbQ1KTFSLzAkmQ CH1aqz2ajXoHlZT6nKolPiefvwRwDAMMXtEqPmsj11JjioyzHbjllZGJdgKm9pqKtPlr VjCA== 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; bh=6CcvGzir+Pc3Rkt408mXoZUbFXaWdaiMloQs3Ib+E+Y=; b=Q3BL2Us3do2xQkjKWmOVySQYvZR4MgKmgsREZQzi1AOLqJw3TRfenEGik6l+kxPtRo HOC7fTaoOuu8NFmbQPmDkDdMS1P+G9lGPP1hM1/AgYAhUrDD4Z0y6v5yPtEdle5UE/72 IEQ26JQlYYTIU2wLjXlYFDkevD8CMkJ6aWQ9M/38MqzhXMpSMX2f3ePm8xQrZPZiMBYX 6HDMcyRnY+quALhs0uxA0KdFzAgbTwVbgg545QBxP4L240OvxXc/crRNeBTFrIHswcTP 6Pq8re8oEAJubv+xiBSx72CKW4Ptiq1RUZdD0EusCyucSEBDH3QRWeRI2ErIl7ZHlvMa APHg== X-Gm-Message-State: AOUpUlFgjRmTyCC3YsvgJpFoeFjqWAXp6wkTObrM0Hwx19R51D7ny7+1 aL+1FINXE4rwzVez8wqhrQOgKLCN X-Google-Smtp-Source: AAOMgpd3dV1/KAC7ys1Vsee+clKBhjfdN7BvT9BbwxSI6x6NDG4dWV9riP/tNOvGA2nXYYK8z+gl6A== X-Received: by 2002:a50:81c6:: with SMTP id 64-v6mr11413868ede.89.1533393335301; Sat, 04 Aug 2018 07:35:35 -0700 (PDT) Received: from localhost.localdomain ([109.252.90.13]) by smtp.gmail.com with ESMTPSA id y20-v6sm589379edq.55.2018.08.04.07.35.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 Aug 2018 07:35:34 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Robin Murphy , Thierry Reding , Jonathan Hunter Cc: iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 7/8] iommu: Introduce iotlb_sync_map callback Date: Sat, 4 Aug 2018 17:30:02 +0300 Message-Id: <20180804143003.15817-8-digetx@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180804143003.15817-1-digetx@gmail.com> References: <20180804143003.15817-1-digetx@gmail.com> 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 --- 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 f3698006cb53..056282f23b10 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -1545,13 +1545,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; @@ -1580,7 +1581,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; @@ -1589,6 +1590,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 7447b0b0579a..7ed115526fb5 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -206,6 +206,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 Sat Aug 4 14:30:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 953459 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="srRVqRKb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41jRKY3mRgz9sXd for ; Sun, 5 Aug 2018 00:35:45 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730531AbeHDQgh (ORCPT ); Sat, 4 Aug 2018 12:36:37 -0400 Received: from mail-ed1-f68.google.com ([209.85.208.68]:46856 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729746AbeHDQgb (ORCPT ); Sat, 4 Aug 2018 12:36:31 -0400 Received: by mail-ed1-f68.google.com with SMTP id o8-v6so3122565edt.13; Sat, 04 Aug 2018 07:35:36 -0700 (PDT) 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; bh=p9f7+bTeEOkg8XRkqOUBiqJ6fPDcBxOcvvzdDkZq8Do=; b=srRVqRKbAkDrGIZoJvuddzJx8bu1hI0XQT8IF0NtokTh9xH00yPoVj6OCRWwmjwYLm QeCenNR4pr+nF/d03IaeSnCInr94CCWEG77xVnQR29TS5aaccvyjEK30DuXGNl2MJP1o +o5pxx1Tea1h8KlpgXLn0rJBvgVcxf0/Y807nQTgOWdeTiXTOsVMFdGuNN6rkvEaLBHb cTHdvNEJwVYC8cneWhTzWa3IeRXkMORiQu5dLU86IQCilz0uPBe5NfectDKZsEU/93nv 02Z/43EyuDY/WV348wtAOiXngvBZit5nQPeFE4Tki4/DOLvrhOBayljKquC+nCuQdLlR 1fpg== 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; bh=p9f7+bTeEOkg8XRkqOUBiqJ6fPDcBxOcvvzdDkZq8Do=; b=UQZHGqNuHVBpGywZ1Cb2I9zMWoRb0WuMeTdZtUxsw9GlXS82XH7NvlDJVgP1LPQ0ju 1dOsfRRRhrZ0mYZehRRfx6SMcfNlz+I54KDYRL3LyQB5kYC8ZE0LkWoXktz70Zb32plQ /K3KJvoqmJjvOYHLIP+IZxBKx3b0H61Mbo8MWbQ3cP4pD1HutTiUEm2y6DUa6h04Ejw2 P1PejLeZwfMRwkbjeZitt5GKr+SNA1BG+xdWsOQyS3UL0o4kTZEzmXfIbnjsaK3bXFR4 xUzSWbTMwtnSX+H59XZXoGkzWdL0qojXVv9H+73gncHzAt7LYeqOce1dm5LSw6PhXe6z BWPA== X-Gm-Message-State: AOUpUlF/9bAD7ZNxNOEfw8cE7smoggOxxhQXt0ajqkS+B1pWyUcNWErX LOAZSKvD7DFApMMjM7EbzMc= X-Google-Smtp-Source: AAOMgpdGptUu68mmzJ5qEf31Wyp77mp2KHwWGBCjtTWkMGMDRFlSEaSCglYmCGEwtsz8SV8CkVuGDw== X-Received: by 2002:a50:97fc:: with SMTP id f57-v6mr10932317edb.21.1533393336407; Sat, 04 Aug 2018 07:35:36 -0700 (PDT) Received: from localhost.localdomain ([109.252.90.13]) by smtp.gmail.com with ESMTPSA id y20-v6sm589379edq.55.2018.08.04.07.35.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 Aug 2018 07:35:35 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Robin Murphy , Thierry Reding , Jonathan Hunter Cc: iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 8/8] iommu/tegra: gart: Optimize mapping / unmapping performance Date: Sat, 4 Aug 2018 17:30:03 +0300 Message-Id: <20180804143003.15817-9-digetx@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180804143003.15817-1-digetx@gmail.com> References: <20180804143003.15817-1-digetx@gmail.com> 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 --- 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 bcdb8973a0ad..5e3fd32fce4a 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -293,7 +293,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; } @@ -310,7 +309,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; } @@ -376,6 +374,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, @@ -391,6 +397,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)