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

Commit bff6547b authored by Muli Ben-Yehuda's avatar Muli Ben-Yehuda Committed by Andi Kleen
Browse files

[PATCH] Calgary: allow compiling Calgary in but not using it by default



This patch makes it possible to compile Calgary in but not use it by
default. In this mode, use 'iommu=calgary' to activate it.

Signed-off-by: default avatarMuli Ben-Yehuda <muli@il.ibm.com>
Signed-off-by: default avatarJon Mason <jdmason@kudzu.us>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
parent eae93755
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -179,7 +179,7 @@ PCI
IOMMU

 iommu=[size][,noagp][,off][,force][,noforce][,leak][,memaper[=order]][,merge]
         [,forcesac][,fullflush][,nomerge][,noaperture]
         [,forcesac][,fullflush][,nomerge][,noaperture][,calgary]
   size  set size of iommu (in bytes)
   noagp don't initialize the AGP driver and use full aperture.
   off   don't use the IOMMU
@@ -200,6 +200,7 @@ IOMMU
	    buffering.
   nodac    Forbid DMA >4GB
   panic    Always panic when IOMMU overflows
   calgary  Use the Calgary IOMMU if it is available

  swiotlb=pages[,force]

+11 −0
Original line number Diff line number Diff line
@@ -455,6 +455,17 @@ config CALGARY_IOMMU
	  Normally the kernel will make the right choice by itself.
	  If unsure, say Y.

config CALGARY_IOMMU_ENABLED_BY_DEFAULT
	bool "Should Calgary be enabled by default?"
	default y
	depends on CALGARY_IOMMU
	help
	  Should Calgary be enabled by default? if you choose 'y', Calgary
	  will be used (if it exists). If you choose 'n', Calgary will not be
	  used even if it exists. If you choose 'n' and would like to use
	  Calgary anyway, pass 'iommu=calgary' on the kernel command line.
	  If unsure, say Y.

# need this always selected by IOMMU for the VIA workaround
config SWIOTLB
	bool
+9 −0
Original line number Diff line number Diff line
@@ -43,6 +43,12 @@
#include <asm/dma.h>
#include <asm/rio.h>

#ifdef CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT
int use_calgary __read_mostly = 1;
#else
int use_calgary __read_mostly = 0;
#endif /* CONFIG_CALGARY_DEFAULT_ENABLED */

#define PCI_DEVICE_ID_IBM_CALGARY 0x02a1
#define PCI_VENDOR_DEVICE_ID_CALGARY \
	(PCI_VENDOR_ID_IBM | PCI_DEVICE_ID_IBM_CALGARY << 16)
@@ -1061,6 +1067,9 @@ void __init detect_calgary(void)
	if (swiotlb || no_iommu || iommu_detected)
		return;

	if (!use_calgary)
		return;

	if (!early_pci_allowed())
		return;

+5 −0
Original line number Diff line number Diff line
@@ -296,6 +296,11 @@ __init int iommu_setup(char *p)
		gart_parse_options(p);
#endif

#ifdef CONFIG_CALGARY_IOMMU
		if (!strncmp(p, "calgary", 7))
			use_calgary = 1;
#endif /* CONFIG_CALGARY_IOMMU */

		p += strcspn(p, ",");
		if (*p == ',')
			++p;
+2 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ struct iommu_table {
#define TCE_TABLE_SIZE_4M		6
#define TCE_TABLE_SIZE_8M		7

extern int use_calgary;

#ifdef CONFIG_CALGARY_IOMMU
extern int calgary_iommu_init(void);
extern void detect_calgary(void);