1 /* 2 * boot.c - Architecture-Specific Low-Level ACPI Boot Support 3 * 4 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> 5 * Copyright (C) 2001 Jun Nakajima <jun.nakajima@intel.com> 6 * 7 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 * 23 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24 */ 25 26 #include <linux/init.h> 27 #include <linux/acpi.h> 28 #include <linux/acpi_pmtmr.h> 29 #include <linux/efi.h> 30 #include <linux/cpumask.h> 31 #include <linux/export.h> 32 #include <linux/dmi.h> 33 #include <linux/irq.h> 34 #include <linux/slab.h> 35 #include <linux/bootmem.h> 36 #include <linux/ioport.h> 37 #include <linux/pci.h> 38 #include <linux/efi-bgrt.h> 39 40 #include <asm/irqdomain.h> 41 #include <asm/pci_x86.h> 42 #include <asm/pgtable.h> 43 #include <asm/io_apic.h> 44 #include <asm/apic.h> 45 #include <asm/io.h> 46 #include <asm/mpspec.h> 47 #include <asm/smp.h> 48 #include <asm/i8259.h> 49 50 #include "sleep.h" /* To include x86_acpi_suspend_lowlevel */ 51 static int __initdata acpi_force = 0; 52 int acpi_disabled; 53 EXPORT_SYMBOL(acpi_disabled); 54 55 #ifdef CONFIG_X86_64 56 # include <asm/proto.h> 57 #endif /* X86 */ 58 59 #define PREFIX "ACPI: " 60 61 int acpi_noirq; /* skip ACPI IRQ initialization */ 62 int acpi_pci_disabled; /* skip ACPI PCI scan and IRQ initialization */ 63 EXPORT_SYMBOL(acpi_pci_disabled); 64 65 int acpi_lapic; 66 int acpi_ioapic; 67 int acpi_strict; 68 int acpi_disable_cmcff; 69 70 u8 acpi_sci_flags __initdata; 71 int acpi_sci_override_gsi __initdata; 72 int acpi_skip_timer_override __initdata; 73 int acpi_use_timer_override __initdata; 74 int acpi_fix_pin2_polarity __initdata; 75 76 #ifdef CONFIG_X86_LOCAL_APIC 77 static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; 78 #endif 79 80 #ifdef CONFIG_X86_IO_APIC 81 /* 82 * Locks related to IOAPIC hotplug 83 * Hotplug side: 84 * ->device_hotplug_lock 85 * ->acpi_ioapic_lock 86 * ->ioapic_lock 87 * Interrupt mapping side: 88 * ->acpi_ioapic_lock 89 * ->ioapic_mutex 90 * ->ioapic_lock 91 */ 92 static DEFINE_MUTEX(acpi_ioapic_lock); 93 #endif 94 95 /* -------------------------------------------------------------------------- 96 Boot-time Configuration 97 -------------------------------------------------------------------------- */ 98 99 /* 100 * The default interrupt routing model is PIC (8259). This gets 101 * overridden if IOAPICs are enumerated (below). 102 */ 103 enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC; 104 105 106 /* 107 * ISA irqs by default are the first 16 gsis but can be 108 * any gsi as specified by an interrupt source override. 109 */ 110 static u32 isa_irq_to_gsi[NR_IRQS_LEGACY] __read_mostly = { 111 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 112 }; 113 114 #define ACPI_INVALID_GSI INT_MIN 115 116 /* 117 * This is just a simple wrapper around early_ioremap(), 118 * with sanity checks for phys == 0 and size == 0. 119 */ 120 char *__init __acpi_map_table(unsigned long phys, unsigned long size) 121 { 122 123 if (!phys || !size) 124 return NULL; 125 126 return early_ioremap(phys, size); 127 } 128 129 void __init __acpi_unmap_table(char *map, unsigned long size) 130 { 131 if (!map || !size) 132 return; 133 134 early_iounmap(map, size); 135 } 136 137 #ifdef CONFIG_X86_LOCAL_APIC 138 static int __init acpi_parse_madt(struct acpi_table_header *table) 139 { 140 struct acpi_table_madt *madt = NULL; 141 142 if (!boot_cpu_has(X86_FEATURE_APIC)) 143 return -EINVAL; 144 145 madt = (struct acpi_table_madt *)table; 146 if (!madt) { 147 printk(KERN_WARNING PREFIX "Unable to map MADT\n"); 148 return -ENODEV; 149 } 150 151 if (madt->address) { 152 acpi_lapic_addr = (u64) madt->address; 153 154 printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n", 155 madt->address); 156 } 157 158 default_acpi_madt_oem_check(madt->header.oem_id, 159 madt->header.oem_table_id); 160 161 return 0; 162 } 163 164 /** 165 * acpi_register_lapic - register a local apic and generates a logic cpu number 166 * @id: local apic id to register 167 * @acpiid: ACPI id to register 168 * @enabled: this cpu is enabled or not 169 * 170 * Returns the logic cpu number which maps to the local apic 171 */ 172 static int acpi_register_lapic(int id, u32 acpiid, u8 enabled) 173 { 174 unsigned int ver = 0; 175 int cpu; 176 177 if (id >= MAX_LOCAL_APIC) { 178 printk(KERN_INFO PREFIX "skipped apicid that is too big\n"); 179 return -EINVAL; 180 } 181 182 if (!enabled) { 183 ++disabled_cpus; 184 return -EINVAL; 185 } 186 187 if (boot_cpu_physical_apicid != -1U) 188 ver = boot_cpu_apic_version; 189 190 cpu = generic_processor_info(id, ver); 191 if (cpu >= 0) 192 early_per_cpu(x86_cpu_to_acpiid, cpu) = acpiid; 193 194 return cpu; 195 } 196 197 static int __init 198 acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end) 199 { 200 struct acpi_madt_local_x2apic *processor = NULL; 201 int apic_id; 202 u8 enabled; 203 204 processor = (struct acpi_madt_local_x2apic *)header; 205 206 if (BAD_MADT_ENTRY(processor, end)) 207 return -EINVAL; 208 209 acpi_table_print_madt_entry(header); 210 211 apic_id = processor->local_apic_id; 212 enabled = processor->lapic_flags & ACPI_MADT_ENABLED; 213 #ifdef CONFIG_X86_X2APIC 214 /* 215 * We need to register disabled CPU as well to permit 216 * counting disabled CPUs. This allows us to size 217 * cpus_possible_map more accurately, to permit 218 * to not preallocating memory for all NR_CPUS 219 * when we use CPU hotplug. 220 */ 221 if (!apic->apic_id_valid(apic_id) && enabled) 222 printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); 223 else 224 acpi_register_lapic(apic_id, processor->uid, enabled); 225 #else 226 printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); 227 #endif 228 229 return 0; 230 } 231 232 static int __init 233 acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end) 234 { 235 struct acpi_madt_local_apic *processor = NULL; 236 237 processor = (struct acpi_madt_local_apic *)header; 238 239 if (BAD_MADT_ENTRY(processor, end)) 240 return -EINVAL; 241 242 acpi_table_print_madt_entry(header); 243 244 /* Ignore invalid ID */ 245 if (processor->id == 0xff) 246 return 0; 247 248 /* 249 * We need to register disabled CPU as well to permit 250 * counting disabled CPUs. This allows us to size 251 * cpus_possible_map more accurately, to permit 252 * to not preallocating memory for all NR_CPUS 253 * when we use CPU hotplug. 254 */ 255 acpi_register_lapic(processor->id, /* APIC ID */ 256 processor->processor_id, /* ACPI ID */ 257 processor->lapic_flags & ACPI_MADT_ENABLED); 258 259 return 0; 260 } 261 262 static int __init 263 acpi_parse_sapic(struct acpi_subtable_header *header, const unsigned long end) 264 { 265 struct acpi_madt_local_sapic *processor = NULL; 266 267 processor = (struct acpi_madt_local_sapic *)header; 268 269 if (BAD_MADT_ENTRY(processor, end)) 270 return -EINVAL; 271 272 acpi_table_print_madt_entry(header); 273 274 acpi_register_lapic((processor->id << 8) | processor->eid,/* APIC ID */ 275 processor->processor_id, /* ACPI ID */ 276 processor->lapic_flags & ACPI_MADT_ENABLED); 277 278 return 0; 279 } 280 281 static int __init 282 acpi_parse_lapic_addr_ovr(struct acpi_subtable_header * header, 283 const unsigned long end) 284 { 285 struct acpi_madt_local_apic_override *lapic_addr_ovr = NULL; 286 287 lapic_addr_ovr = (struct acpi_madt_local_apic_override *)header; 288 289 if (BAD_MADT_ENTRY(lapic_addr_ovr, end)) 290 return -EINVAL; 291 292 acpi_table_print_madt_entry(header); 293 294 acpi_lapic_addr = lapic_addr_ovr->address; 295 296 return 0; 297 } 298 299 static int __init 300 acpi_parse_x2apic_nmi(struct acpi_subtable_header *header, 301 const unsigned long end) 302 { 303 struct acpi_madt_local_x2apic_nmi *x2apic_nmi = NULL; 304 305 x2apic_nmi = (struct acpi_madt_local_x2apic_nmi *)header; 306 307 if (BAD_MADT_ENTRY(x2apic_nmi, end)) 308 return -EINVAL; 309 310 acpi_table_print_madt_entry(header); 311 312 if (x2apic_nmi->lint != 1) 313 printk(KERN_WARNING PREFIX "NMI not connected to LINT 1!\n"); 314 315 return 0; 316 } 317 318 static int __init 319 acpi_parse_lapic_nmi(struct acpi_subtable_header * header, const unsigned long end) 320 { 321 struct acpi_madt_local_apic_nmi *lapic_nmi = NULL; 322 323 lapic_nmi = (struct acpi_madt_local_apic_nmi *)header; 324 325 if (BAD_MADT_ENTRY(lapic_nmi, end)) 326 return -EINVAL; 327 328 acpi_table_print_madt_entry(header); 329 330 if (lapic_nmi->lint != 1) 331 printk(KERN_WARNING PREFIX "NMI not connected to LINT 1!\n"); 332 333 return 0; 334 } 335 336 #endif /*CONFIG_X86_LOCAL_APIC */ 337 338 #ifdef CONFIG_X86_IO_APIC 339 #define MP_ISA_BUS 0 340 341 static void __init mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, 342 u32 gsi) 343 { 344 int ioapic; 345 int pin; 346 struct mpc_intsrc mp_irq; 347 348 /* 349 * Convert 'gsi' to 'ioapic.pin'. 350 */ 351 ioapic = mp_find_ioapic(gsi); 352 if (ioapic < 0) 353 return; 354 pin = mp_find_ioapic_pin(ioapic, gsi); 355 356 /* 357 * TBD: This check is for faulty timer entries, where the override 358 * erroneously sets the trigger to level, resulting in a HUGE 359 * increase of timer interrupts! 360 */ 361 if ((bus_irq == 0) && (trigger == 3)) 362 trigger = 1; 363 364 mp_irq.type = MP_INTSRC; 365 mp_irq.irqtype = mp_INT; 366 mp_irq.irqflag = (trigger << 2) | polarity; 367 mp_irq.srcbus = MP_ISA_BUS; 368 mp_irq.srcbusirq = bus_irq; /* IRQ */ 369 mp_irq.dstapic = mpc_ioapic_id(ioapic); /* APIC ID */ 370 mp_irq.dstirq = pin; /* INTIN# */ 371 372 mp_save_irq(&mp_irq); 373 374 /* 375 * Reset default identity mapping if gsi is also an legacy IRQ, 376 * otherwise there will be more than one entry with the same GSI 377 * and acpi_isa_irq_to_gsi() may give wrong result. 378 */ 379 if (gsi < nr_legacy_irqs() && isa_irq_to_gsi[gsi] == gsi) 380 isa_irq_to_gsi[gsi] = ACPI_INVALID_GSI; 381 isa_irq_to_gsi[bus_irq] = gsi; 382 } 383 384 static int mp_config_acpi_gsi(struct device *dev, u32 gsi, int trigger, 385 int polarity) 386 { 387 #ifdef CONFIG_X86_MPPARSE 388 struct mpc_intsrc mp_irq; 389 struct pci_dev *pdev; 390 unsigned char number; 391 unsigned int devfn; 392 int ioapic; 393 u8 pin; 394 395 if (!acpi_ioapic) 396 return 0; 397 if (!dev || !dev_is_pci(dev)) 398 return 0; 399 400 pdev = to_pci_dev(dev); 401 number = pdev->bus->number; 402 devfn = pdev->devfn; 403 pin = pdev->pin; 404 /* print the entry should happen on mptable identically */ 405 mp_irq.type = MP_INTSRC; 406 mp_irq.irqtype = mp_INT; 407 mp_irq.irqflag = (trigger == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) | 408 (polarity == ACPI_ACTIVE_HIGH ? 1 : 3); 409 mp_irq.srcbus = number; 410 mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3); 411 ioapic = mp_find_ioapic(gsi); 412 mp_irq.dstapic = mpc_ioapic_id(ioapic); 413 mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi); 414 415 mp_save_irq(&mp_irq); 416 #endif 417 return 0; 418 } 419 420 static int __init 421 acpi_parse_ioapic(struct acpi_subtable_header * header, const unsigned long end) 422 { 423 struct acpi_madt_io_apic *ioapic = NULL; 424 struct ioapic_domain_cfg cfg = { 425 .type = IOAPIC_DOMAIN_DYNAMIC, 426 .ops = &mp_ioapic_irqdomain_ops, 427 }; 428 429 ioapic = (struct acpi_madt_io_apic *)header; 430 431 if (BAD_MADT_ENTRY(ioapic, end)) 432 return -EINVAL; 433 434 acpi_table_print_madt_entry(header); 435 436 /* Statically assign IRQ numbers for IOAPICs hosting legacy IRQs */ 437 if (ioapic->global_irq_base < nr_legacy_irqs()) 438 cfg.type = IOAPIC_DOMAIN_LEGACY; 439 440 mp_register_ioapic(ioapic->id, ioapic->address, ioapic->global_irq_base, 441 &cfg); 442 443 return 0; 444 } 445 446 /* 447 * Parse Interrupt Source Override for the ACPI SCI 448 */ 449 static void __init acpi_sci_ioapic_setup(u8 bus_irq, u16 polarity, u16 trigger, u32 gsi) 450 { 451 if (trigger == 0) /* compatible SCI trigger is level */ 452 trigger = 3; 453 454 if (polarity == 0) /* compatible SCI polarity is low */ 455 polarity = 3; 456 457 /* Command-line over-ride via acpi_sci= */ 458 if (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) 459 trigger = (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) >> 2; 460 461 if (acpi_sci_flags & ACPI_MADT_POLARITY_MASK) 462 polarity = acpi_sci_flags & ACPI_MADT_POLARITY_MASK; 463 464 mp_override_legacy_irq(bus_irq, polarity, trigger, gsi); 465 acpi_penalize_sci_irq(bus_irq, trigger, polarity); 466 467 /* 468 * stash over-ride to indicate we've been here 469 * and for later update of acpi_gbl_FADT 470 */ 471 acpi_sci_override_gsi = gsi; 472 return; 473 } 474 475 static int __init 476 acpi_parse_int_src_ovr(struct acpi_subtable_header * header, 477 const unsigned long end) 478 { 479 struct acpi_madt_interrupt_override *intsrc = NULL; 480 481 intsrc = (struct acpi_madt_interrupt_override *)header; 482 483 if (BAD_MADT_ENTRY(intsrc, end)) 484 return -EINVAL; 485 486 acpi_table_print_madt_entry(header); 487 488 if (intsrc->source_irq == acpi_gbl_FADT.sci_interrupt) { 489 acpi_sci_ioapic_setup(intsrc->source_irq, 490 intsrc->inti_flags & ACPI_MADT_POLARITY_MASK, 491 (intsrc->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2, 492 intsrc->global_irq); 493 return 0; 494 } 495 496 if (intsrc->source_irq == 0) { 497 if (acpi_skip_timer_override) { 498 printk(PREFIX "BIOS IRQ0 override ignored.\n"); 499 return 0; 500 } 501 502 if ((intsrc->global_irq == 2) && acpi_fix_pin2_polarity 503 && (intsrc->inti_flags & ACPI_MADT_POLARITY_MASK)) { 504 intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK; 505 printk(PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n"); 506 } 507 } 508 509 mp_override_legacy_irq(intsrc->source_irq, 510 intsrc->inti_flags & ACPI_MADT_POLARITY_MASK, 511 (intsrc->inti_flags & ACPI_MADT_TRIGGER_MASK) >> 2, 512 intsrc->global_irq); 513 514 return 0; 515 } 516 517 static int __init 518 acpi_parse_nmi_src(struct acpi_subtable_header * header, const unsigned long end) 519 { 520 struct acpi_madt_nmi_source *nmi_src = NULL; 521 522 nmi_src = (struct acpi_madt_nmi_source *)header; 523 524 if (BAD_MADT_ENTRY(nmi_src, end)) 525 return -EINVAL; 526 527 acpi_table_print_madt_entry(header); 528 529 /* TBD: Support nimsrc entries? */ 530 531 return 0; 532 } 533 534 #endif /* CONFIG_X86_IO_APIC */ 535 536 /* 537 * acpi_pic_sci_set_trigger() 538 * 539 * use ELCR to set PIC-mode trigger type for SCI 540 * 541 * If a PIC-mode SCI is not recognized or gives spurious IRQ7's 542 * it may require Edge Trigger -- use "acpi_sci=edge" 543 * 544 * Port 0x4d0-4d1 are ECLR1 and ECLR2, the Edge/Level Control Registers 545 * for the 8259 PIC. bit[n] = 1 means irq[n] is Level, otherwise Edge. 546 * ECLR1 is IRQs 0-7 (IRQ 0, 1, 2 must be 0) 547 * ECLR2 is IRQs 8-15 (IRQ 8, 13 must be 0) 548 */ 549 550 void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger) 551 { 552 unsigned int mask = 1 << irq; 553 unsigned int old, new; 554 555 /* Real old ELCR mask */ 556 old = inb(0x4d0) | (inb(0x4d1) << 8); 557 558 /* 559 * If we use ACPI to set PCI IRQs, then we should clear ELCR 560 * since we will set it correctly as we enable the PCI irq 561 * routing. 562 */ 563 new = acpi_noirq ? old : 0; 564 565 /* 566 * Update SCI information in the ELCR, it isn't in the PCI 567 * routing tables.. 568 */ 569 switch (trigger) { 570 case 1: /* Edge - clear */ 571 new &= ~mask; 572 break; 573 case 3: /* Level - set */ 574 new |= mask; 575 break; 576 } 577 578 if (old == new) 579 return; 580 581 printk(PREFIX "setting ELCR to %04x (from %04x)\n", new, old); 582 outb(new, 0x4d0); 583 outb(new >> 8, 0x4d1); 584 } 585 586 int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp) 587 { 588 int rc, irq, trigger, polarity; 589 590 if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) { 591 *irqp = gsi; 592 return 0; 593 } 594 595 rc = acpi_get_override_irq(gsi, &trigger, &polarity); 596 if (rc == 0) { 597 trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE; 598 polarity = polarity ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH; 599 irq = acpi_register_gsi(NULL, gsi, trigger, polarity); 600 if (irq >= 0) { 601 *irqp = irq; 602 return 0; 603 } 604 } 605 606 return -1; 607 } 608 EXPORT_SYMBOL_GPL(acpi_gsi_to_irq); 609 610 int acpi_isa_irq_to_gsi(unsigned isa_irq, u32 *gsi) 611 { 612 if (isa_irq < nr_legacy_irqs() && 613 isa_irq_to_gsi[isa_irq] != ACPI_INVALID_GSI) { 614 *gsi = isa_irq_to_gsi[isa_irq]; 615 return 0; 616 } 617 618 return -1; 619 } 620 621 static int acpi_register_gsi_pic(struct device *dev, u32 gsi, 622 int trigger, int polarity) 623 { 624 #ifdef CONFIG_PCI 625 /* 626 * Make sure all (legacy) PCI IRQs are set as level-triggered. 627 */ 628 if (trigger == ACPI_LEVEL_SENSITIVE) 629 elcr_set_level_irq(gsi); 630 #endif 631 632 return gsi; 633 } 634 635 #ifdef CONFIG_X86_LOCAL_APIC 636 static int acpi_register_gsi_ioapic(struct device *dev, u32 gsi, 637 int trigger, int polarity) 638 { 639 int irq = gsi; 640 #ifdef CONFIG_X86_IO_APIC 641 int node; 642 struct irq_alloc_info info; 643 644 node = dev ? dev_to_node(dev) : NUMA_NO_NODE; 645 trigger = trigger == ACPI_EDGE_SENSITIVE ? 0 : 1; 646 polarity = polarity == ACPI_ACTIVE_HIGH ? 0 : 1; 647 ioapic_set_alloc_attr(&info, node, trigger, polarity); 648 649 mutex_lock(&acpi_ioapic_lock); 650 irq = mp_map_gsi_to_irq(gsi, IOAPIC_MAP_ALLOC, &info); 651 /* Don't set up the ACPI SCI because it's already set up */ 652 if (irq >= 0 && enable_update_mptable && 653 acpi_gbl_FADT.sci_interrupt != gsi) 654 mp_config_acpi_gsi(dev, gsi, trigger, polarity); 655 mutex_unlock(&acpi_ioapic_lock); 656 #endif 657 658 return irq; 659 } 660 661 static void acpi_unregister_gsi_ioapic(u32 gsi) 662 { 663 #ifdef CONFIG_X86_IO_APIC 664 int irq; 665 666 mutex_lock(&acpi_ioapic_lock); 667 irq = mp_map_gsi_to_irq(gsi, 0, NULL); 668 if (irq > 0) 669 mp_unmap_irq(irq); 670 mutex_unlock(&acpi_ioapic_lock); 671 #endif 672 } 673 #endif 674 675 int (*__acpi_register_gsi)(struct device *dev, u32 gsi, 676 int trigger, int polarity) = acpi_register_gsi_pic; 677 void (*__acpi_unregister_gsi)(u32 gsi) = NULL; 678 679 #ifdef CONFIG_ACPI_SLEEP 680 int (*acpi_suspend_lowlevel)(void) = x86_acpi_suspend_lowlevel; 681 #else 682 int (*acpi_suspend_lowlevel)(void); 683 #endif 684 685 /* 686 * success: return IRQ number (>=0) 687 * failure: return < 0 688 */ 689 int acpi_register_gsi(struct device *dev, u32 gsi, int trigger, int polarity) 690 { 691 return __acpi_register_gsi(dev, gsi, trigger, polarity); 692 } 693 EXPORT_SYMBOL_GPL(acpi_register_gsi); 694 695 void acpi_unregister_gsi(u32 gsi) 696 { 697 if (__acpi_unregister_gsi) 698 __acpi_unregister_gsi(gsi); 699 } 700 EXPORT_SYMBOL_GPL(acpi_unregister_gsi); 701 702 #ifdef CONFIG_X86_LOCAL_APIC 703 static void __init acpi_set_irq_model_ioapic(void) 704 { 705 acpi_irq_model = ACPI_IRQ_MODEL_IOAPIC; 706 __acpi_register_gsi = acpi_register_gsi_ioapic; 707 __acpi_unregister_gsi = acpi_unregister_gsi_ioapic; 708 acpi_ioapic = 1; 709 } 710 #endif 711 712 /* 713 * ACPI based hotplug support for CPU 714 */ 715 #ifdef CONFIG_ACPI_HOTPLUG_CPU 716 #include <acpi/processor.h> 717 718 static int acpi_map_cpu2node(acpi_handle handle, int cpu, int physid) 719 { 720 #ifdef CONFIG_ACPI_NUMA 721 int nid; 722 723 nid = acpi_get_node(handle); 724 if (nid != NUMA_NO_NODE) { 725 set_apicid_to_node(physid, nid); 726 numa_set_node(cpu, nid); 727 } 728 #endif 729 return 0; 730 } 731 732 int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, u32 acpi_id, 733 int *pcpu) 734 { 735 int cpu; 736 737 cpu = acpi_register_lapic(physid, acpi_id, ACPI_MADT_ENABLED); 738 if (cpu < 0) { 739 pr_info(PREFIX "Unable to map lapic to logical cpu number\n"); 740 return cpu; 741 } 742 743 acpi_processor_set_pdc(handle); 744 acpi_map_cpu2node(handle, cpu, physid); 745 746 *pcpu = cpu; 747 return 0; 748 } 749 EXPORT_SYMBOL(acpi_map_cpu); 750 751 int acpi_unmap_cpu(int cpu) 752 { 753 #ifdef CONFIG_ACPI_NUMA 754 set_apicid_to_node(per_cpu(x86_cpu_to_apicid, cpu), NUMA_NO_NODE); 755 #endif 756 757 per_cpu(x86_cpu_to_apicid, cpu) = -1; 758 set_cpu_present(cpu, false); 759 num_processors--; 760 761 return (0); 762 } 763 EXPORT_SYMBOL(acpi_unmap_cpu); 764 #endif /* CONFIG_ACPI_HOTPLUG_CPU */ 765 766 int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base) 767 { 768 int ret = -ENOSYS; 769 #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC 770 int ioapic_id; 771 u64 addr; 772 struct ioapic_domain_cfg cfg = { 773 .type = IOAPIC_DOMAIN_DYNAMIC, 774 .ops = &mp_ioapic_irqdomain_ops, 775 }; 776 777 ioapic_id = acpi_get_ioapic_id(handle, gsi_base, &addr); 778 if (ioapic_id < 0) { 779 unsigned long long uid; 780 acpi_status status; 781 782 status = acpi_evaluate_integer(handle, METHOD_NAME__UID, 783 NULL, &uid); 784 if (ACPI_FAILURE(status)) { 785 acpi_handle_warn(handle, "failed to get IOAPIC ID.\n"); 786 return -EINVAL; 787 } 788 ioapic_id = (int)uid; 789 } 790 791 mutex_lock(&acpi_ioapic_lock); 792 ret = mp_register_ioapic(ioapic_id, phys_addr, gsi_base, &cfg); 793 mutex_unlock(&acpi_ioapic_lock); 794 #endif 795 796 return ret; 797 } 798 EXPORT_SYMBOL(acpi_register_ioapic); 799 800 int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base) 801 { 802 int ret = -ENOSYS; 803 804 #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC 805 mutex_lock(&acpi_ioapic_lock); 806 ret = mp_unregister_ioapic(gsi_base); 807 mutex_unlock(&acpi_ioapic_lock); 808 #endif 809 810 return ret; 811 } 812 EXPORT_SYMBOL(acpi_unregister_ioapic); 813 814 /** 815 * acpi_ioapic_registered - Check whether IOAPIC assoicatied with @gsi_base 816 * has been registered 817 * @handle: ACPI handle of the IOAPIC deivce 818 * @gsi_base: GSI base associated with the IOAPIC 819 * 820 * Assume caller holds some type of lock to serialize acpi_ioapic_registered() 821 * with acpi_register_ioapic()/acpi_unregister_ioapic(). 822 */ 823 int acpi_ioapic_registered(acpi_handle handle, u32 gsi_base) 824 { 825 int ret = 0; 826 827 #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC 828 mutex_lock(&acpi_ioapic_lock); 829 ret = mp_ioapic_registered(gsi_base); 830 mutex_unlock(&acpi_ioapic_lock); 831 #endif 832 833 return ret; 834 } 835 836 static int __init acpi_parse_sbf(struct acpi_table_header *table) 837 { 838 struct acpi_table_boot *sb = (struct acpi_table_boot *)table; 839 840 sbf_port = sb->cmos_index; /* Save CMOS port */ 841 842 return 0; 843 } 844 845 #ifdef CONFIG_HPET_TIMER 846 #include <asm/hpet.h> 847 848 static struct resource *hpet_res __initdata; 849 850 static int __init acpi_parse_hpet(struct acpi_table_header *table) 851 { 852 struct acpi_table_hpet *hpet_tbl = (struct acpi_table_hpet *)table; 853 854 if (hpet_tbl->address.space_id != ACPI_SPACE_MEM) { 855 printk(KERN_WARNING PREFIX "HPET timers must be located in " 856 "memory.\n"); 857 return -1; 858 } 859 860 hpet_address = hpet_tbl->address.address; 861 hpet_blockid = hpet_tbl->sequence; 862 863 /* 864 * Some broken BIOSes advertise HPET at 0x0. We really do not 865 * want to allocate a resource there. 866 */ 867 if (!hpet_address) { 868 printk(KERN_WARNING PREFIX 869 "HPET id: %#x base: %#lx is invalid\n", 870 hpet_tbl->id, hpet_address); 871 return 0; 872 } 873 #ifdef CONFIG_X86_64 874 /* 875 * Some even more broken BIOSes advertise HPET at 876 * 0xfed0000000000000 instead of 0xfed00000. Fix it up and add 877 * some noise: 878 */ 879 if (hpet_address == 0xfed0000000000000UL) { 880 if (!hpet_force_user) { 881 printk(KERN_WARNING PREFIX "HPET id: %#x " 882 "base: 0xfed0000000000000 is bogus\n " 883 "try hpet=force on the kernel command line to " 884 "fix it up to 0xfed00000.\n", hpet_tbl->id); 885 hpet_address = 0; 886 return 0; 887 } 888 printk(KERN_WARNING PREFIX 889 "HPET id: %#x base: 0xfed0000000000000 fixed up " 890 "to 0xfed00000.\n", hpet_tbl->id); 891 hpet_address >>= 32; 892 } 893 #endif 894 printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", 895 hpet_tbl->id, hpet_address); 896 897 /* 898 * Allocate and initialize the HPET firmware resource for adding into 899 * the resource tree during the lateinit timeframe. 900 */ 901 #define HPET_RESOURCE_NAME_SIZE 9 902 hpet_res = alloc_bootmem(sizeof(*hpet_res) + HPET_RESOURCE_NAME_SIZE); 903 904 hpet_res->name = (void *)&hpet_res[1]; 905 hpet_res->flags = IORESOURCE_MEM; 906 snprintf((char *)hpet_res->name, HPET_RESOURCE_NAME_SIZE, "HPET %u", 907 hpet_tbl->sequence); 908 909 hpet_res->start = hpet_address; 910 hpet_res->end = hpet_address + (1 * 1024) - 1; 911 912 return 0; 913 } 914 915 /* 916 * hpet_insert_resource inserts the HPET resources used into the resource 917 * tree. 918 */ 919 static __init int hpet_insert_resource(void) 920 { 921 if (!hpet_res) 922 return 1; 923 924 return insert_resource(&iomem_resource, hpet_res); 925 } 926 927 late_initcall(hpet_insert_resource); 928 929 #else 930 #define acpi_parse_hpet NULL 931 #endif 932 933 static int __init acpi_parse_fadt(struct acpi_table_header *table) 934 { 935 if (!(acpi_gbl_FADT.boot_flags & ACPI_FADT_LEGACY_DEVICES)) { 936 pr_debug("ACPI: no legacy devices present\n"); 937 x86_platform.legacy.devices.pnpbios = 0; 938 } 939 940 if (acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID && 941 !(acpi_gbl_FADT.boot_flags & ACPI_FADT_8042) && 942 x86_platform.legacy.i8042 != X86_LEGACY_I8042_PLATFORM_ABSENT) { 943 pr_debug("ACPI: i8042 controller is absent\n"); 944 x86_platform.legacy.i8042 = X86_LEGACY_I8042_FIRMWARE_ABSENT; 945 } 946 947 if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_CMOS_RTC) { 948 pr_debug("ACPI: not registering RTC platform device\n"); 949 x86_platform.legacy.rtc = 0; 950 } 951 952 #ifdef CONFIG_X86_PM_TIMER 953 /* detect the location of the ACPI PM Timer */ 954 if (acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID) { 955 /* FADT rev. 2 */ 956 if (acpi_gbl_FADT.xpm_timer_block.space_id != 957 ACPI_ADR_SPACE_SYSTEM_IO) 958 return 0; 959 960 pmtmr_ioport = acpi_gbl_FADT.xpm_timer_block.address; 961 /* 962 * "X" fields are optional extensions to the original V1.0 963 * fields, so we must selectively expand V1.0 fields if the 964 * corresponding X field is zero. 965 */ 966 if (!pmtmr_ioport) 967 pmtmr_ioport = acpi_gbl_FADT.pm_timer_block; 968 } else { 969 /* FADT rev. 1 */ 970 pmtmr_ioport = acpi_gbl_FADT.pm_timer_block; 971 } 972 if (pmtmr_ioport) 973 printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n", 974 pmtmr_ioport); 975 #endif 976 return 0; 977 } 978 979 #ifdef CONFIG_X86_LOCAL_APIC 980 /* 981 * Parse LAPIC entries in MADT 982 * returns 0 on success, < 0 on error 983 */ 984 985 static int __init early_acpi_parse_madt_lapic_addr_ovr(void) 986 { 987 int count; 988 989 if (!boot_cpu_has(X86_FEATURE_APIC)) 990 return -ENODEV; 991 992 /* 993 * Note that the LAPIC address is obtained from the MADT (32-bit value) 994 * and (optionally) overridden by a LAPIC_ADDR_OVR entry (64-bit value). 995 */ 996 997 count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE, 998 acpi_parse_lapic_addr_ovr, 0); 999 if (count < 0) { 1000 printk(KERN_ERR PREFIX 1001 "Error parsing LAPIC address override entry\n"); 1002 return count; 1003 } 1004 1005 register_lapic_address(acpi_lapic_addr); 1006 1007 return count; 1008 } 1009 1010 static int __init acpi_parse_madt_lapic_entries(void) 1011 { 1012 int count; 1013 int x2count = 0; 1014 int ret; 1015 struct acpi_subtable_proc madt_proc[2]; 1016 1017 if (!boot_cpu_has(X86_FEATURE_APIC)) 1018 return -ENODEV; 1019 1020 count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC, 1021 acpi_parse_sapic, MAX_LOCAL_APIC); 1022 1023 if (!count) { 1024 memset(madt_proc, 0, sizeof(madt_proc)); 1025 madt_proc[0].id = ACPI_MADT_TYPE_LOCAL_APIC; 1026 madt_proc[0].handler = acpi_parse_lapic; 1027 madt_proc[1].id = ACPI_MADT_TYPE_LOCAL_X2APIC; 1028 madt_proc[1].handler = acpi_parse_x2apic; 1029 ret = acpi_table_parse_entries_array(ACPI_SIG_MADT, 1030 sizeof(struct acpi_table_madt), 1031 madt_proc, ARRAY_SIZE(madt_proc), MAX_LOCAL_APIC); 1032 if (ret < 0) { 1033 printk(KERN_ERR PREFIX 1034 "Error parsing LAPIC/X2APIC entries\n"); 1035 return ret; 1036 } 1037 1038 count = madt_proc[0].count; 1039 x2count = madt_proc[1].count; 1040 } 1041 if (!count && !x2count) { 1042 printk(KERN_ERR PREFIX "No LAPIC entries present\n"); 1043 /* TBD: Cleanup to allow fallback to MPS */ 1044 return -ENODEV; 1045 } else if (count < 0 || x2count < 0) { 1046 printk(KERN_ERR PREFIX "Error parsing LAPIC entry\n"); 1047 /* TBD: Cleanup to allow fallback to MPS */ 1048 return count; 1049 } 1050 1051 x2count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_X2APIC_NMI, 1052 acpi_parse_x2apic_nmi, 0); 1053 count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_NMI, 1054 acpi_parse_lapic_nmi, 0); 1055 if (count < 0 || x2count < 0) { 1056 printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); 1057 /* TBD: Cleanup to allow fallback to MPS */ 1058 return count; 1059 } 1060 return 0; 1061 } 1062 #endif /* CONFIG_X86_LOCAL_APIC */ 1063 1064 #ifdef CONFIG_X86_IO_APIC 1065 static void __init mp_config_acpi_legacy_irqs(void) 1066 { 1067 int i; 1068 struct mpc_intsrc mp_irq; 1069 1070 #ifdef CONFIG_EISA 1071 /* 1072 * Fabricate the legacy ISA bus (bus #31). 1073 */ 1074 mp_bus_id_to_type[MP_ISA_BUS] = MP_BUS_ISA; 1075 #endif 1076 set_bit(MP_ISA_BUS, mp_bus_not_pci); 1077 pr_debug("Bus #%d is ISA\n", MP_ISA_BUS); 1078 1079 /* 1080 * Use the default configuration for the IRQs 0-15. Unless 1081 * overridden by (MADT) interrupt source override entries. 1082 */ 1083 for (i = 0; i < nr_legacy_irqs(); i++) { 1084 int ioapic, pin; 1085 unsigned int dstapic; 1086 int idx; 1087 u32 gsi; 1088 1089 /* Locate the gsi that irq i maps to. */ 1090 if (acpi_isa_irq_to_gsi(i, &gsi)) 1091 continue; 1092 1093 /* 1094 * Locate the IOAPIC that manages the ISA IRQ. 1095 */ 1096 ioapic = mp_find_ioapic(gsi); 1097 if (ioapic < 0) 1098 continue; 1099 pin = mp_find_ioapic_pin(ioapic, gsi); 1100 dstapic = mpc_ioapic_id(ioapic); 1101 1102 for (idx = 0; idx < mp_irq_entries; idx++) { 1103 struct mpc_intsrc *irq = mp_irqs + idx; 1104 1105 /* Do we already have a mapping for this ISA IRQ? */ 1106 if (irq->srcbus == MP_ISA_BUS && irq->srcbusirq == i) 1107 break; 1108 1109 /* Do we already have a mapping for this IOAPIC pin */ 1110 if (irq->dstapic == dstapic && irq->dstirq == pin) 1111 break; 1112 } 1113 1114 if (idx != mp_irq_entries) { 1115 printk(KERN_DEBUG "ACPI: IRQ%d used by override.\n", i); 1116 continue; /* IRQ already used */ 1117 } 1118 1119 mp_irq.type = MP_INTSRC; 1120 mp_irq.irqflag = 0; /* Conforming */ 1121 mp_irq.srcbus = MP_ISA_BUS; 1122 mp_irq.dstapic = dstapic; 1123 mp_irq.irqtype = mp_INT; 1124 mp_irq.srcbusirq = i; /* Identity mapped */ 1125 mp_irq.dstirq = pin; 1126 1127 mp_save_irq(&mp_irq); 1128 } 1129 } 1130 1131 /* 1132 * Parse IOAPIC related entries in MADT 1133 * returns 0 on success, < 0 on error 1134 */ 1135 static int __init acpi_parse_madt_ioapic_entries(void) 1136 { 1137 int count; 1138 1139 /* 1140 * ACPI interpreter is required to complete interrupt setup, 1141 * so if it is off, don't enumerate the io-apics with ACPI. 1142 * If MPS is present, it will handle them, 1143 * otherwise the system will stay in PIC mode 1144 */ 1145 if (acpi_disabled || acpi_noirq) 1146 return -ENODEV; 1147 1148 if (!boot_cpu_has(X86_FEATURE_APIC)) 1149 return -ENODEV; 1150 1151 /* 1152 * if "noapic" boot option, don't look for IO-APICs 1153 */ 1154 if (skip_ioapic_setup) { 1155 printk(KERN_INFO PREFIX "Skipping IOAPIC probe " 1156 "due to 'noapic' option.\n"); 1157 return -ENODEV; 1158 } 1159 1160 count = acpi_table_parse_madt(ACPI_MADT_TYPE_IO_APIC, acpi_parse_ioapic, 1161 MAX_IO_APICS); 1162 if (!count) { 1163 printk(KERN_ERR PREFIX "No IOAPIC entries present\n"); 1164 return -ENODEV; 1165 } else if (count < 0) { 1166 printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n"); 1167 return count; 1168 } 1169 1170 count = acpi_table_parse_madt(ACPI_MADT_TYPE_INTERRUPT_OVERRIDE, 1171 acpi_parse_int_src_ovr, nr_irqs); 1172 if (count < 0) { 1173 printk(KERN_ERR PREFIX 1174 "Error parsing interrupt source overrides entry\n"); 1175 /* TBD: Cleanup to allow fallback to MPS */ 1176 return count; 1177 } 1178 1179 /* 1180 * If BIOS did not supply an INT_SRC_OVR for the SCI 1181 * pretend we got one so we can set the SCI flags. 1182 */ 1183 if (!acpi_sci_override_gsi) 1184 acpi_sci_ioapic_setup(acpi_gbl_FADT.sci_interrupt, 0, 0, 1185 acpi_gbl_FADT.sci_interrupt); 1186 1187 /* Fill in identity legacy mappings where no override */ 1188 mp_config_acpi_legacy_irqs(); 1189 1190 count = acpi_table_parse_madt(ACPI_MADT_TYPE_NMI_SOURCE, 1191 acpi_parse_nmi_src, nr_irqs); 1192 if (count < 0) { 1193 printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); 1194 /* TBD: Cleanup to allow fallback to MPS */ 1195 return count; 1196 } 1197 1198 return 0; 1199 } 1200 #else 1201 static inline int acpi_parse_madt_ioapic_entries(void) 1202 { 1203 return -1; 1204 } 1205 #endif /* !CONFIG_X86_IO_APIC */ 1206 1207 static void __init early_acpi_process_madt(void) 1208 { 1209 #ifdef CONFIG_X86_LOCAL_APIC 1210 int error; 1211 1212 if (!acpi_table_parse(ACPI_SIG_MADT, acpi_parse_madt)) { 1213 1214 /* 1215 * Parse MADT LAPIC entries 1216 */ 1217 error = early_acpi_parse_madt_lapic_addr_ovr(); 1218 if (!error) { 1219 acpi_lapic = 1; 1220 smp_found_config = 1; 1221 } 1222 if (error == -EINVAL) { 1223 /* 1224 * Dell Precision Workstation 410, 610 come here. 1225 */ 1226 printk(KERN_ERR PREFIX 1227 "Invalid BIOS MADT, disabling ACPI\n"); 1228 disable_acpi(); 1229 } 1230 } 1231 #endif 1232 } 1233 1234 static void __init acpi_process_madt(void) 1235 { 1236 #ifdef CONFIG_X86_LOCAL_APIC 1237 int error; 1238 1239 if (!acpi_table_parse(ACPI_SIG_MADT, acpi_parse_madt)) { 1240 1241 /* 1242 * Parse MADT LAPIC entries 1243 */ 1244 error = acpi_parse_madt_lapic_entries(); 1245 if (!error) { 1246 acpi_lapic = 1; 1247 1248 /* 1249 * Parse MADT IO-APIC entries 1250 */ 1251 mutex_lock(&acpi_ioapic_lock); 1252 error = acpi_parse_madt_ioapic_entries(); 1253 mutex_unlock(&acpi_ioapic_lock); 1254 if (!error) { 1255 acpi_set_irq_model_ioapic(); 1256 1257 smp_found_config = 1; 1258 } 1259 } 1260 if (error == -EINVAL) { 1261 /* 1262 * Dell Precision Workstation 410, 610 come here. 1263 */ 1264 printk(KERN_ERR PREFIX 1265 "Invalid BIOS MADT, disabling ACPI\n"); 1266 disable_acpi(); 1267 } 1268 } else { 1269 /* 1270 * ACPI found no MADT, and so ACPI wants UP PIC mode. 1271 * In the event an MPS table was found, forget it. 1272 * Boot with "acpi=off" to use MPS on such a system. 1273 */ 1274 if (smp_found_config) { 1275 printk(KERN_WARNING PREFIX 1276 "No APIC-table, disabling MPS\n"); 1277 smp_found_config = 0; 1278 } 1279 } 1280 1281 /* 1282 * ACPI supports both logical (e.g. Hyper-Threading) and physical 1283 * processors, where MPS only supports physical. 1284 */ 1285 if (acpi_lapic && acpi_ioapic) 1286 printk(KERN_INFO "Using ACPI (MADT) for SMP configuration " 1287 "information\n"); 1288 else if (acpi_lapic) 1289 printk(KERN_INFO "Using ACPI for processor (LAPIC) " 1290 "configuration information\n"); 1291 #endif 1292 return; 1293 } 1294 1295 static int __init disable_acpi_irq(const struct dmi_system_id *d) 1296 { 1297 if (!acpi_force) { 1298 printk(KERN_NOTICE "%s detected: force use of acpi=noirq\n", 1299 d->ident); 1300 acpi_noirq_set(); 1301 } 1302 return 0; 1303 } 1304 1305 static int __init disable_acpi_pci(const struct dmi_system_id *d) 1306 { 1307 if (!acpi_force) { 1308 printk(KERN_NOTICE "%s detected: force use of pci=noacpi\n", 1309 d->ident); 1310 acpi_disable_pci(); 1311 } 1312 return 0; 1313 } 1314 1315 static int __init dmi_disable_acpi(const struct dmi_system_id *d) 1316 { 1317 if (!acpi_force) { 1318 printk(KERN_NOTICE "%s detected: acpi off\n", d->ident); 1319 disable_acpi(); 1320 } else { 1321 printk(KERN_NOTICE 1322 "Warning: DMI blacklist says broken, but acpi forced\n"); 1323 } 1324 return 0; 1325 } 1326 1327 /* 1328 * Force ignoring BIOS IRQ0 override 1329 */ 1330 static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d) 1331 { 1332 if (!acpi_skip_timer_override) { 1333 pr_notice("%s detected: Ignoring BIOS IRQ0 override\n", 1334 d->ident); 1335 acpi_skip_timer_override = 1; 1336 } 1337 return 0; 1338 } 1339 1340 /* 1341 * ACPI offers an alternative platform interface model that removes 1342 * ACPI hardware requirements for platforms that do not implement 1343 * the PC Architecture. 1344 * 1345 * We initialize the Hardware-reduced ACPI model here: 1346 */ 1347 static void __init acpi_reduced_hw_init(void) 1348 { 1349 if (acpi_gbl_reduced_hardware) { 1350 /* 1351 * Override x86_init functions and bypass legacy pic 1352 * in Hardware-reduced ACPI mode 1353 */ 1354 x86_init.timers.timer_init = x86_init_noop; 1355 x86_init.irqs.pre_vector_init = x86_init_noop; 1356 legacy_pic = &null_legacy_pic; 1357 } 1358 } 1359 1360 /* 1361 * If your system is blacklisted here, but you find that acpi=force 1362 * works for you, please contact linux-acpi@vger.kernel.org 1363 */ 1364 static struct dmi_system_id __initdata acpi_dmi_table[] = { 1365 /* 1366 * Boxes that need ACPI disabled 1367 */ 1368 { 1369 .callback = dmi_disable_acpi, 1370 .ident = "IBM Thinkpad", 1371 .matches = { 1372 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), 1373 DMI_MATCH(DMI_BOARD_NAME, "2629H1G"), 1374 }, 1375 }, 1376 1377 /* 1378 * Boxes that need ACPI PCI IRQ routing disabled 1379 */ 1380 { 1381 .callback = disable_acpi_irq, 1382 .ident = "ASUS A7V", 1383 .matches = { 1384 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"), 1385 DMI_MATCH(DMI_BOARD_NAME, "<A7V>"), 1386 /* newer BIOS, Revision 1011, does work */ 1387 DMI_MATCH(DMI_BIOS_VERSION, 1388 "ASUS A7V ACPI BIOS Revision 1007"), 1389 }, 1390 }, 1391 { 1392 /* 1393 * Latest BIOS for IBM 600E (1.16) has bad pcinum 1394 * for LPC bridge, which is needed for the PCI 1395 * interrupt links to work. DSDT fix is in bug 5966. 1396 * 2645, 2646 model numbers are shared with 600/600E/600X 1397 */ 1398 .callback = disable_acpi_irq, 1399 .ident = "IBM Thinkpad 600 Series 2645", 1400 .matches = { 1401 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), 1402 DMI_MATCH(DMI_BOARD_NAME, "2645"), 1403 }, 1404 }, 1405 { 1406 .callback = disable_acpi_irq, 1407 .ident = "IBM Thinkpad 600 Series 2646", 1408 .matches = { 1409 DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), 1410 DMI_MATCH(DMI_BOARD_NAME, "2646"), 1411 }, 1412 }, 1413 /* 1414 * Boxes that need ACPI PCI IRQ routing and PCI scan disabled 1415 */ 1416 { /* _BBN 0 bug */ 1417 .callback = disable_acpi_pci, 1418 .ident = "ASUS PR-DLS", 1419 .matches = { 1420 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), 1421 DMI_MATCH(DMI_BOARD_NAME, "PR-DLS"), 1422 DMI_MATCH(DMI_BIOS_VERSION, 1423 "ASUS PR-DLS ACPI BIOS Revision 1010"), 1424 DMI_MATCH(DMI_BIOS_DATE, "03/21/2003") 1425 }, 1426 }, 1427 { 1428 .callback = disable_acpi_pci, 1429 .ident = "Acer TravelMate 36x Laptop", 1430 .matches = { 1431 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 1432 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), 1433 }, 1434 }, 1435 {} 1436 }; 1437 1438 /* second table for DMI checks that should run after early-quirks */ 1439 static struct dmi_system_id __initdata acpi_dmi_table_late[] = { 1440 /* 1441 * HP laptops which use a DSDT reporting as HP/SB400/10000, 1442 * which includes some code which overrides all temperature 1443 * trip points to 16C if the INTIN2 input of the I/O APIC 1444 * is enabled. This input is incorrectly designated the 1445 * ISA IRQ 0 via an interrupt source override even though 1446 * it is wired to the output of the master 8259A and INTIN0 1447 * is not connected at all. Force ignoring BIOS IRQ0 1448 * override in that cases. 1449 */ 1450 { 1451 .callback = dmi_ignore_irq0_timer_override, 1452 .ident = "HP nx6115 laptop", 1453 .matches = { 1454 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 1455 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6115"), 1456 }, 1457 }, 1458 { 1459 .callback = dmi_ignore_irq0_timer_override, 1460 .ident = "HP NX6125 laptop", 1461 .matches = { 1462 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 1463 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6125"), 1464 }, 1465 }, 1466 { 1467 .callback = dmi_ignore_irq0_timer_override, 1468 .ident = "HP NX6325 laptop", 1469 .matches = { 1470 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 1471 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"), 1472 }, 1473 }, 1474 { 1475 .callback = dmi_ignore_irq0_timer_override, 1476 .ident = "HP 6715b laptop", 1477 .matches = { 1478 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 1479 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6715b"), 1480 }, 1481 }, 1482 { 1483 .callback = dmi_ignore_irq0_timer_override, 1484 .ident = "FUJITSU SIEMENS", 1485 .matches = { 1486 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), 1487 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"), 1488 }, 1489 }, 1490 {} 1491 }; 1492 1493 /* 1494 * acpi_boot_table_init() and acpi_boot_init() 1495 * called from setup_arch(), always. 1496 * 1. checksums all tables 1497 * 2. enumerates lapics 1498 * 3. enumerates io-apics 1499 * 1500 * acpi_table_init() is separate to allow reading SRAT without 1501 * other side effects. 1502 * 1503 * side effects of acpi_boot_init: 1504 * acpi_lapic = 1 if LAPIC found 1505 * acpi_ioapic = 1 if IOAPIC found 1506 * if (acpi_lapic && acpi_ioapic) smp_found_config = 1; 1507 * if acpi_blacklisted() acpi_disabled = 1; 1508 * acpi_irq_model=... 1509 * ... 1510 */ 1511 1512 void __init acpi_boot_table_init(void) 1513 { 1514 dmi_check_system(acpi_dmi_table); 1515 1516 /* 1517 * If acpi_disabled, bail out 1518 */ 1519 if (acpi_disabled) 1520 return; 1521 1522 /* 1523 * Initialize the ACPI boot-time table parser. 1524 */ 1525 if (acpi_table_init()) { 1526 disable_acpi(); 1527 return; 1528 } 1529 1530 acpi_table_parse(ACPI_SIG_BOOT, acpi_parse_sbf); 1531 1532 /* 1533 * blacklist may disable ACPI entirely 1534 */ 1535 if (acpi_blacklisted()) { 1536 if (acpi_force) { 1537 printk(KERN_WARNING PREFIX "acpi=force override\n"); 1538 } else { 1539 printk(KERN_WARNING PREFIX "Disabling ACPI support\n"); 1540 disable_acpi(); 1541 return; 1542 } 1543 } 1544 } 1545 1546 int __init early_acpi_boot_init(void) 1547 { 1548 /* 1549 * If acpi_disabled, bail out 1550 */ 1551 if (acpi_disabled) 1552 return 1; 1553 1554 /* 1555 * Process the Multiple APIC Description Table (MADT), if present 1556 */ 1557 early_acpi_process_madt(); 1558 1559 /* 1560 * Hardware-reduced ACPI mode initialization: 1561 */ 1562 acpi_reduced_hw_init(); 1563 1564 return 0; 1565 } 1566 1567 static int __init acpi_parse_bgrt(struct acpi_table_header *table) 1568 { 1569 efi_bgrt_init(table); 1570 return 0; 1571 } 1572 1573 int __init acpi_boot_init(void) 1574 { 1575 /* those are executed after early-quirks are executed */ 1576 dmi_check_system(acpi_dmi_table_late); 1577 1578 /* 1579 * If acpi_disabled, bail out 1580 */ 1581 if (acpi_disabled) 1582 return 1; 1583 1584 acpi_table_parse(ACPI_SIG_BOOT, acpi_parse_sbf); 1585 1586 /* 1587 * set sci_int and PM timer address 1588 */ 1589 acpi_table_parse(ACPI_SIG_FADT, acpi_parse_fadt); 1590 1591 /* 1592 * Process the Multiple APIC Description Table (MADT), if present 1593 */ 1594 acpi_process_madt(); 1595 1596 acpi_table_parse(ACPI_SIG_HPET, acpi_parse_hpet); 1597 if (IS_ENABLED(CONFIG_ACPI_BGRT)) 1598 acpi_table_parse(ACPI_SIG_BGRT, acpi_parse_bgrt); 1599 1600 if (!acpi_noirq) 1601 x86_init.pci.init = pci_acpi_init; 1602 1603 return 0; 1604 } 1605 1606 static int __init parse_acpi(char *arg) 1607 { 1608 if (!arg) 1609 return -EINVAL; 1610 1611 /* "acpi=off" disables both ACPI table parsing and interpreter */ 1612 if (strcmp(arg, "off") == 0) { 1613 disable_acpi(); 1614 } 1615 /* acpi=force to over-ride black-list */ 1616 else if (strcmp(arg, "force") == 0) { 1617 acpi_force = 1; 1618 acpi_disabled = 0; 1619 } 1620 /* acpi=strict disables out-of-spec workarounds */ 1621 else if (strcmp(arg, "strict") == 0) { 1622 acpi_strict = 1; 1623 } 1624 /* acpi=rsdt use RSDT instead of XSDT */ 1625 else if (strcmp(arg, "rsdt") == 0) { 1626 acpi_gbl_do_not_use_xsdt = TRUE; 1627 } 1628 /* "acpi=noirq" disables ACPI interrupt routing */ 1629 else if (strcmp(arg, "noirq") == 0) { 1630 acpi_noirq_set(); 1631 } 1632 /* "acpi=copy_dsdt" copys DSDT */ 1633 else if (strcmp(arg, "copy_dsdt") == 0) { 1634 acpi_gbl_copy_dsdt_locally = 1; 1635 } 1636 /* "acpi=nocmcff" disables FF mode for corrected errors */ 1637 else if (strcmp(arg, "nocmcff") == 0) { 1638 acpi_disable_cmcff = 1; 1639 } else { 1640 /* Core will printk when we return error. */ 1641 return -EINVAL; 1642 } 1643 return 0; 1644 } 1645 early_param("acpi", parse_acpi); 1646 1647 /* FIXME: Using pci= for an ACPI parameter is a travesty. */ 1648 static int __init parse_pci(char *arg) 1649 { 1650 if (arg && strcmp(arg, "noacpi") == 0) 1651 acpi_disable_pci(); 1652 return 0; 1653 } 1654 early_param("pci", parse_pci); 1655 1656 int __init acpi_mps_check(void) 1657 { 1658 #if defined(CONFIG_X86_LOCAL_APIC) && !defined(CONFIG_X86_MPPARSE) 1659 /* mptable code is not built-in*/ 1660 if (acpi_disabled || acpi_noirq) { 1661 printk(KERN_WARNING "MPS support code is not built-in.\n" 1662 "Using acpi=off or acpi=noirq or pci=noacpi " 1663 "may have problem\n"); 1664 return 1; 1665 } 1666 #endif 1667 return 0; 1668 } 1669 1670 #ifdef CONFIG_X86_IO_APIC 1671 static int __init parse_acpi_skip_timer_override(char *arg) 1672 { 1673 acpi_skip_timer_override = 1; 1674 return 0; 1675 } 1676 early_param("acpi_skip_timer_override", parse_acpi_skip_timer_override); 1677 1678 static int __init parse_acpi_use_timer_override(char *arg) 1679 { 1680 acpi_use_timer_override = 1; 1681 return 0; 1682 } 1683 early_param("acpi_use_timer_override", parse_acpi_use_timer_override); 1684 #endif /* CONFIG_X86_IO_APIC */ 1685 1686 static int __init setup_acpi_sci(char *s) 1687 { 1688 if (!s) 1689 return -EINVAL; 1690 if (!strcmp(s, "edge")) 1691 acpi_sci_flags = ACPI_MADT_TRIGGER_EDGE | 1692 (acpi_sci_flags & ~ACPI_MADT_TRIGGER_MASK); 1693 else if (!strcmp(s, "level")) 1694 acpi_sci_flags = ACPI_MADT_TRIGGER_LEVEL | 1695 (acpi_sci_flags & ~ACPI_MADT_TRIGGER_MASK); 1696 else if (!strcmp(s, "high")) 1697 acpi_sci_flags = ACPI_MADT_POLARITY_ACTIVE_HIGH | 1698 (acpi_sci_flags & ~ACPI_MADT_POLARITY_MASK); 1699 else if (!strcmp(s, "low")) 1700 acpi_sci_flags = ACPI_MADT_POLARITY_ACTIVE_LOW | 1701 (acpi_sci_flags & ~ACPI_MADT_POLARITY_MASK); 1702 else 1703 return -EINVAL; 1704 return 0; 1705 } 1706 early_param("acpi_sci", setup_acpi_sci); 1707 1708 int __acpi_acquire_global_lock(unsigned int *lock) 1709 { 1710 unsigned int old, new, val; 1711 do { 1712 old = *lock; 1713 new = (((old & ~0x3) + 2) + ((old >> 1) & 0x1)); 1714 val = cmpxchg(lock, old, new); 1715 } while (unlikely (val != old)); 1716 return (new < 3) ? -1 : 0; 1717 } 1718 1719 int __acpi_release_global_lock(unsigned int *lock) 1720 { 1721 unsigned int old, new, val; 1722 do { 1723 old = *lock; 1724 new = old & ~0x3; 1725 val = cmpxchg(lock, old, new); 1726 } while (unlikely (val != old)); 1727 return old & 0x1; 1728 } 1729 1730 void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size) 1731 { 1732 e820_add_region(addr, size, E820_ACPI); 1733 update_e820(); 1734 } 1735