// SPDX-License-Identifier: GPL-2.0 /* * Dynamic DMA mapping support. */ #include #include #include #include #include #include #include #include #include #include #include int no_iommu __read_mostly; #ifdef CONFIG_IOMMU_DEBUG int force_iommu __read_mostly = 1; #else int force_iommu __read_mostly; #endif int iommu_pass_through; static int __init pci_iommu_init(void) { if (iommu_detected) intel_iommu_init(); return 0; } /* Must execute after PCI subsystem */ fs_initcall(pci_iommu_init); void __init pci_iommu_alloc(void) { /* * The order of these functions is important for * fall-back/fail-over reasons */ detect_intel_iommu(); #ifdef CONFIG_SWIOTLB if (!iommu_detected) { #ifdef CONFIG_IA64_GENERIC printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n"); machvec_init("dig"); swiotlb_dma_init(); #else panic("Unable to find Intel IOMMU"); #endif /* CONFIG_IA64_GENERIC */ } #endif /* CONFIG_SWIOTLB */ }