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