Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1050841imm; Fri, 27 Jul 2018 10:18:04 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdSsnEIhnljwO2S07e71ftYpA1slZhIJ5K7NmTjQ4JnxJujrJUV2GVpd5OdJvABS0gUmsKo X-Received: by 2002:a63:b43:: with SMTP id a3-v6mr6855698pgl.50.1532711884606; Fri, 27 Jul 2018 10:18:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532711884; cv=none; d=google.com; s=arc-20160816; b=mPsRefDmXZToMxpI6me+T1CE3a7xtrvzqJj1PObEykwNZUU623WW/pljtjJg7oe98/ g2GjwoFGoUfE2pIX0Zx41islaWLY8aQ+uOCey/4Y8VHzegJl93Dy018Aay4wAMNhPGfV 02p4XoZZsrY5iftdxzzbBm8RooTeAI4cZMi9592uCZoROilCcpGLsHNjg4/N6/r2kG6E JRHRsWPgiJxrYaP6WlQRT2VtxmbUIhIaleJLQhl5qYmS6X2qtyPA1w9Ns/ys048q9zfN +icJLV8D2LekkxjmmrA1SE7NFRRbVlGw4FQ5KXLlXZ1Bk6jfLt1T4HEHKAnD+7azh/5s UGyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=o1iOSRr+SAjUtcLrgNS4UsOOkUWfNVdneyfHciKZksA=; b=S2ihGQ+M9U+/GTCBzLpNwAfP1US2xydPl+BXSp25tNk4EKlaN0uHMbDmB67ituwgZx y7R0op4eoCl35U00PMXpq90Ou1xucBKEzkyO5ywtFZaUqSkO9PNS9Mo7KEg7oM/SUhya BKUP26ZHWV6ZOmszj/LNpz2nrJj3fqekvH5Gb1FPW0j7Vd019rF7E3qIqpbWOPtlJ7oz JiUnx0uf7BHYKbkX0STJi5Mgu8cS5tmTwXHsSgwhqPMhB6Eb3F4+EG1n+LkqJpKkf2qC CQQpXCEJzjv/hGFSc1M48PuGNGCXR/4+VjDntPrecnJiSPbiJIwOkPbUMgIl0Q2+FSj+ oZTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=VDofsL8D; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k11-v6si4242983pgi.328.2018.07.27.10.17.50; Fri, 27 Jul 2018 10:18:04 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=VDofsL8D; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388771AbeG0Sjq (ORCPT + 99 others); Fri, 27 Jul 2018 14:39:46 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:43240 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728713AbeG0Sjq (ORCPT ); Fri, 27 Jul 2018 14:39:46 -0400 Received: by mail-lj1-f196.google.com with SMTP id r13-v6so5049830ljg.10; Fri, 27 Jul 2018 10:16:55 -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 :mime-version:content-transfer-encoding; bh=o1iOSRr+SAjUtcLrgNS4UsOOkUWfNVdneyfHciKZksA=; b=VDofsL8DuRADOK9c6/+sha7pMHCDnkr63fTb884ooIxyKYHMD7zmhv59dFb1UjrBK7 Jmeu3JPvRlHtweYBtD9GOY6yYlCwR7KddtXfs1ua3ot8G3nBpzBetENDAItYSXYiQPiJ E3nCN15qmkHzetyZlXgj8ANOXxDJs93ioN35QQT5yc4K1ff42q0LmujwMGBVskG+c/FA 4TQ8yUCYfTQWJPIWzeYys3MoN5F5Qv6N/0M7yTbVgIZubLkpPYdXWmc5VpjfTS4KxuJx Vbg2+uTlNLCNYeFwWARg22ZgjPO+d0PwKEsQ4ApiFTYT6wQJWKrO8fSGSPxWbUXmG8/B KT1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=o1iOSRr+SAjUtcLrgNS4UsOOkUWfNVdneyfHciKZksA=; b=A64jKFlmUVATBLeMIiP6h+oU8mG1SRZZZK2vyHgUO29SWLfh9VoMTEHvAJU2KQLYAg Z0hFmte6iiqWg4no7n5Ukl0rKAHxZ9lCG7Jjvr7uHx1AAh0Qxm/PHAwHTmBWsLEMXxCg smYeCPO6ckTmD0dgreIEF1MVuBNnjd2M1HdO85RSWtCdDfhhgc+rqebRq+h6d0S8y8Aa g0yK6i/WF7cD3iWtem0NqL/OzPJDxkYk65X17mPBZV3PlrLLYX43PwS3DJtGfFVdDKcm nKohwlHDoYebxIqi3Qo5XxZ32ZP1NacvSYWDtHHk87KhFu5hO3DLxpz69TBEqqZjWVoL RM0g== X-Gm-Message-State: AOUpUlFm+AOwPRY35YdJI0Pnw9mA3YylOCAJl76u75qWpof9o7xi1SEQ lJptpS/T5pAocH6pZUZuJcY= X-Received: by 2002:a2e:9e17:: with SMTP id e23-v6mr5420331ljk.14.1532711815097; Fri, 27 Jul 2018 10:16:55 -0700 (PDT) Received: from dimapc.localnet ([109.252.90.13]) by smtp.gmail.com with ESMTPSA id 97-v6sm611550lfw.13.2018.07.27.10.16.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Jul 2018 10:16:54 -0700 (PDT) From: Dmitry Osipenko To: Jordan Crouse , Robin Murphy , Will Deacon , Joerg Roedel Cc: devicetree@vger.kernel.org, Mikko Perttunen , nouveau@lists.freedesktop.org, "Rafael J. Wysocki" , Nicolas Chauvet , Greg Kroah-Hartman , Russell King , dri-devel@lists.freedesktop.org, Jonathan Hunter , iommu@lists.linux-foundation.org, Rob Herring , Thierry Reding , Ben Skeggs , Catalin Marinas , linux-tegra@vger.kernel.org, Frank Rowand , linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH v1 0/6] Resolve unwanted DMA backing with IOMMU Date: Fri, 27 Jul 2018 20:16:53 +0300 Message-ID: <2402373.RyBdR7VSnO@dimapc> In-Reply-To: <20180727170326.GA21283@jcrouse-lnx.qualcomm.com> References: <20180726231624.21084-1-digetx@gmail.com> <20180727170326.GA21283@jcrouse-lnx.qualcomm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Friday, 27 July 2018 20:03:26 MSK Jordan Crouse wrote: > On Fri, Jul 27, 2018 at 05:02:37PM +0100, Robin Murphy wrote: > > On 27/07/18 15:10, Dmitry Osipenko wrote: > > >On Friday, 27 July 2018 12:03:28 MSK Will Deacon wrote: > > >>On Fri, Jul 27, 2018 at 10:25:13AM +0200, Joerg Roedel wrote: > > >>>On Fri, Jul 27, 2018 at 02:16:18AM +0300, Dmitry Osipenko wrote: > > >>>>The proposed solution adds a new option to the base device driver > > >>>>structure that allows device drivers to explicitly convey to the > > >>>>drivers > > >>>>core that the implicit IOMMU backing for devices must not happen. > > >>> > > >>>Why is IOMMU mapping a problem for the Tegra GPU driver? > > >>> > > >>>If we add something like this then it should not be the choice of the > > >>>device driver, but of the user and/or the firmware. > > >> > > >>Agreed, and it would still need somebody to configure an identity domain > > >>so > > >>that transactions aren't aborted immediately. We currently allow the > > >>identity domain to be used by default via a command-line option, so I > > >>guess > > >>we'd need a way for firmware to request that on a per-device basis. > > > > > >The IOMMU mapping itself is not a problem, the problem is the management > > >of > > >the IOMMU. For Tegra we don't want anything to intrude into the IOMMU > > >activities because: > > > > > >1) GPU HW require additional configuration for the IOMMU usage and dumb > > >mapping of the allocations simply doesn't work. > > > > Generally, that's already handled by the DRM drivers allocating > > their own unmanaged domains. The only problem we really need to > > solve in that regard is that currently the device DMA ops don't get > > updated when moving away from the managed domain. That's been OK for > > the VFIO case where the device is bound to a different driver which > > we know won't make any explicit DMA API calls, but for the more > > general case of IOMMU-aware drivers we could certainly do with a bit > > of cooperation between the IOMMU API, DMA API, and arch code to > > update the DMA ops dynamically to cope with intermediate subsystems > > making DMA API calls on behalf of devices they don't know the > > intimate details of. > > > > >2) Older Tegra generations have a limited resource and capabilities in > > >regards to IOMMU usage, allocating IOMMU domain per-device is just > > >impossible for example. > > > > > >3) HW performs context switches and so particular allocations have to be > > >assigned to a particular contexts IOMMU domain. > > > > I understand Qualcomm SoCs have a similar thing too, and AFAICS that > > case just doesn't fit into the current API model at all. We need the > > IOMMU driver to somehow know about the specific details of which > > devices have magic associations with specific contexts, and we > > almost certainly need a more expressive interface than > > iommu_domain_alloc() to have any hope of reliable results. > > This is correct for Qualcomm GPUs - The GPU hardware context switching > requires a specific context and there are some restrictions around > secure contexts as well. > > We don't really care if the DMA attaches to a context just as long as it > doesn't attach to the one(s) we care about. Perhaps a "valid context" mask > would work in from the DT or the device struct to give the subsystems a > clue as to which domains they were allowed to use. I recognize that there > isn't a one-size-fits-all solution to this problem so I'm open to different > ideas. Designating whether implicit IOMMU backing is appropriate for a device via device-tree property sounds a bit awkward because that will be a kinda software description (of a custom Linux driver model), while device-tree is supposed to describe HW. What about to grant IOMMU drivers with ability to decide whether the implicit backing for a device is appropriate? Like this: bool implicit_iommu_for_dma_is_allowed(struct device *dev) { const struct iommu_ops *ops = dev->bus->iommu_ops; struct iommu_group *group; group = iommu_group_get(dev); if (!group) return NULL; iommu_group_put(group); if (!ops->implicit_iommu_for_dma_is_allowed) return true; return ops->implicit_iommu_for_dma_is_allowed(dev); } Then arch_setup_dma_ops() could have a clue whether implicit IOMMU backing for a device is appropriate.