diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-08-20 05:52:15 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-08-20 05:52:15 -0400 |
commit | 7393423dd9b5790a3115873be355e9fc862bce8f (patch) | |
tree | fc83214602c8ce41dc06d5c8e21deada679521f7 /arch/x86/kernel/acpi/boot.c | |
parent | 8df9676d6402563da91427e8d9f2da8a4598aede (diff) | |
parent | 1fca25427482387689fa27594c992a961d98768f (diff) |
Merge branch 'linus' into x86/cleanups
Diffstat (limited to 'arch/x86/kernel/acpi/boot.c')
-rw-r--r-- | arch/x86/kernel/acpi/boot.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index d8d118935b08..f20470823d38 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -96,6 +96,8 @@ static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; | |||
96 | #warning ACPI uses CMPXCHG, i486 and later hardware | 96 | #warning ACPI uses CMPXCHG, i486 and later hardware |
97 | #endif | 97 | #endif |
98 | 98 | ||
99 | static int acpi_mcfg_64bit_base_addr __initdata = FALSE; | ||
100 | |||
99 | /* -------------------------------------------------------------------------- | 101 | /* -------------------------------------------------------------------------- |
100 | Boot-time Configuration | 102 | Boot-time Configuration |
101 | -------------------------------------------------------------------------- */ | 103 | -------------------------------------------------------------------------- */ |
@@ -157,6 +159,14 @@ char *__init __acpi_map_table(unsigned long phys, unsigned long size) | |||
157 | struct acpi_mcfg_allocation *pci_mmcfg_config; | 159 | struct acpi_mcfg_allocation *pci_mmcfg_config; |
158 | int pci_mmcfg_config_num; | 160 | int pci_mmcfg_config_num; |
159 | 161 | ||
162 | static int __init acpi_mcfg_oem_check(struct acpi_table_mcfg *mcfg) | ||
163 | { | ||
164 | if (!strcmp(mcfg->header.oem_id, "SGI")) | ||
165 | acpi_mcfg_64bit_base_addr = TRUE; | ||
166 | |||
167 | return 0; | ||
168 | } | ||
169 | |||
160 | int __init acpi_parse_mcfg(struct acpi_table_header *header) | 170 | int __init acpi_parse_mcfg(struct acpi_table_header *header) |
161 | { | 171 | { |
162 | struct acpi_table_mcfg *mcfg; | 172 | struct acpi_table_mcfg *mcfg; |
@@ -189,8 +199,12 @@ int __init acpi_parse_mcfg(struct acpi_table_header *header) | |||
189 | } | 199 | } |
190 | 200 | ||
191 | memcpy(pci_mmcfg_config, &mcfg[1], config_size); | 201 | memcpy(pci_mmcfg_config, &mcfg[1], config_size); |
202 | |||
203 | acpi_mcfg_oem_check(mcfg); | ||
204 | |||
192 | for (i = 0; i < pci_mmcfg_config_num; ++i) { | 205 | for (i = 0; i < pci_mmcfg_config_num; ++i) { |
193 | if (pci_mmcfg_config[i].address > 0xFFFFFFFF) { | 206 | if ((pci_mmcfg_config[i].address > 0xFFFFFFFF) && |
207 | !acpi_mcfg_64bit_base_addr) { | ||
194 | printk(KERN_ERR PREFIX | 208 | printk(KERN_ERR PREFIX |
195 | "MMCONFIG not in low 4GB of memory\n"); | 209 | "MMCONFIG not in low 4GB of memory\n"); |
196 | kfree(pci_mmcfg_config); | 210 | kfree(pci_mmcfg_config); |