Skip to content

Commit

Permalink
[PATCH] Calgary: allow compiling Calgary in but not using it by default
Browse files Browse the repository at this point in the history
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: Muli Ben-Yehuda <muli@il.ibm.com>
Signed-off-by: Jon Mason <jdmason@kudzu.us>
Signed-off-by: Andi Kleen <ak@suse.de>
  • Loading branch information
Muli Ben-Yehuda authored and Andi Kleen committed Dec 7, 2006
1 parent eae9375 commit bff6547
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Documentation/x86_64/boot-options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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]

Expand Down
11 changes: 11 additions & 0 deletions arch/x86_64/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 9 additions & 0 deletions arch/x86_64/kernel/pci-calgary.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;

Expand Down
5 changes: 5 additions & 0 deletions arch/x86_64/kernel/pci-dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions include/asm-x86_64/calgary.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit bff6547

Please sign in to comment.