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