diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86_64/kernel/pci-dma.c | 5 | ||||
-rw-r--r-- | arch/x86_64/kernel/pci-gart.c | 20 | ||||
-rw-r--r-- | arch/x86_64/kernel/reboot.c | 4 |
3 files changed, 29 insertions, 0 deletions
diff --git a/arch/x86_64/kernel/pci-dma.c b/arch/x86_64/kernel/pci-dma.c index 90f6315d02d4..be8dce40f651 100644 --- a/arch/x86_64/kernel/pci-dma.c +++ b/arch/x86_64/kernel/pci-dma.c | |||
@@ -321,6 +321,11 @@ static int __init pci_iommu_init(void) | |||
321 | return 0; | 321 | return 0; |
322 | } | 322 | } |
323 | 323 | ||
324 | void pci_iommu_shutdown(void) | ||
325 | { | ||
326 | gart_iommu_shutdown(); | ||
327 | } | ||
328 | |||
324 | #ifdef CONFIG_PCI | 329 | #ifdef CONFIG_PCI |
325 | /* Many VIA bridges seem to corrupt data for DAC. Disable it here */ | 330 | /* Many VIA bridges seem to corrupt data for DAC. Disable it here */ |
326 | 331 | ||
diff --git a/arch/x86_64/kernel/pci-gart.c b/arch/x86_64/kernel/pci-gart.c index e587b65e754f..12acafdca791 100644 --- a/arch/x86_64/kernel/pci-gart.c +++ b/arch/x86_64/kernel/pci-gart.c | |||
@@ -571,6 +571,26 @@ static const struct dma_mapping_ops gart_dma_ops = { | |||
571 | .unmap_sg = gart_unmap_sg, | 571 | .unmap_sg = gart_unmap_sg, |
572 | }; | 572 | }; |
573 | 573 | ||
574 | void gart_iommu_shutdown(void) | ||
575 | { | ||
576 | struct pci_dev *dev; | ||
577 | int i; | ||
578 | |||
579 | if (no_agp && (dma_ops != &gart_dma_ops)) | ||
580 | return; | ||
581 | |||
582 | for (i = 0; i < num_k8_northbridges; i++) { | ||
583 | u32 ctl; | ||
584 | |||
585 | dev = k8_northbridges[i]; | ||
586 | pci_read_config_dword(dev, 0x90, &ctl); | ||
587 | |||
588 | ctl &= ~1; | ||
589 | |||
590 | pci_write_config_dword(dev, 0x90, ctl); | ||
591 | } | ||
592 | } | ||
593 | |||
574 | void __init gart_iommu_init(void) | 594 | void __init gart_iommu_init(void) |
575 | { | 595 | { |
576 | struct agp_kern_info info; | 596 | struct agp_kern_info info; |
diff --git a/arch/x86_64/kernel/reboot.c b/arch/x86_64/kernel/reboot.c index 7503068e788d..e6e65c2c63ef 100644 --- a/arch/x86_64/kernel/reboot.c +++ b/arch/x86_64/kernel/reboot.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <asm/pgtable.h> | 16 | #include <asm/pgtable.h> |
17 | #include <asm/tlbflush.h> | 17 | #include <asm/tlbflush.h> |
18 | #include <asm/apic.h> | 18 | #include <asm/apic.h> |
19 | #include <asm/proto.h> | ||
19 | 20 | ||
20 | /* | 21 | /* |
21 | * Power off function, if any | 22 | * Power off function, if any |
@@ -81,6 +82,7 @@ static inline void kb_wait(void) | |||
81 | void machine_shutdown(void) | 82 | void machine_shutdown(void) |
82 | { | 83 | { |
83 | unsigned long flags; | 84 | unsigned long flags; |
85 | |||
84 | /* Stop the cpus and apics */ | 86 | /* Stop the cpus and apics */ |
85 | #ifdef CONFIG_SMP | 87 | #ifdef CONFIG_SMP |
86 | int reboot_cpu_id; | 88 | int reboot_cpu_id; |
@@ -111,6 +113,8 @@ void machine_shutdown(void) | |||
111 | disable_IO_APIC(); | 113 | disable_IO_APIC(); |
112 | 114 | ||
113 | local_irq_restore(flags); | 115 | local_irq_restore(flags); |
116 | |||
117 | pci_iommu_shutdown(); | ||
114 | } | 118 | } |
115 | 119 | ||
116 | void machine_emergency_restart(void) | 120 | void machine_emergency_restart(void) |