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