aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/i386/kernel/acpi/boot.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c
index cbbcf9c630bf..389a8a56d2b4 100644
--- a/arch/i386/kernel/acpi/boot.c
+++ b/arch/i386/kernel/acpi/boot.c
@@ -204,9 +204,9 @@ int __init acpi_parse_mcfg(struct acpi_table_header *header)
204 return -ENOMEM; 204 return -ENOMEM;
205 } 205 }
206 206
207 memcpy(pci_mmcfg_config, &mcfg->config, config_size); 207 memcpy(pci_mmcfg_config, &mcfg[1], config_size);
208 for (i = 0; i < pci_mmcfg_config_num; ++i) { 208 for (i = 0; i < pci_mmcfg_config_num; ++i) {
209 if (mcfg->config[i].base_reserved) { 209 if (pci_mmcfg_config[i].base_reserved) {
210 printk(KERN_ERR PREFIX 210 printk(KERN_ERR PREFIX
211 "MMCONFIG not in low 4GB of memory\n"); 211 "MMCONFIG not in low 4GB of memory\n");
212 kfree(pci_mmcfg_config); 212 kfree(pci_mmcfg_config);
@@ -233,11 +233,11 @@ static int __init acpi_parse_madt(struct acpi_table_header *header)
233 return -ENODEV; 233 return -ENODEV;
234 } 234 }
235 235
236 if (madt->lapic_address) { 236 if (madt->address) {
237 acpi_lapic_addr = (u64) madt->lapic_address; 237 acpi_lapic_addr = (u64) madt->address;
238 238
239 printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n", 239 printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n",
240 madt->lapic_address); 240 madt->address);
241 } 241 }
242 242
243 acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id); 243 acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id);
@@ -654,7 +654,7 @@ static int __init acpi_parse_hpet(struct acpi_table_header *header)
654 return -ENODEV; 654 return -ENODEV;
655 } 655 }
656 656
657 if (hpet_tbl->addr.space_id != ACPI_SPACE_MEM) { 657 if (hpet_tbl->address.space_id != ACPI_SPACE_MEM) {
658 printk(KERN_WARNING PREFIX "HPET timers must be located in " 658 printk(KERN_WARNING PREFIX "HPET timers must be located in "
659 "memory.\n"); 659 "memory.\n");
660 return -1; 660 return -1;
@@ -667,29 +667,28 @@ static int __init acpi_parse_hpet(struct acpi_table_header *header)
667 hpet_res->name = (void *)&hpet_res[1]; 667 hpet_res->name = (void *)&hpet_res[1];
668 hpet_res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; 668 hpet_res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
669 snprintf((char *)hpet_res->name, HPET_RESOURCE_NAME_SIZE, 669 snprintf((char *)hpet_res->name, HPET_RESOURCE_NAME_SIZE,
670 "HPET %u", hpet_tbl->number); 670 "HPET %u", hpet_tbl->sequence);
671 hpet_res->end = (1 * 1024) - 1; 671 hpet_res->end = (1 * 1024) - 1;
672 } 672 }
673 673
674#ifdef CONFIG_X86_64 674#ifdef CONFIG_X86_64
675 vxtime.hpet_address = hpet_tbl->addr.addrl | 675 vxtime.hpet_address = hpet_tbl->address.address;
676 ((long)hpet_tbl->addr.addrh << 32);
677 676
678 printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", 677 printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
679 hpet_tbl->id, vxtime.hpet_address); 678 hpet_tbl->id, vxtime.hpet_address);
680 679
681 res_start = vxtime.hpet_address; 680 res_start = vxtime.hpet_address;
682#else /* X86 */ 681#else /* X86 */
683 { 682 {
684 extern unsigned long hpet_address; 683 extern unsigned long hpet_address;
685 684
686 hpet_address = hpet_tbl->addr.addrl; 685 hpet_address = hpet_tbl->address.address;
687 printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", 686 printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
688 hpet_tbl->id, hpet_address); 687 hpet_tbl->id, hpet_address);
689 688
690 res_start = hpet_address; 689 res_start = hpet_address;
691 } 690 }
692#endif /* X86 */ 691#endif /* X86 */
693 692
694 if (hpet_res) { 693 if (hpet_res) {
695 hpet_res->start = res_start; 694 hpet_res->start = res_start;