Commit de957628 authored by FUJITA Tomonori's avatar FUJITA Tomonori Committed by Ingo Molnar

x86: GART: Convert gart_iommu_hole_init() to use iommu_init hook

This changes gart_iommu_hole_init() to set gart_iommu_init() to
iommu_init hook if gart_iommu_hole_init() finds the GART IOMMU.

We can kill the code to check if we found the IOMMU in
gart_iommu_init() since gart_iommu_hole_init() sets
gart_iommu_init() only when it found the IOMMU.
Signed-off-by: default avatarFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: chrisw@sous-sol.org
Cc: dwmw2@infradead.org
Cc: joerg.roedel@amd.com
Cc: muli@il.ibm.com
LKML-Reference: <1257849980-22640-4-git-send-email-fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent d7b9f7be
...@@ -35,7 +35,7 @@ extern int gart_iommu_aperture_allowed; ...@@ -35,7 +35,7 @@ extern int gart_iommu_aperture_allowed;
extern int gart_iommu_aperture_disabled; extern int gart_iommu_aperture_disabled;
extern void early_gart_iommu_check(void); extern void early_gart_iommu_check(void);
extern void gart_iommu_init(void); extern int gart_iommu_init(void);
extern void __init gart_parse_options(char *); extern void __init gart_parse_options(char *);
extern void gart_iommu_hole_init(void); extern void gart_iommu_hole_init(void);
...@@ -47,9 +47,6 @@ extern void gart_iommu_hole_init(void); ...@@ -47,9 +47,6 @@ extern void gart_iommu_hole_init(void);
static inline void early_gart_iommu_check(void) static inline void early_gart_iommu_check(void)
{ {
} }
static inline void gart_iommu_init(void)
{
}
static inline void gart_parse_options(char *options) static inline void gart_parse_options(char *options)
{ {
} }
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <asm/pci-direct.h> #include <asm/pci-direct.h>
#include <asm/dma.h> #include <asm/dma.h>
#include <asm/k8.h> #include <asm/k8.h>
#include <asm/x86_init.h>
int gart_iommu_aperture; int gart_iommu_aperture;
int gart_iommu_aperture_disabled __initdata; int gart_iommu_aperture_disabled __initdata;
...@@ -400,6 +401,7 @@ void __init gart_iommu_hole_init(void) ...@@ -400,6 +401,7 @@ void __init gart_iommu_hole_init(void)
iommu_detected = 1; iommu_detected = 1;
gart_iommu_aperture = 1; gart_iommu_aperture = 1;
x86_init.iommu.iommu_init = gart_iommu_init;
aper_order = (read_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL) >> 1) & 7; aper_order = (read_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL) >> 1) & 7;
aper_size = (32 * 1024 * 1024) << aper_order; aper_size = (32 * 1024 * 1024) << aper_order;
......
...@@ -298,8 +298,6 @@ static int __init pci_iommu_init(void) ...@@ -298,8 +298,6 @@ static int __init pci_iommu_init(void)
amd_iommu_init(); amd_iommu_init();
gart_iommu_init();
no_iommu_init(); no_iommu_init();
return 0; return 0;
} }
......
...@@ -709,7 +709,7 @@ static void gart_iommu_shutdown(void) ...@@ -709,7 +709,7 @@ static void gart_iommu_shutdown(void)
} }
} }
void __init gart_iommu_init(void) int __init gart_iommu_init(void)
{ {
struct agp_kern_info info; struct agp_kern_info info;
unsigned long iommu_start; unsigned long iommu_start;
...@@ -719,7 +719,7 @@ void __init gart_iommu_init(void) ...@@ -719,7 +719,7 @@ void __init gart_iommu_init(void)
long i; long i;
if (cache_k8_northbridges() < 0 || num_k8_northbridges == 0) if (cache_k8_northbridges() < 0 || num_k8_northbridges == 0)
return; return 0;
#ifndef CONFIG_AGP_AMD64 #ifndef CONFIG_AGP_AMD64
no_agp = 1; no_agp = 1;
...@@ -731,13 +731,6 @@ void __init gart_iommu_init(void) ...@@ -731,13 +731,6 @@ void __init gart_iommu_init(void)
(agp_copy_info(agp_bridge, &info) < 0); (agp_copy_info(agp_bridge, &info) < 0);
#endif #endif
if (swiotlb)
return;
/* Did we detect a different HW IOMMU? */
if (iommu_detected && !gart_iommu_aperture)
return;
if (no_iommu || if (no_iommu ||
(!force_iommu && max_pfn <= MAX_DMA32_PFN) || (!force_iommu && max_pfn <= MAX_DMA32_PFN) ||
!gart_iommu_aperture || !gart_iommu_aperture ||
...@@ -747,7 +740,7 @@ void __init gart_iommu_init(void) ...@@ -747,7 +740,7 @@ void __init gart_iommu_init(void)
"but GART IOMMU not available.\n"); "but GART IOMMU not available.\n");
printk(KERN_WARNING "falling back to iommu=soft.\n"); printk(KERN_WARNING "falling back to iommu=soft.\n");
} }
return; return 0;
} }
/* need to map that range */ /* need to map that range */
...@@ -840,6 +833,8 @@ void __init gart_iommu_init(void) ...@@ -840,6 +833,8 @@ void __init gart_iommu_init(void)
flush_gart(); flush_gart();
dma_ops = &gart_dma_ops; dma_ops = &gart_dma_ops;
x86_platform.iommu_shutdown = gart_iommu_shutdown; x86_platform.iommu_shutdown = gart_iommu_shutdown;
return 0;
} }
void __init gart_parse_options(char *p) void __init gart_parse_options(char *p)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment