From: Mikko Perttunen <mperttunen@nvidia.com>
To: Marek Szyprowski <m.szyprowski@samsung.com>,
"Joerg Roedel (AMD)" <joro@8bytes.org>,
Will Deacon <will@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Heiko Stuebner <heiko@sntech.de>,
Thierry Reding <thierry.reding@kernel.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Jonathan Hunter <jonathanh@nvidia.com>,
Krishna Reddy <vdumpa@nvidia.com>,
Krzysztof Kozlowski <krzk@kernel.org>,
Jason Gunthorpe <jgg@ziepe.ca>,
linux-tegra@vger.kernel.org
Cc: Peter Griffin <peter.griffin@linaro.org>,
Alim Akhtar <alim.akhtar@samsung.com>,
Chen-Yu Tsai <wens@kernel.org>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Samuel Holland <samuel@sholland.org>,
Yong Wu <yong.wu@mediatek.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
Rob Clark <robin.clark@oss.qualcomm.com>,
Geert Uytterhoeven <geert+renesas@glider.be>,
iommu@lists.linux.dev, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org,
Robin Murphy <robin.murphy@arm.com>
Subject: Re: [PATCH v2 05/11] ARM: dma-mapping: Bypass the legacy path for core-owned DMA API domains
Date: Tue, 20 Oct 2026 13:01:03 +0900 [thread overview]
Message-ID: <DYOnECbaRLa5lkvxB4-bMQ@nvidia.com> (raw)
In-Reply-To: <5173dbaa-2a49-420d-bf4e-97c9cc340bd9@arm.com>
On Tuesday, October 20, 2026 1:55 AM Robin Murphy wrote:
> On 16/10/2026 7:46 am, Mikko Perttunen wrote:
> > ARM's arch_setup_dma_ops / arm_setup_iommu_dma_ops creates a custom
> > IOMMU domain for DMA API usage, and continues to do so when the IOMMU
> > driver doesn't explicitly request a DMA default domain type.
> >
> > When, however, that DMA default domain is requested and the core owns
> > the domain, we need to skip our own domain management. Add checks to
> > arm_setup/teardown_iommu_dma_ops for these cases. In such a case IOVAs
> > can be allocated from anywhere in the domain's geometry, so also add a
> > check to ensure the device's dma-ranges cover it. Presently, this is the
> > case for all platforms except some OMAP platforms with a non-zero
> > dma-ranges base.
>
> It's probably worth adding some cleverness to arm_iommu_detach_device()
> as well - it might work out benign to attempt to detach from a real
> core-owned default domain, but we'll now want to set dma_ops and
> to_dma_iommu_mapping according to the default domain itself (since we'll
> now have the possibility of switching between an explicit unmanaged
> dma_iommu_mapping and the implicit default one.)
I was thinking of just disallowing the explicit arm_iommu_* API for
devices that get a default domain and hoping that any device that opts
in to the "modern way" is capable of getting rid of the custom handling
:)
I'll add a check to arm_iommu_attach_device to disallow it if there's
a core owned domain unless you have other thoughts.
Thanks,
Mikko
>
> Thanks,
> Robin.
>
> > Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
> > ---
> > arch/arm/mm/dma-mapping.c | 25 ++++++++++++++++++++++++-
> > 1 file changed, 24 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
> > index f2d3e8ec3487..d6315baeddb9 100644
> > --- a/arch/arm/mm/dma-mapping.c
> > +++ b/arch/arm/mm/dma-mapping.c
> > @@ -1761,13 +1761,33 @@ EXPORT_SYMBOL_GPL(arm_iommu_detach_device);
> >
> > static void arm_setup_iommu_dma_ops(struct device *dev)
> > {
> > - struct dma_iommu_mapping *mapping;
> > + struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
> > u64 dma_base = 0, size = 1ULL << 32;
> >
> > if (dev->dma_range_map) {
> > dma_base = dma_range_map_min(dev->dma_range_map);
> > size = dma_range_map_max(dev->dma_range_map) - dma_base;
> > }
> > +
> > + /*
> > + * An existing cookie means the core owns the domain. Only set the
> > + * per-binding DMA ops. IOVAs are allocated from the whole aperture,
> > + * so the device's dma-ranges must cover it.
> > + */
> > + if (mapping) {
> > + const struct iommu_domain_geometry *geo =
> > + &mapping->domain->geometry;
> > +
> > + if (dma_base > geo->aperture_start ||
> > + dma_base + size < geo->aperture_end) {
> > + dev_err(dev, "dma-ranges do not cover the IOMMU aperture\n");
> > + return;
> > + }
> > +
> > + set_dma_ops(dev, &iommu_ops);
> > + return;
> > + }
> > +
> > mapping = arm_iommu_create_mapping(dev, dma_base, size);
> > if (IS_ERR(mapping)) {
> > pr_warn("Failed to create %llu-byte IOMMU mapping for device %s\n",
> > @@ -1792,6 +1812,9 @@ static void arm_teardown_iommu_dma_ops(struct device *dev)
> > if (!mapping)
> > return;
> >
> > + if (!mapping->owns_domain)
> > + return;
> > +
> > arm_iommu_detach_device(dev);
> > arm_iommu_release_mapping(mapping);
> > }
> >
>
>
next prev parent reply other threads:[~2026-10-20 4:01 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 6:46 [PATCH v2 00/11] Make the 32-bit ARM DMA API work with normal IOMMU DMA default domains (+ Tegra PoC) Mikko Perttunen
2026-10-16 6:46 ` [PATCH v2 01/11] iommu: Add iommu_teardown_dma_ops Mikko Perttunen
2026-10-16 6:46 ` [PATCH v2 02/11] iommu: Add cookie type for ARM_DMA_USE_IOMMU Mikko Perttunen
2026-10-16 6:46 ` [PATCH v2 03/11] ARM: dma-mapping: Split mapping allocation from domain allocation Mikko Perttunen
2026-10-16 6:46 ` [PATCH v2 04/11] ARM: dma-mapping: Implement and expose DMA setup functions Mikko Perttunen
2026-10-16 7:06 ` sashiko-bot
2026-10-16 6:46 ` [PATCH v2 05/11] ARM: dma-mapping: Bypass the legacy path for core-owned DMA API domains Mikko Perttunen
2026-10-16 7:01 ` sashiko-bot
2026-10-19 16:55 ` Robin Murphy
2026-10-20 4:01 ` Mikko Perttunen [this message]
2026-10-16 6:46 ` [PATCH v2 06/11] ARM: dma-mapping: Handle foreign buffers in arm_iommu_get_sgtable Mikko Perttunen
2026-10-16 7:04 ` sashiko-bot
2026-10-19 15:47 ` Robin Murphy
2026-10-20 3:55 ` Mikko Perttunen
2026-10-16 6:46 ` [PATCH v2 07/11] iommu: Let 32-bit ARM drivers opt into a DMA API default domain Mikko Perttunen
2026-10-20 11:28 ` Robin Murphy
2026-10-16 6:46 ` [PATCH v2 08/11] iommu/tegra-smmu: Defer display client translation to driver handover Mikko Perttunen
2026-10-16 7:01 ` sashiko-bot
2026-10-16 6:46 ` [PATCH v2 09/11] gpu: host1x: Drop release of legacy 32-bit ARM DMA domain Mikko Perttunen
2026-10-16 6:46 ` [PATCH v2 10/11] drm/tegra: " Mikko Perttunen
2026-10-16 6:46 ` [PATCH v2 11/11] iommu/tegra-smmu: Use a DMA API default domain per swgroup Mikko Perttunen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DYOnECbaRLa5lkvxB4-bMQ@nvidia.com \
--to=mperttunen@nvidia.com \
--cc=airlied@gmail.com \
--cc=alim.akhtar@samsung.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=geert+renesas@glider.be \
--cc=heiko@sntech.de \
--cc=iommu@lists.linux.dev \
--cc=jernej.skrabec@gmail.com \
--cc=jgg@ziepe.ca \
--cc=jonathanh@nvidia.com \
--cc=joro@8bytes.org \
--cc=krzk@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=m.szyprowski@samsung.com \
--cc=matthias.bgg@gmail.com \
--cc=peter.griffin@linaro.org \
--cc=robin.clark@oss.qualcomm.com \
--cc=robin.murphy@arm.com \
--cc=samuel@sholland.org \
--cc=simona@ffwll.ch \
--cc=thierry.reding@kernel.org \
--cc=vdumpa@nvidia.com \
--cc=wens@kernel.org \
--cc=will@kernel.org \
--cc=yong.wu@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.