|
@@ -280,7 +280,8 @@ void __init early_gart_iommu_check(void)
|
|
|
* or BIOS forget to put that in reserved.
|
|
|
* try to update e820 to make that region as reserved.
|
|
|
*/
|
|
|
- int i, fix, slot;
|
|
|
+ u32 agp_aper_base = 0, agp_aper_order = 0;
|
|
|
+ int i, fix, slot, valid_agp = 0;
|
|
|
u32 ctl;
|
|
|
u32 aper_size = 0, aper_order = 0, last_aper_order = 0;
|
|
|
u64 aper_base = 0, last_aper_base = 0;
|
|
@@ -290,6 +291,8 @@ void __init early_gart_iommu_check(void)
|
|
|
return;
|
|
|
|
|
|
/* This is mostly duplicate of iommu_hole_init */
|
|
|
+ agp_aper_base = search_agp_bridge(&agp_aper_order, &valid_agp);
|
|
|
+
|
|
|
fix = 0;
|
|
|
for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) {
|
|
|
int bus;
|
|
@@ -342,10 +345,10 @@ void __init early_gart_iommu_check(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (!fix)
|
|
|
+ if (valid_agp)
|
|
|
return;
|
|
|
|
|
|
- /* different nodes have different setting, disable them all at first*/
|
|
|
+ /* disable them all at first */
|
|
|
for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) {
|
|
|
int bus;
|
|
|
int dev_base, dev_limit;
|
|
@@ -458,8 +461,6 @@ out:
|
|
|
|
|
|
if (aper_alloc) {
|
|
|
/* Got the aperture from the AGP bridge */
|
|
|
- } else if (!valid_agp) {
|
|
|
- /* Do nothing */
|
|
|
} else if ((!no_iommu && max_pfn > MAX_DMA32_PFN) ||
|
|
|
force_iommu ||
|
|
|
valid_agp ||
|