diff options
Diffstat (limited to 'arch/x86/pci/amd_bus.c')
-rw-r--r-- | arch/x86/pci/amd_bus.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c index 5c2799c20e47..15f505d3a78e 100644 --- a/arch/x86/pci/amd_bus.c +++ b/arch/x86/pci/amd_bus.c | |||
@@ -1,5 +1,9 @@ | |||
1 | #include <linux/init.h> | 1 | #include <linux/init.h> |
2 | #include <linux/pci.h> | 2 | #include <linux/pci.h> |
3 | #include "pci.h" | ||
4 | |||
5 | #ifdef CONFIG_X86_64 | ||
6 | |||
3 | #include <asm/pci-direct.h> | 7 | #include <asm/pci-direct.h> |
4 | #include <asm/mpspec.h> | 8 | #include <asm/mpspec.h> |
5 | #include <linux/cpumask.h> | 9 | #include <linux/cpumask.h> |
@@ -526,3 +530,31 @@ static int __init early_fill_mp_bus_info(void) | |||
526 | } | 530 | } |
527 | 531 | ||
528 | postcore_initcall(early_fill_mp_bus_info); | 532 | postcore_initcall(early_fill_mp_bus_info); |
533 | |||
534 | #endif | ||
535 | |||
536 | /* common 32/64 bit code */ | ||
537 | |||
538 | #define ENABLE_CF8_EXT_CFG (1ULL << 46) | ||
539 | |||
540 | static void enable_pci_io_ecs_per_cpu(void *unused) | ||
541 | { | ||
542 | u64 reg; | ||
543 | rdmsrl(MSR_AMD64_NB_CFG, reg); | ||
544 | if (!(reg & ENABLE_CF8_EXT_CFG)) { | ||
545 | reg |= ENABLE_CF8_EXT_CFG; | ||
546 | wrmsrl(MSR_AMD64_NB_CFG, reg); | ||
547 | } | ||
548 | } | ||
549 | |||
550 | static int __init enable_pci_io_ecs(void) | ||
551 | { | ||
552 | /* assume all cpus from fam10h have IO ECS */ | ||
553 | if (boot_cpu_data.x86 < 0x10) | ||
554 | return 0; | ||
555 | on_each_cpu(enable_pci_io_ecs_per_cpu, NULL, 1, 1); | ||
556 | pci_probe |= PCI_HAS_IO_ECS; | ||
557 | return 0; | ||
558 | } | ||
559 | |||
560 | postcore_initcall(enable_pci_io_ecs); | ||