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>
123 lines
3.5 KiB
Makefile
123 lines
3.5 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Makefile for the Linux ACPI interpreter
|
|
#
|
|
|
|
ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
|
|
|
|
#
|
|
# ACPI Boot-Time Table Parsing
|
|
#
|
|
obj-$(CONFIG_ACPI) += tables.o
|
|
obj-$(CONFIG_X86) += blacklist.o
|
|
|
|
#
|
|
# ACPI Core Subsystem (Interpreter)
|
|
#
|
|
obj-$(CONFIG_ACPI) += acpi.o \
|
|
acpica/
|
|
|
|
# All the builtin files are in the "acpi." module_param namespace.
|
|
acpi-y += osi.o osl.o utils.o reboot.o
|
|
acpi-y += nvs.o
|
|
|
|
# Power management related files
|
|
acpi-y += wakeup.o
|
|
acpi-$(CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT) += sleep.o
|
|
acpi-y += device_sysfs.o device_pm.o
|
|
acpi-$(CONFIG_ACPI_SLEEP) += proc.o
|
|
|
|
|
|
#
|
|
# ACPI Bus and Device Drivers
|
|
#
|
|
acpi-y += bus.o glue.o
|
|
acpi-y += scan.o
|
|
acpi-y += resource.o
|
|
acpi-y += acpi_processor.o
|
|
acpi-y += processor_core.o
|
|
acpi-$(CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC) += processor_pdc.o
|
|
acpi-y += ec.o
|
|
acpi-$(CONFIG_ACPI_DOCK) += dock.o
|
|
acpi-$(CONFIG_PCI) += pci_root.o pci_link.o pci_irq.o
|
|
obj-$(CONFIG_ACPI_MCFG) += pci_mcfg.o
|
|
acpi-$(CONFIG_PCI) += acpi_lpss.o
|
|
acpi-y += acpi_apd.o
|
|
acpi-y += acpi_platform.o
|
|
acpi-y += acpi_pnp.o
|
|
acpi-$(CONFIG_ARM_AMBA) += acpi_amba.o
|
|
acpi-y += power.o
|
|
acpi-y += event.o
|
|
acpi-y += evged.o
|
|
acpi-y += sysfs.o
|
|
acpi-y += property.o
|
|
acpi-$(CONFIG_X86) += acpi_cmos_rtc.o
|
|
acpi-$(CONFIG_X86) += x86/apple.o
|
|
acpi-$(CONFIG_X86) += x86/utils.o
|
|
acpi-$(CONFIG_X86) += x86/s2idle.o
|
|
acpi-$(CONFIG_DEBUG_FS) += debugfs.o
|
|
acpi-y += acpi_lpat.o
|
|
acpi-$(CONFIG_ACPI_FPDT) += acpi_fpdt.o
|
|
acpi-$(CONFIG_ACPI_LPIT) += acpi_lpit.o
|
|
acpi-$(CONFIG_ACPI_GENERIC_GSI) += irq.o
|
|
acpi-$(CONFIG_ACPI_WATCHDOG) += acpi_watchdog.o
|
|
|
|
# Address translation
|
|
acpi-$(CONFIG_ACPI_ADXL) += acpi_adxl.o
|
|
|
|
# These are (potentially) separate modules
|
|
|
|
# IPMI may be used by other drivers, so it has to initialise before them
|
|
obj-$(CONFIG_ACPI_IPMI) += acpi_ipmi.o
|
|
|
|
obj-$(CONFIG_ACPI_AC) += ac.o
|
|
obj-$(CONFIG_ACPI_BUTTON) += button.o
|
|
obj-$(CONFIG_ACPI_TINY_POWER_BUTTON) += tiny-power-button.o
|
|
obj-$(CONFIG_ACPI_FAN) += fan.o
|
|
obj-$(CONFIG_ACPI_VIDEO) += video.o
|
|
obj-$(CONFIG_ACPI_TAD) += acpi_tad.o
|
|
obj-$(CONFIG_ACPI_PCI_SLOT) += pci_slot.o
|
|
obj-$(CONFIG_ACPI_PROCESSOR) += processor.o
|
|
obj-$(CONFIG_ACPI) += container.o
|
|
obj-$(CONFIG_ACPI_THERMAL) += thermal.o
|
|
obj-$(CONFIG_ACPI_PLATFORM_PROFILE) += platform_profile.o
|
|
obj-$(CONFIG_ACPI_NFIT) += nfit/
|
|
obj-$(CONFIG_ACPI_NUMA) += numa/
|
|
obj-$(CONFIG_ACPI) += acpi_memhotplug.o
|
|
obj-$(CONFIG_ACPI_HOTPLUG_IOAPIC) += ioapic.o
|
|
obj-$(CONFIG_ACPI_BATTERY) += battery.o
|
|
obj-$(CONFIG_ACPI_SBS) += sbshc.o
|
|
obj-$(CONFIG_ACPI_SBS) += sbs.o
|
|
obj-$(CONFIG_ACPI_HED) += hed.o
|
|
obj-$(CONFIG_ACPI_EC_DEBUGFS) += ec_sys.o
|
|
obj-$(CONFIG_ACPI_CUSTOM_METHOD)+= custom_method.o
|
|
obj-$(CONFIG_ACPI_BGRT) += bgrt.o
|
|
obj-$(CONFIG_ACPI_CPPC_LIB) += cppc_acpi.o
|
|
obj-$(CONFIG_ACPI_SPCR_TABLE) += spcr.o
|
|
obj-$(CONFIG_ACPI_DEBUGGER_USER) += acpi_dbg.o
|
|
obj-$(CONFIG_ACPI_PPTT) += pptt.o
|
|
|
|
# processor has its own "processor." module_param namespace
|
|
processor-y := processor_driver.o
|
|
processor-$(CONFIG_ACPI_PROCESSOR_IDLE) += processor_idle.o
|
|
processor-$(CONFIG_ACPI_CPU_FREQ_PSS) += processor_throttling.o \
|
|
processor_thermal.o
|
|
processor-$(CONFIG_CPU_FREQ) += processor_perflib.o
|
|
|
|
obj-$(CONFIG_ACPI_PROCESSOR_AGGREGATOR) += acpi_pad.o
|
|
|
|
obj-$(CONFIG_ACPI_APEI) += apei/
|
|
|
|
obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o
|
|
|
|
obj-$(CONFIG_ACPI_CONFIGFS) += acpi_configfs.o
|
|
|
|
obj-y += pmic/
|
|
|
|
video-objs += acpi_video.o video_detect.o
|
|
obj-y += dptf/
|
|
|
|
obj-$(CONFIG_ARM64) += arm64/
|
|
|
|
obj-$(CONFIG_ACPI_VIOT) += viot.o
|