diff options
| -rw-r--r-- | arch/x86/kernel/aperture_64.c | 15 | ||||
| -rw-r--r-- | arch/x86/kernel/pci-gart_64.c | 3 |
2 files changed, 17 insertions, 1 deletions
diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c index 3704997e8b25..b5d8b0bcf235 100644 --- a/arch/x86/kernel/aperture_64.c +++ b/arch/x86/kernel/aperture_64.c | |||
| @@ -393,6 +393,7 @@ void __init gart_iommu_hole_init(void) | |||
| 393 | for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) { | 393 | for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) { |
| 394 | int bus; | 394 | int bus; |
| 395 | int dev_base, dev_limit; | 395 | int dev_base, dev_limit; |
| 396 | u32 ctl; | ||
| 396 | 397 | ||
| 397 | bus = bus_dev_ranges[i].bus; | 398 | bus = bus_dev_ranges[i].bus; |
| 398 | dev_base = bus_dev_ranges[i].dev_base; | 399 | dev_base = bus_dev_ranges[i].dev_base; |
| @@ -406,7 +407,19 @@ void __init gart_iommu_hole_init(void) | |||
| 406 | gart_iommu_aperture = 1; | 407 | gart_iommu_aperture = 1; |
| 407 | x86_init.iommu.iommu_init = gart_iommu_init; | 408 | x86_init.iommu.iommu_init = gart_iommu_init; |
| 408 | 409 | ||
| 409 | aper_order = (read_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL) >> 1) & 7; | 410 | ctl = read_pci_config(bus, slot, 3, |
| 411 | AMD64_GARTAPERTURECTL); | ||
| 412 | |||
| 413 | /* | ||
| 414 | * Before we do anything else disable the GART. It may | ||
| 415 | * still be enabled if we boot into a crash-kernel here. | ||
| 416 | * Reconfiguring the GART while it is enabled could have | ||
| 417 | * unknown side-effects. | ||
| 418 | */ | ||
| 419 | ctl &= ~GARTEN; | ||
| 420 | write_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL, ctl); | ||
| 421 | |||
| 422 | aper_order = (ctl >> 1) & 7; | ||
| 410 | aper_size = (32 * 1024 * 1024) << aper_order; | 423 | aper_size = (32 * 1024 * 1024) << aper_order; |
| 411 | aper_base = read_pci_config(bus, slot, 3, AMD64_GARTAPERTUREBASE) & 0x7fff; | 424 | aper_base = read_pci_config(bus, slot, 3, AMD64_GARTAPERTUREBASE) & 0x7fff; |
| 412 | aper_base <<= 25; | 425 | aper_base <<= 25; |
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c index f3af115a573a..0ae24d9b44b3 100644 --- a/arch/x86/kernel/pci-gart_64.c +++ b/arch/x86/kernel/pci-gart_64.c | |||
| @@ -564,6 +564,9 @@ static void enable_gart_translations(void) | |||
| 564 | 564 | ||
| 565 | enable_gart_translation(dev, __pa(agp_gatt_table)); | 565 | enable_gart_translation(dev, __pa(agp_gatt_table)); |
| 566 | } | 566 | } |
| 567 | |||
| 568 | /* Flush the GART-TLB to remove stale entries */ | ||
| 569 | k8_flush_garts(); | ||
| 567 | } | 570 | } |
| 568 | 571 | ||
| 569 | /* | 572 | /* |
