On 2/4/25 4:13 AM, Jason Gunthorpe wrote:
On Mon, Feb 03, 2025 at 06:49:07PM +0000, Robin Murphy wrote:
I'd hope the historical reasons for not supporting IOMMU_DOMAIN_DMA in
tegra-smmu no longer apply, given that all the default domain stuff has now
been integrated into host1x for the newer arm-smmu based Tegras.
Indeed I do see appropriate looking calls to the normal DMA API, and
the other mapping path is conditionalized by !host->domain.
So, why didn't it work for Diogo? Even in identity mode the DMA API
will return correct DMA addresses and the !host->domain path will skip
mapping them.
Poking around I wonder if there is some assumption that if other parts
of the stack, maybe the DRM driver, are using the special domain than
everyone is? It seems to blindly pass around IOVA without really
checking who is consuming it.
I'm not sure where that would be, but it's certainly possible given that
this combination of code paths wouldn't have been tested.
Christian was telling me DMABUF had some drivers that made the
(incorrect!) assumption they were all sharing translation.
It does seem like a nice project for someone who has the hardware to
rip out all of this custom domain stuff and just have the iommu layer
setup a shared dma-iommu domain.
Jason
This has been a long-standing project. The issue is that some boot
chains set up the display expecting identity mappings, but if dma-iommu
domains were enabled, they would enable the IOMMU without mappings
before the display driver gets to run. Perhaps Thierry knows what the
missing pieces are.
See
https://lore.kernel.org/linux-iommu/20220512190052.1152377-5-thierry.reding@xxxxxxxxx/
Cheers,
Mikko