Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d4f6b93 authored by Jon Mason's avatar Jon Mason Committed by Linus Torvalds
Browse files

[PATCH] x86_64: Calgary IOMMU - introduce iommu_detected



swiotlb relies on the gart specific iommu_aperture variable to know if
we discovered a hardware IOMMU before swiotlb initialization.  Introduce
iommu_detected to do the same thing, but in a HW IOMMU neutral manner,
in preparation for adding the Calgary HW IOMMU.

Signed-Off-By: default avatarMuli Ben-Yehuda <muli@il.ibm.com>
Signed-Off-By: default avatarJon Mason <jdmason@us.ibm.com>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 2bbc419f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -209,6 +209,7 @@ void __init iommu_hole_init(void)
		if (!early_is_k8_nb(read_pci_config(0, num, 3, 0x00)))
			continue;

		iommu_detected = 1;
		iommu_aperture = 1; 

		aper_order = (read_pci_config(0, num, 3, 0x90) >> 1) & 7; 
+3 −0
Original line number Diff line number Diff line
@@ -33,6 +33,9 @@ int panic_on_overflow __read_mostly = 0;
int force_iommu __read_mostly= 0;
#endif

/* Set this to 1 if there is a HW IOMMU in the system */
int iommu_detected __read_mostly = 0;

/* Dummy device used for NULL arguments (normally ISA). Better would
   be probably a smaller DMA mask, but this is bug-to-bug compatible
   to i386. */
+4 −0
Original line number Diff line number Diff line
@@ -597,6 +597,10 @@ static int __init pci_iommu_init(void)
	if (swiotlb)
		return -ENODEV;

	/* Did we detect a different HW IOMMU? */
	if (iommu_detected && !iommu_aperture)
		return -1;

	if (no_iommu ||
	    (!force_iommu && end_pfn <= MAX_DMA32_PFN) ||
	    !iommu_aperture ||
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ struct dma_mapping_ops swiotlb_dma_ops = {
void pci_swiotlb_init(void)
{
	/* don't initialize swiotlb if iommu=off (no_iommu=1) */
	if (!iommu_aperture && !no_iommu &&
	if (!iommu_detected && !no_iommu &&
	    (end_pfn > MAX_DMA32_PFN || force_iommu))
	       swiotlb = 1;
	if (swiotlb) {
+1 −0
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ extern int skip_ioapic_setup;
extern int acpi_ht;
extern int acpi_disabled;

extern int iommu_detected;
#ifdef CONFIG_IOMMU
extern int fallback_aper_order;
extern int fallback_aper_force;