Commit 26054ed0 authored by OGAWA Hirofumi's avatar OGAWA Hirofumi Committed by Andi Kleen

[PATCH] mmconfig: Move e820 check into pci_mmcfg_reject_broken()

This is just cleanup. It moves to e820 check into pci_mmcfg_reject_broken().
Signed-off-by: default avatarOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
parent 56829d19
...@@ -191,9 +191,16 @@ static void __init pci_mmcfg_insert_resources(void) ...@@ -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. * Handle more broken MCFG tables on Asus etc.
...@@ -202,13 +209,29 @@ static void __init pci_mmcfg_reject_broken(void) ...@@ -202,13 +209,29 @@ static void __init pci_mmcfg_reject_broken(void)
if (pci_mmcfg_config_num == 1 && if (pci_mmcfg_config_num == 1 &&
cfg->pci_segment == 0 && cfg->pci_segment == 0 &&
(cfg->start_bus_number | cfg->end_bus_number) == 0) { (cfg->start_bus_number | cfg->end_bus_number) == 0) {
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. " printk(KERN_ERR "PCI: start and end of bus number is 0. "
"Rejected as broken MCFG."); "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;
} }
void __init pci_mmcfg_init(int type) void __init pci_mmcfg_init(int type)
...@@ -223,7 +246,7 @@ void __init pci_mmcfg_init(int type) ...@@ -223,7 +246,7 @@ void __init pci_mmcfg_init(int type)
if (!known_bridge) { if (!known_bridge) {
acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg); acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg);
pci_mmcfg_reject_broken(); pci_mmcfg_reject_broken(type);
} }
if ((pci_mmcfg_config_num == 0) || if ((pci_mmcfg_config_num == 0) ||
...@@ -231,18 +254,6 @@ void __init pci_mmcfg_init(int type) ...@@ -231,18 +254,6 @@ void __init pci_mmcfg_init(int type)
(pci_mmcfg_config[0].address == 0)) (pci_mmcfg_config[0].address == 0))
return; 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 (pci_mmcfg_arch_init()) {
if (type == 1) if (type == 1)
unreachable_devices(); unreachable_devices();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment