Loading arch/i386/pci/mmconfig-shared.c +31 −20 Original line number Diff line number Diff line Loading @@ -191,9 +191,16 @@ static void __init pci_mmcfg_insert_resources(void) } } static void __init pci_mmcfg_reject_broken(void) static void __init pci_mmcfg_reject_broken(int type) { typeof(pci_mmcfg_config[0]) *cfg = &pci_mmcfg_config[0]; typeof(pci_mmcfg_config[0]) *cfg; if ((pci_mmcfg_config_num == 0) || (pci_mmcfg_config == NULL) || (pci_mmcfg_config[0].address == 0)) return; cfg = &pci_mmcfg_config[0]; /* * Handle more broken MCFG tables on Asus etc. Loading @@ -202,13 +209,29 @@ static void __init pci_mmcfg_reject_broken(void) if (pci_mmcfg_config_num == 1 && cfg->pci_segment == 0 && (cfg->start_bus_number | cfg->end_bus_number) == 0) { printk(KERN_ERR "PCI: start and end of bus number is 0. " "Rejected as broken MCFG.\n"); goto reject; } /* * Only do this check when type 1 works. If it doesn't work * assume we run on a Mac and always use MCFG */ if (type == 1 && !e820_all_mapped(cfg->address, cfg->address + MMCONFIG_APER_MIN, E820_RESERVED)) { printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %Lx is not" " E820-reserved\n", cfg->address); goto reject; } return; reject: printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); kfree(pci_mmcfg_config); pci_mmcfg_config = NULL; pci_mmcfg_config_num = 0; printk(KERN_ERR "PCI: start and end of bus number is 0. " "Rejected as broken MCFG."); } } void __init pci_mmcfg_init(int type) Loading @@ -223,7 +246,7 @@ void __init pci_mmcfg_init(int type) if (!known_bridge) { acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg); pci_mmcfg_reject_broken(); pci_mmcfg_reject_broken(type); } if ((pci_mmcfg_config_num == 0) || Loading @@ -231,18 +254,6 @@ void __init pci_mmcfg_init(int type) (pci_mmcfg_config[0].address == 0)) return; /* Only do this check when type 1 works. If it doesn't work assume we run on a Mac and always use MCFG */ if (type == 1 && !known_bridge && !e820_all_mapped(pci_mmcfg_config[0].address, pci_mmcfg_config[0].address + MMCONFIG_APER_MIN, E820_RESERVED)) { printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %Lx is not E820-reserved\n", pci_mmcfg_config[0].address); printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); return; } if (pci_mmcfg_arch_init()) { if (type == 1) unreachable_devices(); Loading Loading
arch/i386/pci/mmconfig-shared.c +31 −20 Original line number Diff line number Diff line Loading @@ -191,9 +191,16 @@ static void __init pci_mmcfg_insert_resources(void) } } static void __init pci_mmcfg_reject_broken(void) static void __init pci_mmcfg_reject_broken(int type) { typeof(pci_mmcfg_config[0]) *cfg = &pci_mmcfg_config[0]; typeof(pci_mmcfg_config[0]) *cfg; if ((pci_mmcfg_config_num == 0) || (pci_mmcfg_config == NULL) || (pci_mmcfg_config[0].address == 0)) return; cfg = &pci_mmcfg_config[0]; /* * Handle more broken MCFG tables on Asus etc. Loading @@ -202,13 +209,29 @@ static void __init pci_mmcfg_reject_broken(void) if (pci_mmcfg_config_num == 1 && cfg->pci_segment == 0 && (cfg->start_bus_number | cfg->end_bus_number) == 0) { printk(KERN_ERR "PCI: start and end of bus number is 0. " "Rejected as broken MCFG.\n"); goto reject; } /* * Only do this check when type 1 works. If it doesn't work * assume we run on a Mac and always use MCFG */ if (type == 1 && !e820_all_mapped(cfg->address, cfg->address + MMCONFIG_APER_MIN, E820_RESERVED)) { printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %Lx is not" " E820-reserved\n", cfg->address); goto reject; } return; reject: printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); kfree(pci_mmcfg_config); pci_mmcfg_config = NULL; pci_mmcfg_config_num = 0; printk(KERN_ERR "PCI: start and end of bus number is 0. " "Rejected as broken MCFG."); } } void __init pci_mmcfg_init(int type) Loading @@ -223,7 +246,7 @@ void __init pci_mmcfg_init(int type) if (!known_bridge) { acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg); pci_mmcfg_reject_broken(); pci_mmcfg_reject_broken(type); } if ((pci_mmcfg_config_num == 0) || Loading @@ -231,18 +254,6 @@ void __init pci_mmcfg_init(int type) (pci_mmcfg_config[0].address == 0)) return; /* Only do this check when type 1 works. If it doesn't work assume we run on a Mac and always use MCFG */ if (type == 1 && !known_bridge && !e820_all_mapped(pci_mmcfg_config[0].address, pci_mmcfg_config[0].address + MMCONFIG_APER_MIN, E820_RESERVED)) { printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %Lx is not E820-reserved\n", pci_mmcfg_config[0].address); printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); return; } if (pci_mmcfg_arch_init()) { if (type == 1) unreachable_devices(); Loading