diff options
Diffstat (limited to 'arch/x86/pci/amd_bus.c')
-rw-r--r-- | arch/x86/pci/amd_bus.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c index e88f4c53d7f6..aa936e3a2019 100644 --- a/arch/x86/pci/amd_bus.c +++ b/arch/x86/pci/amd_bus.c | |||
@@ -24,10 +24,11 @@ struct pci_hostbridge_probe { | |||
24 | }; | 24 | }; |
25 | 25 | ||
26 | static struct pci_hostbridge_probe pci_probes[] __initdata = { | 26 | static struct pci_hostbridge_probe pci_probes[] __initdata = { |
27 | { 0, 0x18, PCI_VENDOR_ID_AMD, 0x1100 }, | 27 | { 0, 0x18, PCI_VENDOR_ID_AMD, 0x1100 }, /* K8 */ |
28 | { 0, 0x18, PCI_VENDOR_ID_AMD, 0x1200 }, | 28 | { 0, 0x18, PCI_VENDOR_ID_AMD, 0x1200 }, /* Fam10h */ |
29 | { 0xff, 0, PCI_VENDOR_ID_AMD, 0x1200 }, | 29 | { 0xff, 0, PCI_VENDOR_ID_AMD, 0x1200 }, /* Fam10h */ |
30 | { 0, 0x18, PCI_VENDOR_ID_AMD, 0x1300 }, | 30 | { 0, 0x18, PCI_VENDOR_ID_AMD, 0x1300 }, /* Fam11h */ |
31 | { 0, 0x18, PCI_VENDOR_ID_AMD, 0x1600 }, /* Fam15h */ | ||
31 | }; | 32 | }; |
32 | 33 | ||
33 | #define RANGE_NUM 16 | 34 | #define RANGE_NUM 16 |
@@ -96,6 +97,11 @@ static int __init early_fill_mp_bus_info(void) | |||
96 | if (!found) | 97 | if (!found) |
97 | return 0; | 98 | return 0; |
98 | 99 | ||
100 | /* | ||
101 | * We should learn topology and routing information from _PXM and | ||
102 | * _CRS methods in the ACPI namespace. We extract node numbers | ||
103 | * here to work around BIOSes that don't supply _PXM. | ||
104 | */ | ||
99 | for (i = 0; i < 4; i++) { | 105 | for (i = 0; i < 4; i++) { |
100 | int min_bus; | 106 | int min_bus; |
101 | int max_bus; | 107 | int max_bus; |
@@ -113,6 +119,17 @@ static int __init early_fill_mp_bus_info(void) | |||
113 | info = alloc_pci_root_info(min_bus, max_bus, node, link); | 119 | info = alloc_pci_root_info(min_bus, max_bus, node, link); |
114 | } | 120 | } |
115 | 121 | ||
122 | /* | ||
123 | * The following code extracts routing information for use on old | ||
124 | * systems where Linux doesn't automatically use host bridge _CRS | ||
125 | * methods (or when the user specifies "pci=nocrs"). | ||
126 | * | ||
127 | * We only do this through Fam11h, because _CRS should be enough on | ||
128 | * newer systems. | ||
129 | */ | ||
130 | if (boot_cpu_data.x86 > 0x11) | ||
131 | return 0; | ||
132 | |||
116 | /* get the default node and link for left over res */ | 133 | /* get the default node and link for left over res */ |
117 | reg = read_pci_config(bus, slot, 0, 0x60); | 134 | reg = read_pci_config(bus, slot, 0, 0x60); |
118 | def_node = (reg >> 8) & 0x07; | 135 | def_node = (reg >> 8) & 0x07; |