diff options
Diffstat (limited to 'arch/x86/pci/mmconfig-shared.c')
-rw-r--r-- | arch/x86/pci/mmconfig-shared.c | 35 |
1 files changed, 0 insertions, 35 deletions
diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c index 4df637e34f81..6b521d389327 100644 --- a/arch/x86/pci/mmconfig-shared.c +++ b/arch/x86/pci/mmconfig-shared.c | |||
@@ -22,42 +22,9 @@ | |||
22 | #define MMCONFIG_APER_MIN (2 * 1024*1024) | 22 | #define MMCONFIG_APER_MIN (2 * 1024*1024) |
23 | #define MMCONFIG_APER_MAX (256 * 1024*1024) | 23 | #define MMCONFIG_APER_MAX (256 * 1024*1024) |
24 | 24 | ||
25 | DECLARE_BITMAP(pci_mmcfg_fallback_slots, 32*PCI_MMCFG_MAX_CHECK_BUS); | ||
26 | |||
27 | /* Indicate if the mmcfg resources have been placed into the resource table. */ | 25 | /* Indicate if the mmcfg resources have been placed into the resource table. */ |
28 | static int __initdata pci_mmcfg_resources_inserted; | 26 | static int __initdata pci_mmcfg_resources_inserted; |
29 | 27 | ||
30 | /* K8 systems have some devices (typically in the builtin northbridge) | ||
31 | that are only accessible using type1 | ||
32 | Normally this can be expressed in the MCFG by not listing them | ||
33 | and assigning suitable _SEGs, but this isn't implemented in some BIOS. | ||
34 | Instead try to discover all devices on bus 0 that are unreachable using MM | ||
35 | and fallback for them. */ | ||
36 | static void __init unreachable_devices(void) | ||
37 | { | ||
38 | int i, bus; | ||
39 | /* Use the max bus number from ACPI here? */ | ||
40 | for (bus = 0; bus < PCI_MMCFG_MAX_CHECK_BUS; bus++) { | ||
41 | for (i = 0; i < 32; i++) { | ||
42 | unsigned int devfn = PCI_DEVFN(i, 0); | ||
43 | u32 val1, val2; | ||
44 | |||
45 | pci_conf1_read(0, bus, devfn, 0, 4, &val1); | ||
46 | if (val1 == 0xffffffff) | ||
47 | continue; | ||
48 | |||
49 | if (pci_mmcfg_arch_reachable(0, bus, devfn)) { | ||
50 | raw_pci_ops->read(0, bus, devfn, 0, 4, &val2); | ||
51 | if (val1 == val2) | ||
52 | continue; | ||
53 | } | ||
54 | set_bit(i + 32 * bus, pci_mmcfg_fallback_slots); | ||
55 | printk(KERN_NOTICE "PCI: No mmconfig possible on device" | ||
56 | " %02x:%02x\n", bus, i); | ||
57 | } | ||
58 | } | ||
59 | } | ||
60 | |||
61 | static const char __init *pci_mmcfg_e7520(void) | 28 | static const char __init *pci_mmcfg_e7520(void) |
62 | { | 29 | { |
63 | u32 win; | 30 | u32 win; |
@@ -270,8 +237,6 @@ void __init pci_mmcfg_init(int type) | |||
270 | return; | 237 | return; |
271 | 238 | ||
272 | if (pci_mmcfg_arch_init()) { | 239 | if (pci_mmcfg_arch_init()) { |
273 | if (type == 1) | ||
274 | unreachable_devices(); | ||
275 | if (known_bridge) | 240 | if (known_bridge) |
276 | pci_mmcfg_insert_resources(IORESOURCE_BUSY); | 241 | pci_mmcfg_insert_resources(IORESOURCE_BUSY); |
277 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; | 242 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; |