On Fri, Mar 26, 2021, at 20:59, Arnd Bergmann wrote: > On Fri, Mar 26, 2021 at 6:51 PM Sven Peter <sven@xxxxxxxxxxxxx> wrote: > > dart-sio: 0021c000 fbde4000 (at least their Secure Enclave/TPM co-processor) > > Same here: > dart-sio { > vm-base = <0x0>; > vm-size = <0xfc000000>; > pio-vm-base = <0xfd000000>; > pio-vm-size = <0x2000000>; > pio-granularity = <0x1000000>; > } > > There are clearly two distinct ranges that split up the 4GB space again, > with a small hole of 16MB (==pio-granularity) at the end of each range. > > The "pio" name might indicate that this is a range of addresses that > can be programmed to point at I/O registers in another device, rather > than pointing to RAM. > > Arnd > Very interesting observation! Mark and I have discussed this a little bit further on IRC. Mark also successfully used the PCIe DARTs with a DMA window outside of the one specified by vm-base/vm-size in the ADT. I believe that the (pio-)vm-base/size properties merely specify the ranges their allocator uses and do not describe actual hardware limitations. Mark also suggested that they might reserve memory at the beginning to find bugs similar to how one might not allow to map memory at 0x0. I have also done a few more experiments and figured out that if I put the IOMMU into bypass mode (which doesn't seem to work for all IOMMUs/master combinations which is why I'll leave it out of this series for now until I figure out more details) I *can* use the full address space. I think the limitation is therefore imposed by the translation hardware inside the IOMMU and not by the bus/the interconnect. If that's correct I think the right place to enforce this is to just limit the aperture inside the DART driver to a 32bit address space whenever address translation is enabled. Thanks, Sven