When the IOMMU subsystem is disabled, we cannot build ARM64 kernels with ACPI:
drivers/acpi/arm64/iort.c: In function 'iort_iommu_xlate': drivers/acpi/arm64/iort.c:647:22: error: 'struct iommu_fwspec' has no member named 'ops' This adds a Kconfig dependency to only enable ACPI_IORT when it acutally builds, along with addititonal dummy helper functions to make its users build without IOMMU/IORT. Fixes: 3f010cf19732 ("irqchip/gicv3-its: Probe ITS in the ACPI way") Signed-off-by: Arnd Bergmann <a...@arndb.de> --- drivers/irqchip/Kconfig | 2 +- include/linux/acpi_iort.h | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig index 478f8ace2664..f0516740c03f 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -39,7 +39,7 @@ config ARM_GIC_V3_ITS bool depends on PCI depends on PCI_MSI - select ACPI_IORT if ACPI + select ACPI_IORT if ACPI && IOMMU config ARM_NVIC bool diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h index 3ff9acea8616..918906d189d3 100644 --- a/include/linux/acpi_iort.h +++ b/include/linux/acpi_iort.h @@ -26,10 +26,10 @@ #define IORT_IRQ_MASK(irq) (irq & 0xffffffffULL) #define IORT_IRQ_TRIGGER_MASK(irq) ((irq >> 32) & 0xffffffffULL) +#ifdef CONFIG_ACPI_IORT int iort_register_domain_token(int trans_id, struct fwnode_handle *fw_node); void iort_deregister_domain_token(int trans_id); struct fwnode_handle *iort_find_domain_token(int trans_id); -#ifdef CONFIG_ACPI_IORT void acpi_iort_init(void); bool iort_node_match(u8 type); u32 iort_msi_map_rid(struct device *dev, u32 req_id); @@ -40,6 +40,9 @@ int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id); void iort_set_dma_mask(struct device *dev); const struct iommu_ops *iort_iommu_configure(struct device *dev); #else +static inline int iort_register_domain_token(int trans_id, struct fwnode_handle *fw_node) { return -ENOSYS; } +static inline void iort_deregister_domain_token(int trans_id) {} +static inline struct fwnode_handle *iort_find_domain_token(int trans_id) { return NULL;} static inline void acpi_iort_init(void) { } static inline bool iort_node_match(u8 type) { return false; } static inline u32 iort_msi_map_rid(struct device *dev, u32 req_id) -- 2.9.0