aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/pci/amd_bus.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/pci/amd_bus.c')
-rw-r--r--arch/x86/pci/amd_bus.c25
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
26static struct pci_hostbridge_probe pci_probes[] __initdata = { 26static 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;