Skip to content

Commit ba79ff1

Browse files
committed
gpu: host1x: Do not assume that a NULL domain means no DMA IOMMU
JIRA: https://issues.redhat.com/browse/RHEL-116573 Upstream Status: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git commit cb83f4b Author: Jason Gunthorpe <jgg@ziepe.ca> Date: Tue Feb 4 15:18:19 2025 -0400 gpu: host1x: Do not assume that a NULL domain means no DMA IOMMU Previously with tegra-smmu, even with CONFIG_IOMMU_DMA, the default domain could have been left as NULL. The NULL domain is specially recognized by host1x_iommu_attach() as meaning it is not the DMA domain and should be replaced with the special shared domain. This happened prior to the below commit because tegra-smmu was using the NULL domain to mean IDENTITY. Now that the domain is properly labled the test in DRM doesn't see NULL. Check for IDENTITY as well to enable the special domains. This is the same issue and basic fix as seen in commit fae6e66 ("drm/tegra: Do not assume that a NULL domain means no DMA IOMMU"). Fixes: c8cc265 ("iommu/tegra-smmu: Implement an IDENTITY domain") Reported-by: Diogo Ivo <diogo.ivo@tecnico.ulisboa.pt> Closes: https://lore.kernel.org/all/c6a6f114-3acd-4d56-a13b-b88978e927dc@tecnico.ulisboa.pt/ Tested-by: Diogo Ivo <diogo.ivo@tecnico.ulisboa.pt> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com> Link: https://patchwork.freedesktop.org/patch/msgid/0-v1-10dcc8ce3869+3a7-host1x_identity_jgg@nvidia.com Signed-off-by: Eder Zulian <ezulian@redhat.com>
1 parent 6721a4d commit ba79ff1

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

drivers/gpu/host1x/dev.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,10 @@ static bool host1x_wants_iommu(struct host1x *host1x)
367367
return true;
368368
}
369369

370+
/*
371+
* Returns ERR_PTR on failure, NULL if the translation is IDENTITY, otherwise a
372+
* valid paging domain.
373+
*/
370374
static struct iommu_domain *host1x_iommu_attach(struct host1x *host)
371375
{
372376
struct iommu_domain *domain = iommu_get_domain_for_dev(host->dev);
@@ -391,6 +395,8 @@ static struct iommu_domain *host1x_iommu_attach(struct host1x *host)
391395
* Similarly, if host1x is already attached to an IOMMU (via the DMA
392396
* API), don't try to attach again.
393397
*/
398+
if (domain && domain->type == IOMMU_DOMAIN_IDENTITY)
399+
domain = NULL;
394400
if (!host1x_wants_iommu(host) || domain)
395401
return domain;
396402

0 commit comments

Comments
 (0)