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