x86: apic - unify lapic_is_integrated
[pandora-kernel.git] / arch / x86 / kernel / apic_32.c
1 /*
2  *      Local APIC handling, local APIC timers
3  *
4  *      (c) 1999, 2000 Ingo Molnar <mingo@redhat.com>
5  *
6  *      Fixes
7  *      Maciej W. Rozycki       :       Bits for genuine 82489DX APICs;
8  *                                      thanks to Eric Gilmore
9  *                                      and Rolf G. Tews
10  *                                      for testing these extensively.
11  *      Maciej W. Rozycki       :       Various updates and fixes.
12  *      Mikael Pettersson       :       Power Management for UP-APIC.
13  *      Pavel Machek and
14  *      Mikael Pettersson       :       PM converted to driver model.
15  */
16
17 #include <linux/init.h>
18
19 #include <linux/mm.h>
20 #include <linux/delay.h>
21 #include <linux/bootmem.h>
22 #include <linux/interrupt.h>
23 #include <linux/mc146818rtc.h>
24 #include <linux/kernel_stat.h>
25 #include <linux/sysdev.h>
26 #include <linux/cpu.h>
27 #include <linux/clockchips.h>
28 #include <linux/acpi_pmtmr.h>
29 #include <linux/module.h>
30 #include <linux/dmi.h>
31
32 #include <asm/atomic.h>
33 #include <asm/smp.h>
34 #include <asm/mtrr.h>
35 #include <asm/mpspec.h>
36 #include <asm/desc.h>
37 #include <asm/arch_hooks.h>
38 #include <asm/hpet.h>
39 #include <asm/i8253.h>
40 #include <asm/nmi.h>
41
42 #include <mach_apic.h>
43 #include <mach_apicdef.h>
44 #include <mach_ipi.h>
45
46 /*
47  * Sanity check
48  */
49 #if ((SPURIOUS_APIC_VECTOR & 0x0F) != 0x0F)
50 # error SPURIOUS_APIC_VECTOR definition error
51 #endif
52
53 unsigned long mp_lapic_addr;
54
55 /*
56  * Knob to control our willingness to enable the local APIC.
57  *
58  * +1=force-enable
59  */
60 static int force_enable_local_apic;
61 int disable_apic;
62
63 /* Disable local APIC timer from the kernel commandline or via dmi quirk */
64 static int disable_apic_timer __cpuinitdata;
65 /* Local APIC timer works in C2 */
66 int local_apic_timer_c2_ok;
67 EXPORT_SYMBOL_GPL(local_apic_timer_c2_ok);
68
69 int first_system_vector = 0xfe;
70
71 char system_vectors[NR_VECTORS] = { [0 ... NR_VECTORS-1] = SYS_VECTOR_FREE};
72
73 /*
74  * Debug level, exported for io_apic.c
75  */
76 unsigned int apic_verbosity;
77
78 int pic_mode;
79
80 /* Have we found an MP table */
81 int smp_found_config;
82
83 static struct resource lapic_resource = {
84         .name = "Local APIC",
85         .flags = IORESOURCE_MEM | IORESOURCE_BUSY,
86 };
87
88 static unsigned int calibration_result;
89
90 static int lapic_next_event(unsigned long delta,
91                             struct clock_event_device *evt);
92 static void lapic_timer_setup(enum clock_event_mode mode,
93                               struct clock_event_device *evt);
94 static void lapic_timer_broadcast(cpumask_t mask);
95 static void apic_pm_activate(void);
96
97 /*
98  * The local apic timer can be used for any function which is CPU local.
99  */
100 static struct clock_event_device lapic_clockevent = {
101         .name           = "lapic",
102         .features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT
103                         | CLOCK_EVT_FEAT_C3STOP | CLOCK_EVT_FEAT_DUMMY,
104         .shift          = 32,
105         .set_mode       = lapic_timer_setup,
106         .set_next_event = lapic_next_event,
107         .broadcast      = lapic_timer_broadcast,
108         .rating         = 100,
109         .irq            = -1,
110 };
111 static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
112
113 /* Local APIC was disabled by the BIOS and enabled by the kernel */
114 static int enabled_via_apicbase;
115
116 static unsigned long apic_phys;
117
118 /*
119  * Get the LAPIC version
120  */
121 static inline int lapic_get_version(void)
122 {
123         return GET_APIC_VERSION(apic_read(APIC_LVR));
124 }
125
126 /*
127  * Check, if the APIC is integrated or a separate chip
128  */
129 static inline int lapic_is_integrated(void)
130 {
131 #ifdef CONFIG_X86_64
132         return 1;
133 #else
134         return APIC_INTEGRATED(lapic_get_version());
135 #endif
136 }
137
138 /*
139  * Check, whether this is a modern or a first generation APIC
140  */
141 static int modern_apic(void)
142 {
143         /* AMD systems use old APIC versions, so check the CPU */
144         if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
145             boot_cpu_data.x86 >= 0xf)
146                 return 1;
147         return lapic_get_version() >= 0x14;
148 }
149
150 /*
151  * Paravirt kernels also might be using these below ops. So we still
152  * use generic apic_read()/apic_write(), which might be pointing to different
153  * ops in PARAVIRT case.
154  */
155 void xapic_wait_icr_idle(void)
156 {
157         while (apic_read(APIC_ICR) & APIC_ICR_BUSY)
158                 cpu_relax();
159 }
160
161 u32 safe_xapic_wait_icr_idle(void)
162 {
163         u32 send_status;
164         int timeout;
165
166         timeout = 0;
167         do {
168                 send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
169                 if (!send_status)
170                         break;
171                 udelay(100);
172         } while (timeout++ < 1000);
173
174         return send_status;
175 }
176
177 void xapic_icr_write(u32 low, u32 id)
178 {
179         apic_write(APIC_ICR2, SET_APIC_DEST_FIELD(id));
180         apic_write(APIC_ICR, low);
181 }
182
183 u64 xapic_icr_read(void)
184 {
185         u32 icr1, icr2;
186
187         icr2 = apic_read(APIC_ICR2);
188         icr1 = apic_read(APIC_ICR);
189
190         return icr1 | ((u64)icr2 << 32);
191 }
192
193 static struct apic_ops xapic_ops = {
194         .read = native_apic_mem_read,
195         .write = native_apic_mem_write,
196         .icr_read = xapic_icr_read,
197         .icr_write = xapic_icr_write,
198         .wait_icr_idle = xapic_wait_icr_idle,
199         .safe_wait_icr_idle = safe_xapic_wait_icr_idle,
200 };
201
202 struct apic_ops __read_mostly *apic_ops = &xapic_ops;
203 EXPORT_SYMBOL_GPL(apic_ops);
204
205 /**
206  * enable_NMI_through_LVT0 - enable NMI through local vector table 0
207  */
208 void __cpuinit enable_NMI_through_LVT0(void)
209 {
210         unsigned int v;
211
212         /* unmask and set to NMI */
213         v = APIC_DM_NMI;
214
215         /* Level triggered for 82489DX (32bit mode) */
216         if (!lapic_is_integrated())
217                 v |= APIC_LVT_LEVEL_TRIGGER;
218
219         apic_write(APIC_LVT0, v);
220 }
221
222 /**
223  * get_physical_broadcast - Get number of physical broadcast IDs
224  */
225 int get_physical_broadcast(void)
226 {
227         return modern_apic() ? 0xff : 0xf;
228 }
229
230 /**
231  * lapic_get_maxlvt - get the maximum number of local vector table entries
232  */
233 int lapic_get_maxlvt(void)
234 {
235         unsigned int v;
236
237         v = apic_read(APIC_LVR);
238         /*
239          * - we always have APIC integrated on 64bit mode
240          * - 82489DXs do not report # of LVT entries
241          */
242         return APIC_INTEGRATED(GET_APIC_VERSION(v)) ? GET_APIC_MAXLVT(v) : 2;
243 }
244
245 /*
246  * Local APIC timer
247  */
248
249 /* Clock divisor is set to 16 */
250 #define APIC_DIVISOR 16
251
252 /*
253  * This function sets up the local APIC timer, with a timeout of
254  * 'clocks' APIC bus clock. During calibration we actually call
255  * this function twice on the boot CPU, once with a bogus timeout
256  * value, second time for real. The other (noncalibrating) CPUs
257  * call this function only once, with the real, calibrated value.
258  *
259  * We do reads before writes even if unnecessary, to get around the
260  * P5 APIC double write bug.
261  */
262 static void __setup_APIC_LVTT(unsigned int clocks, int oneshot, int irqen)
263 {
264         unsigned int lvtt_value, tmp_value;
265
266         lvtt_value = LOCAL_TIMER_VECTOR;
267         if (!oneshot)
268                 lvtt_value |= APIC_LVT_TIMER_PERIODIC;
269         if (!lapic_is_integrated())
270                 lvtt_value |= SET_APIC_TIMER_BASE(APIC_TIMER_BASE_DIV);
271
272         if (!irqen)
273                 lvtt_value |= APIC_LVT_MASKED;
274
275         apic_write(APIC_LVTT, lvtt_value);
276
277         /*
278          * Divide PICLK by 16
279          */
280         tmp_value = apic_read(APIC_TDCR);
281         apic_write(APIC_TDCR,
282                    (tmp_value & ~(APIC_TDR_DIV_1 | APIC_TDR_DIV_TMBASE)) |
283                    APIC_TDR_DIV_16);
284
285         if (!oneshot)
286                 apic_write(APIC_TMICT, clocks / APIC_DIVISOR);
287 }
288
289 /*
290  * Setup extended LVT, AMD specific (K8, family 10h)
291  *
292  * Vector mappings are hard coded. On K8 only offset 0 (APIC500) and
293  * MCE interrupts are supported. Thus MCE offset must be set to 0.
294  */
295
296 #define APIC_EILVT_LVTOFF_MCE 0
297 #define APIC_EILVT_LVTOFF_IBS 1
298
299 static void setup_APIC_eilvt(u8 lvt_off, u8 vector, u8 msg_type, u8 mask)
300 {
301         unsigned long reg = (lvt_off << 4) + APIC_EILVT0;
302         unsigned int  v   = (mask << 16) | (msg_type << 8) | vector;
303
304         apic_write(reg, v);
305 }
306
307 u8 setup_APIC_eilvt_mce(u8 vector, u8 msg_type, u8 mask)
308 {
309         setup_APIC_eilvt(APIC_EILVT_LVTOFF_MCE, vector, msg_type, mask);
310         return APIC_EILVT_LVTOFF_MCE;
311 }
312
313 u8 setup_APIC_eilvt_ibs(u8 vector, u8 msg_type, u8 mask)
314 {
315         setup_APIC_eilvt(APIC_EILVT_LVTOFF_IBS, vector, msg_type, mask);
316         return APIC_EILVT_LVTOFF_IBS;
317 }
318
319 /*
320  * Program the next event, relative to now
321  */
322 static int lapic_next_event(unsigned long delta,
323                             struct clock_event_device *evt)
324 {
325         apic_write(APIC_TMICT, delta);
326         return 0;
327 }
328
329 /*
330  * Setup the lapic timer in periodic or oneshot mode
331  */
332 static void lapic_timer_setup(enum clock_event_mode mode,
333                               struct clock_event_device *evt)
334 {
335         unsigned long flags;
336         unsigned int v;
337
338         /* Lapic used as dummy for broadcast ? */
339         if (evt->features & CLOCK_EVT_FEAT_DUMMY)
340                 return;
341
342         local_irq_save(flags);
343
344         switch (mode) {
345         case CLOCK_EVT_MODE_PERIODIC:
346         case CLOCK_EVT_MODE_ONESHOT:
347                 __setup_APIC_LVTT(calibration_result,
348                                   mode != CLOCK_EVT_MODE_PERIODIC, 1);
349                 break;
350         case CLOCK_EVT_MODE_UNUSED:
351         case CLOCK_EVT_MODE_SHUTDOWN:
352                 v = apic_read(APIC_LVTT);
353                 v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
354                 apic_write(APIC_LVTT, v);
355                 break;
356         case CLOCK_EVT_MODE_RESUME:
357                 /* Nothing to do here */
358                 break;
359         }
360
361         local_irq_restore(flags);
362 }
363
364 /*
365  * Local APIC timer broadcast function
366  */
367 static void lapic_timer_broadcast(cpumask_t mask)
368 {
369 #ifdef CONFIG_SMP
370         send_IPI_mask(mask, LOCAL_TIMER_VECTOR);
371 #endif
372 }
373
374 /*
375  * Setup the local APIC timer for this CPU. Copy the initilized values
376  * of the boot CPU and register the clock event in the framework.
377  */
378 static void __devinit setup_APIC_timer(void)
379 {
380         struct clock_event_device *levt = &__get_cpu_var(lapic_events);
381
382         memcpy(levt, &lapic_clockevent, sizeof(*levt));
383         levt->cpumask = cpumask_of_cpu(smp_processor_id());
384
385         clockevents_register_device(levt);
386 }
387
388 /*
389  * In this functions we calibrate APIC bus clocks to the external timer.
390  *
391  * We want to do the calibration only once since we want to have local timer
392  * irqs syncron. CPUs connected by the same APIC bus have the very same bus
393  * frequency.
394  *
395  * This was previously done by reading the PIT/HPET and waiting for a wrap
396  * around to find out, that a tick has elapsed. I have a box, where the PIT
397  * readout is broken, so it never gets out of the wait loop again. This was
398  * also reported by others.
399  *
400  * Monitoring the jiffies value is inaccurate and the clockevents
401  * infrastructure allows us to do a simple substitution of the interrupt
402  * handler.
403  *
404  * The calibration routine also uses the pm_timer when possible, as the PIT
405  * happens to run way too slow (factor 2.3 on my VAIO CoreDuo, which goes
406  * back to normal later in the boot process).
407  */
408
409 #define LAPIC_CAL_LOOPS         (HZ/10)
410
411 static __initdata int lapic_cal_loops = -1;
412 static __initdata long lapic_cal_t1, lapic_cal_t2;
413 static __initdata unsigned long long lapic_cal_tsc1, lapic_cal_tsc2;
414 static __initdata unsigned long lapic_cal_pm1, lapic_cal_pm2;
415 static __initdata unsigned long lapic_cal_j1, lapic_cal_j2;
416
417 /*
418  * Temporary interrupt handler.
419  */
420 static void __init lapic_cal_handler(struct clock_event_device *dev)
421 {
422         unsigned long long tsc = 0;
423         long tapic = apic_read(APIC_TMCCT);
424         unsigned long pm = acpi_pm_read_early();
425
426         if (cpu_has_tsc)
427                 rdtscll(tsc);
428
429         switch (lapic_cal_loops++) {
430         case 0:
431                 lapic_cal_t1 = tapic;
432                 lapic_cal_tsc1 = tsc;
433                 lapic_cal_pm1 = pm;
434                 lapic_cal_j1 = jiffies;
435                 break;
436
437         case LAPIC_CAL_LOOPS:
438                 lapic_cal_t2 = tapic;
439                 lapic_cal_tsc2 = tsc;
440                 if (pm < lapic_cal_pm1)
441                         pm += ACPI_PM_OVRRUN;
442                 lapic_cal_pm2 = pm;
443                 lapic_cal_j2 = jiffies;
444                 break;
445         }
446 }
447
448 static int __init calibrate_APIC_clock(void)
449 {
450         struct clock_event_device *levt = &__get_cpu_var(lapic_events);
451         const long pm_100ms = PMTMR_TICKS_PER_SEC/10;
452         const long pm_thresh = pm_100ms/100;
453         void (*real_handler)(struct clock_event_device *dev);
454         unsigned long deltaj;
455         long delta, deltapm;
456         int pm_referenced = 0;
457
458         local_irq_disable();
459
460         /* Replace the global interrupt handler */
461         real_handler = global_clock_event->event_handler;
462         global_clock_event->event_handler = lapic_cal_handler;
463
464         /*
465          * Setup the APIC counter to 1e9. There is no way the lapic
466          * can underflow in the 100ms detection time frame
467          */
468         __setup_APIC_LVTT(1000000000, 0, 0);
469
470         /* Let the interrupts run */
471         local_irq_enable();
472
473         while (lapic_cal_loops <= LAPIC_CAL_LOOPS)
474                 cpu_relax();
475
476         local_irq_disable();
477
478         /* Restore the real event handler */
479         global_clock_event->event_handler = real_handler;
480
481         /* Build delta t1-t2 as apic timer counts down */
482         delta = lapic_cal_t1 - lapic_cal_t2;
483         apic_printk(APIC_VERBOSE, "... lapic delta = %ld\n", delta);
484
485         /* Check, if the PM timer is available */
486         deltapm = lapic_cal_pm2 - lapic_cal_pm1;
487         apic_printk(APIC_VERBOSE, "... PM timer delta = %ld\n", deltapm);
488
489         if (deltapm) {
490                 unsigned long mult;
491                 u64 res;
492
493                 mult = clocksource_hz2mult(PMTMR_TICKS_PER_SEC, 22);
494
495                 if (deltapm > (pm_100ms - pm_thresh) &&
496                     deltapm < (pm_100ms + pm_thresh)) {
497                         apic_printk(APIC_VERBOSE, "... PM timer result ok\n");
498                 } else {
499                         res = (((u64) deltapm) *  mult) >> 22;
500                         do_div(res, 1000000);
501                         printk(KERN_WARNING "APIC calibration not consistent "
502                                "with PM Timer: %ldms instead of 100ms\n",
503                                (long)res);
504                         /* Correct the lapic counter value */
505                         res = (((u64) delta) * pm_100ms);
506                         do_div(res, deltapm);
507                         printk(KERN_INFO "APIC delta adjusted to PM-Timer: "
508                                "%lu (%ld)\n", (unsigned long) res, delta);
509                         delta = (long) res;
510                 }
511                 pm_referenced = 1;
512         }
513
514         /* Calculate the scaled math multiplication factor */
515         lapic_clockevent.mult = div_sc(delta, TICK_NSEC * LAPIC_CAL_LOOPS,
516                                        lapic_clockevent.shift);
517         lapic_clockevent.max_delta_ns =
518                 clockevent_delta2ns(0x7FFFFF, &lapic_clockevent);
519         lapic_clockevent.min_delta_ns =
520                 clockevent_delta2ns(0xF, &lapic_clockevent);
521
522         calibration_result = (delta * APIC_DIVISOR) / LAPIC_CAL_LOOPS;
523
524         apic_printk(APIC_VERBOSE, "..... delta %ld\n", delta);
525         apic_printk(APIC_VERBOSE, "..... mult: %ld\n", lapic_clockevent.mult);
526         apic_printk(APIC_VERBOSE, "..... calibration result: %u\n",
527                     calibration_result);
528
529         if (cpu_has_tsc) {
530                 delta = (long)(lapic_cal_tsc2 - lapic_cal_tsc1);
531                 apic_printk(APIC_VERBOSE, "..... CPU clock speed is "
532                             "%ld.%04ld MHz.\n",
533                             (delta / LAPIC_CAL_LOOPS) / (1000000 / HZ),
534                             (delta / LAPIC_CAL_LOOPS) % (1000000 / HZ));
535         }
536
537         apic_printk(APIC_VERBOSE, "..... host bus clock speed is "
538                     "%u.%04u MHz.\n",
539                     calibration_result / (1000000 / HZ),
540                     calibration_result % (1000000 / HZ));
541
542         /*
543          * Do a sanity check on the APIC calibration result
544          */
545         if (calibration_result < (1000000 / HZ)) {
546                 local_irq_enable();
547                 printk(KERN_WARNING
548                        "APIC frequency too slow, disabling apic timer\n");
549                 return -1;
550         }
551
552         levt->features &= ~CLOCK_EVT_FEAT_DUMMY;
553
554         /* We trust the pm timer based calibration */
555         if (!pm_referenced) {
556                 apic_printk(APIC_VERBOSE, "... verify APIC timer\n");
557
558                 /*
559                  * Setup the apic timer manually
560                  */
561                 levt->event_handler = lapic_cal_handler;
562                 lapic_timer_setup(CLOCK_EVT_MODE_PERIODIC, levt);
563                 lapic_cal_loops = -1;
564
565                 /* Let the interrupts run */
566                 local_irq_enable();
567
568                 while (lapic_cal_loops <= LAPIC_CAL_LOOPS)
569                         cpu_relax();
570
571                 local_irq_disable();
572
573                 /* Stop the lapic timer */
574                 lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, levt);
575
576                 local_irq_enable();
577
578                 /* Jiffies delta */
579                 deltaj = lapic_cal_j2 - lapic_cal_j1;
580                 apic_printk(APIC_VERBOSE, "... jiffies delta = %lu\n", deltaj);
581
582                 /* Check, if the jiffies result is consistent */
583                 if (deltaj >= LAPIC_CAL_LOOPS-2 && deltaj <= LAPIC_CAL_LOOPS+2)
584                         apic_printk(APIC_VERBOSE, "... jiffies result ok\n");
585                 else
586                         levt->features |= CLOCK_EVT_FEAT_DUMMY;
587         } else
588                 local_irq_enable();
589
590         if (levt->features & CLOCK_EVT_FEAT_DUMMY) {
591                 printk(KERN_WARNING
592                        "APIC timer disabled due to verification failure.\n");
593                         return -1;
594         }
595
596         return 0;
597 }
598
599 /*
600  * Setup the boot APIC
601  *
602  * Calibrate and verify the result.
603  */
604 void __init setup_boot_APIC_clock(void)
605 {
606         /*
607          * The local apic timer can be disabled via the kernel
608          * commandline or from the CPU detection code. Register the lapic
609          * timer as a dummy clock event source on SMP systems, so the
610          * broadcast mechanism is used. On UP systems simply ignore it.
611          */
612         if (disable_apic_timer) {
613                 /* No broadcast on UP ! */
614                 if (num_possible_cpus() > 1) {
615                         lapic_clockevent.mult = 1;
616                         setup_APIC_timer();
617                 }
618                 return;
619         }
620
621         apic_printk(APIC_VERBOSE, "Using local APIC timer interrupts.\n"
622                     "calibrating APIC timer ...\n");
623
624         if (calibrate_APIC_clock()) {
625                 /* No broadcast on UP ! */
626                 if (num_possible_cpus() > 1)
627                         setup_APIC_timer();
628                 return;
629         }
630
631         /*
632          * If nmi_watchdog is set to IO_APIC, we need the
633          * PIT/HPET going.  Otherwise register lapic as a dummy
634          * device.
635          */
636         if (nmi_watchdog != NMI_IO_APIC)
637                 lapic_clockevent.features &= ~CLOCK_EVT_FEAT_DUMMY;
638         else
639                 printk(KERN_WARNING "APIC timer registered as dummy,"
640                         " due to nmi_watchdog=%d!\n", nmi_watchdog);
641
642         /* Setup the lapic or request the broadcast */
643         setup_APIC_timer();
644 }
645
646 void __devinit setup_secondary_APIC_clock(void)
647 {
648         setup_APIC_timer();
649 }
650
651 /*
652  * The guts of the apic timer interrupt
653  */
654 static void local_apic_timer_interrupt(void)
655 {
656         int cpu = smp_processor_id();
657         struct clock_event_device *evt = &per_cpu(lapic_events, cpu);
658
659         /*
660          * Normally we should not be here till LAPIC has been initialized but
661          * in some cases like kdump, its possible that there is a pending LAPIC
662          * timer interrupt from previous kernel's context and is delivered in
663          * new kernel the moment interrupts are enabled.
664          *
665          * Interrupts are enabled early and LAPIC is setup much later, hence
666          * its possible that when we get here evt->event_handler is NULL.
667          * Check for event_handler being NULL and discard the interrupt as
668          * spurious.
669          */
670         if (!evt->event_handler) {
671                 printk(KERN_WARNING
672                        "Spurious LAPIC timer interrupt on cpu %d\n", cpu);
673                 /* Switch it off */
674                 lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, evt);
675                 return;
676         }
677
678         /*
679          * the NMI deadlock-detector uses this.
680          */
681         per_cpu(irq_stat, cpu).apic_timer_irqs++;
682
683         evt->event_handler(evt);
684 }
685
686 /*
687  * Local APIC timer interrupt. This is the most natural way for doing
688  * local interrupts, but local timer interrupts can be emulated by
689  * broadcast interrupts too. [in case the hw doesn't support APIC timers]
690  *
691  * [ if a single-CPU system runs an SMP kernel then we call the local
692  *   interrupt as well. Thus we cannot inline the local irq ... ]
693  */
694 void smp_apic_timer_interrupt(struct pt_regs *regs)
695 {
696         struct pt_regs *old_regs = set_irq_regs(regs);
697
698         /*
699          * NOTE! We'd better ACK the irq immediately,
700          * because timer handling can be slow.
701          */
702         ack_APIC_irq();
703         /*
704          * update_process_times() expects us to have done irq_enter().
705          * Besides, if we don't timer interrupts ignore the global
706          * interrupt lock, which is the WrongThing (tm) to do.
707          */
708         irq_enter();
709         local_apic_timer_interrupt();
710         irq_exit();
711
712         set_irq_regs(old_regs);
713 }
714
715 int setup_profiling_timer(unsigned int multiplier)
716 {
717         return -EINVAL;
718 }
719
720 /*
721  * Local APIC start and shutdown
722  */
723
724 /**
725  * clear_local_APIC - shutdown the local APIC
726  *
727  * This is called, when a CPU is disabled and before rebooting, so the state of
728  * the local APIC has no dangling leftovers. Also used to cleanout any BIOS
729  * leftovers during boot.
730  */
731 void clear_local_APIC(void)
732 {
733         int maxlvt;
734         u32 v;
735
736         /* APIC hasn't been mapped yet */
737         if (!apic_phys)
738                 return;
739
740         maxlvt = lapic_get_maxlvt();
741         /*
742          * Masking an LVT entry can trigger a local APIC error
743          * if the vector is zero. Mask LVTERR first to prevent this.
744          */
745         if (maxlvt >= 3) {
746                 v = ERROR_APIC_VECTOR; /* any non-zero vector will do */
747                 apic_write(APIC_LVTERR, v | APIC_LVT_MASKED);
748         }
749         /*
750          * Careful: we have to set masks only first to deassert
751          * any level-triggered sources.
752          */
753         v = apic_read(APIC_LVTT);
754         apic_write(APIC_LVTT, v | APIC_LVT_MASKED);
755         v = apic_read(APIC_LVT0);
756         apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
757         v = apic_read(APIC_LVT1);
758         apic_write(APIC_LVT1, v | APIC_LVT_MASKED);
759         if (maxlvt >= 4) {
760                 v = apic_read(APIC_LVTPC);
761                 apic_write(APIC_LVTPC, v | APIC_LVT_MASKED);
762         }
763
764         /* lets not touch this if we didn't frob it */
765 #if defined(CONFIG_X86_MCE_P4THERMAL) || defined(X86_MCE_INTEL)
766         if (maxlvt >= 5) {
767                 v = apic_read(APIC_LVTTHMR);
768                 apic_write(APIC_LVTTHMR, v | APIC_LVT_MASKED);
769         }
770 #endif
771         /*
772          * Clean APIC state for other OSs:
773          */
774         apic_write(APIC_LVTT, APIC_LVT_MASKED);
775         apic_write(APIC_LVT0, APIC_LVT_MASKED);
776         apic_write(APIC_LVT1, APIC_LVT_MASKED);
777         if (maxlvt >= 3)
778                 apic_write(APIC_LVTERR, APIC_LVT_MASKED);
779         if (maxlvt >= 4)
780                 apic_write(APIC_LVTPC, APIC_LVT_MASKED);
781
782         /* Integrated APIC (!82489DX) ? */
783         if (lapic_is_integrated()) {
784                 if (maxlvt > 3)
785                         /* Clear ESR due to Pentium errata 3AP and 11AP */
786                         apic_write(APIC_ESR, 0);
787                 apic_read(APIC_ESR);
788         }
789 }
790
791 /**
792  * disable_local_APIC - clear and disable the local APIC
793  */
794 void disable_local_APIC(void)
795 {
796         unsigned long value;
797
798         clear_local_APIC();
799
800         /*
801          * Disable APIC (implies clearing of registers
802          * for 82489DX!).
803          */
804         value = apic_read(APIC_SPIV);
805         value &= ~APIC_SPIV_APIC_ENABLED;
806         apic_write(APIC_SPIV, value);
807
808         /*
809          * When LAPIC was disabled by the BIOS and enabled by the kernel,
810          * restore the disabled state.
811          */
812         if (enabled_via_apicbase) {
813                 unsigned int l, h;
814
815                 rdmsr(MSR_IA32_APICBASE, l, h);
816                 l &= ~MSR_IA32_APICBASE_ENABLE;
817                 wrmsr(MSR_IA32_APICBASE, l, h);
818         }
819 }
820
821 /*
822  * If Linux enabled the LAPIC against the BIOS default disable it down before
823  * re-entering the BIOS on shutdown.  Otherwise the BIOS may get confused and
824  * not power-off.  Additionally clear all LVT entries before disable_local_APIC
825  * for the case where Linux didn't enable the LAPIC.
826  */
827 void lapic_shutdown(void)
828 {
829         unsigned long flags;
830
831         if (!cpu_has_apic)
832                 return;
833
834         local_irq_save(flags);
835
836         if (enabled_via_apicbase)
837                 disable_local_APIC();
838         else
839                 clear_local_APIC();
840
841         local_irq_restore(flags);
842 }
843
844 /*
845  * This is to verify that we're looking at a real local APIC.
846  * Check these against your board if the CPUs aren't getting
847  * started for no apparent reason.
848  */
849 int __init verify_local_APIC(void)
850 {
851         unsigned int reg0, reg1;
852
853         /*
854          * The version register is read-only in a real APIC.
855          */
856         reg0 = apic_read(APIC_LVR);
857         apic_printk(APIC_DEBUG, "Getting VERSION: %x\n", reg0);
858         apic_write(APIC_LVR, reg0 ^ APIC_LVR_MASK);
859         reg1 = apic_read(APIC_LVR);
860         apic_printk(APIC_DEBUG, "Getting VERSION: %x\n", reg1);
861
862         /*
863          * The two version reads above should print the same
864          * numbers.  If the second one is different, then we
865          * poke at a non-APIC.
866          */
867         if (reg1 != reg0)
868                 return 0;
869
870         /*
871          * Check if the version looks reasonably.
872          */
873         reg1 = GET_APIC_VERSION(reg0);
874         if (reg1 == 0x00 || reg1 == 0xff)
875                 return 0;
876         reg1 = lapic_get_maxlvt();
877         if (reg1 < 0x02 || reg1 == 0xff)
878                 return 0;
879
880         /*
881          * The ID register is read/write in a real APIC.
882          */
883         reg0 = apic_read(APIC_ID);
884         apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg0);
885         apic_write(APIC_ID, reg0 ^ APIC_ID_MASK);
886         reg1 = apic_read(APIC_ID);
887         apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg1);
888         apic_write(APIC_ID, reg0);
889         if (reg1 != (reg0 ^ APIC_ID_MASK))
890                 return 0;
891
892         /*
893          * The next two are just to see if we have sane values.
894          * They're only really relevant if we're in Virtual Wire
895          * compatibility mode, but most boxes are anymore.
896          */
897         reg0 = apic_read(APIC_LVT0);
898         apic_printk(APIC_DEBUG, "Getting LVT0: %x\n", reg0);
899         reg1 = apic_read(APIC_LVT1);
900         apic_printk(APIC_DEBUG, "Getting LVT1: %x\n", reg1);
901
902         return 1;
903 }
904
905 /**
906  * sync_Arb_IDs - synchronize APIC bus arbitration IDs
907  */
908 void __init sync_Arb_IDs(void)
909 {
910         /*
911          * Unsupported on P4 - see Intel Dev. Manual Vol. 3, Ch. 8.6.1 And not
912          * needed on AMD.
913          */
914         if (modern_apic() || boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
915                 return;
916
917         /*
918          * Wait for idle.
919          */
920         apic_wait_icr_idle();
921
922         apic_printk(APIC_DEBUG, "Synchronizing Arb IDs.\n");
923         apic_write(APIC_ICR, APIC_DEST_ALLINC |
924                         APIC_INT_LEVELTRIG | APIC_DM_INIT);
925 }
926
927 /*
928  * An initial setup of the virtual wire mode.
929  */
930 void __init init_bsp_APIC(void)
931 {
932         unsigned int value;
933
934         /*
935          * Don't do the setup now if we have a SMP BIOS as the
936          * through-I/O-APIC virtual wire mode might be active.
937          */
938         if (smp_found_config || !cpu_has_apic)
939                 return;
940
941         /*
942          * Do not trust the local APIC being empty at bootup.
943          */
944         clear_local_APIC();
945
946         /*
947          * Enable APIC.
948          */
949         value = apic_read(APIC_SPIV);
950         value &= ~APIC_VECTOR_MASK;
951         value |= APIC_SPIV_APIC_ENABLED;
952
953 #ifdef CONFIG_X86_32
954         /* This bit is reserved on P4/Xeon and should be cleared */
955         if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) &&
956             (boot_cpu_data.x86 == 15))
957                 value &= ~APIC_SPIV_FOCUS_DISABLED;
958         else
959 #endif
960                 value |= APIC_SPIV_FOCUS_DISABLED;
961         value |= SPURIOUS_APIC_VECTOR;
962         apic_write(APIC_SPIV, value);
963
964         /*
965          * Set up the virtual wire mode.
966          */
967         apic_write(APIC_LVT0, APIC_DM_EXTINT);
968         value = APIC_DM_NMI;
969         if (!lapic_is_integrated())             /* 82489DX */
970                 value |= APIC_LVT_LEVEL_TRIGGER;
971         apic_write(APIC_LVT1, value);
972 }
973
974 static void __cpuinit lapic_setup_esr(void)
975 {
976         unsigned long oldvalue, value, maxlvt;
977         if (lapic_is_integrated() && !esr_disable) {
978                 /* !82489DX */
979                 maxlvt = lapic_get_maxlvt();
980                 if (maxlvt > 3)         /* Due to the Pentium erratum 3AP. */
981                         apic_write(APIC_ESR, 0);
982                 oldvalue = apic_read(APIC_ESR);
983
984                 /* enables sending errors */
985                 value = ERROR_APIC_VECTOR;
986                 apic_write(APIC_LVTERR, value);
987                 /*
988                  * spec says clear errors after enabling vector.
989                  */
990                 if (maxlvt > 3)
991                         apic_write(APIC_ESR, 0);
992                 value = apic_read(APIC_ESR);
993                 if (value != oldvalue)
994                         apic_printk(APIC_VERBOSE, "ESR value before enabling "
995                                 "vector: 0x%08lx  after: 0x%08lx\n",
996                                 oldvalue, value);
997         } else {
998                 if (esr_disable)
999                         /*
1000                          * Something untraceable is creating bad interrupts on
1001                          * secondary quads ... for the moment, just leave the
1002                          * ESR disabled - we can't do anything useful with the
1003                          * errors anyway - mbligh
1004                          */
1005                         printk(KERN_INFO "Leaving ESR disabled.\n");
1006                 else
1007                         printk(KERN_INFO "No ESR for 82489DX.\n");
1008         }
1009 }
1010
1011
1012 /**
1013  * setup_local_APIC - setup the local APIC
1014  */
1015 void __cpuinit setup_local_APIC(void)
1016 {
1017         unsigned long value, integrated;
1018         int i, j;
1019
1020         /* Pound the ESR really hard over the head with a big hammer - mbligh */
1021         if (esr_disable) {
1022                 apic_write(APIC_ESR, 0);
1023                 apic_write(APIC_ESR, 0);
1024                 apic_write(APIC_ESR, 0);
1025                 apic_write(APIC_ESR, 0);
1026         }
1027
1028         integrated = lapic_is_integrated();
1029
1030         /*
1031          * Double-check whether this APIC is really registered.
1032          */
1033         if (!apic_id_registered())
1034                 WARN_ON_ONCE(1);
1035
1036         /*
1037          * Intel recommends to set DFR, LDR and TPR before enabling
1038          * an APIC.  See e.g. "AP-388 82489DX User's Manual" (Intel
1039          * document number 292116).  So here it goes...
1040          */
1041         init_apic_ldr();
1042
1043         /*
1044          * Set Task Priority to 'accept all'. We never change this
1045          * later on.
1046          */
1047         value = apic_read(APIC_TASKPRI);
1048         value &= ~APIC_TPRI_MASK;
1049         apic_write(APIC_TASKPRI, value);
1050
1051         /*
1052          * After a crash, we no longer service the interrupts and a pending
1053          * interrupt from previous kernel might still have ISR bit set.
1054          *
1055          * Most probably by now CPU has serviced that pending interrupt and
1056          * it might not have done the ack_APIC_irq() because it thought,
1057          * interrupt came from i8259 as ExtInt. LAPIC did not get EOI so it
1058          * does not clear the ISR bit and cpu thinks it has already serivced
1059          * the interrupt. Hence a vector might get locked. It was noticed
1060          * for timer irq (vector 0x31). Issue an extra EOI to clear ISR.
1061          */
1062         for (i = APIC_ISR_NR - 1; i >= 0; i--) {
1063                 value = apic_read(APIC_ISR + i*0x10);
1064                 for (j = 31; j >= 0; j--) {
1065                         if (value & (1<<j))
1066                                 ack_APIC_irq();
1067                 }
1068         }
1069
1070         /*
1071          * Now that we are all set up, enable the APIC
1072          */
1073         value = apic_read(APIC_SPIV);
1074         value &= ~APIC_VECTOR_MASK;
1075         /*
1076          * Enable APIC
1077          */
1078         value |= APIC_SPIV_APIC_ENABLED;
1079
1080         /*
1081          * Some unknown Intel IO/APIC (or APIC) errata is biting us with
1082          * certain networking cards. If high frequency interrupts are
1083          * happening on a particular IOAPIC pin, plus the IOAPIC routing
1084          * entry is masked/unmasked at a high rate as well then sooner or
1085          * later IOAPIC line gets 'stuck', no more interrupts are received
1086          * from the device. If focus CPU is disabled then the hang goes
1087          * away, oh well :-(
1088          *
1089          * [ This bug can be reproduced easily with a level-triggered
1090          *   PCI Ne2000 networking cards and PII/PIII processors, dual
1091          *   BX chipset. ]
1092          */
1093         /*
1094          * Actually disabling the focus CPU check just makes the hang less
1095          * frequent as it makes the interrupt distributon model be more
1096          * like LRU than MRU (the short-term load is more even across CPUs).
1097          * See also the comment in end_level_ioapic_irq().  --macro
1098          */
1099
1100         /* Enable focus processor (bit==0) */
1101         value &= ~APIC_SPIV_FOCUS_DISABLED;
1102
1103         /*
1104          * Set spurious IRQ vector
1105          */
1106         value |= SPURIOUS_APIC_VECTOR;
1107         apic_write(APIC_SPIV, value);
1108
1109         /*
1110          * Set up LVT0, LVT1:
1111          *
1112          * set up through-local-APIC on the BP's LINT0. This is not
1113          * strictly necessary in pure symmetric-IO mode, but sometimes
1114          * we delegate interrupts to the 8259A.
1115          */
1116         /*
1117          * TODO: set up through-local-APIC from through-I/O-APIC? --macro
1118          */
1119         value = apic_read(APIC_LVT0) & APIC_LVT_MASKED;
1120         if (!smp_processor_id() && (pic_mode || !value)) {
1121                 value = APIC_DM_EXTINT;
1122                 apic_printk(APIC_VERBOSE, "enabled ExtINT on CPU#%d\n",
1123                                 smp_processor_id());
1124         } else {
1125                 value = APIC_DM_EXTINT | APIC_LVT_MASKED;
1126                 apic_printk(APIC_VERBOSE, "masked ExtINT on CPU#%d\n",
1127                                 smp_processor_id());
1128         }
1129         apic_write(APIC_LVT0, value);
1130
1131         /*
1132          * only the BP should see the LINT1 NMI signal, obviously.
1133          */
1134         if (!smp_processor_id())
1135                 value = APIC_DM_NMI;
1136         else
1137                 value = APIC_DM_NMI | APIC_LVT_MASKED;
1138         if (!integrated)                /* 82489DX */
1139                 value |= APIC_LVT_LEVEL_TRIGGER;
1140         apic_write(APIC_LVT1, value);
1141 }
1142
1143 void __cpuinit end_local_APIC_setup(void)
1144 {
1145         unsigned long value;
1146
1147         lapic_setup_esr();
1148         /* Disable the local apic timer */
1149         value = apic_read(APIC_LVTT);
1150         value |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
1151         apic_write(APIC_LVTT, value);
1152
1153         setup_apic_nmi_watchdog(NULL);
1154         apic_pm_activate();
1155 }
1156
1157 /*
1158  * Detect and initialize APIC
1159  */
1160 static int __init detect_init_APIC(void)
1161 {
1162         u32 h, l, features;
1163
1164         /* Disabled by kernel option? */
1165         if (disable_apic)
1166                 return -1;
1167
1168         switch (boot_cpu_data.x86_vendor) {
1169         case X86_VENDOR_AMD:
1170                 if ((boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model > 1) ||
1171                     (boot_cpu_data.x86 == 15))
1172                         break;
1173                 goto no_apic;
1174         case X86_VENDOR_INTEL:
1175                 if (boot_cpu_data.x86 == 6 || boot_cpu_data.x86 == 15 ||
1176                     (boot_cpu_data.x86 == 5 && cpu_has_apic))
1177                         break;
1178                 goto no_apic;
1179         default:
1180                 goto no_apic;
1181         }
1182
1183         if (!cpu_has_apic) {
1184                 /*
1185                  * Over-ride BIOS and try to enable the local APIC only if
1186                  * "lapic" specified.
1187                  */
1188                 if (!force_enable_local_apic) {
1189                         printk(KERN_INFO "Local APIC disabled by BIOS -- "
1190                                "you can enable it with \"lapic\"\n");
1191                         return -1;
1192                 }
1193                 /*
1194                  * Some BIOSes disable the local APIC in the APIC_BASE
1195                  * MSR. This can only be done in software for Intel P6 or later
1196                  * and AMD K7 (Model > 1) or later.
1197                  */
1198                 rdmsr(MSR_IA32_APICBASE, l, h);
1199                 if (!(l & MSR_IA32_APICBASE_ENABLE)) {
1200                         printk(KERN_INFO
1201                                "Local APIC disabled by BIOS -- reenabling.\n");
1202                         l &= ~MSR_IA32_APICBASE_BASE;
1203                         l |= MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE;
1204                         wrmsr(MSR_IA32_APICBASE, l, h);
1205                         enabled_via_apicbase = 1;
1206                 }
1207         }
1208         /*
1209          * The APIC feature bit should now be enabled
1210          * in `cpuid'
1211          */
1212         features = cpuid_edx(1);
1213         if (!(features & (1 << X86_FEATURE_APIC))) {
1214                 printk(KERN_WARNING "Could not enable APIC!\n");
1215                 return -1;
1216         }
1217         set_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
1218         mp_lapic_addr = APIC_DEFAULT_PHYS_BASE;
1219
1220         /* The BIOS may have set up the APIC at some other address */
1221         rdmsr(MSR_IA32_APICBASE, l, h);
1222         if (l & MSR_IA32_APICBASE_ENABLE)
1223                 mp_lapic_addr = l & MSR_IA32_APICBASE_BASE;
1224
1225         printk(KERN_INFO "Found and enabled local APIC!\n");
1226
1227         apic_pm_activate();
1228
1229         return 0;
1230
1231 no_apic:
1232         printk(KERN_INFO "No local APIC present or hardware disabled\n");
1233         return -1;
1234 }
1235
1236 /**
1237  * init_apic_mappings - initialize APIC mappings
1238  */
1239 void __init init_apic_mappings(void)
1240 {
1241         /*
1242          * If no local APIC can be found then set up a fake all
1243          * zeroes page to simulate the local APIC and another
1244          * one for the IO-APIC.
1245          */
1246         if (!smp_found_config && detect_init_APIC()) {
1247                 apic_phys = (unsigned long) alloc_bootmem_pages(PAGE_SIZE);
1248                 apic_phys = __pa(apic_phys);
1249         } else
1250                 apic_phys = mp_lapic_addr;
1251
1252         set_fixmap_nocache(FIX_APIC_BASE, apic_phys);
1253         printk(KERN_DEBUG "mapped APIC to %08lx (%08lx)\n", APIC_BASE,
1254                apic_phys);
1255
1256         /*
1257          * Fetch the APIC ID of the BSP in case we have a
1258          * default configuration (or the MP table is broken).
1259          */
1260         if (boot_cpu_physical_apicid == -1U)
1261                 boot_cpu_physical_apicid = read_apic_id();
1262
1263 }
1264
1265 /*
1266  * This initializes the IO-APIC and APIC hardware if this is
1267  * a UP kernel.
1268  */
1269
1270 int apic_version[MAX_APICS];
1271
1272 int __init APIC_init_uniprocessor(void)
1273 {
1274         if (!smp_found_config && !cpu_has_apic)
1275                 return -1;
1276
1277         /*
1278          * Complain if the BIOS pretends there is one.
1279          */
1280         if (!cpu_has_apic &&
1281             APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
1282                 printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n",
1283                        boot_cpu_physical_apicid);
1284                 clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
1285                 return -1;
1286         }
1287
1288         verify_local_APIC();
1289
1290         connect_bsp_APIC();
1291
1292         /*
1293          * Hack: In case of kdump, after a crash, kernel might be booting
1294          * on a cpu with non-zero lapic id. But boot_cpu_physical_apicid
1295          * might be zero if read from MP tables. Get it from LAPIC.
1296          */
1297 #ifdef CONFIG_CRASH_DUMP
1298         boot_cpu_physical_apicid = read_apic_id();
1299 #endif
1300         physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map);
1301
1302         setup_local_APIC();
1303
1304 #ifdef CONFIG_X86_IO_APIC
1305         if (!smp_found_config || skip_ioapic_setup || !nr_ioapics)
1306 #endif
1307                 localise_nmi_watchdog();
1308         end_local_APIC_setup();
1309 #ifdef CONFIG_X86_IO_APIC
1310         if (smp_found_config)
1311                 if (!skip_ioapic_setup && nr_ioapics)
1312                         setup_IO_APIC();
1313 #endif
1314         setup_boot_clock();
1315
1316         return 0;
1317 }
1318
1319 /*
1320  * Local APIC interrupts
1321  */
1322
1323 /*
1324  * This interrupt should _never_ happen with our APIC/SMP architecture
1325  */
1326 void smp_spurious_interrupt(struct pt_regs *regs)
1327 {
1328         unsigned long v;
1329
1330         irq_enter();
1331         /*
1332          * Check if this really is a spurious interrupt and ACK it
1333          * if it is a vectored one.  Just in case...
1334          * Spurious interrupts should not be ACKed.
1335          */
1336         v = apic_read(APIC_ISR + ((SPURIOUS_APIC_VECTOR & ~0x1f) >> 1));
1337         if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f)))
1338                 ack_APIC_irq();
1339
1340         /* see sw-dev-man vol 3, chapter 7.4.13.5 */
1341         printk(KERN_INFO "spurious APIC interrupt on CPU#%d, "
1342                "should never happen.\n", smp_processor_id());
1343         __get_cpu_var(irq_stat).irq_spurious_count++;
1344         irq_exit();
1345 }
1346
1347 /*
1348  * This interrupt should never happen with our APIC/SMP architecture
1349  */
1350 void smp_error_interrupt(struct pt_regs *regs)
1351 {
1352         unsigned long v, v1;
1353
1354         irq_enter();
1355         /* First tickle the hardware, only then report what went on. -- REW */
1356         v = apic_read(APIC_ESR);
1357         apic_write(APIC_ESR, 0);
1358         v1 = apic_read(APIC_ESR);
1359         ack_APIC_irq();
1360         atomic_inc(&irq_err_count);
1361
1362         /* Here is what the APIC error bits mean:
1363            0: Send CS error
1364            1: Receive CS error
1365            2: Send accept error
1366            3: Receive accept error
1367            4: Reserved
1368            5: Send illegal vector
1369            6: Received illegal vector
1370            7: Illegal register address
1371         */
1372         printk(KERN_DEBUG "APIC error on CPU%d: %02lx(%02lx)\n",
1373                 smp_processor_id(), v , v1);
1374         irq_exit();
1375 }
1376
1377 /**
1378  * connect_bsp_APIC - attach the APIC to the interrupt system
1379  */
1380 void __init connect_bsp_APIC(void)
1381 {
1382         if (pic_mode) {
1383                 /*
1384                  * Do not trust the local APIC being empty at bootup.
1385                  */
1386                 clear_local_APIC();
1387                 /*
1388                  * PIC mode, enable APIC mode in the IMCR, i.e.  connect BSP's
1389                  * local APIC to INT and NMI lines.
1390                  */
1391                 apic_printk(APIC_VERBOSE, "leaving PIC mode, "
1392                                 "enabling APIC mode.\n");
1393                 outb(0x70, 0x22);
1394                 outb(0x01, 0x23);
1395         }
1396         enable_apic_mode();
1397 }
1398
1399 /**
1400  * disconnect_bsp_APIC - detach the APIC from the interrupt system
1401  * @virt_wire_setup:    indicates, whether virtual wire mode is selected
1402  *
1403  * Virtual wire mode is necessary to deliver legacy interrupts even when the
1404  * APIC is disabled.
1405  */
1406 void disconnect_bsp_APIC(int virt_wire_setup)
1407 {
1408         if (pic_mode) {
1409                 /*
1410                  * Put the board back into PIC mode (has an effect only on
1411                  * certain older boards).  Note that APIC interrupts, including
1412                  * IPIs, won't work beyond this point!  The only exception are
1413                  * INIT IPIs.
1414                  */
1415                 apic_printk(APIC_VERBOSE, "disabling APIC mode, "
1416                                 "entering PIC mode.\n");
1417                 outb(0x70, 0x22);
1418                 outb(0x00, 0x23);
1419         } else {
1420                 /* Go back to Virtual Wire compatibility mode */
1421                 unsigned long value;
1422
1423                 /* For the spurious interrupt use vector F, and enable it */
1424                 value = apic_read(APIC_SPIV);
1425                 value &= ~APIC_VECTOR_MASK;
1426                 value |= APIC_SPIV_APIC_ENABLED;
1427                 value |= 0xf;
1428                 apic_write(APIC_SPIV, value);
1429
1430                 if (!virt_wire_setup) {
1431                         /*
1432                          * For LVT0 make it edge triggered, active high,
1433                          * external and enabled
1434                          */
1435                         value = apic_read(APIC_LVT0);
1436                         value &= ~(APIC_MODE_MASK | APIC_SEND_PENDING |
1437                                 APIC_INPUT_POLARITY | APIC_LVT_REMOTE_IRR |
1438                                 APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED);
1439                         value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING;
1440                         value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_EXTINT);
1441                         apic_write(APIC_LVT0, value);
1442                 } else {
1443                         /* Disable LVT0 */
1444                         apic_write(APIC_LVT0, APIC_LVT_MASKED);
1445                 }
1446
1447                 /*
1448                  * For LVT1 make it edge triggered, active high, nmi and
1449                  * enabled
1450                  */
1451                 value = apic_read(APIC_LVT1);
1452                 value &= ~(
1453                         APIC_MODE_MASK | APIC_SEND_PENDING |
1454                         APIC_INPUT_POLARITY | APIC_LVT_REMOTE_IRR |
1455                         APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED);
1456                 value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING;
1457                 value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_NMI);
1458                 apic_write(APIC_LVT1, value);
1459         }
1460 }
1461
1462 unsigned int __cpuinitdata maxcpus = NR_CPUS;
1463
1464 void __cpuinit generic_processor_info(int apicid, int version)
1465 {
1466         int cpu;
1467         cpumask_t tmp_map;
1468         physid_mask_t phys_cpu;
1469
1470         /*
1471          * Validate version
1472          */
1473         if (version == 0x0) {
1474                 printk(KERN_WARNING "BIOS bug, APIC version is 0 for CPU#%d! "
1475                                 "fixing up to 0x10. (tell your hw vendor)\n",
1476                                 version);
1477                 version = 0x10;
1478         }
1479         apic_version[apicid] = version;
1480
1481         phys_cpu = apicid_to_cpu_present(apicid);
1482         physids_or(phys_cpu_present_map, phys_cpu_present_map, phys_cpu);
1483
1484         if (num_processors >= NR_CPUS) {
1485                 printk(KERN_WARNING "WARNING: NR_CPUS limit of %i reached."
1486                         "  Processor ignored.\n", NR_CPUS);
1487                 return;
1488         }
1489
1490         if (num_processors >= maxcpus) {
1491                 printk(KERN_WARNING "WARNING: maxcpus limit of %i reached."
1492                         " Processor ignored.\n", maxcpus);
1493                 return;
1494         }
1495
1496         num_processors++;
1497         cpus_complement(tmp_map, cpu_present_map);
1498         cpu = first_cpu(tmp_map);
1499
1500         if (apicid == boot_cpu_physical_apicid)
1501                 /*
1502                  * x86_bios_cpu_apicid is required to have processors listed
1503                  * in same order as logical cpu numbers. Hence the first
1504                  * entry is BSP, and so on.
1505                  */
1506                 cpu = 0;
1507
1508         if (apicid > max_physical_apicid)
1509                 max_physical_apicid = apicid;
1510
1511         /*
1512          * Would be preferable to switch to bigsmp when CONFIG_HOTPLUG_CPU=y
1513          * but we need to work other dependencies like SMP_SUSPEND etc
1514          * before this can be done without some confusion.
1515          * if (CPU_HOTPLUG_ENABLED || num_processors > 8)
1516          *       - Ashok Raj <ashok.raj@intel.com>
1517          */
1518         if (max_physical_apicid >= 8) {
1519                 switch (boot_cpu_data.x86_vendor) {
1520                 case X86_VENDOR_INTEL:
1521                         if (!APIC_XAPIC(version)) {
1522                                 def_to_bigsmp = 0;
1523                                 break;
1524                         }
1525                         /* If P4 and above fall through */
1526                 case X86_VENDOR_AMD:
1527                         def_to_bigsmp = 1;
1528                 }
1529         }
1530 #ifdef CONFIG_SMP
1531         /* are we being called early in kernel startup? */
1532         if (early_per_cpu_ptr(x86_cpu_to_apicid)) {
1533                 u16 *cpu_to_apicid = early_per_cpu_ptr(x86_cpu_to_apicid);
1534                 u16 *bios_cpu_apicid = early_per_cpu_ptr(x86_bios_cpu_apicid);
1535
1536                 cpu_to_apicid[cpu] = apicid;
1537                 bios_cpu_apicid[cpu] = apicid;
1538         } else {
1539                 per_cpu(x86_cpu_to_apicid, cpu) = apicid;
1540                 per_cpu(x86_bios_cpu_apicid, cpu) = apicid;
1541         }
1542 #endif
1543         cpu_set(cpu, cpu_possible_map);
1544         cpu_set(cpu, cpu_present_map);
1545 }
1546
1547 /*
1548  * Power management
1549  */
1550 #ifdef CONFIG_PM
1551
1552 static struct {
1553         /*
1554          * 'active' is true if the local APIC was enabled by us and
1555          * not the BIOS; this signifies that we are also responsible
1556          * for disabling it before entering apm/acpi suspend
1557          */
1558         int active;
1559         /* r/w apic fields */
1560         unsigned int apic_id;
1561         unsigned int apic_taskpri;
1562         unsigned int apic_ldr;
1563         unsigned int apic_dfr;
1564         unsigned int apic_spiv;
1565         unsigned int apic_lvtt;
1566         unsigned int apic_lvtpc;
1567         unsigned int apic_lvt0;
1568         unsigned int apic_lvt1;
1569         unsigned int apic_lvterr;
1570         unsigned int apic_tmict;
1571         unsigned int apic_tdcr;
1572         unsigned int apic_thmr;
1573 } apic_pm_state;
1574
1575 static int lapic_suspend(struct sys_device *dev, pm_message_t state)
1576 {
1577         unsigned long flags;
1578         int maxlvt;
1579
1580         if (!apic_pm_state.active)
1581                 return 0;
1582
1583         maxlvt = lapic_get_maxlvt();
1584
1585         apic_pm_state.apic_id = apic_read(APIC_ID);
1586         apic_pm_state.apic_taskpri = apic_read(APIC_TASKPRI);
1587         apic_pm_state.apic_ldr = apic_read(APIC_LDR);
1588         apic_pm_state.apic_dfr = apic_read(APIC_DFR);
1589         apic_pm_state.apic_spiv = apic_read(APIC_SPIV);
1590         apic_pm_state.apic_lvtt = apic_read(APIC_LVTT);
1591         if (maxlvt >= 4)
1592                 apic_pm_state.apic_lvtpc = apic_read(APIC_LVTPC);
1593         apic_pm_state.apic_lvt0 = apic_read(APIC_LVT0);
1594         apic_pm_state.apic_lvt1 = apic_read(APIC_LVT1);
1595         apic_pm_state.apic_lvterr = apic_read(APIC_LVTERR);
1596         apic_pm_state.apic_tmict = apic_read(APIC_TMICT);
1597         apic_pm_state.apic_tdcr = apic_read(APIC_TDCR);
1598 #if defined(CONFIG_X86_MCE_P4THERMAL) || defined(CONFIG_X86_MCE_INTEL)
1599         if (maxlvt >= 5)
1600                 apic_pm_state.apic_thmr = apic_read(APIC_LVTTHMR);
1601 #endif
1602
1603         local_irq_save(flags);
1604         disable_local_APIC();
1605         local_irq_restore(flags);
1606         return 0;
1607 }
1608
1609 static int lapic_resume(struct sys_device *dev)
1610 {
1611         unsigned int l, h;
1612         unsigned long flags;
1613         int maxlvt;
1614
1615         if (!apic_pm_state.active)
1616                 return 0;
1617
1618         maxlvt = lapic_get_maxlvt();
1619
1620         local_irq_save(flags);
1621
1622 #ifdef CONFIG_X86_64
1623         if (x2apic)
1624                 enable_x2apic();
1625         else
1626 #endif
1627                 /*
1628                  * Make sure the APICBASE points to the right address
1629                  *
1630                  * FIXME! This will be wrong if we ever support suspend on
1631                  * SMP! We'll need to do this as part of the CPU restore!
1632                  */
1633                 rdmsr(MSR_IA32_APICBASE, l, h);
1634                 l &= ~MSR_IA32_APICBASE_BASE;
1635                 l |= MSR_IA32_APICBASE_ENABLE | mp_lapic_addr;
1636                 wrmsr(MSR_IA32_APICBASE, l, h);
1637
1638         apic_write(APIC_LVTERR, ERROR_APIC_VECTOR | APIC_LVT_MASKED);
1639         apic_write(APIC_ID, apic_pm_state.apic_id);
1640         apic_write(APIC_DFR, apic_pm_state.apic_dfr);
1641         apic_write(APIC_LDR, apic_pm_state.apic_ldr);
1642         apic_write(APIC_TASKPRI, apic_pm_state.apic_taskpri);
1643         apic_write(APIC_SPIV, apic_pm_state.apic_spiv);
1644         apic_write(APIC_LVT0, apic_pm_state.apic_lvt0);
1645         apic_write(APIC_LVT1, apic_pm_state.apic_lvt1);
1646 #if defined(CONFIG_X86_MCE_P4THERMAL) || defined(CONFIG_X86_MCE_INTEL)
1647         if (maxlvt >= 5)
1648                 apic_write(APIC_LVTTHMR, apic_pm_state.apic_thmr);
1649 #endif
1650         if (maxlvt >= 4)
1651                 apic_write(APIC_LVTPC, apic_pm_state.apic_lvtpc);
1652         apic_write(APIC_LVTT, apic_pm_state.apic_lvtt);
1653         apic_write(APIC_TDCR, apic_pm_state.apic_tdcr);
1654         apic_write(APIC_TMICT, apic_pm_state.apic_tmict);
1655         apic_write(APIC_ESR, 0);
1656         apic_read(APIC_ESR);
1657         apic_write(APIC_LVTERR, apic_pm_state.apic_lvterr);
1658         apic_write(APIC_ESR, 0);
1659         apic_read(APIC_ESR);
1660
1661         local_irq_restore(flags);
1662
1663         return 0;
1664 }
1665
1666 /*
1667  * This device has no shutdown method - fully functioning local APICs
1668  * are needed on every CPU up until machine_halt/restart/poweroff.
1669  */
1670
1671 static struct sysdev_class lapic_sysclass = {
1672         .name           = "lapic",
1673         .resume         = lapic_resume,
1674         .suspend        = lapic_suspend,
1675 };
1676
1677 static struct sys_device device_lapic = {
1678         .id     = 0,
1679         .cls    = &lapic_sysclass,
1680 };
1681
1682 static void __devinit apic_pm_activate(void)
1683 {
1684         apic_pm_state.active = 1;
1685 }
1686
1687 static int __init init_lapic_sysfs(void)
1688 {
1689         int error;
1690
1691         if (!cpu_has_apic)
1692                 return 0;
1693         /* XXX: remove suspend/resume procs if !apic_pm_state.active? */
1694
1695         error = sysdev_class_register(&lapic_sysclass);
1696         if (!error)
1697                 error = sysdev_register(&device_lapic);
1698         return error;
1699 }
1700 device_initcall(init_lapic_sysfs);
1701
1702 #else   /* CONFIG_PM */
1703
1704 static void apic_pm_activate(void) { }
1705
1706 #endif  /* CONFIG_PM */
1707
1708 /*
1709  * APIC command line parameters
1710  */
1711 static int __init parse_lapic(char *arg)
1712 {
1713         force_enable_local_apic = 1;
1714         return 0;
1715 }
1716 early_param("lapic", parse_lapic);
1717
1718 static int __init parse_nolapic(char *arg)
1719 {
1720         disable_apic = 1;
1721         setup_clear_cpu_cap(X86_FEATURE_APIC);
1722         return 0;
1723 }
1724 early_param("nolapic", parse_nolapic);
1725
1726 static int __init parse_disable_apic_timer(char *arg)
1727 {
1728         disable_apic_timer = 1;
1729         return 0;
1730 }
1731 early_param("noapictimer", parse_disable_apic_timer);
1732
1733 static int __init parse_nolapic_timer(char *arg)
1734 {
1735         disable_apic_timer = 1;
1736         return 0;
1737 }
1738 early_param("nolapic_timer", parse_nolapic_timer);
1739
1740 static int __init parse_lapic_timer_c2_ok(char *arg)
1741 {
1742         local_apic_timer_c2_ok = 1;
1743         return 0;
1744 }
1745 early_param("lapic_timer_c2_ok", parse_lapic_timer_c2_ok);
1746
1747 static int __init apic_set_verbosity(char *arg)
1748 {
1749         if (!arg)
1750                 return -EINVAL;
1751
1752         if (strcmp(arg, "debug") == 0)
1753                 apic_verbosity = APIC_DEBUG;
1754         else if (strcmp(arg, "verbose") == 0)
1755                 apic_verbosity = APIC_VERBOSE;
1756
1757         return 0;
1758 }
1759 early_param("apic", apic_set_verbosity);
1760
1761 static int __init lapic_insert_resource(void)
1762 {
1763         if (!apic_phys)
1764                 return -1;
1765
1766         /* Put local APIC into the resource map. */
1767         lapic_resource.start = apic_phys;
1768         lapic_resource.end = lapic_resource.start + PAGE_SIZE - 1;
1769         insert_resource(&iomem_resource, &lapic_resource);
1770
1771         return 0;
1772 }
1773
1774 /*
1775  * need call insert after e820_reserve_resources()
1776  * that is using request_resource
1777  */
1778 late_initcall(lapic_insert_resource);