Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 30490
b: refs/heads/master
c: 0dc243a
h: refs/heads/master
v: v3
  • Loading branch information
Jon Mason authored and Linus Torvalds committed Jun 26, 2006
1 parent 7277637 commit 8c0b52f
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a3c042a0f022dade8e02bf6c9be5d2379d7e133c
refs/heads/master: 0dc243ae10c8309c170a3af9f1adad1924a9f217
29 changes: 29 additions & 0 deletions trunk/arch/x86_64/kernel/pci-dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,3 +279,32 @@ __init int iommu_setup(char *p)
}
return 1;
}
__setup("iommu=", iommu_setup);

void __init pci_iommu_alloc(void)
{
/*
* The order of these functions is important for
* fall-back/fail-over reasons
*/
#ifdef CONFIG_IOMMU
iommu_hole_init();
#endif

#ifdef CONFIG_SWIOTLB
pci_swiotlb_init();
#endif
}

static int __init pci_iommu_init(void)
{
#ifdef CONFIG_IOMMU
gart_iommu_init();
#endif

no_iommu_init();
return 0;
}

/* Must execute after PCI subsystem */
fs_initcall(pci_iommu_init);
13 changes: 6 additions & 7 deletions trunk/arch/x86_64/kernel/pci-gart.c
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ static struct dma_mapping_ops gart_dma_ops = {
.unmap_sg = gart_unmap_sg,
};

static int __init pci_iommu_init(void)
void __init gart_iommu_init(void)
{
struct agp_kern_info info;
unsigned long aper_size;
Expand All @@ -581,7 +581,7 @@ static int __init pci_iommu_init(void)

if (cache_k8_northbridges() < 0 || num_k8_northbridges == 0) {
printk(KERN_INFO "PCI-GART: No AMD northbridge found.\n");
return -ENODEV;
return;
}

#ifndef CONFIG_AGP_AMD64
Expand All @@ -595,11 +595,11 @@ static int __init pci_iommu_init(void)
#endif

if (swiotlb)
return -ENODEV;
return;

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

if (no_iommu ||
(!force_iommu && end_pfn <= MAX_DMA32_PFN) ||
Expand All @@ -611,7 +611,7 @@ static int __init pci_iommu_init(void)
"but IOMMU not available.\n"
KERN_ERR "WARNING 32bit PCI may malfunction.\n");
}
return -ENODEV;
return;
}

printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n");
Expand Down Expand Up @@ -678,11 +678,10 @@ static int __init pci_iommu_init(void)

flush_gart();
dma_ops = &gart_dma_ops;
return 0;
}

/* Must execute after PCI subsystem */
fs_initcall(pci_iommu_init);
fs_initcall(gart_iommu_init);

void gart_parse_options(char *p)
{
Expand Down
5 changes: 0 additions & 5 deletions trunk/arch/x86_64/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@
#include <asm/setup.h>
#include <asm/mach_apic.h>
#include <asm/numa.h>
#include <asm/swiotlb.h>
#include <asm/sections.h>
#include <asm/dmi.h>

Expand Down Expand Up @@ -702,10 +701,6 @@ void __init setup_arch(char **cmdline_p)

e820_setup_gap();

#ifdef CONFIG_IOMMU
iommu_hole_init();
#endif

#ifdef CONFIG_VT
#if defined(CONFIG_VGA_CONSOLE)
conswitchp = &vga_con;
Expand Down
7 changes: 1 addition & 6 deletions trunk/arch/x86_64/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@
#include <asm/proto.h>
#include <asm/smp.h>
#include <asm/sections.h>
#include <asm/dma-mapping.h>
#include <asm/swiotlb.h>

#ifndef Dprintk
#define Dprintk(x...)
Expand Down Expand Up @@ -587,10 +585,7 @@ void __init mem_init(void)
{
long codesize, reservedpages, datasize, initsize;

#ifdef CONFIG_SWIOTLB
pci_swiotlb_init();
#endif
no_iommu_init();
pci_iommu_alloc();

/* How many end-of-memory variables you have, grandma! */
max_low_pfn = end_pfn;
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-x86_64/pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
#include <asm/scatterlist.h>
#include <linux/string.h>
#include <asm/page.h>
#include <linux/dma-mapping.h> /* for have_iommu */

extern void pci_iommu_alloc(void);
extern int iommu_setup(char *opt);

/* The PCI address space does equal the physical memory
Expand Down
10 changes: 5 additions & 5 deletions trunk/include/asm-x86_64/proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ extern void ia32_sysenter_target(void);

extern void config_acpi_tables(void);
extern void ia32_syscall(void);
extern void iommu_hole_init(void);

extern int pmtimer_mark_offset(void);
extern void pmtimer_resume(void);
Expand Down Expand Up @@ -101,13 +100,9 @@ extern int unsynchronized_tsc(void);

extern void select_idle_routine(const struct cpuinfo_x86 *c);

extern void gart_parse_options(char *);
extern void __init no_iommu_init(void);

extern unsigned long table_start, table_end;

extern int exception_trace;
extern int force_iommu, no_iommu;
extern int using_apic_timer;
extern int disable_apic;
extern unsigned cpu_khz;
Expand All @@ -116,8 +111,13 @@ extern int skip_ioapic_setup;
extern int acpi_ht;
extern int acpi_disabled;

extern void no_iommu_init(void);
extern int force_iommu, no_iommu;
extern int iommu_detected;
#ifdef CONFIG_IOMMU
extern void gart_iommu_init(void);
extern void gart_parse_options(char *);
extern void iommu_hole_init(void);
extern int fallback_aper_order;
extern int fallback_aper_force;
extern int iommu_aperture;
Expand Down

0 comments on commit 8c0b52f

Please sign in to comment.