From patchwork Tue May 8 18:16:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 910414 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="urUUIySA"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40gSTv2f5qz9s2t for ; Wed, 9 May 2018 04:20:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933356AbeEHSRc (ORCPT ); Tue, 8 May 2018 14:17:32 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:33359 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933187AbeEHSRa (ORCPT ); Tue, 8 May 2018 14:17:30 -0400 Received: by mail-lf0-f66.google.com with SMTP id m18-v6so47249504lfb.0; Tue, 08 May 2018 11:17: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=H/acQP6qNWyukNgnTgBq9HQUWxqY4IeFePI4UrqtOHk=; b=urUUIySAzcaanyImBLQod0VvcKtpUtEcsTthimE20jF62grq6h+WfJwatyF+wJFJnB /NeKhgXJENRj9hazP8ax64b5dz16P5lKmBdbphTgIto60lErOjrPRT5F93m+8edvE/pl g0KNBnBrYQAacDg2xKQr/GqSzbhIFbf5O1IuYEVbOOAymXHy2ZdkyoIdD+hNJfT7MtIv tyYqbW1RubPg9Leo0cXJYvkNL+7IlKDnmaOOOVT7Jh9zVm7D3IACGoTFbqqGrE1zznFZ jAj6/pYd3swannjzbKZn5/VVyK5rzpVjsy6nFPUY3Pz7BRfyP82NYY22cg4sxAS+ns/N I6qA== 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=H/acQP6qNWyukNgnTgBq9HQUWxqY4IeFePI4UrqtOHk=; b=DsVnYHoY+OlRCMk0AUDQJ9KbPab2nwS8f8kyecZDAVeMr6MOkLqIa90WewldrwRS19 bChLbClndHPXPPFP5PNQwZBS3+2wtTyU+a3pETXdeXYwKF8qjL7tG7FLYamYZ2KwSChv cE2hc/v1pfedKXTKJS1A4MxiJubdE6OX0cr6IFVGpUo6b/sU+qTRco2CqpB3P9H++Rls 1/dN3PCAaZYGxX5usyqs7MVpfwa8O0iwlbF/p5BBiLHUdJ4bUGHpPiIOA2hairmnXUgj p9xN13aNNy6FVxrErRjDF/fc74NSVQwmwsT29nwJTe97HTStc5BxiNgh00rA/OMgxV8O AGzg== X-Gm-Message-State: ALQs6tCuwaYcM1+FxzWXY/mpGqJmROEEkDbFEzBJtGRPFQ/lRygnMcW7 g+zii0yMCKFZ/0f2abnh468= X-Google-Smtp-Source: AB8JxZpmdJPCgutJ+lN0mC0RvhTB/DBEXM0n/F7Tt8bSM6NC14Jr1FyrLneBG7CNBC4/p6bozXv9fg== X-Received: by 2002:a19:d91c:: with SMTP id q28-v6mr26079490lfg.143.1525803447910; Tue, 08 May 2018 11:17:27 -0700 (PDT) Received: from localhost.localdomain ([109.252.91.130]) by smtp.gmail.com with ESMTPSA id f64-v6sm2338699lfg.63.2018.05.08.11.17.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:17:27 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 1/9] memory: tegra: Provide facility for integration with the GART driver Date: Tue, 8 May 2018 21:16:52 +0300 Message-Id: <20180508181700.5169-2-digetx@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508181700.5169-1-digetx@gmail.com> References: <20180508181700.5169-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 page fault, MC driver needs 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 c81d01caf1a8..49dd7ad1459f 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 (READ_ONCE(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 Tue May 8 18:16:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 910410 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="oLAD2viU"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40gSTB2DqPz9s2t for ; Wed, 9 May 2018 04:20:14 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933525AbeEHSRe (ORCPT ); Tue, 8 May 2018 14:17:34 -0400 Received: from mail-lf0-f67.google.com ([209.85.215.67]:46400 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933316AbeEHSRa (ORCPT ); Tue, 8 May 2018 14:17:30 -0400 Received: by mail-lf0-f67.google.com with SMTP id x7-v6so12236798lff.13; Tue, 08 May 2018 11:17: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=a9VoTFpmBk6IgF3vMoEgi93Q0uSL0puhubajVJ4jFLM=; b=oLAD2viUtCV2TKoovhUtQqeeUD1nKzWCeqpV+Ac4Cc9hnD2kbI0XBHKoeFSrp3Z4bz 3VS70UbSd6IQG6swshZArahYnw7oya2HYCVef8zr/BrYuSmJ5eoRoYkMixVFFfu+RuxO W/YJ5VbZgQ7vATfjMhuYe7BzTqR4GJOg0tYZb+eZMnaCCfz12gZmOiQ3WSyqd3FDiNeW XQ7+dOPhpMgvTY7hSjK0oTMr1vUzsZcTg7/UNEfwDkY9o771shMC+I5VpTcLs9lOfptt 5lr14WGGg6ojwOHtXwOzqgkbn2rk1N7ytnaQZmY3Po9VMW53oguUaumzE7a/3Y9YfLVW D63w== 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=a9VoTFpmBk6IgF3vMoEgi93Q0uSL0puhubajVJ4jFLM=; b=cRQhcR4ISTdQ4SG2ppDJMqTZRhdfGp2qk4RIfKiBV3ZFGYWo2nPwqGkIXVw9Svc1/k gmWlvAzbTnFZwCt2/qWd1ANz4jvxKpsFkCGfRFOlPCFWqHW8g0fD4+i8c5OHSFCbQVhu mlpQ6mjcsaWZc+XTb5gNLpA5+Fhd8s4uGhfmQ6huVlIQ/hlpJOtWlI37dxahN3oCu8OK PWeC/Mk+XV5XSoMRW18NyWjU3EoSPn0XvjnPj6EuklWqoQ6/ACMjGLe9D22R2ZOj5Zj3 QzgSrYdvKN8YAt/g+65Mt+G68ZxUqsAWCntJiz/Mf6qESCi0bc7991sDBbK8nYpYbubG j5Fg== X-Gm-Message-State: ALKqPwdTnjirEILtpdyo2Hb8kgC6RwUAAChhoqyzdnOPG4OGhdNXy/Pt p5KnaVGi+342zBoAIP29tc0= X-Google-Smtp-Source: AB8JxZrs286w4Y/66mAhIDIdnDmg3qkism56JPnH1Pta5ViY42yVPNd5NxslKzhJFtSQ4xATo7hvuw== X-Received: by 2002:a19:c749:: with SMTP id x70-v6mr6923983lff.32.1525803448992; Tue, 08 May 2018 11:17:28 -0700 (PDT) Received: from localhost.localdomain ([109.252.91.130]) by smtp.gmail.com with ESMTPSA id f64-v6sm2338699lfg.63.2018.05.08.11.17.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:17:28 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 2/9] iommu/tegra: gart: Provide access to Memory Controller driver Date: Tue, 8 May 2018 21:16:53 +0300 Message-Id: <20180508181700.5169-3-digetx@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508181700.5169-1-digetx@gmail.com> References: <20180508181700.5169-1-digetx@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org GART contains 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 89ec24c6952c..de48943bf843 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(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(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(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 Tue May 8 18:16:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 910405 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="lBAdUl0I"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40gSQ90Rf3z9s2t for ; Wed, 9 May 2018 04:17:37 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933527AbeEHSRf (ORCPT ); Tue, 8 May 2018 14:17:35 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:38919 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932400AbeEHSRb (ORCPT ); Tue, 8 May 2018 14:17:31 -0400 Received: by mail-lf0-f66.google.com with SMTP id j193-v6so47245174lfg.6; Tue, 08 May 2018 11:17: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=CuXKvkTvxfWssav2UxKleQd7jcyt7QSbc+v9dCm1ZXY=; b=lBAdUl0Izw2tRpzHht1B2t8rysORD0mPLLJ8pPxhdpYmmKG9mAT6ormp9fAfH3MFwH yuwBeVvhE1jju5WPp5eRIS1a5ftN9T78CaqGFZvzXKNlC6Mgu6eLTRTF0AVndy4xNtPB +qVqN9pRn3wJ6VM2acjPvxuKWqBqs9FqRUQmPUKR6O2CXEK7Y5FOC5X4/aoD/U7aWH3b QzOnM2H5L4VsQxMD01P8EzewCPvdnIswBYrrBRU9EZeSSiqEmCQyqseTlgRXmjZg1/iI 57SyZtpa8GrESoOqpM7Max9xsGX22iBnGeOPMt7BHGV8M33vRZOjRpgQxdphV1HfQb1T PZRQ== 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=CuXKvkTvxfWssav2UxKleQd7jcyt7QSbc+v9dCm1ZXY=; b=HO7mgmWXJn24HnoNgfVbNSy3rEtQ60Jyc4a/qX5JWNLaUCUe5nuEWQE8uuepnOxJqV 5WcAx1SI2yMnoVkL8apiATZOR2vjTwBONpSZ2FmsZuvSbDJ8v+NO8trdGYVXbf9SsR/j 9Y3HswBxvocpM3g32fCVeFP9DLoxSMB3BD4F6OO+OJBBNI1H2H99+ot39aSi6HviUq6C mpCdJgPepMIO2HkOhKjq3YwD4RD7wKZNFsc2wYV9Xs7NrcjMzNt1CVDEMtYcW1RZLYZs +4ROPN+sqQecwrI22f1M1Z61uAOaHQo15Mji095esUonoDcn8tXaO/VJi19S6lkDBJal N+wA== X-Gm-Message-State: ALQs6tDT1K8Y8cZpj/6xXi/vC/0OrMyPBSSPB24UcpwC7tsIgD6qCjqd Go1FtZy5tJTlrwmGcSdwyDQ= X-Google-Smtp-Source: AB8JxZq3sj5Dd0wRPpIUnmYtnbVpfYJJ6lgKWT+Qb574Z5e9rHzw6E3q599QCO9T7Gupx5c14dH3qw== X-Received: by 2002:a2e:760a:: with SMTP id r10-v6mr28078326ljc.144.1525803450007; Tue, 08 May 2018 11:17:30 -0700 (PDT) Received: from localhost.localdomain ([109.252.91.130]) by smtp.gmail.com with ESMTPSA id f64-v6sm2338699lfg.63.2018.05.08.11.17.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:17:29 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 3/9] iommu/tegra: gart: Remove code related to module unloading Date: Tue, 8 May 2018 21:16:54 +0300 Message-Id: <20180508181700.5169-4-digetx@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508181700.5169-1-digetx@gmail.com> References: <20180508181700.5169-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. This patch merely removes the dead code. Signed-off-by: Dmitry Osipenko --- drivers/iommu/tegra-gart.c | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index de48943bf843..268d29fb9097 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) { 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 Tue May 8 18:16:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 910413 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="ECPocfhx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40gSTt0YdJz9s2t for ; Wed, 9 May 2018 04:20:50 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933277AbeEHSUh (ORCPT ); Tue, 8 May 2018 14:20:37 -0400 Received: from mail-lf0-f67.google.com ([209.85.215.67]:33368 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932467AbeEHSRc (ORCPT ); Tue, 8 May 2018 14:17:32 -0400 Received: by mail-lf0-f67.google.com with SMTP id m18-v6so47249736lfb.0; Tue, 08 May 2018 11:17: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=juveWnXHz/5oZyEWAeCuYp29ACYxUriZNwq1H/uGSvE=; b=ECPocfhxuKfnxo6FITcqrDWWZRTMF+HhkvZHXO3PitZlDINRRDhnw+iFATzOur4guf qsG1cvbxGqz019W36o1X6agIPEpcVB9iiFLzgi9kE+B/tkz+MVf4zxkORq0kQkS8A6Ey RyevZ0Bg+b3DgXhUYhBZn864e1uWC+b37Wszp1WHZK1apB6xjyZ0oGsb6+mWt3uF0kz4 BbIdcRP0ZBhX6/m07ccCGCsxdX8RO3q/z0dArGkXpXMAEGAxeGLkiozTBk79UXDRnVPB YoupLQ7Blk0SnCeJiZfRB5W6YeoYIXYpUt/O7rmvNBdvWx+HqykK1tI/C18l+bVQjmFp 9cQQ== 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=juveWnXHz/5oZyEWAeCuYp29ACYxUriZNwq1H/uGSvE=; b=pvoKjvK/yQlYgEAgTpJ509cm+IQdrz+19PcODafGJlaoMgjVDfHGdaHT/BnNetdzsA 8i/tdHMeF+im2v4zymHveNlnPZUmxyCfA4L1crHsT/smrDJXq05F6wPrjeZZLkWeLmtJ eNcmtUokorbBwhDO/V5R5iys5ndi1hoeQ3e1PV3uzGqdp3wuiAYDuvrVpnqQXfPIAsOH +sDPtrDLLMRkT5mcZB2pl5oupQyNIEWHpou+SeIOobBF/j1CXZhsXI09+/QLCxEm9V+B qQ+2J+3lWizk0sXNApH2vfXcEy/fgJCTPQopaGTPXkv7yyVFnVgfGbolvGOHSBIvYBLl aoxQ== X-Gm-Message-State: ALQs6tDMBzFoEPS8vG9BAxikihVKqZu9q0E8qH+7d/1r5klhMK20VLfj 9T/IS32hpsxH+N0+XmSVyTY= X-Google-Smtp-Source: AB8JxZoQ0YkSv5JQCVin0+o8iaonKsAlVdGcKPzxZRn2iZm/1LgdIGqRliWcY9RPvgdvk2wppCowYw== X-Received: by 2002:a2e:4152:: with SMTP id o79-v6mr15359987lja.3.1525803450887; Tue, 08 May 2018 11:17:30 -0700 (PDT) Received: from localhost.localdomain ([109.252.91.130]) by smtp.gmail.com with ESMTPSA id f64-v6sm2338699lfg.63.2018.05.08.11.17.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:17:30 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 4/9] iommu/tegra: gart: Remove pr_fmt and clean up includes Date: Tue, 8 May 2018 21:16:55 +0300 Message-Id: <20180508181700.5169-5-digetx@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508181700.5169-1-digetx@gmail.com> References: <20180508181700.5169-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 'includes' and sort them in alphabet order. Also remove pr_fmt since there is no pr_xxx() and it doesn't affect dev_xxx(). 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 268d29fb9097..08e0de4087d1 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 Tue May 8 18:16: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: 910411 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="ER2pTYay"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40gSTF507Cz9s2t for ; Wed, 9 May 2018 04:20:17 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933187AbeEHSUQ (ORCPT ); Tue, 8 May 2018 14:20:16 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:43054 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933359AbeEHSRd (ORCPT ); Tue, 8 May 2018 14:17:33 -0400 Received: by mail-lf0-f68.google.com with SMTP id g12-v6so47229966lfb.10; Tue, 08 May 2018 11:17: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=3Hm/I+dzWCo5KfoZUOh394ZxadE522yb6J45/Cu4jXM=; b=ER2pTYay9HfcAdxl5ZaDXq4uBheG4rLNjQIlNfRIx4pcYPymm7HJz2kVXurooWFzdu DsjUVUL5XeSGtn3o74nhID12IL/GwJSSTuQfgglQDsQXsNLanDgS7+hV+NFCeaM9gQhv mh+kWUtnhMSELLOqfXe0+XBVO29D5M87MNlf+qe3GZDqOY7JiWlMwiMi0bFV071BDL5y GziLiWki9viG5GgjyqkMiPRN+qYC90g6z+swK8BnLXXtMZikiNuaXO+eTARps4NGNuak 9sB2i2Q3liCJ8zjrLEXw91D79QqCrs4BidvScmx6CgcjHgYSqsMadoGi4GiHpKZFTqKt fbKw== 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=3Hm/I+dzWCo5KfoZUOh394ZxadE522yb6J45/Cu4jXM=; b=ZgWyHe1VInFsQVX6B06ASDmB5czPgDpSaVTvC1lWIttPKW2BrUylu7/xe8l3esPqj9 oHYHFRbfHpKiWgT+XgfMY4ENvxsTlHhdGdg9WB8NBdIj5em9ktaemvcXSWVlF6icPUdw 9PG1CvXEn9r35Q8P+JAedXv2xzMMmShRxdTa9gKyFDHDsjs4CL9mgmpIlWzMsNwEhW+X 3F/Ehm3r6sJ5Ji51ZxHhHAzawtUABtAS2BbkpQB2hsq9ztodV5C38cML/hDYuv0JIDnr w+/JWnSFD3spP1OPbM7u6y37AGNzLrmjUVF68weW1fdN1z/jyOUc6DUZx1DbK76nJTwL ABkQ== X-Gm-Message-State: ALQs6tCD8DxsEYc+tABNMJXNxGKHDHLsH9PJnjpMfqukAuYbwlXQolKD M0n5L0FDIAdUht0FOS4nyZw= X-Google-Smtp-Source: AB8JxZq5XzLDhdiCdfJOkYpMyiIEXowRnfEarHx6iUI4OkJE54nwVEmg4E0LYNeCFwtKvPFU3x+MAA== X-Received: by 2002:a2e:934f:: with SMTP id m15-v6mr13700187ljh.39.1525803451825; Tue, 08 May 2018 11:17:31 -0700 (PDT) Received: from localhost.localdomain ([109.252.91.130]) by smtp.gmail.com with ESMTPSA id f64-v6sm2338699lfg.63.2018.05.08.11.17.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:17:31 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 5/9] iommu/tegra: gart: Clean up driver probe failure unwinding Date: Tue, 8 May 2018 21:16:56 +0300 Message-Id: <20180508181700.5169-6-digetx@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508181700.5169-1-digetx@gmail.com> References: <20180508181700.5169-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 driver probe failure. Signed-off-by: Dmitry Osipenko --- drivers/iommu/tegra-gart.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 08e0de4087d1..39305224c48d 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -466,8 +466,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 +482,8 @@ static int tegra_gart_probe(struct platform_device *pdev) gart->savedata = vmalloc(sizeof(u32) * gart->page_count); if (!gart->savedata) { dev_err(dev, "failed to allocate context save area\n"); - return -ENOMEM; + ret = -ENOMEM; + goto iommu_unregister; } platform_set_drvdata(pdev, gart); @@ -493,6 +493,13 @@ static int tegra_gart_probe(struct platform_device *pdev) tegra_mc_register_gart(&gart->mc_gart_handle); return 0; + +iommu_unregister: + 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 Tue May 8 18:16: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: 910408 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="CkRhURyx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40gSSj68Mfz9s2t for ; Wed, 9 May 2018 04:19:49 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933544AbeEHSRg (ORCPT ); Tue, 8 May 2018 14:17:36 -0400 Received: from mail-lf0-f65.google.com ([209.85.215.65]:42953 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933518AbeEHSRe (ORCPT ); Tue, 8 May 2018 14:17:34 -0400 Received: by mail-lf0-f65.google.com with SMTP id u21-v6so47236461lfu.9; Tue, 08 May 2018 11:17: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=2LIKQgRRt4dU0sPirULsiUtA3g04It+c8bGzanpLPzw=; b=CkRhURyxPabzMreajqqqB6+PAaABIt0rWNvbbsks64n7ovjFF6kAgo7wB7ohKvItYD x2PxJGsi3bbxkmiDiTT2mLnuUAVe0AsMyWYrqPGfQDC3COQD9u5zD9dp+EhUzjgrolXg miIhrihczvhcFunQsOF7KFfl8XD06A+rpEWLdafTl1x7JZiZWsb+ckad1dqnglGphath 6P6ieRw7T2HBJcQnUSmX8Ztcpz0hkGetZlXkpnQJ+J20i96lBTLdqx9PmGntC4rY7z7X ES5ByhK376ca8h8gIfwuv0HJxzv8P2mbdECE47p+RBh2OXbFGIA+ODOHV/Q6zVw34ZwL 7YfA== 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=2LIKQgRRt4dU0sPirULsiUtA3g04It+c8bGzanpLPzw=; b=eK5g31NzySZ8uQgd1nw/Ne6FttJD35u2Eh31kcsrkHx5fJ4zs/mLQNVJM8Q3Sfy8Le pcM1EcwLVPjYZLh5FGwzgaxsHg/dda5b8kbrR3xCZj9KJSeivntvUz6S0Sw79sCyunbf ++GA8U1LomZrrAfkBGtoKu1irAM0EWxQqLIcnnR18LTkQrrtkj/nqn1rAMmEonzuxE83 ZX8mXPCDXnRGx8CKGO5Yhue9dx/JVS99nN6HOrzl6ML3JhXpJg6wUXxY1xR/3wDoebDV kuddkpcez+r4rfAtV2qzlzx2CZkKJPE4iuGQSUQ+lzjvBQiQ+7X05peOlhm3UZ6ZkQZo pOyA== X-Gm-Message-State: ALQs6tDwLfpgZo2W/7zQZwPZ7JNNje9aP9Em/T+g0bkHxdg/qCIHEyw2 JXzZy7OHvqF+7x7VWZQAj/Z9iISD X-Google-Smtp-Source: AB8JxZqU0EbI2fWAnGKH1ORKXC01/KwgSq3lG4OlLFQbr3UpzGNeaPKN3WkRI1YbvS6GJ/k85DOSEQ== X-Received: by 2002:a2e:85d4:: with SMTP id h20-v6mr26282896ljj.82.1525803452856; Tue, 08 May 2018 11:17:32 -0700 (PDT) Received: from localhost.localdomain ([109.252.91.130]) by smtp.gmail.com with ESMTPSA id f64-v6sm2338699lfg.63.2018.05.08.11.17.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:17:32 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 6/9] iommu/tegra: gart: Ignore devices without IOMMU phandle in DT Date: Tue, 8 May 2018 21:16:57 +0300 Message-Id: <20180508181700.5169-7-digetx@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508181700.5169-1-digetx@gmail.com> References: <20180508181700.5169-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, ignore devices that aren't related to GART. Device tree must explicitly assign GART IOMMU to the devices. Signed-off-by: Dmitry Osipenko --- drivers/iommu/tegra-gart.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 39305224c48d..5b2d27620350 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -366,6 +366,26 @@ static void gart_iommu_remove_device(struct device *dev) iommu_device_unlink(&gart_handle->iommu, dev); } +static int gart_iommu_check_device(struct gart_device *gart, + struct device *dev); + +struct iommu_group *gart_iommu_device_group(struct device *dev) +{ + int err; + + err = gart_iommu_check_device(gart_handle, dev); + if (err) + return ERR_PTR(err); + + return generic_device_group(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, @@ -374,14 +394,24 @@ static const struct iommu_ops gart_iommu_ops = { .detach_dev = gart_iommu_detach_dev, .add_device = gart_iommu_add_device, .remove_device = gart_iommu_remove_device, - .device_group = generic_device_group, + .device_group = gart_iommu_device_group, .map = gart_iommu_map, .map_sg = default_iommu_map_sg, .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 gart_iommu_check_device(struct gart_device *gart, + struct device *dev) +{ + if (!dev->iommu_fwspec || dev->iommu_fwspec->ops != &gart_iommu_ops) + return -ENODEV; + + return 0; +} + static int tegra_gart_suspend(struct device *dev) { struct gart_device *gart = dev_get_drvdata(dev); @@ -462,6 +492,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 Tue May 8 18:16: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: 910409 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="Ewe/5Tut"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40gST15379z9s2t for ; Wed, 9 May 2018 04:20:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755845AbeEHSTw (ORCPT ); Tue, 8 May 2018 14:19:52 -0400 Received: from mail-lf0-f67.google.com ([209.85.215.67]:41871 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933187AbeEHSRf (ORCPT ); Tue, 8 May 2018 14:17:35 -0400 Received: by mail-lf0-f67.google.com with SMTP id o123-v6so47224806lfe.8; Tue, 08 May 2018 11:17: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=CXm8o+/9th4zdaMFtWmOrS/Euw3pyh/LZtMwDKlONX4=; b=Ewe/5TutVt3IQJG+CUOxXYvcgjVxfa650ilSGaVL3dO+Te9OUA5vUl/mSxW7cWuf4d kijmtWZbjpy5Hhnp38YjRlp4PUZT49g02WS/OPGrnpjo8W0baf/1ENxlC6PZivv1wtQw QlCJeF28f89GyyRQJ2sK95Kk3xjtim1BxZ9kjy7oynCGRds9htKW311PLiY7lD0x1DPp 13OZVC+KKp/1igIjXu4vEtyKNj1ii6mzteCWL3dKKgwtmI0mXR7snyhXtUQf+/SSp5LE sjGY/2/b7s2DNANukmfMxqGmhwvHv3FxVmIfcFIImNwuCqPkQFn+pPifDot8iXlP4UoJ qg0g== 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=CXm8o+/9th4zdaMFtWmOrS/Euw3pyh/LZtMwDKlONX4=; b=OINzsNeCJyQjxkI7fCAPJIRrVUU6adDCQjgbxcm30tN6uZs0IMt+0dxJGdBpUSCkgd 8gHiXx1XwyQTKFpxv/bhbIDWH4czTTXwl2nEd6Mxq4F1X0TPQMCmxU+q6CFlD7xzOyZs +dXMQs0Z+ZePGFnAJ/1HzyIZQu/mV5yM2Co5lQaXS2QcpRnRCAPcecs7MPDhh7Vm8XEo XevKhZnD8vhpO49oNsdsHyEi3XKBqUC63rN7GN2G3tFnuVyOTWkMD+S/Xs5v8eSJvgXX 3YlkiGszLrdVgO/Y6tQ6pZmNfeZGy1CK74CbOZrhFzT5em26Q6xvi5S/s/vWNdN+VV7d wHrw== X-Gm-Message-State: ALQs6tBbJ3u+nR9pvE/Id+gxCYr4ICnxFJA1FnKS+QeqaQugst3+9Huo p7TzsrQETo+IdFrCOg05qLQ= X-Google-Smtp-Source: AB8JxZrxFV1P9yz6p45rRphChV2+Tbzwx3Y1sVpbEHI/Zsn7zLN0SsP+Gb3ltM6G4jwXFyjB6EJ6Pw== X-Received: by 2002:a2e:9a06:: with SMTP id o6-v6mr19907164lji.17.1525803454019; Tue, 08 May 2018 11:17:34 -0700 (PDT) Received: from localhost.localdomain ([109.252.91.130]) by smtp.gmail.com with ESMTPSA id f64-v6sm2338699lfg.63.2018.05.08.11.17.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:17:33 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 7/9] iommu/tegra: gart: Provide single domain and group for all devices Date: Tue, 8 May 2018 21:16:58 +0300 Message-Id: <20180508181700.5169-8-digetx@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508181700.5169-1-digetx@gmail.com> References: <20180508181700.5169-1-digetx@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org GART aperture is shared by all devices, hence there is a single IOMMU domain and group shared by these devices. Allocation of a group per device only wastes resources and allowance of having more than one domain is simply wrong because IOMMU mappings made by the users of "different" domains will stomp on each other. Signed-off-by: Dmitry Osipenko --- drivers/iommu/tegra-gart.c | 107 +++++++++---------------------------- 1 file changed, 24 insertions(+), 83 deletions(-) diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 5b2d27620350..ebc105c201bd 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -19,7 +19,6 @@ #include #include -#include #include #include #include @@ -44,22 +43,17 @@ #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 */ struct device *dev; struct iommu_device iommu; /* IOMMU Core handle */ + struct iommu_group *group; /* Common IOMMU group */ + struct gart_domain *domain; /* Unique IOMMU domain */ struct tegra_mc_gart_handle mc_gart_handle; }; @@ -169,81 +163,31 @@ 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_domain->gart; - struct gart_client *client, *c; - int err = 0; - - client = devm_kzalloc(gart->dev, 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; - } - } - list_add(&client->list, &gart->client); - spin_unlock(&gart->client_lock); - dev_dbg(gart->dev, "Attached %s\n", dev_name(dev)); return 0; - -fail: - devm_kfree(gart->dev, client); - spin_unlock(&gart->client_lock); - return err; } 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; - } - } - dev_err(gart->dev, "Couldn't find\n"); -out: - spin_unlock(&gart->client_lock); } static struct iommu_domain *gart_iommu_domain_alloc(unsigned type) { - struct gart_domain *gart_domain; - struct gart_device *gart; - - if (type != IOMMU_DOMAIN_UNMANAGED) - return NULL; + struct gart_device *gart = gart_handle; - gart = gart_handle; - if (!gart) + if (type != IOMMU_DOMAIN_UNMANAGED || gart->domain) return NULL; - gart_domain = kzalloc(sizeof(*gart_domain), GFP_KERNEL); - 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->domain = kzalloc(sizeof(*gart->domain), GFP_KERNEL); + if (gart->domain) { + 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; - gart_domain->domain.geometry.force_aperture = true; + gart->domain->domain.geometry.force_aperture = true; + gart->domain->gart = gart; + } - return &gart_domain->domain; + return &gart->domain->domain; } static void gart_iommu_domain_free(struct iommu_domain *domain) @@ -251,18 +195,7 @@ 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; - - list_for_each_entry(c, &gart->client, list) - gart_iommu_detach_dev(domain, c->dev); - } - spin_unlock(&gart->client_lock); - } - - kfree(gart_domain); + kfree(gart->domain); } static int gart_iommu_map(struct iommu_domain *domain, unsigned long iova, @@ -377,7 +310,7 @@ struct iommu_group *gart_iommu_device_group(struct device *dev) if (err) return ERR_PTR(err); - return generic_device_group(dev); + return gart_handle->group; } static int gart_iommu_of_xlate(struct device *dev, @@ -502,8 +435,6 @@ static int tegra_gart_probe(struct platform_device *pdev) gart->dev = &pdev->dev; spin_lock_init(&gart->pte_lock); - spin_lock_init(&gart->client_lock); - INIT_LIST_HEAD(&gart->client); gart->regs = gart_regs; gart->iovmm_base = (dma_addr_t)res_remap->start; gart->page_count = (resource_size(res_remap) >> GART_PAGE_SHIFT); @@ -517,6 +448,14 @@ static int tegra_gart_probe(struct platform_device *pdev) goto iommu_unregister; } + gart->group = iommu_group_alloc(); + if (IS_ERR(gart->group)) { + ret = PTR_ERR(gart->group); + goto free_savedata; + } + + iommu_group_ref_get(gart->group); + platform_set_drvdata(pdev, gart); do_gart_setup(gart, NULL); @@ -525,6 +464,8 @@ static int tegra_gart_probe(struct platform_device *pdev) return 0; +free_savedata: + vfree(gart->savedata); iommu_unregister: iommu_device_unregister(&gart->iommu); remove_sysfs: From patchwork Tue May 8 18:16: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: 910407 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="MlwILbe0"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40gSSC6BGKz9s2t for ; Wed, 9 May 2018 04:19:23 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751723AbeEHSTW (ORCPT ); Tue, 8 May 2018 14:19:22 -0400 Received: from mail-lf0-f65.google.com ([209.85.215.65]:44258 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933537AbeEHSRg (ORCPT ); Tue, 8 May 2018 14:17:36 -0400 Received: by mail-lf0-f65.google.com with SMTP id h197-v6so47197622lfg.11; Tue, 08 May 2018 11:17: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=wAvrFMQXHYcT8NHG+wXBOWYBJhYOY7OpKAFVGL/miMQ=; b=MlwILbe0ihbV7B3xX7HSytI8MvVzbcZWoqE/FSMLeRJJcu9NtsBSk2XV5f1ITGCSO5 vokMPSuDzd8J1BRGg5tjL4HBA56wBx+iKru06ZLbjg7iDVzYA2IKZ/QvRhiF+oLTYtMu 5htNYS1lEXCldNJAGfLWQf/oA6u62+hPhk0uYzgghlq+2vetxkt4e9Ov4izGm3nXiKGZ SfAgOmEaxRynrvQKJReQc7Q19rLekvbvGA+6ImLrbpbtMc1HNINTe3hb834MfcxkN3Te wCPOwM7r6voptFmnYw8OQAoeuwZ9OXePGXqh0UquRtU2OeL+2J/MaIrUPXntMCOdtknR cMHw== 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=wAvrFMQXHYcT8NHG+wXBOWYBJhYOY7OpKAFVGL/miMQ=; b=PJihCpAFPIiCgCkiIkGm0M3iSTEPgizLXmKXzw1jeen6LmehU4thCNadfLXQkTWh1W vtUIjkpqoefd7Z6aqxlgbxeJ31jifY4KbMKkIeqvid30WEaQUo1BUZXTy8e/dZKOhz5L AVIQDc1DHJY4ovavBjXV8crlfUtSy1v9WmpRJTUORn//nCuSSmCApc6KzuZj2P3ayfRC 6JCWaa6orVAVlL/Wiw6pDvzyjTG22MbfP/EHv9oH0ti2I5OJYJiAvfhGJQeDXhZfmfwo ieimkqAeOp9td2v3+pMIMHOn29EjVeS7yhT4A++zY6LrtTd3McYQY7Nf+tvwbWInTeNn Wn9g== X-Gm-Message-State: ALKqPwe9UilpRjhO4agmvo1p0jgMiqaJBxRK7qoKUPLjCBPoo7ezwdbE aQ+a254NGM1c1wVpKnMzMdw= X-Google-Smtp-Source: AB8JxZrYGtoSzwh4pPkUpCS30sW5cgw8PlrTdwtbvcRSn554CRueaEuoR+DYm8frfVt9s4x5PEwOTw== X-Received: by 2002:a19:4310:: with SMTP id q16-v6mr330535lfa.74.1525803455003; Tue, 08 May 2018 11:17:35 -0700 (PDT) Received: from localhost.localdomain ([109.252.91.130]) by smtp.gmail.com with ESMTPSA id f64-v6sm2338699lfg.63.2018.05.08.11.17.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:17:34 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 8/9] iommu: Introduce iotlb_sync_map callback Date: Tue, 8 May 2018 21:16:59 +0300 Message-Id: <20180508181700.5169-9-digetx@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508181700.5169-1-digetx@gmail.com> References: <20180508181700.5169-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 on mapping of each contiguous chunk and sync only when 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 d2aa23202bb9..39b2ee66aa96 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -1508,13 +1508,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; @@ -1543,7 +1544,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; @@ -1552,6 +1553,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 19938ee6eb31..5224aa376377 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 Tue May 8 18:17: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: 910406 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="us0QuPCv"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40gSRt6xbNz9s2t for ; Wed, 9 May 2018 04:19:06 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933055AbeEHSSw (ORCPT ); Tue, 8 May 2018 14:18:52 -0400 Received: from mail-lf0-f67.google.com ([209.85.215.67]:45916 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932982AbeEHSRh (ORCPT ); Tue, 8 May 2018 14:17:37 -0400 Received: by mail-lf0-f67.google.com with SMTP id q2-v6so2048683lfc.12; Tue, 08 May 2018 11:17: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=ids4fn/p4BO1AI1GZ13Grmwh+c9zghxWorEEi0dAgQo=; b=us0QuPCvz23hTZg63ACo8TwjP1tRBeX1BOgUbPrjILAuUDXjtTZyYcxWk7N7utPLXY kaC7GqtxRyno4FBD96uB6yvsXdzgJmfN/X5lPDyqDs1p+7gqfN69NqEN2LrFSvZlyMkc oM+R/SGbzGUSNhhaSlVRumrRfEQUm2bx1Y3xv3/KuPlCh2WdaAw7XYiJ7jfX8ckfkA5b e7X4KCkSPE7yFJ0+Twn1DDx8QZ6tdCcLW9NylnnmZvpoobP6TMggyVJ15Vz+5p/DUFr+ /+RsoUtgevkRa9ioG+2zv6qlGjIIw64kkOQ9KUBB9bQ3a3FY9w8ilSOr40e4K2dhax9D 2j0Q== 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=ids4fn/p4BO1AI1GZ13Grmwh+c9zghxWorEEi0dAgQo=; b=hmIxzWCGkTKxJsr4AGbnV0VX08AVS+77VNv4N2EUHj6YRMNO8PQezU2PhoJfqXSse+ Ch9vMqY7X2KgYZv8+UHmsgLvNUjVZ7pCI8YUNjIj548l0GA7wZryBLD9qm1AaIIYr6fy VT75Y3LhySi0mVB00526/ToZbevFxahAIOXHUaoEtpT/NAeXEV2uoOz5QUxOSpJToSXs sWxpnV8qbz+vq+oYNJLIyUdXw6QR5bkSX+1+2VpQgnkmdLHbxqgDq7XHQB8VJR6IihW7 kvSOH5YTwTEWJysTdXYwIjZZL4GlUAAVB0RYdTJ1lzPmY0K2SqsprBqcgZyr6qfHPOoK d6Mw== X-Gm-Message-State: ALQs6tBoT6wKVwmM97LxH6/UgDaKaqtpXap0D9+t9xNRmN2scouraFfR H5UnNvhzkCO+ZCGBQmOyonI= X-Google-Smtp-Source: AB8JxZr88zmYhDwiWx6ECJk38A7wfGPOR/HUpvs4D/ZjMQuglL/M6AkV2imSfvb3P8OMMj8LmQN3Rw== X-Received: by 2002:a19:1142:: with SMTP id g63-v6mr9682425lfi.6.1525803455942; Tue, 08 May 2018 11:17:35 -0700 (PDT) Received: from localhost.localdomain ([109.252.91.130]) by smtp.gmail.com with ESMTPSA id f64-v6sm2338699lfg.63.2018.05.08.11.17.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 11:17:35 -0700 (PDT) From: Dmitry Osipenko To: Joerg Roedel , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 9/9] iommu/tegra: gart: Optimize mapping / unmapping performance Date: Tue, 8 May 2018 21:17:00 +0300 Message-Id: <20180508181700.5169-10-digetx@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508181700.5169-1-digetx@gmail.com> References: <20180508181700.5169-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% (depending on size of mapping) performance boost compared to a flushing after each 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 ebc105c201bd..26d8735d26e8 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -226,7 +226,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; } @@ -243,7 +242,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; } @@ -319,6 +317,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, @@ -334,6 +340,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 gart_iommu_check_device(struct gart_device *gart,