On Fri, May 21, 2021 at 06:39:24PM +0200, Rafael J. Wysocki wrote: > > diff --git a/drivers/acpi/viot.c b/drivers/acpi/viot.c > > new file mode 100644 > > index 000000000000..710e5a5eac70 > > --- /dev/null > > +++ b/drivers/acpi/viot.c > > @@ -0,0 +1,350 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > +/* > > + * Virtual I/O topology > > In the first place, more information on what this is all about, please. > > What it does and how it is used. Sure, I can add: * * The Virtual I/O Translation Table (VIOT) describes the topology of * para-virtual IOMMUs and the endpoints they manage. The OS uses it to * initialize devices in the right order, preventing endpoints from * issuing DMA before their IOMMU is ready. * * When binding a driver to a device, before calling the device driver's * probe() method, the driver infrastructure calls dma_configure(). At * that point the VIOT driver looks for an IOMMU associated to the device * in the VIOT table. If an IOMMU exists and has been initialized, the * VIOT driver initializes the device's IOMMU fwspec, allowing the DMA * infrastructure to invoke the IOMMU ops when the device driver * configures DMA mappings. If an IOMMU exists and hasn't yet been * initialized, VIOT returns -EPROBE_DEFER to postpone probing the device * until the IOMMU is available. */ Thanks, Jean