1 /*
2 * Intel IO-APIC support for multi-Pentium hosts.
3 *
4 * Copyright (C) 1997, 1998, 1999, 2000, 2009 Ingo Molnar, Hajnalka Szabo
5 *
6 * Many thanks to Stig Venaas for trying out countless experimental
7 * patches and reporting/debugging problems patiently!
8 *
9 * (c) 1999, Multiple IO-APIC support, developed by
10 * Ken-ichi Yaku <yaku@css1.kbnes.nec.co.jp> and
11 * Hidemi Kishimoto <kisimoto@css1.kbnes.nec.co.jp>,
12 * further tested and cleaned up by Zach Brown <zab@redhat.com>
13 * and Ingo Molnar <mingo@redhat.com>
14 *
15 * Fixes
16 * Maciej W. Rozycki : Bits for genuine 82489DX APICs;
17 * thanks to Eric Gilmore
18 * and Rolf G. Tews
19 * for testing these extensively
20 * Paul Diefenbaugh : Added full ACPI support
21 */
22
23 #include <linux/mm.h>
24 #include <linux/interrupt.h>
25 #include <linux/init.h>
26 #include <linux/delay.h>
27 #include <linux/sched.h>
28 #include <linux/pci.h>
29 #include <linux/mc146818rtc.h>
30 #include <linux/compiler.h>
31 #include <linux/acpi.h>
32 #include <linux/module.h>
33 #include <linux/syscore_ops.h>
34 #include <linux/irqdomain.h>
35 #include <linux/msi.h>
36 #include <linux/htirq.h>
37 #include <linux/freezer.h>
38 #include <linux/kthread.h>
39 #include <linux/jiffies.h> /* time_after() */
40 #include <linux/slab.h>
41 #include <linux/bootmem.h>
42 #include <linux/dmar.h>
43 #include <linux/hpet.h>
44
45 #include <asm/idle.h>
46 #include <asm/io.h>
47 #include <asm/smp.h>
48 #include <asm/cpu.h>
49 #include <asm/desc.h>
50 #include <asm/proto.h>
51 #include <asm/acpi.h>
52 #include <asm/dma.h>
53 #include <asm/timer.h>
54 #include <asm/i8259.h>
55 #include <asm/msidef.h>
56 #include <asm/hypertransport.h>
57 #include <asm/setup.h>
58 #include <asm/irq_remapping.h>
59 #include <asm/hpet.h>
60 #include <asm/hw_irq.h>
61
62 #include <asm/apic.h>
63
64 #define __apicdebuginit(type) static type __init
65
66 #define for_each_ioapic(idx) \
67 for ((idx) = 0; (idx) < nr_ioapics; (idx)++)
68 #define for_each_ioapic_reverse(idx) \
69 for ((idx) = nr_ioapics - 1; (idx) >= 0; (idx)--)
70 #define for_each_pin(idx, pin) \
71 for ((pin) = 0; (pin) < ioapics[(idx)].nr_registers; (pin)++)
72 #define for_each_ioapic_pin(idx, pin) \
73 for_each_ioapic((idx)) \
74 for_each_pin((idx), (pin))
75
76 #define for_each_irq_pin(entry, head) \
77 for (entry = head; entry; entry = entry->next)
78
79 /*
80 * Is the SiS APIC rmw bug present ?
81 * -1 = don't know, 0 = no, 1 = yes
82 */
83 int sis_apic_bug = -1;
84
85 static DEFINE_RAW_SPINLOCK(ioapic_lock);
86 static DEFINE_RAW_SPINLOCK(vector_lock);
87 static DEFINE_MUTEX(ioapic_mutex);
88 static unsigned int ioapic_dynirq_base;
89 static int ioapic_initialized;
90
91 struct mp_pin_info {
92 int trigger;
93 int polarity;
94 int node;
95 int set;
96 u32 count;
97 };
98
99 static struct ioapic {
100 /*
101 * # of IRQ routing registers
102 */
103 int nr_registers;
104 /*
105 * Saved state during suspend/resume, or while enabling intr-remap.
106 */
107 struct IO_APIC_route_entry *saved_registers;
108 /* I/O APIC config */
109 struct mpc_ioapic mp_config;
110 /* IO APIC gsi routing info */
111 struct mp_ioapic_gsi gsi_config;
112 struct ioapic_domain_cfg irqdomain_cfg;
113 struct irq_domain *irqdomain;
114 struct mp_pin_info *pin_info;
115 } ioapics[MAX_IO_APICS];
116
117 #define mpc_ioapic_ver(ioapic_idx) ioapics[ioapic_idx].mp_config.apicver
118
mpc_ioapic_id(int ioapic_idx)119 int mpc_ioapic_id(int ioapic_idx)
120 {
121 return ioapics[ioapic_idx].mp_config.apicid;
122 }
123
mpc_ioapic_addr(int ioapic_idx)124 unsigned int mpc_ioapic_addr(int ioapic_idx)
125 {
126 return ioapics[ioapic_idx].mp_config.apicaddr;
127 }
128
mp_ioapic_gsi_routing(int ioapic_idx)129 struct mp_ioapic_gsi *mp_ioapic_gsi_routing(int ioapic_idx)
130 {
131 return &ioapics[ioapic_idx].gsi_config;
132 }
133
mp_ioapic_pin_count(int ioapic)134 static inline int mp_ioapic_pin_count(int ioapic)
135 {
136 struct mp_ioapic_gsi *gsi_cfg = mp_ioapic_gsi_routing(ioapic);
137
138 return gsi_cfg->gsi_end - gsi_cfg->gsi_base + 1;
139 }
140
mp_pin_to_gsi(int ioapic,int pin)141 u32 mp_pin_to_gsi(int ioapic, int pin)
142 {
143 return mp_ioapic_gsi_routing(ioapic)->gsi_base + pin;
144 }
145
146 /*
147 * Initialize all legacy IRQs and all pins on the first IOAPIC
148 * if we have legacy interrupt controller. Kernel boot option "pirq="
149 * may rely on non-legacy pins on the first IOAPIC.
150 */
mp_init_irq_at_boot(int ioapic,int irq)151 static inline int mp_init_irq_at_boot(int ioapic, int irq)
152 {
153 if (!nr_legacy_irqs())
154 return 0;
155
156 return ioapic == 0 || (irq >= 0 && irq < nr_legacy_irqs());
157 }
158
mp_pin_info(int ioapic_idx,int pin)159 static inline struct mp_pin_info *mp_pin_info(int ioapic_idx, int pin)
160 {
161 return ioapics[ioapic_idx].pin_info + pin;
162 }
163
mp_ioapic_irqdomain(int ioapic)164 static inline struct irq_domain *mp_ioapic_irqdomain(int ioapic)
165 {
166 return ioapics[ioapic].irqdomain;
167 }
168
169 int nr_ioapics;
170
171 /* The one past the highest gsi number used */
172 u32 gsi_top;
173
174 /* MP IRQ source entries */
175 struct mpc_intsrc mp_irqs[MAX_IRQ_SOURCES];
176
177 /* # of MP IRQ source entries */
178 int mp_irq_entries;
179
180 #ifdef CONFIG_EISA
181 int mp_bus_id_to_type[MAX_MP_BUSSES];
182 #endif
183
184 DECLARE_BITMAP(mp_bus_not_pci, MAX_MP_BUSSES);
185
186 int skip_ioapic_setup;
187
188 /**
189 * disable_ioapic_support() - disables ioapic support at runtime
190 */
disable_ioapic_support(void)191 void disable_ioapic_support(void)
192 {
193 #ifdef CONFIG_PCI
194 noioapicquirk = 1;
195 noioapicreroute = -1;
196 #endif
197 skip_ioapic_setup = 1;
198 }
199
parse_noapic(char * str)200 static int __init parse_noapic(char *str)
201 {
202 /* disable IO-APIC */
203 disable_ioapic_support();
204 return 0;
205 }
206 early_param("noapic", parse_noapic);
207
208 static struct irq_cfg *alloc_irq_and_cfg_at(unsigned int at, int node);
209
210 /* Will be called in mpparse/acpi/sfi codes for saving IRQ info */
mp_save_irq(struct mpc_intsrc * m)211 void mp_save_irq(struct mpc_intsrc *m)
212 {
213 int i;
214
215 apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x,"
216 " IRQ %02x, APIC ID %x, APIC INT %02x\n",
217 m->irqtype, m->irqflag & 3, (m->irqflag >> 2) & 3, m->srcbus,
218 m->srcbusirq, m->dstapic, m->dstirq);
219
220 for (i = 0; i < mp_irq_entries; i++) {
221 if (!memcmp(&mp_irqs[i], m, sizeof(*m)))
222 return;
223 }
224
225 memcpy(&mp_irqs[mp_irq_entries], m, sizeof(*m));
226 if (++mp_irq_entries == MAX_IRQ_SOURCES)
227 panic("Max # of irq sources exceeded!!\n");
228 }
229
230 struct irq_pin_list {
231 int apic, pin;
232 struct irq_pin_list *next;
233 };
234
alloc_irq_pin_list(int node)235 static struct irq_pin_list *alloc_irq_pin_list(int node)
236 {
237 return kzalloc_node(sizeof(struct irq_pin_list), GFP_KERNEL, node);
238 }
239
arch_early_irq_init(void)240 int __init arch_early_irq_init(void)
241 {
242 struct irq_cfg *cfg;
243 int i, node = cpu_to_node(0);
244
245 if (!nr_legacy_irqs())
246 io_apic_irqs = ~0UL;
247
248 for_each_ioapic(i) {
249 ioapics[i].saved_registers =
250 kzalloc(sizeof(struct IO_APIC_route_entry) *
251 ioapics[i].nr_registers, GFP_KERNEL);
252 if (!ioapics[i].saved_registers)
253 pr_err("IOAPIC %d: suspend/resume impossible!\n", i);
254 }
255
256 /*
257 * For legacy IRQ's, start with assigning irq0 to irq15 to
258 * IRQ0_VECTOR to IRQ15_VECTOR for all cpu's.
259 */
260 for (i = 0; i < nr_legacy_irqs(); i++) {
261 cfg = alloc_irq_and_cfg_at(i, node);
262 cfg->vector = IRQ0_VECTOR + i;
263 cpumask_setall(cfg->domain);
264 }
265
266 return 0;
267 }
268
irq_cfg(unsigned int irq)269 static inline struct irq_cfg *irq_cfg(unsigned int irq)
270 {
271 return irq_get_chip_data(irq);
272 }
273
alloc_irq_cfg(unsigned int irq,int node)274 static struct irq_cfg *alloc_irq_cfg(unsigned int irq, int node)
275 {
276 struct irq_cfg *cfg;
277
278 cfg = kzalloc_node(sizeof(*cfg), GFP_KERNEL, node);
279 if (!cfg)
280 return NULL;
281 if (!zalloc_cpumask_var_node(&cfg->domain, GFP_KERNEL, node))
282 goto out_cfg;
283 if (!zalloc_cpumask_var_node(&cfg->old_domain, GFP_KERNEL, node))
284 goto out_domain;
285 return cfg;
286 out_domain:
287 free_cpumask_var(cfg->domain);
288 out_cfg:
289 kfree(cfg);
290 return NULL;
291 }
292
free_irq_cfg(unsigned int at,struct irq_cfg * cfg)293 static void free_irq_cfg(unsigned int at, struct irq_cfg *cfg)
294 {
295 if (!cfg)
296 return;
297 irq_set_chip_data(at, NULL);
298 free_cpumask_var(cfg->domain);
299 free_cpumask_var(cfg->old_domain);
300 kfree(cfg);
301 }
302
alloc_irq_and_cfg_at(unsigned int at,int node)303 static struct irq_cfg *alloc_irq_and_cfg_at(unsigned int at, int node)
304 {
305 int res = irq_alloc_desc_at(at, node);
306 struct irq_cfg *cfg;
307
308 if (res < 0) {
309 if (res != -EEXIST)
310 return NULL;
311 cfg = irq_cfg(at);
312 if (cfg)
313 return cfg;
314 }
315
316 cfg = alloc_irq_cfg(at, node);
317 if (cfg)
318 irq_set_chip_data(at, cfg);
319 else
320 irq_free_desc(at);
321 return cfg;
322 }
323
324 struct io_apic {
325 unsigned int index;
326 unsigned int unused[3];
327 unsigned int data;
328 unsigned int unused2[11];
329 unsigned int eoi;
330 };
331
io_apic_base(int idx)332 static __attribute_const__ struct io_apic __iomem *io_apic_base(int idx)
333 {
334 return (void __iomem *) __fix_to_virt(FIX_IO_APIC_BASE_0 + idx)
335 + (mpc_ioapic_addr(idx) & ~PAGE_MASK);
336 }
337
io_apic_eoi(unsigned int apic,unsigned int vector)338 void io_apic_eoi(unsigned int apic, unsigned int vector)
339 {
340 struct io_apic __iomem *io_apic = io_apic_base(apic);
341 writel(vector, &io_apic->eoi);
342 }
343
native_io_apic_read(unsigned int apic,unsigned int reg)344 unsigned int native_io_apic_read(unsigned int apic, unsigned int reg)
345 {
346 struct io_apic __iomem *io_apic = io_apic_base(apic);
347 writel(reg, &io_apic->index);
348 return readl(&io_apic->data);
349 }
350
native_io_apic_write(unsigned int apic,unsigned int reg,unsigned int value)351 void native_io_apic_write(unsigned int apic, unsigned int reg, unsigned int value)
352 {
353 struct io_apic __iomem *io_apic = io_apic_base(apic);
354
355 writel(reg, &io_apic->index);
356 writel(value, &io_apic->data);
357 }
358
359 /*
360 * Re-write a value: to be used for read-modify-write
361 * cycles where the read already set up the index register.
362 *
363 * Older SiS APIC requires we rewrite the index register
364 */
native_io_apic_modify(unsigned int apic,unsigned int reg,unsigned int value)365 void native_io_apic_modify(unsigned int apic, unsigned int reg, unsigned int value)
366 {
367 struct io_apic __iomem *io_apic = io_apic_base(apic);
368
369 if (sis_apic_bug)
370 writel(reg, &io_apic->index);
371 writel(value, &io_apic->data);
372 }
373
374 union entry_union {
375 struct { u32 w1, w2; };
376 struct IO_APIC_route_entry entry;
377 };
378
__ioapic_read_entry(int apic,int pin)379 static struct IO_APIC_route_entry __ioapic_read_entry(int apic, int pin)
380 {
381 union entry_union eu;
382
383 eu.w1 = io_apic_read(apic, 0x10 + 2 * pin);
384 eu.w2 = io_apic_read(apic, 0x11 + 2 * pin);
385
386 return eu.entry;
387 }
388
ioapic_read_entry(int apic,int pin)389 static struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin)
390 {
391 union entry_union eu;
392 unsigned long flags;
393
394 raw_spin_lock_irqsave(&ioapic_lock, flags);
395 eu.entry = __ioapic_read_entry(apic, pin);
396 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
397
398 return eu.entry;
399 }
400
401 /*
402 * When we write a new IO APIC routing entry, we need to write the high
403 * word first! If the mask bit in the low word is clear, we will enable
404 * the interrupt, and we need to make sure the entry is fully populated
405 * before that happens.
406 */
__ioapic_write_entry(int apic,int pin,struct IO_APIC_route_entry e)407 static void __ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e)
408 {
409 union entry_union eu = {{0, 0}};
410
411 eu.entry = e;
412 io_apic_write(apic, 0x11 + 2*pin, eu.w2);
413 io_apic_write(apic, 0x10 + 2*pin, eu.w1);
414 }
415
ioapic_write_entry(int apic,int pin,struct IO_APIC_route_entry e)416 static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e)
417 {
418 unsigned long flags;
419
420 raw_spin_lock_irqsave(&ioapic_lock, flags);
421 __ioapic_write_entry(apic, pin, e);
422 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
423 }
424
425 /*
426 * When we mask an IO APIC routing entry, we need to write the low
427 * word first, in order to set the mask bit before we change the
428 * high bits!
429 */
ioapic_mask_entry(int apic,int pin)430 static void ioapic_mask_entry(int apic, int pin)
431 {
432 unsigned long flags;
433 union entry_union eu = { .entry.mask = 1 };
434
435 raw_spin_lock_irqsave(&ioapic_lock, flags);
436 io_apic_write(apic, 0x10 + 2*pin, eu.w1);
437 io_apic_write(apic, 0x11 + 2*pin, eu.w2);
438 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
439 }
440
441 /*
442 * The common case is 1:1 IRQ<->pin mappings. Sometimes there are
443 * shared ISA-space IRQs, so we have to support them. We are super
444 * fast in the common case, and fast for shared ISA-space IRQs.
445 */
__add_pin_to_irq_node(struct irq_cfg * cfg,int node,int apic,int pin)446 static int __add_pin_to_irq_node(struct irq_cfg *cfg, int node, int apic, int pin)
447 {
448 struct irq_pin_list **last, *entry;
449
450 /* don't allow duplicates */
451 last = &cfg->irq_2_pin;
452 for_each_irq_pin(entry, cfg->irq_2_pin) {
453 if (entry->apic == apic && entry->pin == pin)
454 return 0;
455 last = &entry->next;
456 }
457
458 entry = alloc_irq_pin_list(node);
459 if (!entry) {
460 pr_err("can not alloc irq_pin_list (%d,%d,%d)\n",
461 node, apic, pin);
462 return -ENOMEM;
463 }
464 entry->apic = apic;
465 entry->pin = pin;
466
467 *last = entry;
468 return 0;
469 }
470
__remove_pin_from_irq(struct irq_cfg * cfg,int apic,int pin)471 static void __remove_pin_from_irq(struct irq_cfg *cfg, int apic, int pin)
472 {
473 struct irq_pin_list **last, *entry;
474
475 last = &cfg->irq_2_pin;
476 for_each_irq_pin(entry, cfg->irq_2_pin)
477 if (entry->apic == apic && entry->pin == pin) {
478 *last = entry->next;
479 kfree(entry);
480 return;
481 } else {
482 last = &entry->next;
483 }
484 }
485
add_pin_to_irq_node(struct irq_cfg * cfg,int node,int apic,int pin)486 static void add_pin_to_irq_node(struct irq_cfg *cfg, int node, int apic, int pin)
487 {
488 if (__add_pin_to_irq_node(cfg, node, apic, pin))
489 panic("IO-APIC: failed to add irq-pin. Can not proceed\n");
490 }
491
492 /*
493 * Reroute an IRQ to a different pin.
494 */
replace_pin_at_irq_node(struct irq_cfg * cfg,int node,int oldapic,int oldpin,int newapic,int newpin)495 static void __init replace_pin_at_irq_node(struct irq_cfg *cfg, int node,
496 int oldapic, int oldpin,
497 int newapic, int newpin)
498 {
499 struct irq_pin_list *entry;
500
501 for_each_irq_pin(entry, cfg->irq_2_pin) {
502 if (entry->apic == oldapic && entry->pin == oldpin) {
503 entry->apic = newapic;
504 entry->pin = newpin;
505 /* every one is different, right? */
506 return;
507 }
508 }
509
510 /* old apic/pin didn't exist, so just add new ones */
511 add_pin_to_irq_node(cfg, node, newapic, newpin);
512 }
513
__io_apic_modify_irq(struct irq_pin_list * entry,int mask_and,int mask_or,void (* final)(struct irq_pin_list * entry))514 static void __io_apic_modify_irq(struct irq_pin_list *entry,
515 int mask_and, int mask_or,
516 void (*final)(struct irq_pin_list *entry))
517 {
518 unsigned int reg, pin;
519
520 pin = entry->pin;
521 reg = io_apic_read(entry->apic, 0x10 + pin * 2);
522 reg &= mask_and;
523 reg |= mask_or;
524 io_apic_modify(entry->apic, 0x10 + pin * 2, reg);
525 if (final)
526 final(entry);
527 }
528
io_apic_modify_irq(struct irq_cfg * cfg,int mask_and,int mask_or,void (* final)(struct irq_pin_list * entry))529 static void io_apic_modify_irq(struct irq_cfg *cfg,
530 int mask_and, int mask_or,
531 void (*final)(struct irq_pin_list *entry))
532 {
533 struct irq_pin_list *entry;
534
535 for_each_irq_pin(entry, cfg->irq_2_pin)
536 __io_apic_modify_irq(entry, mask_and, mask_or, final);
537 }
538
io_apic_sync(struct irq_pin_list * entry)539 static void io_apic_sync(struct irq_pin_list *entry)
540 {
541 /*
542 * Synchronize the IO-APIC and the CPU by doing
543 * a dummy read from the IO-APIC
544 */
545 struct io_apic __iomem *io_apic;
546
547 io_apic = io_apic_base(entry->apic);
548 readl(&io_apic->data);
549 }
550
mask_ioapic(struct irq_cfg * cfg)551 static void mask_ioapic(struct irq_cfg *cfg)
552 {
553 unsigned long flags;
554
555 raw_spin_lock_irqsave(&ioapic_lock, flags);
556 io_apic_modify_irq(cfg, ~0, IO_APIC_REDIR_MASKED, &io_apic_sync);
557 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
558 }
559
mask_ioapic_irq(struct irq_data * data)560 static void mask_ioapic_irq(struct irq_data *data)
561 {
562 mask_ioapic(data->chip_data);
563 }
564
__unmask_ioapic(struct irq_cfg * cfg)565 static void __unmask_ioapic(struct irq_cfg *cfg)
566 {
567 io_apic_modify_irq(cfg, ~IO_APIC_REDIR_MASKED, 0, NULL);
568 }
569
unmask_ioapic(struct irq_cfg * cfg)570 static void unmask_ioapic(struct irq_cfg *cfg)
571 {
572 unsigned long flags;
573
574 raw_spin_lock_irqsave(&ioapic_lock, flags);
575 __unmask_ioapic(cfg);
576 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
577 }
578
unmask_ioapic_irq(struct irq_data * data)579 static void unmask_ioapic_irq(struct irq_data *data)
580 {
581 unmask_ioapic(data->chip_data);
582 }
583
584 /*
585 * IO-APIC versions below 0x20 don't support EOI register.
586 * For the record, here is the information about various versions:
587 * 0Xh 82489DX
588 * 1Xh I/OAPIC or I/O(x)APIC which are not PCI 2.2 Compliant
589 * 2Xh I/O(x)APIC which is PCI 2.2 Compliant
590 * 30h-FFh Reserved
591 *
592 * Some of the Intel ICH Specs (ICH2 to ICH5) documents the io-apic
593 * version as 0x2. This is an error with documentation and these ICH chips
594 * use io-apic's of version 0x20.
595 *
596 * For IO-APIC's with EOI register, we use that to do an explicit EOI.
597 * Otherwise, we simulate the EOI message manually by changing the trigger
598 * mode to edge and then back to level, with RTE being masked during this.
599 */
native_eoi_ioapic_pin(int apic,int pin,int vector)600 void native_eoi_ioapic_pin(int apic, int pin, int vector)
601 {
602 if (mpc_ioapic_ver(apic) >= 0x20) {
603 io_apic_eoi(apic, vector);
604 } else {
605 struct IO_APIC_route_entry entry, entry1;
606
607 entry = entry1 = __ioapic_read_entry(apic, pin);
608
609 /*
610 * Mask the entry and change the trigger mode to edge.
611 */
612 entry1.mask = 1;
613 entry1.trigger = IOAPIC_EDGE;
614
615 __ioapic_write_entry(apic, pin, entry1);
616
617 /*
618 * Restore the previous level triggered entry.
619 */
620 __ioapic_write_entry(apic, pin, entry);
621 }
622 }
623
eoi_ioapic_irq(unsigned int irq,struct irq_cfg * cfg)624 void eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg)
625 {
626 struct irq_pin_list *entry;
627 unsigned long flags;
628
629 raw_spin_lock_irqsave(&ioapic_lock, flags);
630 for_each_irq_pin(entry, cfg->irq_2_pin)
631 x86_io_apic_ops.eoi_ioapic_pin(entry->apic, entry->pin,
632 cfg->vector);
633 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
634 }
635
clear_IO_APIC_pin(unsigned int apic,unsigned int pin)636 static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin)
637 {
638 struct IO_APIC_route_entry entry;
639
640 /* Check delivery_mode to be sure we're not clearing an SMI pin */
641 entry = ioapic_read_entry(apic, pin);
642 if (entry.delivery_mode == dest_SMI)
643 return;
644
645 /*
646 * Make sure the entry is masked and re-read the contents to check
647 * if it is a level triggered pin and if the remote-IRR is set.
648 */
649 if (!entry.mask) {
650 entry.mask = 1;
651 ioapic_write_entry(apic, pin, entry);
652 entry = ioapic_read_entry(apic, pin);
653 }
654
655 if (entry.irr) {
656 unsigned long flags;
657
658 /*
659 * Make sure the trigger mode is set to level. Explicit EOI
660 * doesn't clear the remote-IRR if the trigger mode is not
661 * set to level.
662 */
663 if (!entry.trigger) {
664 entry.trigger = IOAPIC_LEVEL;
665 ioapic_write_entry(apic, pin, entry);
666 }
667
668 raw_spin_lock_irqsave(&ioapic_lock, flags);
669 x86_io_apic_ops.eoi_ioapic_pin(apic, pin, entry.vector);
670 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
671 }
672
673 /*
674 * Clear the rest of the bits in the IO-APIC RTE except for the mask
675 * bit.
676 */
677 ioapic_mask_entry(apic, pin);
678 entry = ioapic_read_entry(apic, pin);
679 if (entry.irr)
680 pr_err("Unable to reset IRR for apic: %d, pin :%d\n",
681 mpc_ioapic_id(apic), pin);
682 }
683
clear_IO_APIC(void)684 static void clear_IO_APIC (void)
685 {
686 int apic, pin;
687
688 for_each_ioapic_pin(apic, pin)
689 clear_IO_APIC_pin(apic, pin);
690 }
691
692 #ifdef CONFIG_X86_32
693 /*
694 * support for broken MP BIOSs, enables hand-redirection of PIRQ0-7 to
695 * specific CPU-side IRQs.
696 */
697
698 #define MAX_PIRQS 8
699 static int pirq_entries[MAX_PIRQS] = {
700 [0 ... MAX_PIRQS - 1] = -1
701 };
702
ioapic_pirq_setup(char * str)703 static int __init ioapic_pirq_setup(char *str)
704 {
705 int i, max;
706 int ints[MAX_PIRQS+1];
707
708 get_options(str, ARRAY_SIZE(ints), ints);
709
710 apic_printk(APIC_VERBOSE, KERN_INFO
711 "PIRQ redirection, working around broken MP-BIOS.\n");
712 max = MAX_PIRQS;
713 if (ints[0] < MAX_PIRQS)
714 max = ints[0];
715
716 for (i = 0; i < max; i++) {
717 apic_printk(APIC_VERBOSE, KERN_DEBUG
718 "... PIRQ%d -> IRQ %d\n", i, ints[i+1]);
719 /*
720 * PIRQs are mapped upside down, usually.
721 */
722 pirq_entries[MAX_PIRQS-i-1] = ints[i+1];
723 }
724 return 1;
725 }
726
727 __setup("pirq=", ioapic_pirq_setup);
728 #endif /* CONFIG_X86_32 */
729
730 /*
731 * Saves all the IO-APIC RTE's
732 */
save_ioapic_entries(void)733 int save_ioapic_entries(void)
734 {
735 int apic, pin;
736 int err = 0;
737
738 for_each_ioapic(apic) {
739 if (!ioapics[apic].saved_registers) {
740 err = -ENOMEM;
741 continue;
742 }
743
744 for_each_pin(apic, pin)
745 ioapics[apic].saved_registers[pin] =
746 ioapic_read_entry(apic, pin);
747 }
748
749 return err;
750 }
751
752 /*
753 * Mask all IO APIC entries.
754 */
mask_ioapic_entries(void)755 void mask_ioapic_entries(void)
756 {
757 int apic, pin;
758
759 for_each_ioapic(apic) {
760 if (!ioapics[apic].saved_registers)
761 continue;
762
763 for_each_pin(apic, pin) {
764 struct IO_APIC_route_entry entry;
765
766 entry = ioapics[apic].saved_registers[pin];
767 if (!entry.mask) {
768 entry.mask = 1;
769 ioapic_write_entry(apic, pin, entry);
770 }
771 }
772 }
773 }
774
775 /*
776 * Restore IO APIC entries which was saved in the ioapic structure.
777 */
restore_ioapic_entries(void)778 int restore_ioapic_entries(void)
779 {
780 int apic, pin;
781
782 for_each_ioapic(apic) {
783 if (!ioapics[apic].saved_registers)
784 continue;
785
786 for_each_pin(apic, pin)
787 ioapic_write_entry(apic, pin,
788 ioapics[apic].saved_registers[pin]);
789 }
790 return 0;
791 }
792
793 /*
794 * Find the IRQ entry number of a certain pin.
795 */
find_irq_entry(int ioapic_idx,int pin,int type)796 static int find_irq_entry(int ioapic_idx, int pin, int type)
797 {
798 int i;
799
800 for (i = 0; i < mp_irq_entries; i++)
801 if (mp_irqs[i].irqtype == type &&
802 (mp_irqs[i].dstapic == mpc_ioapic_id(ioapic_idx) ||
803 mp_irqs[i].dstapic == MP_APIC_ALL) &&
804 mp_irqs[i].dstirq == pin)
805 return i;
806
807 return -1;
808 }
809
810 /*
811 * Find the pin to which IRQ[irq] (ISA) is connected
812 */
find_isa_irq_pin(int irq,int type)813 static int __init find_isa_irq_pin(int irq, int type)
814 {
815 int i;
816
817 for (i = 0; i < mp_irq_entries; i++) {
818 int lbus = mp_irqs[i].srcbus;
819
820 if (test_bit(lbus, mp_bus_not_pci) &&
821 (mp_irqs[i].irqtype == type) &&
822 (mp_irqs[i].srcbusirq == irq))
823
824 return mp_irqs[i].dstirq;
825 }
826 return -1;
827 }
828
find_isa_irq_apic(int irq,int type)829 static int __init find_isa_irq_apic(int irq, int type)
830 {
831 int i;
832
833 for (i = 0; i < mp_irq_entries; i++) {
834 int lbus = mp_irqs[i].srcbus;
835
836 if (test_bit(lbus, mp_bus_not_pci) &&
837 (mp_irqs[i].irqtype == type) &&
838 (mp_irqs[i].srcbusirq == irq))
839 break;
840 }
841
842 if (i < mp_irq_entries) {
843 int ioapic_idx;
844
845 for_each_ioapic(ioapic_idx)
846 if (mpc_ioapic_id(ioapic_idx) == mp_irqs[i].dstapic)
847 return ioapic_idx;
848 }
849
850 return -1;
851 }
852
853 #ifdef CONFIG_EISA
854 /*
855 * EISA Edge/Level control register, ELCR
856 */
EISA_ELCR(unsigned int irq)857 static int EISA_ELCR(unsigned int irq)
858 {
859 if (irq < nr_legacy_irqs()) {
860 unsigned int port = 0x4d0 + (irq >> 3);
861 return (inb(port) >> (irq & 7)) & 1;
862 }
863 apic_printk(APIC_VERBOSE, KERN_INFO
864 "Broken MPtable reports ISA irq %d\n", irq);
865 return 0;
866 }
867
868 #endif
869
870 /* ISA interrupts are always polarity zero edge triggered,
871 * when listed as conforming in the MP table. */
872
873 #define default_ISA_trigger(idx) (0)
874 #define default_ISA_polarity(idx) (0)
875
876 /* EISA interrupts are always polarity zero and can be edge or level
877 * trigger depending on the ELCR value. If an interrupt is listed as
878 * EISA conforming in the MP table, that means its trigger type must
879 * be read in from the ELCR */
880
881 #define default_EISA_trigger(idx) (EISA_ELCR(mp_irqs[idx].srcbusirq))
882 #define default_EISA_polarity(idx) default_ISA_polarity(idx)
883
884 /* PCI interrupts are always polarity one level triggered,
885 * when listed as conforming in the MP table. */
886
887 #define default_PCI_trigger(idx) (1)
888 #define default_PCI_polarity(idx) (1)
889
irq_polarity(int idx)890 static int irq_polarity(int idx)
891 {
892 int bus = mp_irqs[idx].srcbus;
893 int polarity;
894
895 /*
896 * Determine IRQ line polarity (high active or low active):
897 */
898 switch (mp_irqs[idx].irqflag & 3)
899 {
900 case 0: /* conforms, ie. bus-type dependent polarity */
901 if (test_bit(bus, mp_bus_not_pci))
902 polarity = default_ISA_polarity(idx);
903 else
904 polarity = default_PCI_polarity(idx);
905 break;
906 case 1: /* high active */
907 {
908 polarity = 0;
909 break;
910 }
911 case 2: /* reserved */
912 {
913 pr_warn("broken BIOS!!\n");
914 polarity = 1;
915 break;
916 }
917 case 3: /* low active */
918 {
919 polarity = 1;
920 break;
921 }
922 default: /* invalid */
923 {
924 pr_warn("broken BIOS!!\n");
925 polarity = 1;
926 break;
927 }
928 }
929 return polarity;
930 }
931
irq_trigger(int idx)932 static int irq_trigger(int idx)
933 {
934 int bus = mp_irqs[idx].srcbus;
935 int trigger;
936
937 /*
938 * Determine IRQ trigger mode (edge or level sensitive):
939 */
940 switch ((mp_irqs[idx].irqflag>>2) & 3)
941 {
942 case 0: /* conforms, ie. bus-type dependent */
943 if (test_bit(bus, mp_bus_not_pci))
944 trigger = default_ISA_trigger(idx);
945 else
946 trigger = default_PCI_trigger(idx);
947 #ifdef CONFIG_EISA
948 switch (mp_bus_id_to_type[bus]) {
949 case MP_BUS_ISA: /* ISA pin */
950 {
951 /* set before the switch */
952 break;
953 }
954 case MP_BUS_EISA: /* EISA pin */
955 {
956 trigger = default_EISA_trigger(idx);
957 break;
958 }
959 case MP_BUS_PCI: /* PCI pin */
960 {
961 /* set before the switch */
962 break;
963 }
964 default:
965 {
966 pr_warn("broken BIOS!!\n");
967 trigger = 1;
968 break;
969 }
970 }
971 #endif
972 break;
973 case 1: /* edge */
974 {
975 trigger = 0;
976 break;
977 }
978 case 2: /* reserved */
979 {
980 pr_warn("broken BIOS!!\n");
981 trigger = 1;
982 break;
983 }
984 case 3: /* level */
985 {
986 trigger = 1;
987 break;
988 }
989 default: /* invalid */
990 {
991 pr_warn("broken BIOS!!\n");
992 trigger = 0;
993 break;
994 }
995 }
996 return trigger;
997 }
998
alloc_irq_from_domain(struct irq_domain * domain,u32 gsi,int pin)999 static int alloc_irq_from_domain(struct irq_domain *domain, u32 gsi, int pin)
1000 {
1001 int irq = -1;
1002 int ioapic = (int)(long)domain->host_data;
1003 int type = ioapics[ioapic].irqdomain_cfg.type;
1004
1005 switch (type) {
1006 case IOAPIC_DOMAIN_LEGACY:
1007 /*
1008 * Dynamically allocate IRQ number for non-ISA IRQs in the first 16
1009 * GSIs on some weird platforms.
1010 */
1011 if (gsi < nr_legacy_irqs())
1012 irq = irq_create_mapping(domain, pin);
1013 else if (irq_create_strict_mappings(domain, gsi, pin, 1) == 0)
1014 irq = gsi;
1015 break;
1016 case IOAPIC_DOMAIN_STRICT:
1017 if (irq_create_strict_mappings(domain, gsi, pin, 1) == 0)
1018 irq = gsi;
1019 break;
1020 case IOAPIC_DOMAIN_DYNAMIC:
1021 irq = irq_create_mapping(domain, pin);
1022 break;
1023 default:
1024 WARN(1, "ioapic: unknown irqdomain type %d\n", type);
1025 break;
1026 }
1027
1028 return irq > 0 ? irq : -1;
1029 }
1030
mp_map_pin_to_irq(u32 gsi,int idx,int ioapic,int pin,unsigned int flags)1031 static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin,
1032 unsigned int flags)
1033 {
1034 int irq;
1035 struct irq_domain *domain = mp_ioapic_irqdomain(ioapic);
1036 struct mp_pin_info *info = mp_pin_info(ioapic, pin);
1037
1038 if (!domain)
1039 return -1;
1040
1041 mutex_lock(&ioapic_mutex);
1042
1043 /*
1044 * Don't use irqdomain to manage ISA IRQs because there may be
1045 * multiple IOAPIC pins sharing the same ISA IRQ number and
1046 * irqdomain only supports 1:1 mapping between IOAPIC pin and
1047 * IRQ number. A typical IOAPIC has 24 pins, pin 0-15 are used
1048 * for legacy IRQs and pin 16-23 are used for PCI IRQs (PIRQ A-H).
1049 * When ACPI is disabled, only legacy IRQ numbers (IRQ0-15) are
1050 * available, and some BIOSes may use MP Interrupt Source records
1051 * to override IRQ numbers for PIRQs instead of reprogramming
1052 * the interrupt routing logic. Thus there may be multiple pins
1053 * sharing the same legacy IRQ number when ACPI is disabled.
1054 */
1055 if (idx >= 0 && test_bit(mp_irqs[idx].srcbus, mp_bus_not_pci)) {
1056 irq = mp_irqs[idx].srcbusirq;
1057 if (flags & IOAPIC_MAP_ALLOC) {
1058 if (info->count == 0 &&
1059 mp_irqdomain_map(domain, irq, pin) != 0)
1060 irq = -1;
1061
1062 /* special handling for timer IRQ0 */
1063 if (irq == 0)
1064 info->count++;
1065 }
1066 } else {
1067 irq = irq_find_mapping(domain, pin);
1068 if (irq <= 0 && (flags & IOAPIC_MAP_ALLOC))
1069 irq = alloc_irq_from_domain(domain, gsi, pin);
1070 }
1071
1072 if (flags & IOAPIC_MAP_ALLOC) {
1073 /* special handling for legacy IRQs */
1074 if (irq < nr_legacy_irqs() && info->count == 1 &&
1075 mp_irqdomain_map(domain, irq, pin) != 0)
1076 irq = -1;
1077
1078 if (irq > 0)
1079 info->count++;
1080 else if (info->count == 0)
1081 info->set = 0;
1082 }
1083
1084 mutex_unlock(&ioapic_mutex);
1085
1086 return irq > 0 ? irq : -1;
1087 }
1088
pin_2_irq(int idx,int ioapic,int pin,unsigned int flags)1089 static int pin_2_irq(int idx, int ioapic, int pin, unsigned int flags)
1090 {
1091 u32 gsi = mp_pin_to_gsi(ioapic, pin);
1092
1093 /*
1094 * Debugging check, we are in big trouble if this message pops up!
1095 */
1096 if (mp_irqs[idx].dstirq != pin)
1097 pr_err("broken BIOS or MPTABLE parser, ayiee!!\n");
1098
1099 #ifdef CONFIG_X86_32
1100 /*
1101 * PCI IRQ command line redirection. Yes, limits are hardcoded.
1102 */
1103 if ((pin >= 16) && (pin <= 23)) {
1104 if (pirq_entries[pin-16] != -1) {
1105 if (!pirq_entries[pin-16]) {
1106 apic_printk(APIC_VERBOSE, KERN_DEBUG
1107 "disabling PIRQ%d\n", pin-16);
1108 } else {
1109 int irq = pirq_entries[pin-16];
1110 apic_printk(APIC_VERBOSE, KERN_DEBUG
1111 "using PIRQ%d -> IRQ %d\n",
1112 pin-16, irq);
1113 return irq;
1114 }
1115 }
1116 }
1117 #endif
1118
1119 return mp_map_pin_to_irq(gsi, idx, ioapic, pin, flags);
1120 }
1121
mp_map_gsi_to_irq(u32 gsi,unsigned int flags)1122 int mp_map_gsi_to_irq(u32 gsi, unsigned int flags)
1123 {
1124 int ioapic, pin, idx;
1125
1126 ioapic = mp_find_ioapic(gsi);
1127 if (ioapic < 0)
1128 return -1;
1129
1130 pin = mp_find_ioapic_pin(ioapic, gsi);
1131 idx = find_irq_entry(ioapic, pin, mp_INT);
1132 if ((flags & IOAPIC_MAP_CHECK) && idx < 0)
1133 return -1;
1134
1135 return mp_map_pin_to_irq(gsi, idx, ioapic, pin, flags);
1136 }
1137
mp_unmap_irq(int irq)1138 void mp_unmap_irq(int irq)
1139 {
1140 struct irq_data *data = irq_get_irq_data(irq);
1141 struct mp_pin_info *info;
1142 int ioapic, pin;
1143
1144 if (!data || !data->domain)
1145 return;
1146
1147 ioapic = (int)(long)data->domain->host_data;
1148 pin = (int)data->hwirq;
1149 info = mp_pin_info(ioapic, pin);
1150
1151 mutex_lock(&ioapic_mutex);
1152 if (--info->count == 0) {
1153 info->set = 0;
1154 if (irq < nr_legacy_irqs() &&
1155 ioapics[ioapic].irqdomain_cfg.type == IOAPIC_DOMAIN_LEGACY)
1156 mp_irqdomain_unmap(data->domain, irq);
1157 else
1158 irq_dispose_mapping(irq);
1159 }
1160 mutex_unlock(&ioapic_mutex);
1161 }
1162
1163 /*
1164 * Find a specific PCI IRQ entry.
1165 * Not an __init, possibly needed by modules
1166 */
IO_APIC_get_PCI_irq_vector(int bus,int slot,int pin,struct io_apic_irq_attr * irq_attr)1167 int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin,
1168 struct io_apic_irq_attr *irq_attr)
1169 {
1170 int irq, i, best_ioapic = -1, best_idx = -1;
1171
1172 apic_printk(APIC_DEBUG,
1173 "querying PCI -> IRQ mapping bus:%d, slot:%d, pin:%d.\n",
1174 bus, slot, pin);
1175 if (test_bit(bus, mp_bus_not_pci)) {
1176 apic_printk(APIC_VERBOSE,
1177 "PCI BIOS passed nonexistent PCI bus %d!\n", bus);
1178 return -1;
1179 }
1180
1181 for (i = 0; i < mp_irq_entries; i++) {
1182 int lbus = mp_irqs[i].srcbus;
1183 int ioapic_idx, found = 0;
1184
1185 if (bus != lbus || mp_irqs[i].irqtype != mp_INT ||
1186 slot != ((mp_irqs[i].srcbusirq >> 2) & 0x1f))
1187 continue;
1188
1189 for_each_ioapic(ioapic_idx)
1190 if (mpc_ioapic_id(ioapic_idx) == mp_irqs[i].dstapic ||
1191 mp_irqs[i].dstapic == MP_APIC_ALL) {
1192 found = 1;
1193 break;
1194 }
1195 if (!found)
1196 continue;
1197
1198 /* Skip ISA IRQs */
1199 irq = pin_2_irq(i, ioapic_idx, mp_irqs[i].dstirq, 0);
1200 if (irq > 0 && !IO_APIC_IRQ(irq))
1201 continue;
1202
1203 if (pin == (mp_irqs[i].srcbusirq & 3)) {
1204 best_idx = i;
1205 best_ioapic = ioapic_idx;
1206 goto out;
1207 }
1208
1209 /*
1210 * Use the first all-but-pin matching entry as a
1211 * best-guess fuzzy result for broken mptables.
1212 */
1213 if (best_idx < 0) {
1214 best_idx = i;
1215 best_ioapic = ioapic_idx;
1216 }
1217 }
1218 if (best_idx < 0)
1219 return -1;
1220
1221 out:
1222 irq = pin_2_irq(best_idx, best_ioapic, mp_irqs[best_idx].dstirq,
1223 IOAPIC_MAP_ALLOC);
1224 if (irq > 0)
1225 set_io_apic_irq_attr(irq_attr, best_ioapic,
1226 mp_irqs[best_idx].dstirq,
1227 irq_trigger(best_idx),
1228 irq_polarity(best_idx));
1229 return irq;
1230 }
1231 EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector);
1232
lock_vector_lock(void)1233 void lock_vector_lock(void)
1234 {
1235 /* Used to the online set of cpus does not change
1236 * during assign_irq_vector.
1237 */
1238 raw_spin_lock(&vector_lock);
1239 }
1240
unlock_vector_lock(void)1241 void unlock_vector_lock(void)
1242 {
1243 raw_spin_unlock(&vector_lock);
1244 }
1245
1246 static int
__assign_irq_vector(int irq,struct irq_cfg * cfg,const struct cpumask * mask)1247 __assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask)
1248 {
1249 /*
1250 * NOTE! The local APIC isn't very good at handling
1251 * multiple interrupts at the same interrupt level.
1252 * As the interrupt level is determined by taking the
1253 * vector number and shifting that right by 4, we
1254 * want to spread these out a bit so that they don't
1255 * all fall in the same interrupt level.
1256 *
1257 * Also, we've got to be careful not to trash gate
1258 * 0x80, because int 0x80 is hm, kind of importantish. ;)
1259 */
1260 static int current_vector = FIRST_EXTERNAL_VECTOR + VECTOR_OFFSET_START;
1261 static int current_offset = VECTOR_OFFSET_START % 16;
1262 int cpu, err;
1263 cpumask_var_t tmp_mask;
1264
1265 if (cfg->move_in_progress)
1266 return -EBUSY;
1267
1268 if (!alloc_cpumask_var(&tmp_mask, GFP_ATOMIC))
1269 return -ENOMEM;
1270
1271 /* Only try and allocate irqs on cpus that are present */
1272 err = -ENOSPC;
1273 cpumask_clear(cfg->old_domain);
1274 cpu = cpumask_first_and(mask, cpu_online_mask);
1275 while (cpu < nr_cpu_ids) {
1276 int new_cpu, vector, offset;
1277
1278 apic->vector_allocation_domain(cpu, tmp_mask, mask);
1279
1280 if (cpumask_subset(tmp_mask, cfg->domain)) {
1281 err = 0;
1282 if (cpumask_equal(tmp_mask, cfg->domain))
1283 break;
1284 /*
1285 * New cpumask using the vector is a proper subset of
1286 * the current in use mask. So cleanup the vector
1287 * allocation for the members that are not used anymore.
1288 */
1289 cpumask_andnot(cfg->old_domain, cfg->domain, tmp_mask);
1290 cfg->move_in_progress =
1291 cpumask_intersects(cfg->old_domain, cpu_online_mask);
1292 cpumask_and(cfg->domain, cfg->domain, tmp_mask);
1293 break;
1294 }
1295
1296 vector = current_vector;
1297 offset = current_offset;
1298 next:
1299 vector += 16;
1300 if (vector >= first_system_vector) {
1301 offset = (offset + 1) % 16;
1302 vector = FIRST_EXTERNAL_VECTOR + offset;
1303 }
1304
1305 if (unlikely(current_vector == vector)) {
1306 cpumask_or(cfg->old_domain, cfg->old_domain, tmp_mask);
1307 cpumask_andnot(tmp_mask, mask, cfg->old_domain);
1308 cpu = cpumask_first_and(tmp_mask, cpu_online_mask);
1309 continue;
1310 }
1311
1312 if (test_bit(vector, used_vectors))
1313 goto next;
1314
1315 for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask) {
1316 if (per_cpu(vector_irq, new_cpu)[vector] > VECTOR_UNDEFINED)
1317 goto next;
1318 }
1319 /* Found one! */
1320 current_vector = vector;
1321 current_offset = offset;
1322 if (cfg->vector) {
1323 cpumask_copy(cfg->old_domain, cfg->domain);
1324 cfg->move_in_progress =
1325 cpumask_intersects(cfg->old_domain, cpu_online_mask);
1326 }
1327 for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask)
1328 per_cpu(vector_irq, new_cpu)[vector] = irq;
1329 cfg->vector = vector;
1330 cpumask_copy(cfg->domain, tmp_mask);
1331 err = 0;
1332 break;
1333 }
1334 free_cpumask_var(tmp_mask);
1335 return err;
1336 }
1337
assign_irq_vector(int irq,struct irq_cfg * cfg,const struct cpumask * mask)1338 int assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask)
1339 {
1340 int err;
1341 unsigned long flags;
1342
1343 raw_spin_lock_irqsave(&vector_lock, flags);
1344 err = __assign_irq_vector(irq, cfg, mask);
1345 raw_spin_unlock_irqrestore(&vector_lock, flags);
1346 return err;
1347 }
1348
__clear_irq_vector(int irq,struct irq_cfg * cfg)1349 static void __clear_irq_vector(int irq, struct irq_cfg *cfg)
1350 {
1351 int cpu, vector;
1352
1353 BUG_ON(!cfg->vector);
1354
1355 vector = cfg->vector;
1356 for_each_cpu_and(cpu, cfg->domain, cpu_online_mask)
1357 per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED;
1358
1359 cfg->vector = 0;
1360 cpumask_clear(cfg->domain);
1361
1362 if (likely(!cfg->move_in_progress))
1363 return;
1364 for_each_cpu_and(cpu, cfg->old_domain, cpu_online_mask) {
1365 for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) {
1366 if (per_cpu(vector_irq, cpu)[vector] != irq)
1367 continue;
1368 per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED;
1369 break;
1370 }
1371 }
1372 cfg->move_in_progress = 0;
1373 }
1374
__setup_vector_irq(int cpu)1375 void __setup_vector_irq(int cpu)
1376 {
1377 /* Initialize vector_irq on a new cpu */
1378 int irq, vector;
1379 struct irq_cfg *cfg;
1380
1381 /*
1382 * vector_lock will make sure that we don't run into irq vector
1383 * assignments that might be happening on another cpu in parallel,
1384 * while we setup our initial vector to irq mappings.
1385 */
1386 raw_spin_lock(&vector_lock);
1387 /* Mark the inuse vectors */
1388 for_each_active_irq(irq) {
1389 cfg = irq_cfg(irq);
1390 if (!cfg)
1391 continue;
1392
1393 if (!cpumask_test_cpu(cpu, cfg->domain))
1394 continue;
1395 vector = cfg->vector;
1396 per_cpu(vector_irq, cpu)[vector] = irq;
1397 }
1398 /* Mark the free vectors */
1399 for (vector = 0; vector < NR_VECTORS; ++vector) {
1400 irq = per_cpu(vector_irq, cpu)[vector];
1401 if (irq <= VECTOR_UNDEFINED)
1402 continue;
1403
1404 cfg = irq_cfg(irq);
1405 if (!cpumask_test_cpu(cpu, cfg->domain))
1406 per_cpu(vector_irq, cpu)[vector] = VECTOR_UNDEFINED;
1407 }
1408 raw_spin_unlock(&vector_lock);
1409 }
1410
1411 static struct irq_chip ioapic_chip;
1412
1413 #ifdef CONFIG_X86_32
IO_APIC_irq_trigger(int irq)1414 static inline int IO_APIC_irq_trigger(int irq)
1415 {
1416 int apic, idx, pin;
1417
1418 for_each_ioapic_pin(apic, pin) {
1419 idx = find_irq_entry(apic, pin, mp_INT);
1420 if ((idx != -1) && (irq == pin_2_irq(idx, apic, pin, 0)))
1421 return irq_trigger(idx);
1422 }
1423 /*
1424 * nonexistent IRQs are edge default
1425 */
1426 return 0;
1427 }
1428 #else
IO_APIC_irq_trigger(int irq)1429 static inline int IO_APIC_irq_trigger(int irq)
1430 {
1431 return 1;
1432 }
1433 #endif
1434
ioapic_register_intr(unsigned int irq,struct irq_cfg * cfg,unsigned long trigger)1435 static void ioapic_register_intr(unsigned int irq, struct irq_cfg *cfg,
1436 unsigned long trigger)
1437 {
1438 struct irq_chip *chip = &ioapic_chip;
1439 irq_flow_handler_t hdl;
1440 bool fasteoi;
1441
1442 if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
1443 trigger == IOAPIC_LEVEL) {
1444 irq_set_status_flags(irq, IRQ_LEVEL);
1445 fasteoi = true;
1446 } else {
1447 irq_clear_status_flags(irq, IRQ_LEVEL);
1448 fasteoi = false;
1449 }
1450
1451 if (setup_remapped_irq(irq, cfg, chip))
1452 fasteoi = trigger != 0;
1453
1454 hdl = fasteoi ? handle_fasteoi_irq : handle_edge_irq;
1455 irq_set_chip_and_handler_name(irq, chip, hdl,
1456 fasteoi ? "fasteoi" : "edge");
1457 }
1458
native_setup_ioapic_entry(int irq,struct IO_APIC_route_entry * entry,unsigned int destination,int vector,struct io_apic_irq_attr * attr)1459 int native_setup_ioapic_entry(int irq, struct IO_APIC_route_entry *entry,
1460 unsigned int destination, int vector,
1461 struct io_apic_irq_attr *attr)
1462 {
1463 memset(entry, 0, sizeof(*entry));
1464
1465 entry->delivery_mode = apic->irq_delivery_mode;
1466 entry->dest_mode = apic->irq_dest_mode;
1467 entry->dest = destination;
1468 entry->vector = vector;
1469 entry->mask = 0; /* enable IRQ */
1470 entry->trigger = attr->trigger;
1471 entry->polarity = attr->polarity;
1472
1473 /*
1474 * Mask level triggered irqs.
1475 * Use IRQ_DELAYED_DISABLE for edge triggered irqs.
1476 */
1477 if (attr->trigger)
1478 entry->mask = 1;
1479
1480 return 0;
1481 }
1482
setup_ioapic_irq(unsigned int irq,struct irq_cfg * cfg,struct io_apic_irq_attr * attr)1483 static void setup_ioapic_irq(unsigned int irq, struct irq_cfg *cfg,
1484 struct io_apic_irq_attr *attr)
1485 {
1486 struct IO_APIC_route_entry entry;
1487 unsigned int dest;
1488
1489 if (!IO_APIC_IRQ(irq))
1490 return;
1491
1492 if (assign_irq_vector(irq, cfg, apic->target_cpus()))
1493 return;
1494
1495 if (apic->cpu_mask_to_apicid_and(cfg->domain, apic->target_cpus(),
1496 &dest)) {
1497 pr_warn("Failed to obtain apicid for ioapic %d, pin %d\n",
1498 mpc_ioapic_id(attr->ioapic), attr->ioapic_pin);
1499 __clear_irq_vector(irq, cfg);
1500
1501 return;
1502 }
1503
1504 apic_printk(APIC_VERBOSE,KERN_DEBUG
1505 "IOAPIC[%d]: Set routing entry (%d-%d -> 0x%x -> "
1506 "IRQ %d Mode:%i Active:%i Dest:%d)\n",
1507 attr->ioapic, mpc_ioapic_id(attr->ioapic), attr->ioapic_pin,
1508 cfg->vector, irq, attr->trigger, attr->polarity, dest);
1509
1510 if (x86_io_apic_ops.setup_entry(irq, &entry, dest, cfg->vector, attr)) {
1511 pr_warn("Failed to setup ioapic entry for ioapic %d, pin %d\n",
1512 mpc_ioapic_id(attr->ioapic), attr->ioapic_pin);
1513 __clear_irq_vector(irq, cfg);
1514
1515 return;
1516 }
1517
1518 ioapic_register_intr(irq, cfg, attr->trigger);
1519 if (irq < nr_legacy_irqs())
1520 legacy_pic->mask(irq);
1521
1522 ioapic_write_entry(attr->ioapic, attr->ioapic_pin, entry);
1523 }
1524
setup_IO_APIC_irqs(void)1525 static void __init setup_IO_APIC_irqs(void)
1526 {
1527 unsigned int ioapic, pin;
1528 int idx;
1529
1530 apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n");
1531
1532 for_each_ioapic_pin(ioapic, pin) {
1533 idx = find_irq_entry(ioapic, pin, mp_INT);
1534 if (idx < 0)
1535 apic_printk(APIC_VERBOSE,
1536 KERN_DEBUG " apic %d pin %d not connected\n",
1537 mpc_ioapic_id(ioapic), pin);
1538 else
1539 pin_2_irq(idx, ioapic, pin,
1540 ioapic ? 0 : IOAPIC_MAP_ALLOC);
1541 }
1542 }
1543
1544 /*
1545 * Set up the timer pin, possibly with the 8259A-master behind.
1546 */
setup_timer_IRQ0_pin(unsigned int ioapic_idx,unsigned int pin,int vector)1547 static void __init setup_timer_IRQ0_pin(unsigned int ioapic_idx,
1548 unsigned int pin, int vector)
1549 {
1550 struct IO_APIC_route_entry entry;
1551 unsigned int dest;
1552
1553 memset(&entry, 0, sizeof(entry));
1554
1555 /*
1556 * We use logical delivery to get the timer IRQ
1557 * to the first CPU.
1558 */
1559 if (unlikely(apic->cpu_mask_to_apicid_and(apic->target_cpus(),
1560 apic->target_cpus(), &dest)))
1561 dest = BAD_APICID;
1562
1563 entry.dest_mode = apic->irq_dest_mode;
1564 entry.mask = 0; /* don't mask IRQ for edge */
1565 entry.dest = dest;
1566 entry.delivery_mode = apic->irq_delivery_mode;
1567 entry.polarity = 0;
1568 entry.trigger = 0;
1569 entry.vector = vector;
1570
1571 /*
1572 * The timer IRQ doesn't have to know that behind the
1573 * scene we may have a 8259A-master in AEOI mode ...
1574 */
1575 irq_set_chip_and_handler_name(0, &ioapic_chip, handle_edge_irq,
1576 "edge");
1577
1578 /*
1579 * Add it to the IO-APIC irq-routing table:
1580 */
1581 ioapic_write_entry(ioapic_idx, pin, entry);
1582 }
1583
native_io_apic_print_entries(unsigned int apic,unsigned int nr_entries)1584 void native_io_apic_print_entries(unsigned int apic, unsigned int nr_entries)
1585 {
1586 int i;
1587
1588 pr_debug(" NR Dst Mask Trig IRR Pol Stat Dmod Deli Vect:\n");
1589
1590 for (i = 0; i <= nr_entries; i++) {
1591 struct IO_APIC_route_entry entry;
1592
1593 entry = ioapic_read_entry(apic, i);
1594
1595 pr_debug(" %02x %02X ", i, entry.dest);
1596 pr_cont("%1d %1d %1d %1d %1d "
1597 "%1d %1d %02X\n",
1598 entry.mask,
1599 entry.trigger,
1600 entry.irr,
1601 entry.polarity,
1602 entry.delivery_status,
1603 entry.dest_mode,
1604 entry.delivery_mode,
1605 entry.vector);
1606 }
1607 }
1608
intel_ir_io_apic_print_entries(unsigned int apic,unsigned int nr_entries)1609 void intel_ir_io_apic_print_entries(unsigned int apic,
1610 unsigned int nr_entries)
1611 {
1612 int i;
1613
1614 pr_debug(" NR Indx Fmt Mask Trig IRR Pol Stat Indx2 Zero Vect:\n");
1615
1616 for (i = 0; i <= nr_entries; i++) {
1617 struct IR_IO_APIC_route_entry *ir_entry;
1618 struct IO_APIC_route_entry entry;
1619
1620 entry = ioapic_read_entry(apic, i);
1621
1622 ir_entry = (struct IR_IO_APIC_route_entry *)&entry;
1623
1624 pr_debug(" %02x %04X ", i, ir_entry->index);
1625 pr_cont("%1d %1d %1d %1d %1d "
1626 "%1d %1d %X %02X\n",
1627 ir_entry->format,
1628 ir_entry->mask,
1629 ir_entry->trigger,
1630 ir_entry->irr,
1631 ir_entry->polarity,
1632 ir_entry->delivery_status,
1633 ir_entry->index2,
1634 ir_entry->zero,
1635 ir_entry->vector);
1636 }
1637 }
1638
ioapic_zap_locks(void)1639 void ioapic_zap_locks(void)
1640 {
1641 raw_spin_lock_init(&ioapic_lock);
1642 }
1643
print_IO_APIC(int ioapic_idx)1644 __apicdebuginit(void) print_IO_APIC(int ioapic_idx)
1645 {
1646 union IO_APIC_reg_00 reg_00;
1647 union IO_APIC_reg_01 reg_01;
1648 union IO_APIC_reg_02 reg_02;
1649 union IO_APIC_reg_03 reg_03;
1650 unsigned long flags;
1651
1652 raw_spin_lock_irqsave(&ioapic_lock, flags);
1653 reg_00.raw = io_apic_read(ioapic_idx, 0);
1654 reg_01.raw = io_apic_read(ioapic_idx, 1);
1655 if (reg_01.bits.version >= 0x10)
1656 reg_02.raw = io_apic_read(ioapic_idx, 2);
1657 if (reg_01.bits.version >= 0x20)
1658 reg_03.raw = io_apic_read(ioapic_idx, 3);
1659 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
1660
1661 printk(KERN_DEBUG "IO APIC #%d......\n", mpc_ioapic_id(ioapic_idx));
1662 printk(KERN_DEBUG ".... register #00: %08X\n", reg_00.raw);
1663 printk(KERN_DEBUG "....... : physical APIC id: %02X\n", reg_00.bits.ID);
1664 printk(KERN_DEBUG "....... : Delivery Type: %X\n", reg_00.bits.delivery_type);
1665 printk(KERN_DEBUG "....... : LTS : %X\n", reg_00.bits.LTS);
1666
1667 printk(KERN_DEBUG ".... register #01: %08X\n", *(int *)®_01);
1668 printk(KERN_DEBUG "....... : max redirection entries: %02X\n",
1669 reg_01.bits.entries);
1670
1671 printk(KERN_DEBUG "....... : PRQ implemented: %X\n", reg_01.bits.PRQ);
1672 printk(KERN_DEBUG "....... : IO APIC version: %02X\n",
1673 reg_01.bits.version);
1674
1675 /*
1676 * Some Intel chipsets with IO APIC VERSION of 0x1? don't have reg_02,
1677 * but the value of reg_02 is read as the previous read register
1678 * value, so ignore it if reg_02 == reg_01.
1679 */
1680 if (reg_01.bits.version >= 0x10 && reg_02.raw != reg_01.raw) {
1681 printk(KERN_DEBUG ".... register #02: %08X\n", reg_02.raw);
1682 printk(KERN_DEBUG "....... : arbitration: %02X\n", reg_02.bits.arbitration);
1683 }
1684
1685 /*
1686 * Some Intel chipsets with IO APIC VERSION of 0x2? don't have reg_02
1687 * or reg_03, but the value of reg_0[23] is read as the previous read
1688 * register value, so ignore it if reg_03 == reg_0[12].
1689 */
1690 if (reg_01.bits.version >= 0x20 && reg_03.raw != reg_02.raw &&
1691 reg_03.raw != reg_01.raw) {
1692 printk(KERN_DEBUG ".... register #03: %08X\n", reg_03.raw);
1693 printk(KERN_DEBUG "....... : Boot DT : %X\n", reg_03.bits.boot_DT);
1694 }
1695
1696 printk(KERN_DEBUG ".... IRQ redirection table:\n");
1697
1698 x86_io_apic_ops.print_entries(ioapic_idx, reg_01.bits.entries);
1699 }
1700
print_IO_APICs(void)1701 __apicdebuginit(void) print_IO_APICs(void)
1702 {
1703 int ioapic_idx;
1704 struct irq_cfg *cfg;
1705 unsigned int irq;
1706 struct irq_chip *chip;
1707
1708 printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries);
1709 for_each_ioapic(ioapic_idx)
1710 printk(KERN_DEBUG "number of IO-APIC #%d registers: %d.\n",
1711 mpc_ioapic_id(ioapic_idx),
1712 ioapics[ioapic_idx].nr_registers);
1713
1714 /*
1715 * We are a bit conservative about what we expect. We have to
1716 * know about every hardware change ASAP.
1717 */
1718 printk(KERN_INFO "testing the IO APIC.......................\n");
1719
1720 for_each_ioapic(ioapic_idx)
1721 print_IO_APIC(ioapic_idx);
1722
1723 printk(KERN_DEBUG "IRQ to pin mappings:\n");
1724 for_each_active_irq(irq) {
1725 struct irq_pin_list *entry;
1726
1727 chip = irq_get_chip(irq);
1728 if (chip != &ioapic_chip)
1729 continue;
1730
1731 cfg = irq_cfg(irq);
1732 if (!cfg)
1733 continue;
1734 entry = cfg->irq_2_pin;
1735 if (!entry)
1736 continue;
1737 printk(KERN_DEBUG "IRQ%d ", irq);
1738 for_each_irq_pin(entry, cfg->irq_2_pin)
1739 pr_cont("-> %d:%d", entry->apic, entry->pin);
1740 pr_cont("\n");
1741 }
1742
1743 printk(KERN_INFO ".................................... done.\n");
1744 }
1745
print_APIC_field(int base)1746 __apicdebuginit(void) print_APIC_field(int base)
1747 {
1748 int i;
1749
1750 printk(KERN_DEBUG);
1751
1752 for (i = 0; i < 8; i++)
1753 pr_cont("%08x", apic_read(base + i*0x10));
1754
1755 pr_cont("\n");
1756 }
1757
print_local_APIC(void * dummy)1758 __apicdebuginit(void) print_local_APIC(void *dummy)
1759 {
1760 unsigned int i, v, ver, maxlvt;
1761 u64 icr;
1762
1763 printk(KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n",
1764 smp_processor_id(), hard_smp_processor_id());
1765 v = apic_read(APIC_ID);
1766 printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, read_apic_id());
1767 v = apic_read(APIC_LVR);
1768 printk(KERN_INFO "... APIC VERSION: %08x\n", v);
1769 ver = GET_APIC_VERSION(v);
1770 maxlvt = lapic_get_maxlvt();
1771
1772 v = apic_read(APIC_TASKPRI);
1773 printk(KERN_DEBUG "... APIC TASKPRI: %08x (%02x)\n", v, v & APIC_TPRI_MASK);
1774
1775 if (APIC_INTEGRATED(ver)) { /* !82489DX */
1776 if (!APIC_XAPIC(ver)) {
1777 v = apic_read(APIC_ARBPRI);
1778 printk(KERN_DEBUG "... APIC ARBPRI: %08x (%02x)\n", v,
1779 v & APIC_ARBPRI_MASK);
1780 }
1781 v = apic_read(APIC_PROCPRI);
1782 printk(KERN_DEBUG "... APIC PROCPRI: %08x\n", v);
1783 }
1784
1785 /*
1786 * Remote read supported only in the 82489DX and local APIC for
1787 * Pentium processors.
1788 */
1789 if (!APIC_INTEGRATED(ver) || maxlvt == 3) {
1790 v = apic_read(APIC_RRR);
1791 printk(KERN_DEBUG "... APIC RRR: %08x\n", v);
1792 }
1793
1794 v = apic_read(APIC_LDR);
1795 printk(KERN_DEBUG "... APIC LDR: %08x\n", v);
1796 if (!x2apic_enabled()) {
1797 v = apic_read(APIC_DFR);
1798 printk(KERN_DEBUG "... APIC DFR: %08x\n", v);
1799 }
1800 v = apic_read(APIC_SPIV);
1801 printk(KERN_DEBUG "... APIC SPIV: %08x\n", v);
1802
1803 printk(KERN_DEBUG "... APIC ISR field:\n");
1804 print_APIC_field(APIC_ISR);
1805 printk(KERN_DEBUG "... APIC TMR field:\n");
1806 print_APIC_field(APIC_TMR);
1807 printk(KERN_DEBUG "... APIC IRR field:\n");
1808 print_APIC_field(APIC_IRR);
1809
1810 if (APIC_INTEGRATED(ver)) { /* !82489DX */
1811 if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */
1812 apic_write(APIC_ESR, 0);
1813
1814 v = apic_read(APIC_ESR);
1815 printk(KERN_DEBUG "... APIC ESR: %08x\n", v);
1816 }
1817
1818 icr = apic_icr_read();
1819 printk(KERN_DEBUG "... APIC ICR: %08x\n", (u32)icr);
1820 printk(KERN_DEBUG "... APIC ICR2: %08x\n", (u32)(icr >> 32));
1821
1822 v = apic_read(APIC_LVTT);
1823 printk(KERN_DEBUG "... APIC LVTT: %08x\n", v);
1824
1825 if (maxlvt > 3) { /* PC is LVT#4. */
1826 v = apic_read(APIC_LVTPC);
1827 printk(KERN_DEBUG "... APIC LVTPC: %08x\n", v);
1828 }
1829 v = apic_read(APIC_LVT0);
1830 printk(KERN_DEBUG "... APIC LVT0: %08x\n", v);
1831 v = apic_read(APIC_LVT1);
1832 printk(KERN_DEBUG "... APIC LVT1: %08x\n", v);
1833
1834 if (maxlvt > 2) { /* ERR is LVT#3. */
1835 v = apic_read(APIC_LVTERR);
1836 printk(KERN_DEBUG "... APIC LVTERR: %08x\n", v);
1837 }
1838
1839 v = apic_read(APIC_TMICT);
1840 printk(KERN_DEBUG "... APIC TMICT: %08x\n", v);
1841 v = apic_read(APIC_TMCCT);
1842 printk(KERN_DEBUG "... APIC TMCCT: %08x\n", v);
1843 v = apic_read(APIC_TDCR);
1844 printk(KERN_DEBUG "... APIC TDCR: %08x\n", v);
1845
1846 if (boot_cpu_has(X86_FEATURE_EXTAPIC)) {
1847 v = apic_read(APIC_EFEAT);
1848 maxlvt = (v >> 16) & 0xff;
1849 printk(KERN_DEBUG "... APIC EFEAT: %08x\n", v);
1850 v = apic_read(APIC_ECTRL);
1851 printk(KERN_DEBUG "... APIC ECTRL: %08x\n", v);
1852 for (i = 0; i < maxlvt; i++) {
1853 v = apic_read(APIC_EILVTn(i));
1854 printk(KERN_DEBUG "... APIC EILVT%d: %08x\n", i, v);
1855 }
1856 }
1857 pr_cont("\n");
1858 }
1859
print_local_APICs(int maxcpu)1860 __apicdebuginit(void) print_local_APICs(int maxcpu)
1861 {
1862 int cpu;
1863
1864 if (!maxcpu)
1865 return;
1866
1867 preempt_disable();
1868 for_each_online_cpu(cpu) {
1869 if (cpu >= maxcpu)
1870 break;
1871 smp_call_function_single(cpu, print_local_APIC, NULL, 1);
1872 }
1873 preempt_enable();
1874 }
1875
print_PIC(void)1876 __apicdebuginit(void) print_PIC(void)
1877 {
1878 unsigned int v;
1879 unsigned long flags;
1880
1881 if (!nr_legacy_irqs())
1882 return;
1883
1884 printk(KERN_DEBUG "\nprinting PIC contents\n");
1885
1886 raw_spin_lock_irqsave(&i8259A_lock, flags);
1887
1888 v = inb(0xa1) << 8 | inb(0x21);
1889 printk(KERN_DEBUG "... PIC IMR: %04x\n", v);
1890
1891 v = inb(0xa0) << 8 | inb(0x20);
1892 printk(KERN_DEBUG "... PIC IRR: %04x\n", v);
1893
1894 outb(0x0b,0xa0);
1895 outb(0x0b,0x20);
1896 v = inb(0xa0) << 8 | inb(0x20);
1897 outb(0x0a,0xa0);
1898 outb(0x0a,0x20);
1899
1900 raw_spin_unlock_irqrestore(&i8259A_lock, flags);
1901
1902 printk(KERN_DEBUG "... PIC ISR: %04x\n", v);
1903
1904 v = inb(0x4d1) << 8 | inb(0x4d0);
1905 printk(KERN_DEBUG "... PIC ELCR: %04x\n", v);
1906 }
1907
1908 static int __initdata show_lapic = 1;
setup_show_lapic(char * arg)1909 static __init int setup_show_lapic(char *arg)
1910 {
1911 int num = -1;
1912
1913 if (strcmp(arg, "all") == 0) {
1914 show_lapic = CONFIG_NR_CPUS;
1915 } else {
1916 get_option(&arg, &num);
1917 if (num >= 0)
1918 show_lapic = num;
1919 }
1920
1921 return 1;
1922 }
1923 __setup("show_lapic=", setup_show_lapic);
1924
print_ICs(void)1925 __apicdebuginit(int) print_ICs(void)
1926 {
1927 if (apic_verbosity == APIC_QUIET)
1928 return 0;
1929
1930 print_PIC();
1931
1932 /* don't print out if apic is not there */
1933 if (!cpu_has_apic && !apic_from_smp_config())
1934 return 0;
1935
1936 print_local_APICs(show_lapic);
1937 print_IO_APICs();
1938
1939 return 0;
1940 }
1941
1942 late_initcall(print_ICs);
1943
1944
1945 /* Where if anywhere is the i8259 connect in external int mode */
1946 static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
1947
enable_IO_APIC(void)1948 void __init enable_IO_APIC(void)
1949 {
1950 int i8259_apic, i8259_pin;
1951 int apic, pin;
1952
1953 if (!nr_legacy_irqs())
1954 return;
1955
1956 for_each_ioapic_pin(apic, pin) {
1957 /* See if any of the pins is in ExtINT mode */
1958 struct IO_APIC_route_entry entry = ioapic_read_entry(apic, pin);
1959
1960 /* If the interrupt line is enabled and in ExtInt mode
1961 * I have found the pin where the i8259 is connected.
1962 */
1963 if ((entry.mask == 0) && (entry.delivery_mode == dest_ExtINT)) {
1964 ioapic_i8259.apic = apic;
1965 ioapic_i8259.pin = pin;
1966 goto found_i8259;
1967 }
1968 }
1969 found_i8259:
1970 /* Look to see what if the MP table has reported the ExtINT */
1971 /* If we could not find the appropriate pin by looking at the ioapic
1972 * the i8259 probably is not connected the ioapic but give the
1973 * mptable a chance anyway.
1974 */
1975 i8259_pin = find_isa_irq_pin(0, mp_ExtINT);
1976 i8259_apic = find_isa_irq_apic(0, mp_ExtINT);
1977 /* Trust the MP table if nothing is setup in the hardware */
1978 if ((ioapic_i8259.pin == -1) && (i8259_pin >= 0)) {
1979 printk(KERN_WARNING "ExtINT not setup in hardware but reported by MP table\n");
1980 ioapic_i8259.pin = i8259_pin;
1981 ioapic_i8259.apic = i8259_apic;
1982 }
1983 /* Complain if the MP table and the hardware disagree */
1984 if (((ioapic_i8259.apic != i8259_apic) || (ioapic_i8259.pin != i8259_pin)) &&
1985 (i8259_pin >= 0) && (ioapic_i8259.pin >= 0))
1986 {
1987 printk(KERN_WARNING "ExtINT in hardware and MP table differ\n");
1988 }
1989
1990 /*
1991 * Do not trust the IO-APIC being empty at bootup
1992 */
1993 clear_IO_APIC();
1994 }
1995
native_disable_io_apic(void)1996 void native_disable_io_apic(void)
1997 {
1998 /*
1999 * If the i8259 is routed through an IOAPIC
2000 * Put that IOAPIC in virtual wire mode
2001 * so legacy interrupts can be delivered.
2002 */
2003 if (ioapic_i8259.pin != -1) {
2004 struct IO_APIC_route_entry entry;
2005
2006 memset(&entry, 0, sizeof(entry));
2007 entry.mask = 0; /* Enabled */
2008 entry.trigger = 0; /* Edge */
2009 entry.irr = 0;
2010 entry.polarity = 0; /* High */
2011 entry.delivery_status = 0;
2012 entry.dest_mode = 0; /* Physical */
2013 entry.delivery_mode = dest_ExtINT; /* ExtInt */
2014 entry.vector = 0;
2015 entry.dest = read_apic_id();
2016
2017 /*
2018 * Add it to the IO-APIC irq-routing table:
2019 */
2020 ioapic_write_entry(ioapic_i8259.apic, ioapic_i8259.pin, entry);
2021 }
2022
2023 if (cpu_has_apic || apic_from_smp_config())
2024 disconnect_bsp_APIC(ioapic_i8259.pin != -1);
2025
2026 }
2027
2028 /*
2029 * Not an __init, needed by the reboot code
2030 */
disable_IO_APIC(void)2031 void disable_IO_APIC(void)
2032 {
2033 /*
2034 * Clear the IO-APIC before rebooting:
2035 */
2036 clear_IO_APIC();
2037
2038 if (!nr_legacy_irqs())
2039 return;
2040
2041 x86_io_apic_ops.disable();
2042 }
2043
2044 #ifdef CONFIG_X86_32
2045 /*
2046 * function to set the IO-APIC physical IDs based on the
2047 * values stored in the MPC table.
2048 *
2049 * by Matt Domsch <Matt_Domsch@dell.com> Tue Dec 21 12:25:05 CST 1999
2050 */
setup_ioapic_ids_from_mpc_nocheck(void)2051 void __init setup_ioapic_ids_from_mpc_nocheck(void)
2052 {
2053 union IO_APIC_reg_00 reg_00;
2054 physid_mask_t phys_id_present_map;
2055 int ioapic_idx;
2056 int i;
2057 unsigned char old_id;
2058 unsigned long flags;
2059
2060 /*
2061 * This is broken; anything with a real cpu count has to
2062 * circumvent this idiocy regardless.
2063 */
2064 apic->ioapic_phys_id_map(&phys_cpu_present_map, &phys_id_present_map);
2065
2066 /*
2067 * Set the IOAPIC ID to the value stored in the MPC table.
2068 */
2069 for_each_ioapic(ioapic_idx) {
2070 /* Read the register 0 value */
2071 raw_spin_lock_irqsave(&ioapic_lock, flags);
2072 reg_00.raw = io_apic_read(ioapic_idx, 0);
2073 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
2074
2075 old_id = mpc_ioapic_id(ioapic_idx);
2076
2077 if (mpc_ioapic_id(ioapic_idx) >= get_physical_broadcast()) {
2078 printk(KERN_ERR "BIOS bug, IO-APIC#%d ID is %d in the MPC table!...\n",
2079 ioapic_idx, mpc_ioapic_id(ioapic_idx));
2080 printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
2081 reg_00.bits.ID);
2082 ioapics[ioapic_idx].mp_config.apicid = reg_00.bits.ID;
2083 }
2084
2085 /*
2086 * Sanity check, is the ID really free? Every APIC in a
2087 * system must have a unique ID or we get lots of nice
2088 * 'stuck on smp_invalidate_needed IPI wait' messages.
2089 */
2090 if (apic->check_apicid_used(&phys_id_present_map,
2091 mpc_ioapic_id(ioapic_idx))) {
2092 printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n",
2093 ioapic_idx, mpc_ioapic_id(ioapic_idx));
2094 for (i = 0; i < get_physical_broadcast(); i++)
2095 if (!physid_isset(i, phys_id_present_map))
2096 break;
2097 if (i >= get_physical_broadcast())
2098 panic("Max APIC ID exceeded!\n");
2099 printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
2100 i);
2101 physid_set(i, phys_id_present_map);
2102 ioapics[ioapic_idx].mp_config.apicid = i;
2103 } else {
2104 physid_mask_t tmp;
2105 apic->apicid_to_cpu_present(mpc_ioapic_id(ioapic_idx),
2106 &tmp);
2107 apic_printk(APIC_VERBOSE, "Setting %d in the "
2108 "phys_id_present_map\n",
2109 mpc_ioapic_id(ioapic_idx));
2110 physids_or(phys_id_present_map, phys_id_present_map, tmp);
2111 }
2112
2113 /*
2114 * We need to adjust the IRQ routing table
2115 * if the ID changed.
2116 */
2117 if (old_id != mpc_ioapic_id(ioapic_idx))
2118 for (i = 0; i < mp_irq_entries; i++)
2119 if (mp_irqs[i].dstapic == old_id)
2120 mp_irqs[i].dstapic
2121 = mpc_ioapic_id(ioapic_idx);
2122
2123 /*
2124 * Update the ID register according to the right value
2125 * from the MPC table if they are different.
2126 */
2127 if (mpc_ioapic_id(ioapic_idx) == reg_00.bits.ID)
2128 continue;
2129
2130 apic_printk(APIC_VERBOSE, KERN_INFO
2131 "...changing IO-APIC physical APIC ID to %d ...",
2132 mpc_ioapic_id(ioapic_idx));
2133
2134 reg_00.bits.ID = mpc_ioapic_id(ioapic_idx);
2135 raw_spin_lock_irqsave(&ioapic_lock, flags);
2136 io_apic_write(ioapic_idx, 0, reg_00.raw);
2137 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
2138
2139 /*
2140 * Sanity check
2141 */
2142 raw_spin_lock_irqsave(&ioapic_lock, flags);
2143 reg_00.raw = io_apic_read(ioapic_idx, 0);
2144 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
2145 if (reg_00.bits.ID != mpc_ioapic_id(ioapic_idx))
2146 pr_cont("could not set ID!\n");
2147 else
2148 apic_printk(APIC_VERBOSE, " ok.\n");
2149 }
2150 }
2151
setup_ioapic_ids_from_mpc(void)2152 void __init setup_ioapic_ids_from_mpc(void)
2153 {
2154
2155 if (acpi_ioapic)
2156 return;
2157 /*
2158 * Don't check I/O APIC IDs for xAPIC systems. They have
2159 * no meaning without the serial APIC bus.
2160 */
2161 if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
2162 || APIC_XAPIC(apic_version[boot_cpu_physical_apicid]))
2163 return;
2164 setup_ioapic_ids_from_mpc_nocheck();
2165 }
2166 #endif
2167
2168 int no_timer_check __initdata;
2169
notimercheck(char * s)2170 static int __init notimercheck(char *s)
2171 {
2172 no_timer_check = 1;
2173 return 1;
2174 }
2175 __setup("no_timer_check", notimercheck);
2176
2177 /*
2178 * There is a nasty bug in some older SMP boards, their mptable lies
2179 * about the timer IRQ. We do the following to work around the situation:
2180 *
2181 * - timer IRQ defaults to IO-APIC IRQ
2182 * - if this function detects that timer IRQs are defunct, then we fall
2183 * back to ISA timer IRQs
2184 */
timer_irq_works(void)2185 static int __init timer_irq_works(void)
2186 {
2187 unsigned long t1 = jiffies;
2188 unsigned long flags;
2189 unsigned long total_waited = 0;
2190 unsigned long wait_interval = (10 * 1000) / HZ;
2191
2192 if (no_timer_check)
2193 return 1;
2194
2195 /* On the emulator, there is no point to proceeding any further
2196 * unless timer_irq_works(). */
2197
2198 while (true) {
2199 local_save_flags(flags);
2200 local_irq_enable();
2201 /* Let ten ticks pass... */
2202 mdelay(wait_interval);
2203 local_irq_restore(flags);
2204 total_waited += wait_interval;
2205
2206 if (total_waited > 10000)
2207 BUG();
2208
2209 /*
2210 * Expect a few ticks at least, to be sure some possible
2211 * glue logic does not lock up after one or two first
2212 * ticks in a non-ExtINT mode. Also the local APIC
2213 * might have cached one ExtINT interrupt. Finally, at
2214 * least one tick may be lost due to delays.
2215 */
2216
2217 /* jiffies wrap? */
2218 if (time_after(jiffies, t1 + 4))
2219 return 1;
2220 }
2221 return 0;
2222 }
2223
2224 /*
2225 * In the SMP+IOAPIC case it might happen that there are an unspecified
2226 * number of pending IRQ events unhandled. These cases are very rare,
2227 * so we 'resend' these IRQs via IPIs, to the same CPU. It's much
2228 * better to do it this way as thus we do not have to be aware of
2229 * 'pending' interrupts in the IRQ path, except at this point.
2230 */
2231 /*
2232 * Edge triggered needs to resend any interrupt
2233 * that was delayed but this is now handled in the device
2234 * independent code.
2235 */
2236
2237 /*
2238 * Starting up a edge-triggered IO-APIC interrupt is
2239 * nasty - we need to make sure that we get the edge.
2240 * If it is already asserted for some reason, we need
2241 * return 1 to indicate that is was pending.
2242 *
2243 * This is not complete - we should be able to fake
2244 * an edge even if it isn't on the 8259A...
2245 */
2246
startup_ioapic_irq(struct irq_data * data)2247 static unsigned int startup_ioapic_irq(struct irq_data *data)
2248 {
2249 int was_pending = 0, irq = data->irq;
2250 unsigned long flags;
2251
2252 raw_spin_lock_irqsave(&ioapic_lock, flags);
2253 if (irq < nr_legacy_irqs()) {
2254 legacy_pic->mask(irq);
2255 if (legacy_pic->irq_pending(irq))
2256 was_pending = 1;
2257 }
2258 __unmask_ioapic(data->chip_data);
2259 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
2260
2261 return was_pending;
2262 }
2263
ioapic_retrigger_irq(struct irq_data * data)2264 static int ioapic_retrigger_irq(struct irq_data *data)
2265 {
2266 struct irq_cfg *cfg = data->chip_data;
2267 unsigned long flags;
2268 int cpu;
2269
2270 raw_spin_lock_irqsave(&vector_lock, flags);
2271 cpu = cpumask_first_and(cfg->domain, cpu_online_mask);
2272 apic->send_IPI_mask(cpumask_of(cpu), cfg->vector);
2273 raw_spin_unlock_irqrestore(&vector_lock, flags);
2274
2275 return 1;
2276 }
2277
2278 /*
2279 * Level and edge triggered IO-APIC interrupts need different handling,
2280 * so we use two separate IRQ descriptors. Edge triggered IRQs can be
2281 * handled with the level-triggered descriptor, but that one has slightly
2282 * more overhead. Level-triggered interrupts cannot be handled with the
2283 * edge-triggered handler, without risking IRQ storms and other ugly
2284 * races.
2285 */
2286
2287 #ifdef CONFIG_SMP
send_cleanup_vector(struct irq_cfg * cfg)2288 void send_cleanup_vector(struct irq_cfg *cfg)
2289 {
2290 cpumask_var_t cleanup_mask;
2291
2292 if (unlikely(!alloc_cpumask_var(&cleanup_mask, GFP_ATOMIC))) {
2293 unsigned int i;
2294 for_each_cpu_and(i, cfg->old_domain, cpu_online_mask)
2295 apic->send_IPI_mask(cpumask_of(i), IRQ_MOVE_CLEANUP_VECTOR);
2296 } else {
2297 cpumask_and(cleanup_mask, cfg->old_domain, cpu_online_mask);
2298 apic->send_IPI_mask(cleanup_mask, IRQ_MOVE_CLEANUP_VECTOR);
2299 free_cpumask_var(cleanup_mask);
2300 }
2301 cfg->move_in_progress = 0;
2302 }
2303
smp_irq_move_cleanup_interrupt(void)2304 asmlinkage __visible void smp_irq_move_cleanup_interrupt(void)
2305 {
2306 unsigned vector, me;
2307
2308 ack_APIC_irq();
2309 irq_enter();
2310 exit_idle();
2311
2312 me = smp_processor_id();
2313 for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) {
2314 int irq;
2315 unsigned int irr;
2316 struct irq_desc *desc;
2317 struct irq_cfg *cfg;
2318 irq = __this_cpu_read(vector_irq[vector]);
2319
2320 if (irq <= VECTOR_UNDEFINED)
2321 continue;
2322
2323 desc = irq_to_desc(irq);
2324 if (!desc)
2325 continue;
2326
2327 cfg = irq_cfg(irq);
2328 if (!cfg)
2329 continue;
2330
2331 raw_spin_lock(&desc->lock);
2332
2333 /*
2334 * Check if the irq migration is in progress. If so, we
2335 * haven't received the cleanup request yet for this irq.
2336 */
2337 if (cfg->move_in_progress)
2338 goto unlock;
2339
2340 if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain))
2341 goto unlock;
2342
2343 irr = apic_read(APIC_IRR + (vector / 32 * 0x10));
2344 /*
2345 * Check if the vector that needs to be cleanedup is
2346 * registered at the cpu's IRR. If so, then this is not
2347 * the best time to clean it up. Lets clean it up in the
2348 * next attempt by sending another IRQ_MOVE_CLEANUP_VECTOR
2349 * to myself.
2350 */
2351 if (irr & (1 << (vector % 32))) {
2352 apic->send_IPI_self(IRQ_MOVE_CLEANUP_VECTOR);
2353 goto unlock;
2354 }
2355 __this_cpu_write(vector_irq[vector], VECTOR_UNDEFINED);
2356 unlock:
2357 raw_spin_unlock(&desc->lock);
2358 }
2359
2360 irq_exit();
2361 }
2362
__irq_complete_move(struct irq_cfg * cfg,unsigned vector)2363 static void __irq_complete_move(struct irq_cfg *cfg, unsigned vector)
2364 {
2365 unsigned me;
2366
2367 if (likely(!cfg->move_in_progress))
2368 return;
2369
2370 me = smp_processor_id();
2371
2372 if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain))
2373 send_cleanup_vector(cfg);
2374 }
2375
irq_complete_move(struct irq_cfg * cfg)2376 static void irq_complete_move(struct irq_cfg *cfg)
2377 {
2378 __irq_complete_move(cfg, ~get_irq_regs()->orig_ax);
2379 }
2380
irq_force_complete_move(int irq)2381 void irq_force_complete_move(int irq)
2382 {
2383 struct irq_cfg *cfg = irq_cfg(irq);
2384
2385 if (!cfg)
2386 return;
2387
2388 __irq_complete_move(cfg, cfg->vector);
2389 }
2390 #else
irq_complete_move(struct irq_cfg * cfg)2391 static inline void irq_complete_move(struct irq_cfg *cfg) { }
2392 #endif
2393
__target_IO_APIC_irq(unsigned int irq,unsigned int dest,struct irq_cfg * cfg)2394 static void __target_IO_APIC_irq(unsigned int irq, unsigned int dest, struct irq_cfg *cfg)
2395 {
2396 int apic, pin;
2397 struct irq_pin_list *entry;
2398 u8 vector = cfg->vector;
2399
2400 for_each_irq_pin(entry, cfg->irq_2_pin) {
2401 unsigned int reg;
2402
2403 apic = entry->apic;
2404 pin = entry->pin;
2405
2406 io_apic_write(apic, 0x11 + pin*2, dest);
2407 reg = io_apic_read(apic, 0x10 + pin*2);
2408 reg &= ~IO_APIC_REDIR_VECTOR_MASK;
2409 reg |= vector;
2410 io_apic_modify(apic, 0x10 + pin*2, reg);
2411 }
2412 }
2413
2414 /*
2415 * Either sets data->affinity to a valid value, and returns
2416 * ->cpu_mask_to_apicid of that in dest_id, or returns -1 and
2417 * leaves data->affinity untouched.
2418 */
__ioapic_set_affinity(struct irq_data * data,const struct cpumask * mask,unsigned int * dest_id)2419 int __ioapic_set_affinity(struct irq_data *data, const struct cpumask *mask,
2420 unsigned int *dest_id)
2421 {
2422 struct irq_cfg *cfg = data->chip_data;
2423 unsigned int irq = data->irq;
2424 int err;
2425
2426 if (!config_enabled(CONFIG_SMP))
2427 return -EPERM;
2428
2429 if (!cpumask_intersects(mask, cpu_online_mask))
2430 return -EINVAL;
2431
2432 err = assign_irq_vector(irq, cfg, mask);
2433 if (err)
2434 return err;
2435
2436 err = apic->cpu_mask_to_apicid_and(mask, cfg->domain, dest_id);
2437 if (err) {
2438 if (assign_irq_vector(irq, cfg, data->affinity))
2439 pr_err("Failed to recover vector for irq %d\n", irq);
2440 return err;
2441 }
2442
2443 cpumask_copy(data->affinity, mask);
2444
2445 return 0;
2446 }
2447
2448
native_ioapic_set_affinity(struct irq_data * data,const struct cpumask * mask,bool force)2449 int native_ioapic_set_affinity(struct irq_data *data,
2450 const struct cpumask *mask,
2451 bool force)
2452 {
2453 unsigned int dest, irq = data->irq;
2454 unsigned long flags;
2455 int ret;
2456
2457 if (!config_enabled(CONFIG_SMP))
2458 return -EPERM;
2459
2460 raw_spin_lock_irqsave(&ioapic_lock, flags);
2461 ret = __ioapic_set_affinity(data, mask, &dest);
2462 if (!ret) {
2463 /* Only the high 8 bits are valid. */
2464 dest = SET_APIC_LOGICAL_ID(dest);
2465 __target_IO_APIC_irq(irq, dest, data->chip_data);
2466 ret = IRQ_SET_MASK_OK_NOCOPY;
2467 }
2468 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
2469 return ret;
2470 }
2471
ack_apic_edge(struct irq_data * data)2472 static void ack_apic_edge(struct irq_data *data)
2473 {
2474 irq_complete_move(data->chip_data);
2475 irq_move_irq(data);
2476 ack_APIC_irq();
2477 }
2478
2479 atomic_t irq_mis_count;
2480
2481 #ifdef CONFIG_GENERIC_PENDING_IRQ
io_apic_level_ack_pending(struct irq_cfg * cfg)2482 static bool io_apic_level_ack_pending(struct irq_cfg *cfg)
2483 {
2484 struct irq_pin_list *entry;
2485 unsigned long flags;
2486
2487 raw_spin_lock_irqsave(&ioapic_lock, flags);
2488 for_each_irq_pin(entry, cfg->irq_2_pin) {
2489 unsigned int reg;
2490 int pin;
2491
2492 pin = entry->pin;
2493 reg = io_apic_read(entry->apic, 0x10 + pin*2);
2494 /* Is the remote IRR bit set? */
2495 if (reg & IO_APIC_REDIR_REMOTE_IRR) {
2496 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
2497 return true;
2498 }
2499 }
2500 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
2501
2502 return false;
2503 }
2504
ioapic_irqd_mask(struct irq_data * data,struct irq_cfg * cfg)2505 static inline bool ioapic_irqd_mask(struct irq_data *data, struct irq_cfg *cfg)
2506 {
2507 /* If we are moving the irq we need to mask it */
2508 if (unlikely(irqd_is_setaffinity_pending(data))) {
2509 mask_ioapic(cfg);
2510 return true;
2511 }
2512 return false;
2513 }
2514
ioapic_irqd_unmask(struct irq_data * data,struct irq_cfg * cfg,bool masked)2515 static inline void ioapic_irqd_unmask(struct irq_data *data,
2516 struct irq_cfg *cfg, bool masked)
2517 {
2518 if (unlikely(masked)) {
2519 /* Only migrate the irq if the ack has been received.
2520 *
2521 * On rare occasions the broadcast level triggered ack gets
2522 * delayed going to ioapics, and if we reprogram the
2523 * vector while Remote IRR is still set the irq will never
2524 * fire again.
2525 *
2526 * To prevent this scenario we read the Remote IRR bit
2527 * of the ioapic. This has two effects.
2528 * - On any sane system the read of the ioapic will
2529 * flush writes (and acks) going to the ioapic from
2530 * this cpu.
2531 * - We get to see if the ACK has actually been delivered.
2532 *
2533 * Based on failed experiments of reprogramming the
2534 * ioapic entry from outside of irq context starting
2535 * with masking the ioapic entry and then polling until
2536 * Remote IRR was clear before reprogramming the
2537 * ioapic I don't trust the Remote IRR bit to be
2538 * completey accurate.
2539 *
2540 * However there appears to be no other way to plug
2541 * this race, so if the Remote IRR bit is not
2542 * accurate and is causing problems then it is a hardware bug
2543 * and you can go talk to the chipset vendor about it.
2544 */
2545 if (!io_apic_level_ack_pending(cfg))
2546 irq_move_masked_irq(data);
2547 unmask_ioapic(cfg);
2548 }
2549 }
2550 #else
ioapic_irqd_mask(struct irq_data * data,struct irq_cfg * cfg)2551 static inline bool ioapic_irqd_mask(struct irq_data *data, struct irq_cfg *cfg)
2552 {
2553 return false;
2554 }
ioapic_irqd_unmask(struct irq_data * data,struct irq_cfg * cfg,bool masked)2555 static inline void ioapic_irqd_unmask(struct irq_data *data,
2556 struct irq_cfg *cfg, bool masked)
2557 {
2558 }
2559 #endif
2560
ack_apic_level(struct irq_data * data)2561 static void ack_apic_level(struct irq_data *data)
2562 {
2563 struct irq_cfg *cfg = data->chip_data;
2564 int i, irq = data->irq;
2565 unsigned long v;
2566 bool masked;
2567
2568 irq_complete_move(cfg);
2569 masked = ioapic_irqd_mask(data, cfg);
2570
2571 /*
2572 * It appears there is an erratum which affects at least version 0x11
2573 * of I/O APIC (that's the 82093AA and cores integrated into various
2574 * chipsets). Under certain conditions a level-triggered interrupt is
2575 * erroneously delivered as edge-triggered one but the respective IRR
2576 * bit gets set nevertheless. As a result the I/O unit expects an EOI
2577 * message but it will never arrive and further interrupts are blocked
2578 * from the source. The exact reason is so far unknown, but the
2579 * phenomenon was observed when two consecutive interrupt requests
2580 * from a given source get delivered to the same CPU and the source is
2581 * temporarily disabled in between.
2582 *
2583 * A workaround is to simulate an EOI message manually. We achieve it
2584 * by setting the trigger mode to edge and then to level when the edge
2585 * trigger mode gets detected in the TMR of a local APIC for a
2586 * level-triggered interrupt. We mask the source for the time of the
2587 * operation to prevent an edge-triggered interrupt escaping meanwhile.
2588 * The idea is from Manfred Spraul. --macro
2589 *
2590 * Also in the case when cpu goes offline, fixup_irqs() will forward
2591 * any unhandled interrupt on the offlined cpu to the new cpu
2592 * destination that is handling the corresponding interrupt. This
2593 * interrupt forwarding is done via IPI's. Hence, in this case also
2594 * level-triggered io-apic interrupt will be seen as an edge
2595 * interrupt in the IRR. And we can't rely on the cpu's EOI
2596 * to be broadcasted to the IO-APIC's which will clear the remoteIRR
2597 * corresponding to the level-triggered interrupt. Hence on IO-APIC's
2598 * supporting EOI register, we do an explicit EOI to clear the
2599 * remote IRR and on IO-APIC's which don't have an EOI register,
2600 * we use the above logic (mask+edge followed by unmask+level) from
2601 * Manfred Spraul to clear the remote IRR.
2602 */
2603 i = cfg->vector;
2604 v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1));
2605
2606 /*
2607 * We must acknowledge the irq before we move it or the acknowledge will
2608 * not propagate properly.
2609 */
2610 ack_APIC_irq();
2611
2612 /*
2613 * Tail end of clearing remote IRR bit (either by delivering the EOI
2614 * message via io-apic EOI register write or simulating it using
2615 * mask+edge followed by unnask+level logic) manually when the
2616 * level triggered interrupt is seen as the edge triggered interrupt
2617 * at the cpu.
2618 */
2619 if (!(v & (1 << (i & 0x1f)))) {
2620 atomic_inc(&irq_mis_count);
2621
2622 eoi_ioapic_irq(irq, cfg);
2623 }
2624
2625 ioapic_irqd_unmask(data, cfg, masked);
2626 }
2627
2628 static struct irq_chip ioapic_chip __read_mostly = {
2629 .name = "IO-APIC",
2630 .irq_startup = startup_ioapic_irq,
2631 .irq_mask = mask_ioapic_irq,
2632 .irq_unmask = unmask_ioapic_irq,
2633 .irq_ack = ack_apic_edge,
2634 .irq_eoi = ack_apic_level,
2635 .irq_set_affinity = native_ioapic_set_affinity,
2636 .irq_retrigger = ioapic_retrigger_irq,
2637 .flags = IRQCHIP_SKIP_SET_WAKE,
2638 };
2639
init_IO_APIC_traps(void)2640 static inline void init_IO_APIC_traps(void)
2641 {
2642 struct irq_cfg *cfg;
2643 unsigned int irq;
2644
2645 for_each_active_irq(irq) {
2646 cfg = irq_cfg(irq);
2647 if (IO_APIC_IRQ(irq) && cfg && !cfg->vector) {
2648 /*
2649 * Hmm.. We don't have an entry for this,
2650 * so default to an old-fashioned 8259
2651 * interrupt if we can..
2652 */
2653 if (irq < nr_legacy_irqs())
2654 legacy_pic->make_irq(irq);
2655 else
2656 /* Strange. Oh, well.. */
2657 irq_set_chip(irq, &no_irq_chip);
2658 }
2659 }
2660 }
2661
2662 /*
2663 * The local APIC irq-chip implementation:
2664 */
2665
mask_lapic_irq(struct irq_data * data)2666 static void mask_lapic_irq(struct irq_data *data)
2667 {
2668 unsigned long v;
2669
2670 v = apic_read(APIC_LVT0);
2671 apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
2672 }
2673
unmask_lapic_irq(struct irq_data * data)2674 static void unmask_lapic_irq(struct irq_data *data)
2675 {
2676 unsigned long v;
2677
2678 v = apic_read(APIC_LVT0);
2679 apic_write(APIC_LVT0, v & ~APIC_LVT_MASKED);
2680 }
2681
ack_lapic_irq(struct irq_data * data)2682 static void ack_lapic_irq(struct irq_data *data)
2683 {
2684 ack_APIC_irq();
2685 }
2686
2687 static struct irq_chip lapic_chip __read_mostly = {
2688 .name = "local-APIC",
2689 .irq_mask = mask_lapic_irq,
2690 .irq_unmask = unmask_lapic_irq,
2691 .irq_ack = ack_lapic_irq,
2692 };
2693
lapic_register_intr(int irq)2694 static void lapic_register_intr(int irq)
2695 {
2696 irq_clear_status_flags(irq, IRQ_LEVEL);
2697 irq_set_chip_and_handler_name(irq, &lapic_chip, handle_edge_irq,
2698 "edge");
2699 }
2700
2701 /*
2702 * This looks a bit hackish but it's about the only one way of sending
2703 * a few INTA cycles to 8259As and any associated glue logic. ICR does
2704 * not support the ExtINT mode, unfortunately. We need to send these
2705 * cycles as some i82489DX-based boards have glue logic that keeps the
2706 * 8259A interrupt line asserted until INTA. --macro
2707 */
unlock_ExtINT_logic(void)2708 static inline void __init unlock_ExtINT_logic(void)
2709 {
2710 int apic, pin, i;
2711 struct IO_APIC_route_entry entry0, entry1;
2712 unsigned char save_control, save_freq_select;
2713
2714 pin = find_isa_irq_pin(8, mp_INT);
2715 if (pin == -1) {
2716 WARN_ON_ONCE(1);
2717 return;
2718 }
2719 apic = find_isa_irq_apic(8, mp_INT);
2720 if (apic == -1) {
2721 WARN_ON_ONCE(1);
2722 return;
2723 }
2724
2725 entry0 = ioapic_read_entry(apic, pin);
2726 clear_IO_APIC_pin(apic, pin);
2727
2728 memset(&entry1, 0, sizeof(entry1));
2729
2730 entry1.dest_mode = 0; /* physical delivery */
2731 entry1.mask = 0; /* unmask IRQ now */
2732 entry1.dest = hard_smp_processor_id();
2733 entry1.delivery_mode = dest_ExtINT;
2734 entry1.polarity = entry0.polarity;
2735 entry1.trigger = 0;
2736 entry1.vector = 0;
2737
2738 ioapic_write_entry(apic, pin, entry1);
2739
2740 save_control = CMOS_READ(RTC_CONTROL);
2741 save_freq_select = CMOS_READ(RTC_FREQ_SELECT);
2742 CMOS_WRITE((save_freq_select & ~RTC_RATE_SELECT) | 0x6,
2743 RTC_FREQ_SELECT);
2744 CMOS_WRITE(save_control | RTC_PIE, RTC_CONTROL);
2745
2746 i = 100;
2747 while (i-- > 0) {
2748 mdelay(10);
2749 if ((CMOS_READ(RTC_INTR_FLAGS) & RTC_PF) == RTC_PF)
2750 i -= 10;
2751 }
2752
2753 CMOS_WRITE(save_control, RTC_CONTROL);
2754 CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT);
2755 clear_IO_APIC_pin(apic, pin);
2756
2757 ioapic_write_entry(apic, pin, entry0);
2758 }
2759
2760 static int disable_timer_pin_1 __initdata;
2761 /* Actually the next is obsolete, but keep it for paranoid reasons -AK */
disable_timer_pin_setup(char * arg)2762 static int __init disable_timer_pin_setup(char *arg)
2763 {
2764 disable_timer_pin_1 = 1;
2765 return 0;
2766 }
2767 early_param("disable_timer_pin_1", disable_timer_pin_setup);
2768
2769 /*
2770 * This code may look a bit paranoid, but it's supposed to cooperate with
2771 * a wide range of boards and BIOS bugs. Fortunately only the timer IRQ
2772 * is so screwy. Thanks to Brian Perkins for testing/hacking this beast
2773 * fanatically on his truly buggy board.
2774 *
2775 * FIXME: really need to revamp this for all platforms.
2776 */
check_timer(void)2777 static inline void __init check_timer(void)
2778 {
2779 struct irq_cfg *cfg = irq_cfg(0);
2780 int node = cpu_to_node(0);
2781 int apic1, pin1, apic2, pin2;
2782 unsigned long flags;
2783 int no_pin1 = 0;
2784
2785 local_irq_save(flags);
2786
2787 /*
2788 * get/set the timer IRQ vector:
2789 */
2790 legacy_pic->mask(0);
2791 assign_irq_vector(0, cfg, apic->target_cpus());
2792
2793 /*
2794 * As IRQ0 is to be enabled in the 8259A, the virtual
2795 * wire has to be disabled in the local APIC. Also
2796 * timer interrupts need to be acknowledged manually in
2797 * the 8259A for the i82489DX when using the NMI
2798 * watchdog as that APIC treats NMIs as level-triggered.
2799 * The AEOI mode will finish them in the 8259A
2800 * automatically.
2801 */
2802 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
2803 legacy_pic->init(1);
2804
2805 pin1 = find_isa_irq_pin(0, mp_INT);
2806 apic1 = find_isa_irq_apic(0, mp_INT);
2807 pin2 = ioapic_i8259.pin;
2808 apic2 = ioapic_i8259.apic;
2809
2810 apic_printk(APIC_QUIET, KERN_INFO "..TIMER: vector=0x%02X "
2811 "apic1=%d pin1=%d apic2=%d pin2=%d\n",
2812 cfg->vector, apic1, pin1, apic2, pin2);
2813
2814 /*
2815 * Some BIOS writers are clueless and report the ExtINTA
2816 * I/O APIC input from the cascaded 8259A as the timer
2817 * interrupt input. So just in case, if only one pin
2818 * was found above, try it both directly and through the
2819 * 8259A.
2820 */
2821 if (pin1 == -1) {
2822 panic_if_irq_remap("BIOS bug: timer not connected to IO-APIC");
2823 pin1 = pin2;
2824 apic1 = apic2;
2825 no_pin1 = 1;
2826 } else if (pin2 == -1) {
2827 pin2 = pin1;
2828 apic2 = apic1;
2829 }
2830
2831 if (pin1 != -1) {
2832 /*
2833 * Ok, does IRQ0 through the IOAPIC work?
2834 */
2835 if (no_pin1) {
2836 add_pin_to_irq_node(cfg, node, apic1, pin1);
2837 setup_timer_IRQ0_pin(apic1, pin1, cfg->vector);
2838 } else {
2839 /* for edge trigger, setup_ioapic_irq already
2840 * leave it unmasked.
2841 * so only need to unmask if it is level-trigger
2842 * do we really have level trigger timer?
2843 */
2844 int idx;
2845 idx = find_irq_entry(apic1, pin1, mp_INT);
2846 if (idx != -1 && irq_trigger(idx))
2847 unmask_ioapic(cfg);
2848 }
2849 if (timer_irq_works()) {
2850 if (disable_timer_pin_1 > 0)
2851 clear_IO_APIC_pin(0, pin1);
2852 goto out;
2853 }
2854 panic_if_irq_remap("timer doesn't work through Interrupt-remapped IO-APIC");
2855 local_irq_disable();
2856 clear_IO_APIC_pin(apic1, pin1);
2857 if (!no_pin1)
2858 apic_printk(APIC_QUIET, KERN_ERR "..MP-BIOS bug: "
2859 "8254 timer not connected to IO-APIC\n");
2860
2861 apic_printk(APIC_QUIET, KERN_INFO "...trying to set up timer "
2862 "(IRQ0) through the 8259A ...\n");
2863 apic_printk(APIC_QUIET, KERN_INFO
2864 "..... (found apic %d pin %d) ...\n", apic2, pin2);
2865 /*
2866 * legacy devices should be connected to IO APIC #0
2867 */
2868 replace_pin_at_irq_node(cfg, node, apic1, pin1, apic2, pin2);
2869 setup_timer_IRQ0_pin(apic2, pin2, cfg->vector);
2870 legacy_pic->unmask(0);
2871 if (timer_irq_works()) {
2872 apic_printk(APIC_QUIET, KERN_INFO "....... works.\n");
2873 goto out;
2874 }
2875 /*
2876 * Cleanup, just in case ...
2877 */
2878 local_irq_disable();
2879 legacy_pic->mask(0);
2880 clear_IO_APIC_pin(apic2, pin2);
2881 apic_printk(APIC_QUIET, KERN_INFO "....... failed.\n");
2882 }
2883
2884 apic_printk(APIC_QUIET, KERN_INFO
2885 "...trying to set up timer as Virtual Wire IRQ...\n");
2886
2887 lapic_register_intr(0);
2888 apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector); /* Fixed mode */
2889 legacy_pic->unmask(0);
2890
2891 if (timer_irq_works()) {
2892 apic_printk(APIC_QUIET, KERN_INFO "..... works.\n");
2893 goto out;
2894 }
2895 local_irq_disable();
2896 legacy_pic->mask(0);
2897 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | cfg->vector);
2898 apic_printk(APIC_QUIET, KERN_INFO "..... failed.\n");
2899
2900 apic_printk(APIC_QUIET, KERN_INFO
2901 "...trying to set up timer as ExtINT IRQ...\n");
2902
2903 legacy_pic->init(0);
2904 legacy_pic->make_irq(0);
2905 apic_write(APIC_LVT0, APIC_DM_EXTINT);
2906
2907 unlock_ExtINT_logic();
2908
2909 if (timer_irq_works()) {
2910 apic_printk(APIC_QUIET, KERN_INFO "..... works.\n");
2911 goto out;
2912 }
2913 local_irq_disable();
2914 apic_printk(APIC_QUIET, KERN_INFO "..... failed :(.\n");
2915 if (x2apic_preenabled)
2916 apic_printk(APIC_QUIET, KERN_INFO
2917 "Perhaps problem with the pre-enabled x2apic mode\n"
2918 "Try booting with x2apic and interrupt-remapping disabled in the bios.\n");
2919 panic("IO-APIC + timer doesn't work! Boot with apic=debug and send a "
2920 "report. Then try booting with the 'noapic' option.\n");
2921 out:
2922 local_irq_restore(flags);
2923 }
2924
2925 /*
2926 * Traditionally ISA IRQ2 is the cascade IRQ, and is not available
2927 * to devices. However there may be an I/O APIC pin available for
2928 * this interrupt regardless. The pin may be left unconnected, but
2929 * typically it will be reused as an ExtINT cascade interrupt for
2930 * the master 8259A. In the MPS case such a pin will normally be
2931 * reported as an ExtINT interrupt in the MP table. With ACPI
2932 * there is no provision for ExtINT interrupts, and in the absence
2933 * of an override it would be treated as an ordinary ISA I/O APIC
2934 * interrupt, that is edge-triggered and unmasked by default. We
2935 * used to do this, but it caused problems on some systems because
2936 * of the NMI watchdog and sometimes IRQ0 of the 8254 timer using
2937 * the same ExtINT cascade interrupt to drive the local APIC of the
2938 * bootstrap processor. Therefore we refrain from routing IRQ2 to
2939 * the I/O APIC in all cases now. No actual device should request
2940 * it anyway. --macro
2941 */
2942 #define PIC_IRQS (1UL << PIC_CASCADE_IR)
2943
mp_irqdomain_create(int ioapic)2944 static int mp_irqdomain_create(int ioapic)
2945 {
2946 size_t size;
2947 int hwirqs = mp_ioapic_pin_count(ioapic);
2948 struct ioapic *ip = &ioapics[ioapic];
2949 struct ioapic_domain_cfg *cfg = &ip->irqdomain_cfg;
2950 struct mp_ioapic_gsi *gsi_cfg = mp_ioapic_gsi_routing(ioapic);
2951
2952 size = sizeof(struct mp_pin_info) * mp_ioapic_pin_count(ioapic);
2953 ip->pin_info = kzalloc(size, GFP_KERNEL);
2954 if (!ip->pin_info)
2955 return -ENOMEM;
2956
2957 if (cfg->type == IOAPIC_DOMAIN_INVALID)
2958 return 0;
2959
2960 ip->irqdomain = irq_domain_add_linear(cfg->dev, hwirqs, cfg->ops,
2961 (void *)(long)ioapic);
2962 if(!ip->irqdomain) {
2963 kfree(ip->pin_info);
2964 ip->pin_info = NULL;
2965 return -ENOMEM;
2966 }
2967
2968 if (cfg->type == IOAPIC_DOMAIN_LEGACY ||
2969 cfg->type == IOAPIC_DOMAIN_STRICT)
2970 ioapic_dynirq_base = max(ioapic_dynirq_base,
2971 gsi_cfg->gsi_end + 1);
2972
2973 if (gsi_cfg->gsi_base == 0)
2974 irq_set_default_host(ip->irqdomain);
2975
2976 return 0;
2977 }
2978
setup_IO_APIC(void)2979 void __init setup_IO_APIC(void)
2980 {
2981 int ioapic;
2982
2983 /*
2984 * calling enable_IO_APIC() is moved to setup_local_APIC for BP
2985 */
2986 io_apic_irqs = nr_legacy_irqs() ? ~PIC_IRQS : ~0UL;
2987
2988 apic_printk(APIC_VERBOSE, "ENABLING IO-APIC IRQs\n");
2989 for_each_ioapic(ioapic)
2990 BUG_ON(mp_irqdomain_create(ioapic));
2991
2992 /*
2993 * Set up IO-APIC IRQ routing.
2994 */
2995 x86_init.mpparse.setup_ioapic_ids();
2996
2997 sync_Arb_IDs();
2998 setup_IO_APIC_irqs();
2999 init_IO_APIC_traps();
3000 if (nr_legacy_irqs())
3001 check_timer();
3002
3003 ioapic_initialized = 1;
3004 }
3005
3006 /*
3007 * Called after all the initialization is done. If we didn't find any
3008 * APIC bugs then we can allow the modify fast path
3009 */
3010
io_apic_bug_finalize(void)3011 static int __init io_apic_bug_finalize(void)
3012 {
3013 if (sis_apic_bug == -1)
3014 sis_apic_bug = 0;
3015 return 0;
3016 }
3017
3018 late_initcall(io_apic_bug_finalize);
3019
resume_ioapic_id(int ioapic_idx)3020 static void resume_ioapic_id(int ioapic_idx)
3021 {
3022 unsigned long flags;
3023 union IO_APIC_reg_00 reg_00;
3024
3025 raw_spin_lock_irqsave(&ioapic_lock, flags);
3026 reg_00.raw = io_apic_read(ioapic_idx, 0);
3027 if (reg_00.bits.ID != mpc_ioapic_id(ioapic_idx)) {
3028 reg_00.bits.ID = mpc_ioapic_id(ioapic_idx);
3029 io_apic_write(ioapic_idx, 0, reg_00.raw);
3030 }
3031 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
3032 }
3033
ioapic_resume(void)3034 static void ioapic_resume(void)
3035 {
3036 int ioapic_idx;
3037
3038 for_each_ioapic_reverse(ioapic_idx)
3039 resume_ioapic_id(ioapic_idx);
3040
3041 restore_ioapic_entries();
3042 }
3043
3044 static struct syscore_ops ioapic_syscore_ops = {
3045 .suspend = save_ioapic_entries,
3046 .resume = ioapic_resume,
3047 };
3048
ioapic_init_ops(void)3049 static int __init ioapic_init_ops(void)
3050 {
3051 register_syscore_ops(&ioapic_syscore_ops);
3052
3053 return 0;
3054 }
3055
3056 device_initcall(ioapic_init_ops);
3057
3058 /*
3059 * Dynamic irq allocate and deallocation. Should be replaced by irq domains!
3060 */
arch_setup_hwirq(unsigned int irq,int node)3061 int arch_setup_hwirq(unsigned int irq, int node)
3062 {
3063 struct irq_cfg *cfg;
3064 unsigned long flags;
3065 int ret;
3066
3067 cfg = alloc_irq_cfg(irq, node);
3068 if (!cfg)
3069 return -ENOMEM;
3070
3071 raw_spin_lock_irqsave(&vector_lock, flags);
3072 ret = __assign_irq_vector(irq, cfg, apic->target_cpus());
3073 raw_spin_unlock_irqrestore(&vector_lock, flags);
3074
3075 if (!ret)
3076 irq_set_chip_data(irq, cfg);
3077 else
3078 free_irq_cfg(irq, cfg);
3079 return ret;
3080 }
3081
arch_teardown_hwirq(unsigned int irq)3082 void arch_teardown_hwirq(unsigned int irq)
3083 {
3084 struct irq_cfg *cfg = irq_cfg(irq);
3085 unsigned long flags;
3086
3087 free_remapped_irq(irq);
3088 raw_spin_lock_irqsave(&vector_lock, flags);
3089 __clear_irq_vector(irq, cfg);
3090 raw_spin_unlock_irqrestore(&vector_lock, flags);
3091 free_irq_cfg(irq, cfg);
3092 }
3093
3094 /*
3095 * MSI message composition
3096 */
native_compose_msi_msg(struct pci_dev * pdev,unsigned int irq,unsigned int dest,struct msi_msg * msg,u8 hpet_id)3097 void native_compose_msi_msg(struct pci_dev *pdev,
3098 unsigned int irq, unsigned int dest,
3099 struct msi_msg *msg, u8 hpet_id)
3100 {
3101 struct irq_cfg *cfg = irq_cfg(irq);
3102
3103 msg->address_hi = MSI_ADDR_BASE_HI;
3104
3105 if (x2apic_enabled())
3106 msg->address_hi |= MSI_ADDR_EXT_DEST_ID(dest);
3107
3108 msg->address_lo =
3109 MSI_ADDR_BASE_LO |
3110 ((apic->irq_dest_mode == 0) ?
3111 MSI_ADDR_DEST_MODE_PHYSICAL:
3112 MSI_ADDR_DEST_MODE_LOGICAL) |
3113 ((apic->irq_delivery_mode != dest_LowestPrio) ?
3114 MSI_ADDR_REDIRECTION_CPU:
3115 MSI_ADDR_REDIRECTION_LOWPRI) |
3116 MSI_ADDR_DEST_ID(dest);
3117
3118 msg->data =
3119 MSI_DATA_TRIGGER_EDGE |
3120 MSI_DATA_LEVEL_ASSERT |
3121 ((apic->irq_delivery_mode != dest_LowestPrio) ?
3122 MSI_DATA_DELIVERY_FIXED:
3123 MSI_DATA_DELIVERY_LOWPRI) |
3124 MSI_DATA_VECTOR(cfg->vector);
3125 }
3126
3127 #ifdef CONFIG_PCI_MSI
msi_compose_msg(struct pci_dev * pdev,unsigned int irq,struct msi_msg * msg,u8 hpet_id)3128 static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq,
3129 struct msi_msg *msg, u8 hpet_id)
3130 {
3131 struct irq_cfg *cfg;
3132 int err;
3133 unsigned dest;
3134
3135 if (disable_apic)
3136 return -ENXIO;
3137
3138 cfg = irq_cfg(irq);
3139 err = assign_irq_vector(irq, cfg, apic->target_cpus());
3140 if (err)
3141 return err;
3142
3143 err = apic->cpu_mask_to_apicid_and(cfg->domain,
3144 apic->target_cpus(), &dest);
3145 if (err)
3146 return err;
3147
3148 x86_msi.compose_msi_msg(pdev, irq, dest, msg, hpet_id);
3149
3150 return 0;
3151 }
3152
3153 static int
msi_set_affinity(struct irq_data * data,const struct cpumask * mask,bool force)3154 msi_set_affinity(struct irq_data *data, const struct cpumask *mask, bool force)
3155 {
3156 struct irq_cfg *cfg = data->chip_data;
3157 struct msi_msg msg;
3158 unsigned int dest;
3159 int ret;
3160
3161 ret = __ioapic_set_affinity(data, mask, &dest);
3162 if (ret)
3163 return ret;
3164
3165 __get_cached_msi_msg(data->msi_desc, &msg);
3166
3167 msg.data &= ~MSI_DATA_VECTOR_MASK;
3168 msg.data |= MSI_DATA_VECTOR(cfg->vector);
3169 msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
3170 msg.address_lo |= MSI_ADDR_DEST_ID(dest);
3171
3172 __write_msi_msg(data->msi_desc, &msg);
3173
3174 return IRQ_SET_MASK_OK_NOCOPY;
3175 }
3176
3177 /*
3178 * IRQ Chip for MSI PCI/PCI-X/PCI-Express Devices,
3179 * which implement the MSI or MSI-X Capability Structure.
3180 */
3181 static struct irq_chip msi_chip = {
3182 .name = "PCI-MSI",
3183 .irq_unmask = unmask_msi_irq,
3184 .irq_mask = mask_msi_irq,
3185 .irq_ack = ack_apic_edge,
3186 .irq_set_affinity = msi_set_affinity,
3187 .irq_retrigger = ioapic_retrigger_irq,
3188 .flags = IRQCHIP_SKIP_SET_WAKE,
3189 };
3190
setup_msi_irq(struct pci_dev * dev,struct msi_desc * msidesc,unsigned int irq_base,unsigned int irq_offset)3191 int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc,
3192 unsigned int irq_base, unsigned int irq_offset)
3193 {
3194 struct irq_chip *chip = &msi_chip;
3195 struct msi_msg msg;
3196 unsigned int irq = irq_base + irq_offset;
3197 int ret;
3198
3199 ret = msi_compose_msg(dev, irq, &msg, -1);
3200 if (ret < 0)
3201 return ret;
3202
3203 irq_set_msi_desc_off(irq_base, irq_offset, msidesc);
3204
3205 /*
3206 * MSI-X message is written per-IRQ, the offset is always 0.
3207 * MSI message denotes a contiguous group of IRQs, written for 0th IRQ.
3208 */
3209 if (!irq_offset)
3210 write_msi_msg(irq, &msg);
3211
3212 setup_remapped_irq(irq, irq_cfg(irq), chip);
3213
3214 irq_set_chip_and_handler_name(irq, chip, handle_edge_irq, "edge");
3215
3216 dev_printk(KERN_DEBUG, &dev->dev, "irq %d for MSI/MSI-X\n", irq);
3217
3218 return 0;
3219 }
3220
native_setup_msi_irqs(struct pci_dev * dev,int nvec,int type)3221 int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
3222 {
3223 struct msi_desc *msidesc;
3224 unsigned int irq;
3225 int node, ret;
3226
3227 /* Multiple MSI vectors only supported with interrupt remapping */
3228 if (type == PCI_CAP_ID_MSI && nvec > 1)
3229 return 1;
3230
3231 node = dev_to_node(&dev->dev);
3232
3233 list_for_each_entry(msidesc, &dev->msi_list, list) {
3234 irq = irq_alloc_hwirq(node);
3235 if (!irq)
3236 return -ENOSPC;
3237
3238 ret = setup_msi_irq(dev, msidesc, irq, 0);
3239 if (ret < 0) {
3240 irq_free_hwirq(irq);
3241 return ret;
3242 }
3243
3244 }
3245 return 0;
3246 }
3247
native_teardown_msi_irq(unsigned int irq)3248 void native_teardown_msi_irq(unsigned int irq)
3249 {
3250 irq_free_hwirq(irq);
3251 }
3252
3253 #ifdef CONFIG_DMAR_TABLE
3254 static int
dmar_msi_set_affinity(struct irq_data * data,const struct cpumask * mask,bool force)3255 dmar_msi_set_affinity(struct irq_data *data, const struct cpumask *mask,
3256 bool force)
3257 {
3258 struct irq_cfg *cfg = data->chip_data;
3259 unsigned int dest, irq = data->irq;
3260 struct msi_msg msg;
3261 int ret;
3262
3263 ret = __ioapic_set_affinity(data, mask, &dest);
3264 if (ret)
3265 return ret;
3266
3267 dmar_msi_read(irq, &msg);
3268
3269 msg.data &= ~MSI_DATA_VECTOR_MASK;
3270 msg.data |= MSI_DATA_VECTOR(cfg->vector);
3271 msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
3272 msg.address_lo |= MSI_ADDR_DEST_ID(dest);
3273 msg.address_hi = MSI_ADDR_BASE_HI | MSI_ADDR_EXT_DEST_ID(dest);
3274
3275 dmar_msi_write(irq, &msg);
3276
3277 return IRQ_SET_MASK_OK_NOCOPY;
3278 }
3279
3280 static struct irq_chip dmar_msi_type = {
3281 .name = "DMAR_MSI",
3282 .irq_unmask = dmar_msi_unmask,
3283 .irq_mask = dmar_msi_mask,
3284 .irq_ack = ack_apic_edge,
3285 .irq_set_affinity = dmar_msi_set_affinity,
3286 .irq_retrigger = ioapic_retrigger_irq,
3287 .flags = IRQCHIP_SKIP_SET_WAKE,
3288 };
3289
arch_setup_dmar_msi(unsigned int irq)3290 int arch_setup_dmar_msi(unsigned int irq)
3291 {
3292 int ret;
3293 struct msi_msg msg;
3294
3295 ret = msi_compose_msg(NULL, irq, &msg, -1);
3296 if (ret < 0)
3297 return ret;
3298 dmar_msi_write(irq, &msg);
3299 irq_set_chip_and_handler_name(irq, &dmar_msi_type, handle_edge_irq,
3300 "edge");
3301 return 0;
3302 }
3303 #endif
3304
3305 #ifdef CONFIG_HPET_TIMER
3306
hpet_msi_set_affinity(struct irq_data * data,const struct cpumask * mask,bool force)3307 static int hpet_msi_set_affinity(struct irq_data *data,
3308 const struct cpumask *mask, bool force)
3309 {
3310 struct irq_cfg *cfg = data->chip_data;
3311 struct msi_msg msg;
3312 unsigned int dest;
3313 int ret;
3314
3315 ret = __ioapic_set_affinity(data, mask, &dest);
3316 if (ret)
3317 return ret;
3318
3319 hpet_msi_read(data->handler_data, &msg);
3320
3321 msg.data &= ~MSI_DATA_VECTOR_MASK;
3322 msg.data |= MSI_DATA_VECTOR(cfg->vector);
3323 msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
3324 msg.address_lo |= MSI_ADDR_DEST_ID(dest);
3325
3326 hpet_msi_write(data->handler_data, &msg);
3327
3328 return IRQ_SET_MASK_OK_NOCOPY;
3329 }
3330
3331 static struct irq_chip hpet_msi_type = {
3332 .name = "HPET_MSI",
3333 .irq_unmask = hpet_msi_unmask,
3334 .irq_mask = hpet_msi_mask,
3335 .irq_ack = ack_apic_edge,
3336 .irq_set_affinity = hpet_msi_set_affinity,
3337 .irq_retrigger = ioapic_retrigger_irq,
3338 .flags = IRQCHIP_SKIP_SET_WAKE,
3339 };
3340
default_setup_hpet_msi(unsigned int irq,unsigned int id)3341 int default_setup_hpet_msi(unsigned int irq, unsigned int id)
3342 {
3343 struct irq_chip *chip = &hpet_msi_type;
3344 struct msi_msg msg;
3345 int ret;
3346
3347 ret = msi_compose_msg(NULL, irq, &msg, id);
3348 if (ret < 0)
3349 return ret;
3350
3351 hpet_msi_write(irq_get_handler_data(irq), &msg);
3352 irq_set_status_flags(irq, IRQ_MOVE_PCNTXT);
3353 setup_remapped_irq(irq, irq_cfg(irq), chip);
3354
3355 irq_set_chip_and_handler_name(irq, chip, handle_edge_irq, "edge");
3356 return 0;
3357 }
3358 #endif
3359
3360 #endif /* CONFIG_PCI_MSI */
3361 /*
3362 * Hypertransport interrupt support
3363 */
3364 #ifdef CONFIG_HT_IRQ
3365
target_ht_irq(unsigned int irq,unsigned int dest,u8 vector)3366 static void target_ht_irq(unsigned int irq, unsigned int dest, u8 vector)
3367 {
3368 struct ht_irq_msg msg;
3369 fetch_ht_irq_msg(irq, &msg);
3370
3371 msg.address_lo &= ~(HT_IRQ_LOW_VECTOR_MASK | HT_IRQ_LOW_DEST_ID_MASK);
3372 msg.address_hi &= ~(HT_IRQ_HIGH_DEST_ID_MASK);
3373
3374 msg.address_lo |= HT_IRQ_LOW_VECTOR(vector) | HT_IRQ_LOW_DEST_ID(dest);
3375 msg.address_hi |= HT_IRQ_HIGH_DEST_ID(dest);
3376
3377 write_ht_irq_msg(irq, &msg);
3378 }
3379
3380 static int
ht_set_affinity(struct irq_data * data,const struct cpumask * mask,bool force)3381 ht_set_affinity(struct irq_data *data, const struct cpumask *mask, bool force)
3382 {
3383 struct irq_cfg *cfg = data->chip_data;
3384 unsigned int dest;
3385 int ret;
3386
3387 ret = __ioapic_set_affinity(data, mask, &dest);
3388 if (ret)
3389 return ret;
3390
3391 target_ht_irq(data->irq, dest, cfg->vector);
3392 return IRQ_SET_MASK_OK_NOCOPY;
3393 }
3394
3395 static struct irq_chip ht_irq_chip = {
3396 .name = "PCI-HT",
3397 .irq_mask = mask_ht_irq,
3398 .irq_unmask = unmask_ht_irq,
3399 .irq_ack = ack_apic_edge,
3400 .irq_set_affinity = ht_set_affinity,
3401 .irq_retrigger = ioapic_retrigger_irq,
3402 .flags = IRQCHIP_SKIP_SET_WAKE,
3403 };
3404
arch_setup_ht_irq(unsigned int irq,struct pci_dev * dev)3405 int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
3406 {
3407 struct irq_cfg *cfg;
3408 struct ht_irq_msg msg;
3409 unsigned dest;
3410 int err;
3411
3412 if (disable_apic)
3413 return -ENXIO;
3414
3415 cfg = irq_cfg(irq);
3416 err = assign_irq_vector(irq, cfg, apic->target_cpus());
3417 if (err)
3418 return err;
3419
3420 err = apic->cpu_mask_to_apicid_and(cfg->domain,
3421 apic->target_cpus(), &dest);
3422 if (err)
3423 return err;
3424
3425 msg.address_hi = HT_IRQ_HIGH_DEST_ID(dest);
3426
3427 msg.address_lo =
3428 HT_IRQ_LOW_BASE |
3429 HT_IRQ_LOW_DEST_ID(dest) |
3430 HT_IRQ_LOW_VECTOR(cfg->vector) |
3431 ((apic->irq_dest_mode == 0) ?
3432 HT_IRQ_LOW_DM_PHYSICAL :
3433 HT_IRQ_LOW_DM_LOGICAL) |
3434 HT_IRQ_LOW_RQEOI_EDGE |
3435 ((apic->irq_delivery_mode != dest_LowestPrio) ?
3436 HT_IRQ_LOW_MT_FIXED :
3437 HT_IRQ_LOW_MT_ARBITRATED) |
3438 HT_IRQ_LOW_IRQ_MASKED;
3439
3440 write_ht_irq_msg(irq, &msg);
3441
3442 irq_set_chip_and_handler_name(irq, &ht_irq_chip,
3443 handle_edge_irq, "edge");
3444
3445 dev_printk(KERN_DEBUG, &dev->dev, "irq %d for HT\n", irq);
3446
3447 return 0;
3448 }
3449 #endif /* CONFIG_HT_IRQ */
3450
3451 static int
io_apic_setup_irq_pin(unsigned int irq,int node,struct io_apic_irq_attr * attr)3452 io_apic_setup_irq_pin(unsigned int irq, int node, struct io_apic_irq_attr *attr)
3453 {
3454 struct irq_cfg *cfg = alloc_irq_and_cfg_at(irq, node);
3455 int ret;
3456
3457 if (!cfg)
3458 return -EINVAL;
3459 ret = __add_pin_to_irq_node(cfg, node, attr->ioapic, attr->ioapic_pin);
3460 if (!ret)
3461 setup_ioapic_irq(irq, cfg, attr);
3462 return ret;
3463 }
3464
io_apic_get_redir_entries(int ioapic)3465 static int __init io_apic_get_redir_entries(int ioapic)
3466 {
3467 union IO_APIC_reg_01 reg_01;
3468 unsigned long flags;
3469
3470 raw_spin_lock_irqsave(&ioapic_lock, flags);
3471 reg_01.raw = io_apic_read(ioapic, 1);
3472 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
3473
3474 /* The register returns the maximum index redir index
3475 * supported, which is one less than the total number of redir
3476 * entries.
3477 */
3478 return reg_01.bits.entries + 1;
3479 }
3480
arch_dynirq_lower_bound(unsigned int from)3481 unsigned int arch_dynirq_lower_bound(unsigned int from)
3482 {
3483 /*
3484 * dmar_alloc_hwirq() may be called before setup_IO_APIC(), so use
3485 * gsi_top if ioapic_dynirq_base hasn't been initialized yet.
3486 */
3487 return ioapic_initialized ? ioapic_dynirq_base : gsi_top;
3488 }
3489
arch_probe_nr_irqs(void)3490 int __init arch_probe_nr_irqs(void)
3491 {
3492 int nr;
3493
3494 if (nr_irqs > (NR_VECTORS * nr_cpu_ids))
3495 nr_irqs = NR_VECTORS * nr_cpu_ids;
3496
3497 nr = (gsi_top + nr_legacy_irqs()) + 8 * nr_cpu_ids;
3498 #if defined(CONFIG_PCI_MSI) || defined(CONFIG_HT_IRQ)
3499 /*
3500 * for MSI and HT dyn irq
3501 */
3502 nr += gsi_top * 16;
3503 #endif
3504 if (nr < nr_irqs)
3505 nr_irqs = nr;
3506
3507 return 0;
3508 }
3509
3510 #ifdef CONFIG_X86_32
io_apic_get_unique_id(int ioapic,int apic_id)3511 static int __init io_apic_get_unique_id(int ioapic, int apic_id)
3512 {
3513 union IO_APIC_reg_00 reg_00;
3514 static physid_mask_t apic_id_map = PHYSID_MASK_NONE;
3515 physid_mask_t tmp;
3516 unsigned long flags;
3517 int i = 0;
3518
3519 /*
3520 * The P4 platform supports up to 256 APIC IDs on two separate APIC
3521 * buses (one for LAPICs, one for IOAPICs), where predecessors only
3522 * supports up to 16 on one shared APIC bus.
3523 *
3524 * TBD: Expand LAPIC/IOAPIC support on P4-class systems to take full
3525 * advantage of new APIC bus architecture.
3526 */
3527
3528 if (physids_empty(apic_id_map))
3529 apic->ioapic_phys_id_map(&phys_cpu_present_map, &apic_id_map);
3530
3531 raw_spin_lock_irqsave(&ioapic_lock, flags);
3532 reg_00.raw = io_apic_read(ioapic, 0);
3533 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
3534
3535 if (apic_id >= get_physical_broadcast()) {
3536 printk(KERN_WARNING "IOAPIC[%d]: Invalid apic_id %d, trying "
3537 "%d\n", ioapic, apic_id, reg_00.bits.ID);
3538 apic_id = reg_00.bits.ID;
3539 }
3540
3541 /*
3542 * Every APIC in a system must have a unique ID or we get lots of nice
3543 * 'stuck on smp_invalidate_needed IPI wait' messages.
3544 */
3545 if (apic->check_apicid_used(&apic_id_map, apic_id)) {
3546
3547 for (i = 0; i < get_physical_broadcast(); i++) {
3548 if (!apic->check_apicid_used(&apic_id_map, i))
3549 break;
3550 }
3551
3552 if (i == get_physical_broadcast())
3553 panic("Max apic_id exceeded!\n");
3554
3555 printk(KERN_WARNING "IOAPIC[%d]: apic_id %d already used, "
3556 "trying %d\n", ioapic, apic_id, i);
3557
3558 apic_id = i;
3559 }
3560
3561 apic->apicid_to_cpu_present(apic_id, &tmp);
3562 physids_or(apic_id_map, apic_id_map, tmp);
3563
3564 if (reg_00.bits.ID != apic_id) {
3565 reg_00.bits.ID = apic_id;
3566
3567 raw_spin_lock_irqsave(&ioapic_lock, flags);
3568 io_apic_write(ioapic, 0, reg_00.raw);
3569 reg_00.raw = io_apic_read(ioapic, 0);
3570 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
3571
3572 /* Sanity check */
3573 if (reg_00.bits.ID != apic_id) {
3574 pr_err("IOAPIC[%d]: Unable to change apic_id!\n",
3575 ioapic);
3576 return -1;
3577 }
3578 }
3579
3580 apic_printk(APIC_VERBOSE, KERN_INFO
3581 "IOAPIC[%d]: Assigned apic_id %d\n", ioapic, apic_id);
3582
3583 return apic_id;
3584 }
3585
io_apic_unique_id(u8 id)3586 static u8 __init io_apic_unique_id(u8 id)
3587 {
3588 if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) &&
3589 !APIC_XAPIC(apic_version[boot_cpu_physical_apicid]))
3590 return io_apic_get_unique_id(nr_ioapics, id);
3591 else
3592 return id;
3593 }
3594 #else
io_apic_unique_id(u8 id)3595 static u8 __init io_apic_unique_id(u8 id)
3596 {
3597 int i;
3598 DECLARE_BITMAP(used, 256);
3599
3600 bitmap_zero(used, 256);
3601 for_each_ioapic(i)
3602 __set_bit(mpc_ioapic_id(i), used);
3603 if (!test_bit(id, used))
3604 return id;
3605 return find_first_zero_bit(used, 256);
3606 }
3607 #endif
3608
io_apic_get_version(int ioapic)3609 static int __init io_apic_get_version(int ioapic)
3610 {
3611 union IO_APIC_reg_01 reg_01;
3612 unsigned long flags;
3613
3614 raw_spin_lock_irqsave(&ioapic_lock, flags);
3615 reg_01.raw = io_apic_read(ioapic, 1);
3616 raw_spin_unlock_irqrestore(&ioapic_lock, flags);
3617
3618 return reg_01.bits.version;
3619 }
3620
acpi_get_override_irq(u32 gsi,int * trigger,int * polarity)3621 int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity)
3622 {
3623 int ioapic, pin, idx;
3624
3625 if (skip_ioapic_setup)
3626 return -1;
3627
3628 ioapic = mp_find_ioapic(gsi);
3629 if (ioapic < 0)
3630 return -1;
3631
3632 pin = mp_find_ioapic_pin(ioapic, gsi);
3633 if (pin < 0)
3634 return -1;
3635
3636 idx = find_irq_entry(ioapic, pin, mp_INT);
3637 if (idx < 0)
3638 return -1;
3639
3640 *trigger = irq_trigger(idx);
3641 *polarity = irq_polarity(idx);
3642 return 0;
3643 }
3644
3645 /*
3646 * This function currently is only a helper for the i386 smp boot process where
3647 * we need to reprogram the ioredtbls to cater for the cpus which have come online
3648 * so mask in all cases should simply be apic->target_cpus()
3649 */
3650 #ifdef CONFIG_SMP
setup_ioapic_dest(void)3651 void __init setup_ioapic_dest(void)
3652 {
3653 int pin, ioapic, irq, irq_entry;
3654 const struct cpumask *mask;
3655 struct irq_data *idata;
3656
3657 if (skip_ioapic_setup == 1)
3658 return;
3659
3660 for_each_ioapic_pin(ioapic, pin) {
3661 irq_entry = find_irq_entry(ioapic, pin, mp_INT);
3662 if (irq_entry == -1)
3663 continue;
3664
3665 irq = pin_2_irq(irq_entry, ioapic, pin, 0);
3666 if (irq < 0 || !mp_init_irq_at_boot(ioapic, irq))
3667 continue;
3668
3669 idata = irq_get_irq_data(irq);
3670
3671 /*
3672 * Honour affinities which have been set in early boot
3673 */
3674 if (!irqd_can_balance(idata) || irqd_affinity_was_set(idata))
3675 mask = idata->affinity;
3676 else
3677 mask = apic->target_cpus();
3678
3679 x86_io_apic_ops.set_affinity(idata, mask, false);
3680 }
3681
3682 }
3683 #endif
3684
3685 #define IOAPIC_RESOURCE_NAME_SIZE 11
3686
3687 static struct resource *ioapic_resources;
3688
ioapic_setup_resources(void)3689 static struct resource * __init ioapic_setup_resources(void)
3690 {
3691 unsigned long n;
3692 struct resource *res;
3693 char *mem;
3694 int i, num = 0;
3695
3696 for_each_ioapic(i)
3697 num++;
3698 if (num == 0)
3699 return NULL;
3700
3701 n = IOAPIC_RESOURCE_NAME_SIZE + sizeof(struct resource);
3702 n *= num;
3703
3704 mem = alloc_bootmem(n);
3705 res = (void *)mem;
3706
3707 mem += sizeof(struct resource) * num;
3708
3709 num = 0;
3710 for_each_ioapic(i) {
3711 res[num].name = mem;
3712 res[num].flags = IORESOURCE_MEM | IORESOURCE_BUSY;
3713 snprintf(mem, IOAPIC_RESOURCE_NAME_SIZE, "IOAPIC %u", i);
3714 mem += IOAPIC_RESOURCE_NAME_SIZE;
3715 num++;
3716 }
3717
3718 ioapic_resources = res;
3719
3720 return res;
3721 }
3722
native_io_apic_init_mappings(void)3723 void __init native_io_apic_init_mappings(void)
3724 {
3725 unsigned long ioapic_phys, idx = FIX_IO_APIC_BASE_0;
3726 struct resource *ioapic_res;
3727 int i;
3728
3729 ioapic_res = ioapic_setup_resources();
3730 for_each_ioapic(i) {
3731 if (smp_found_config) {
3732 ioapic_phys = mpc_ioapic_addr(i);
3733 #ifdef CONFIG_X86_32
3734 if (!ioapic_phys) {
3735 printk(KERN_ERR
3736 "WARNING: bogus zero IO-APIC "
3737 "address found in MPTABLE, "
3738 "disabling IO/APIC support!\n");
3739 smp_found_config = 0;
3740 skip_ioapic_setup = 1;
3741 goto fake_ioapic_page;
3742 }
3743 #endif
3744 } else {
3745 #ifdef CONFIG_X86_32
3746 fake_ioapic_page:
3747 #endif
3748 ioapic_phys = (unsigned long)alloc_bootmem_pages(PAGE_SIZE);
3749 ioapic_phys = __pa(ioapic_phys);
3750 }
3751 set_fixmap_nocache(idx, ioapic_phys);
3752 apic_printk(APIC_VERBOSE, "mapped IOAPIC to %08lx (%08lx)\n",
3753 __fix_to_virt(idx) + (ioapic_phys & ~PAGE_MASK),
3754 ioapic_phys);
3755 idx++;
3756
3757 ioapic_res->start = ioapic_phys;
3758 ioapic_res->end = ioapic_phys + IO_APIC_SLOT_SIZE - 1;
3759 ioapic_res++;
3760 }
3761 }
3762
ioapic_insert_resources(void)3763 void __init ioapic_insert_resources(void)
3764 {
3765 int i;
3766 struct resource *r = ioapic_resources;
3767
3768 if (!r) {
3769 if (nr_ioapics > 0)
3770 printk(KERN_ERR
3771 "IO APIC resources couldn't be allocated.\n");
3772 return;
3773 }
3774
3775 for_each_ioapic(i) {
3776 insert_resource(&iomem_resource, r);
3777 r++;
3778 }
3779 }
3780
mp_find_ioapic(u32 gsi)3781 int mp_find_ioapic(u32 gsi)
3782 {
3783 int i;
3784
3785 if (nr_ioapics == 0)
3786 return -1;
3787
3788 /* Find the IOAPIC that manages this GSI. */
3789 for_each_ioapic(i) {
3790 struct mp_ioapic_gsi *gsi_cfg = mp_ioapic_gsi_routing(i);
3791 if (gsi >= gsi_cfg->gsi_base && gsi <= gsi_cfg->gsi_end)
3792 return i;
3793 }
3794
3795 printk(KERN_ERR "ERROR: Unable to locate IOAPIC for GSI %d\n", gsi);
3796 return -1;
3797 }
3798
mp_find_ioapic_pin(int ioapic,u32 gsi)3799 int mp_find_ioapic_pin(int ioapic, u32 gsi)
3800 {
3801 struct mp_ioapic_gsi *gsi_cfg;
3802
3803 if (WARN_ON(ioapic < 0))
3804 return -1;
3805
3806 gsi_cfg = mp_ioapic_gsi_routing(ioapic);
3807 if (WARN_ON(gsi > gsi_cfg->gsi_end))
3808 return -1;
3809
3810 return gsi - gsi_cfg->gsi_base;
3811 }
3812
bad_ioapic(unsigned long address)3813 static __init int bad_ioapic(unsigned long address)
3814 {
3815 if (nr_ioapics >= MAX_IO_APICS) {
3816 pr_warn("WARNING: Max # of I/O APICs (%d) exceeded (found %d), skipping\n",
3817 MAX_IO_APICS, nr_ioapics);
3818 return 1;
3819 }
3820 if (!address) {
3821 pr_warn("WARNING: Bogus (zero) I/O APIC address found in table, skipping!\n");
3822 return 1;
3823 }
3824 return 0;
3825 }
3826
bad_ioapic_register(int idx)3827 static __init int bad_ioapic_register(int idx)
3828 {
3829 union IO_APIC_reg_00 reg_00;
3830 union IO_APIC_reg_01 reg_01;
3831 union IO_APIC_reg_02 reg_02;
3832
3833 reg_00.raw = io_apic_read(idx, 0);
3834 reg_01.raw = io_apic_read(idx, 1);
3835 reg_02.raw = io_apic_read(idx, 2);
3836
3837 if (reg_00.raw == -1 && reg_01.raw == -1 && reg_02.raw == -1) {
3838 pr_warn("I/O APIC 0x%x registers return all ones, skipping!\n",
3839 mpc_ioapic_addr(idx));
3840 return 1;
3841 }
3842
3843 return 0;
3844 }
3845
mp_register_ioapic(int id,u32 address,u32 gsi_base,struct ioapic_domain_cfg * cfg)3846 void __init mp_register_ioapic(int id, u32 address, u32 gsi_base,
3847 struct ioapic_domain_cfg *cfg)
3848 {
3849 int idx = 0;
3850 int entries;
3851 struct mp_ioapic_gsi *gsi_cfg;
3852
3853 if (bad_ioapic(address))
3854 return;
3855
3856 idx = nr_ioapics;
3857
3858 ioapics[idx].mp_config.type = MP_IOAPIC;
3859 ioapics[idx].mp_config.flags = MPC_APIC_USABLE;
3860 ioapics[idx].mp_config.apicaddr = address;
3861 ioapics[idx].irqdomain = NULL;
3862 ioapics[idx].irqdomain_cfg = *cfg;
3863
3864 set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
3865
3866 if (bad_ioapic_register(idx)) {
3867 clear_fixmap(FIX_IO_APIC_BASE_0 + idx);
3868 return;
3869 }
3870
3871 ioapics[idx].mp_config.apicid = io_apic_unique_id(id);
3872 ioapics[idx].mp_config.apicver = io_apic_get_version(idx);
3873
3874 /*
3875 * Build basic GSI lookup table to facilitate gsi->io_apic lookups
3876 * and to prevent reprogramming of IOAPIC pins (PCI GSIs).
3877 */
3878 entries = io_apic_get_redir_entries(idx);
3879 gsi_cfg = mp_ioapic_gsi_routing(idx);
3880 gsi_cfg->gsi_base = gsi_base;
3881 gsi_cfg->gsi_end = gsi_base + entries - 1;
3882
3883 /*
3884 * The number of IO-APIC IRQ registers (== #pins):
3885 */
3886 ioapics[idx].nr_registers = entries;
3887
3888 if (gsi_cfg->gsi_end >= gsi_top)
3889 gsi_top = gsi_cfg->gsi_end + 1;
3890
3891 pr_info("IOAPIC[%d]: apic_id %d, version %d, address 0x%x, GSI %d-%d\n",
3892 idx, mpc_ioapic_id(idx),
3893 mpc_ioapic_ver(idx), mpc_ioapic_addr(idx),
3894 gsi_cfg->gsi_base, gsi_cfg->gsi_end);
3895
3896 nr_ioapics++;
3897 }
3898
mp_irqdomain_map(struct irq_domain * domain,unsigned int virq,irq_hw_number_t hwirq)3899 int mp_irqdomain_map(struct irq_domain *domain, unsigned int virq,
3900 irq_hw_number_t hwirq)
3901 {
3902 int ioapic = (int)(long)domain->host_data;
3903 struct mp_pin_info *info = mp_pin_info(ioapic, hwirq);
3904 struct io_apic_irq_attr attr;
3905
3906 /* Get default attribute if not set by caller yet */
3907 if (!info->set) {
3908 u32 gsi = mp_pin_to_gsi(ioapic, hwirq);
3909
3910 if (acpi_get_override_irq(gsi, &info->trigger,
3911 &info->polarity) < 0) {
3912 /*
3913 * PCI interrupts are always polarity one level
3914 * triggered.
3915 */
3916 info->trigger = 1;
3917 info->polarity = 1;
3918 }
3919 info->node = NUMA_NO_NODE;
3920
3921 /*
3922 * setup_IO_APIC_irqs() programs all legacy IRQs with default
3923 * trigger and polarity attributes. Don't set the flag for that
3924 * case so the first legacy IRQ user could reprogram the pin
3925 * with real trigger and polarity attributes.
3926 */
3927 if (virq >= nr_legacy_irqs() || info->count)
3928 info->set = 1;
3929 }
3930 set_io_apic_irq_attr(&attr, ioapic, hwirq, info->trigger,
3931 info->polarity);
3932
3933 return io_apic_setup_irq_pin(virq, info->node, &attr);
3934 }
3935
mp_irqdomain_unmap(struct irq_domain * domain,unsigned int virq)3936 void mp_irqdomain_unmap(struct irq_domain *domain, unsigned int virq)
3937 {
3938 struct irq_data *data = irq_get_irq_data(virq);
3939 struct irq_cfg *cfg = irq_cfg(virq);
3940 int ioapic = (int)(long)domain->host_data;
3941 int pin = (int)data->hwirq;
3942
3943 ioapic_mask_entry(ioapic, pin);
3944 __remove_pin_from_irq(cfg, ioapic, pin);
3945 WARN_ON(cfg->irq_2_pin != NULL);
3946 arch_teardown_hwirq(virq);
3947 }
3948
mp_set_gsi_attr(u32 gsi,int trigger,int polarity,int node)3949 int mp_set_gsi_attr(u32 gsi, int trigger, int polarity, int node)
3950 {
3951 int ret = 0;
3952 int ioapic, pin;
3953 struct mp_pin_info *info;
3954
3955 ioapic = mp_find_ioapic(gsi);
3956 if (ioapic < 0)
3957 return -ENODEV;
3958
3959 pin = mp_find_ioapic_pin(ioapic, gsi);
3960 info = mp_pin_info(ioapic, pin);
3961 trigger = trigger ? 1 : 0;
3962 polarity = polarity ? 1 : 0;
3963
3964 mutex_lock(&ioapic_mutex);
3965 if (!info->set) {
3966 info->trigger = trigger;
3967 info->polarity = polarity;
3968 info->node = node;
3969 info->set = 1;
3970 } else if (info->trigger != trigger || info->polarity != polarity) {
3971 ret = -EBUSY;
3972 }
3973 mutex_unlock(&ioapic_mutex);
3974
3975 return ret;
3976 }
3977
mp_should_keep_irq(struct device * dev)3978 bool mp_should_keep_irq(struct device *dev)
3979 {
3980 if (dev->power.is_prepared)
3981 return true;
3982 #ifdef CONFIG_PM_RUNTIME
3983 if (dev->power.runtime_status == RPM_SUSPENDING)
3984 return true;
3985 #endif
3986
3987 return false;
3988 }
3989
3990 /* Enable IOAPIC early just for system timer */
pre_init_apic_IRQ0(void)3991 void __init pre_init_apic_IRQ0(void)
3992 {
3993 struct io_apic_irq_attr attr = { 0, 0, 0, 0 };
3994
3995 printk(KERN_INFO "Early APIC setup for system timer0\n");
3996 #ifndef CONFIG_SMP
3997 physid_set_mask_of_physid(boot_cpu_physical_apicid,
3998 &phys_cpu_present_map);
3999 #endif
4000 setup_local_APIC();
4001
4002 io_apic_setup_irq_pin(0, 0, &attr);
4003 irq_set_chip_and_handler_name(0, &ioapic_chip, handle_edge_irq,
4004 "edge");
4005 }
4006