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