ACPI: Add driver for the VIOT table
authorJean-Philippe Brucker <jean-philippe@linaro.org>
Fri, 18 Jun 2021 15:20:58 +0000 (17:20 +0200)
committerJoerg Roedel <jroedel@suse.de>
Fri, 25 Jun 2021 13:02:43 +0000 (15:02 +0200)
commit3cf485540e7b8550936ce3602edf2f58e4007304
tree0180e6f4e59823ea625fdbf064e6384dd67c1dba
parent11a8c5e3a94b12848f24d9c63b5c175ce0b80729
ACPI: Add driver for the VIOT table

The ACPI Virtual I/O Translation Table describes topology of
para-virtual platforms, similarly to vendor tables DMAR, IVRS and IORT.
For now it describes the relation between virtio-iommu and the endpoints
it manages.

Three steps are needed to configure DMA of endpoints:

(1) acpi_viot_init(): parse the VIOT table, find or create the fwnode
    associated to each vIOMMU device. This needs to happen after
    acpi_scan_init(), because it relies on the struct device and their
    fwnode to be available.

(2) When probing the vIOMMU device, the driver registers its IOMMU ops
    within the IOMMU subsystem. This step doesn't require any
    intervention from the VIOT driver.

(3) viot_iommu_configure(): before binding the endpoint to a driver,
    find the associated IOMMU ops. Register them, along with the
    endpoint ID, into the device's iommu_fwspec.

If step (3) happens before step (2), it is deferred until the IOMMU is
initialized, then retried.

Tested-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Acked-by: Rafael J. Wysocki <rafael@kernel.org>
Link: https://lore.kernel.org/r/20210618152059.1194210-4-jean-philippe@linaro.org
Signed-off-by: Joerg Roedel <jroedel@suse.de>
MAINTAINERS
drivers/acpi/Kconfig
drivers/acpi/Makefile
drivers/acpi/bus.c
drivers/acpi/scan.c
drivers/acpi/viot.c [new file with mode: 0644]
drivers/iommu/Kconfig
include/linux/acpi_viot.h [new file with mode: 0644]