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