Re: [PATCH 0/3] Apple M1 DART IOMMU driver

From: Sven Peter
Date: Fri Mar 26 2021 - 13:07:25 EST




On Fri, Mar 26, 2021, at 17:38, Arnd Bergmann wrote:
> On Fri, Mar 26, 2021 at 5:10 PM Sven Peter <sven@xxxxxxxxxxxxx> wrote:
> > On Fri, Mar 26, 2021, at 16:59, Mark Kettenis wrote:
> > > Some of the DARTs provide a bypass facility. That code make using the
> > > standard "dma-ranges" property tricky. That property would need to
> > > contain the bypass address range. But that would mean that if the
> > > DART driver needs to look at that property to figure out the address
> > > range that supports translation it will need to be able to distinguish
> > > between the translatable address range and the bypass address range.
> >
> > Do we understand if and why we even need to bypass certain streams?
>
> My guess is that this is a performance optimization.

Makes sense.

>
> There are generally three reasons to want an iommu in the first place:
> - Pass a device down to a guest or user process without giving
> access to all of memory
> - Avoid problems with limitations in the device, typically when it
> only supports
> 32-bit bus addressing, but the installed memory is larger than 4GB
> - Protect kernel memory from broken drivers
>
> If you care about none of the above, but you do care about data transfer
> speed, you are better off just leaving the IOMMU in bypass mode.
> I don't think we have to support it if the IOMMU works reliably, but it's
> something that users might want.

Right now the IOMMU works very reliably while bypass mode seems to be tricky
at best. I think I partly know how to enable it but it looks like either not
every DART or DART/master combination even supports it or that there is
some additional configuration required to make it work reliably.

I had it working with the USB DART at one point but I needed to enable it in
all 16 streams of the IOMMU even though the pagetables only need to be setup
in one stream as indicated by the ADT.
I couldn't get it to work at all for the framebuffer IOMMU.

I think it's fine to skip it for now until it's either actually required due
to some hardware quirk or once we have users requesting support. Apple uses
almost all IOMMUs without bypass mode if that ADT is to be believed though.


Best,

Sven