[PATCH] x86,pci: dmi check for mackpro 2.2 mmconf change the mconf bus range from [0,0xff] to to [0, 0x3f] to match range [0xf0000000, 0xf4000000) in e820 tables. Signed-off-by: Yinghai Lu --- arch/x86/pci/mmconfig-shared.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) Index: linux-2.6/arch/x86/pci/mmconfig-shared.c =================================================================== --- linux-2.6.orig/arch/x86/pci/mmconfig-shared.c +++ linux-2.6/arch/x86/pci/mmconfig-shared.c @@ -374,6 +374,40 @@ reject: static int __initdata known_bridge; +static int __devinit check_mmconf(const struct dmi_system_id *d) +{ + typeof(pci_mmcfg_config[0]) *cfg; + + if ((pci_mmcfg_config_num != 1) || + (pci_mmcfg_config == NULL) || + (pci_mmcfg_config[0].address == 0)) + return 1; + + cfg = &pci_mmcfg_config[0]; + + if (cfg->start_bus_number == 0 && cfg->end_bus_number > 0x3f) + cfg->end_bus_number = 0x3f; + + return 0; +} + +static struct dmi_system_id __devinitdata mmconf_dmi_table[] = { + { + .callback = check_mmconf, + .ident = "Apple", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Apple"), + DMI_MATCH(DMI_PRODUCT_NAME, "MacPro2"), + }, + }, + {} +}; + +void __init check_mmconf_dmi(void) +{ + dmi_check_system(mmconf_dmi_table); +} + static void __init __pci_mmcfg_init(int early) { /* MMCONFIG disabled */ @@ -395,6 +429,7 @@ static void __init __pci_mmcfg_init(int if (!known_bridge) { acpi_table_parse(ACPI_SIG_MCFG, acpi_parse_mcfg); + check_mmconf_dmi(); pci_mmcfg_reject_broken(early); }