git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.infradead.org/~dwmw2/mtd-2.6.35
[pandora-kernel.git]
/
arch
/
x86
/
kernel
/
amd_iommu_init.c
diff --git
a/arch/x86/kernel/amd_iommu_init.c
b/arch/x86/kernel/amd_iommu_init.c
index
3bacb4d
..
3cc63e2
100644
(file)
--- a/
arch/x86/kernel/amd_iommu_init.c
+++ b/
arch/x86/kernel/amd_iommu_init.c
@@
-287,8
+287,12
@@
static u8 * __init iommu_map_mmio_space(u64 address)
{
u8 *ret;
{
u8 *ret;
- if (!request_mem_region(address, MMIO_REGION_LENGTH, "amd_iommu"))
+ if (!request_mem_region(address, MMIO_REGION_LENGTH, "amd_iommu")) {
+ pr_err("AMD-Vi: Can not reserve memory region %llx for mmio\n",
+ address);
+ pr_err("AMD-Vi: This is a BIOS bug. Please contact your hardware vendor\n");
return NULL;
return NULL;
+ }
ret = ioremap_nocache(address, MMIO_REGION_LENGTH);
if (ret != NULL)
ret = ioremap_nocache(address, MMIO_REGION_LENGTH);
if (ret != NULL)
@@
-1314,7
+1318,7
@@
static int __init amd_iommu_init(void)
ret = amd_iommu_init_dma_ops();
if (ret)
ret = amd_iommu_init_dma_ops();
if (ret)
- goto free;
+ goto free
_disable
;
amd_iommu_init_api();
amd_iommu_init_api();
@@
-1332,9
+1336,10
@@
static int __init amd_iommu_init(void)
out:
return ret;
out:
return ret;
-free:
+free
_disable
:
disable_iommus();
disable_iommus();
+free:
amd_iommu_uninit_devices();
free_pages((unsigned long)amd_iommu_pd_alloc_bitmap,
amd_iommu_uninit_devices();
free_pages((unsigned long)amd_iommu_pd_alloc_bitmap,
@@
-1353,6
+1358,15
@@
free:
free_unity_maps();
free_unity_maps();
+#ifdef CONFIG_GART_IOMMU
+ /*
+ * We failed to initialize the AMD IOMMU - try fallback to GART
+ * if possible.
+ */
+ gart_iommu_init();
+
+#endif
+
goto out;
}
goto out;
}