x86: io_apic: Split setup_ioapic_ids_from_mpc()
[deliverable/linux.git] / arch / x86 / kernel / apic / apic.c
CommitLineData
1da177e4
LT
1/*
2 * Local APIC handling, local APIC timers
3 *
8f47e163 4 * (c) 1999, 2000, 2009 Ingo Molnar <mingo@redhat.com>
1da177e4
LT
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
cdd6c482 17#include <linux/perf_event.h>
1da177e4 18#include <linux/kernel_stat.h>
d1de36f5 19#include <linux/mc146818rtc.h>
70a20025 20#include <linux/acpi_pmtmr.h>
d1de36f5
IM
21#include <linux/clockchips.h>
22#include <linux/interrupt.h>
23#include <linux/bootmem.h>
24#include <linux/ftrace.h>
25#include <linux/ioport.h>
e83a5fdc 26#include <linux/module.h>
d1de36f5
IM
27#include <linux/sysdev.h>
28#include <linux/delay.h>
29#include <linux/timex.h>
6e1cb38a 30#include <linux/dmar.h>
d1de36f5
IM
31#include <linux/init.h>
32#include <linux/cpu.h>
33#include <linux/dmi.h>
e423e33e 34#include <linux/nmi.h>
d1de36f5
IM
35#include <linux/smp.h>
36#include <linux/mm.h>
1da177e4 37
cdd6c482 38#include <asm/perf_event.h>
736decac 39#include <asm/x86_init.h>
1da177e4 40#include <asm/pgalloc.h>
1da177e4 41#include <asm/atomic.h>
1da177e4 42#include <asm/mpspec.h>
773763df 43#include <asm/i8253.h>
d1de36f5 44#include <asm/i8259.h>
73dea47f 45#include <asm/proto.h>
2c8c0e6b 46#include <asm/apic.h>
d1de36f5
IM
47#include <asm/desc.h>
48#include <asm/hpet.h>
49#include <asm/idle.h>
50#include <asm/mtrr.h>
2bc13797 51#include <asm/smp.h>
be71b855 52#include <asm/mce.h>
ce69a784 53#include <asm/kvm_para.h>
8c3ba8d0 54#include <asm/tsc.h>
a68c439b 55#include <asm/atomic.h>
1da177e4 56
ec70de8b 57unsigned int num_processors;
fdbecd9f 58
ec70de8b 59unsigned disabled_cpus __cpuinitdata;
fdbecd9f 60
ec70de8b
BG
61/* Processor that is doing the boot up */
62unsigned int boot_cpu_physical_apicid = -1U;
5af5573e 63
80e5609c 64/*
fdbecd9f 65 * The highest APIC ID seen during enumeration.
80e5609c 66 */
ec70de8b 67unsigned int max_physical_apicid;
5af5573e 68
80e5609c 69/*
fdbecd9f 70 * Bitmask of physically existing CPUs:
80e5609c 71 */
ec70de8b
BG
72physid_mask_t phys_cpu_present_map;
73
74/*
75 * Map cpu index to physical APIC ID
76 */
77DEFINE_EARLY_PER_CPU(u16, x86_cpu_to_apicid, BAD_APICID);
78DEFINE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid, BAD_APICID);
79EXPORT_EARLY_PER_CPU_SYMBOL(x86_cpu_to_apicid);
80EXPORT_EARLY_PER_CPU_SYMBOL(x86_bios_cpu_apicid);
80e5609c 81
b3c51170
YL
82#ifdef CONFIG_X86_32
83/*
84 * Knob to control our willingness to enable the local APIC.
85 *
86 * +1=force-enable
87 */
88static int force_enable_local_apic;
89/*
90 * APIC command line parameters
91 */
92static int __init parse_lapic(char *arg)
93{
94 force_enable_local_apic = 1;
95 return 0;
96}
97early_param("lapic", parse_lapic);
f28c0ae2
YL
98/* Local APIC was disabled by the BIOS and enabled by the kernel */
99static int enabled_via_apicbase;
100
c0eaa453
CG
101/*
102 * Handle interrupt mode configuration register (IMCR).
103 * This register controls whether the interrupt signals
104 * that reach the BSP come from the master PIC or from the
105 * local APIC. Before entering Symmetric I/O Mode, either
106 * the BIOS or the operating system must switch out of
107 * PIC Mode by changing the IMCR.
108 */
5cda395f 109static inline void imcr_pic_to_apic(void)
c0eaa453
CG
110{
111 /* select IMCR register */
112 outb(0x70, 0x22);
113 /* NMI and 8259 INTR go through APIC */
114 outb(0x01, 0x23);
115}
116
5cda395f 117static inline void imcr_apic_to_pic(void)
c0eaa453
CG
118{
119 /* select IMCR register */
120 outb(0x70, 0x22);
121 /* NMI and 8259 INTR go directly to BSP */
122 outb(0x00, 0x23);
123}
b3c51170
YL
124#endif
125
126#ifdef CONFIG_X86_64
bc1d99c1 127static int apic_calibrate_pmtmr __initdata;
b3c51170
YL
128static __init int setup_apicpmtimer(char *s)
129{
130 apic_calibrate_pmtmr = 1;
131 notsc_setup(NULL);
132 return 0;
133}
134__setup("apicpmtimer", setup_apicpmtimer);
135#endif
136
fc1edaf9 137int x2apic_mode;
06cd9a7d 138#ifdef CONFIG_X86_X2APIC
6e1cb38a 139/* x2apic enabled before OS handover */
b6b301aa 140static int x2apic_preenabled;
49899eac
YL
141static __init int setup_nox2apic(char *str)
142{
39d83a5d
SS
143 if (x2apic_enabled()) {
144 pr_warning("Bios already enabled x2apic, "
145 "can't enforce nox2apic");
146 return 0;
147 }
148
49899eac
YL
149 setup_clear_cpu_cap(X86_FEATURE_X2APIC);
150 return 0;
151}
152early_param("nox2apic", setup_nox2apic);
153#endif
1da177e4 154
b3c51170
YL
155unsigned long mp_lapic_addr;
156int disable_apic;
157/* Disable local APIC timer from the kernel commandline or via dmi quirk */
158static int disable_apic_timer __cpuinitdata;
e83a5fdc 159/* Local APIC timer works in C2 */
2e7c2838
LT
160int local_apic_timer_c2_ok;
161EXPORT_SYMBOL_GPL(local_apic_timer_c2_ok);
162
efa2559f
YL
163int first_system_vector = 0xfe;
164
e83a5fdc
HS
165/*
166 * Debug level, exported for io_apic.c
167 */
baa13188 168unsigned int apic_verbosity;
e83a5fdc 169
89c38c28
CG
170int pic_mode;
171
bab4b27c
AS
172/* Have we found an MP table */
173int smp_found_config;
174
39928722
AD
175static struct resource lapic_resource = {
176 .name = "Local APIC",
177 .flags = IORESOURCE_MEM | IORESOURCE_BUSY,
178};
179
d03030e9
TG
180static unsigned int calibration_result;
181
ba7eda4c
TG
182static int lapic_next_event(unsigned long delta,
183 struct clock_event_device *evt);
184static void lapic_timer_setup(enum clock_event_mode mode,
185 struct clock_event_device *evt);
9628937d 186static void lapic_timer_broadcast(const struct cpumask *mask);
0e078e2f 187static void apic_pm_activate(void);
ba7eda4c 188
274cfe59
CG
189/*
190 * The local apic timer can be used for any function which is CPU local.
191 */
ba7eda4c
TG
192static struct clock_event_device lapic_clockevent = {
193 .name = "lapic",
194 .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT
195 | CLOCK_EVT_FEAT_C3STOP | CLOCK_EVT_FEAT_DUMMY,
196 .shift = 32,
197 .set_mode = lapic_timer_setup,
198 .set_next_event = lapic_next_event,
199 .broadcast = lapic_timer_broadcast,
200 .rating = 100,
201 .irq = -1,
202};
203static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
204
d3432896
AK
205static unsigned long apic_phys;
206
0e078e2f
TG
207/*
208 * Get the LAPIC version
209 */
210static inline int lapic_get_version(void)
ba7eda4c 211{
0e078e2f 212 return GET_APIC_VERSION(apic_read(APIC_LVR));
ba7eda4c
TG
213}
214
0e078e2f 215/*
9c803869 216 * Check, if the APIC is integrated or a separate chip
0e078e2f
TG
217 */
218static inline int lapic_is_integrated(void)
ba7eda4c 219{
9c803869 220#ifdef CONFIG_X86_64
0e078e2f 221 return 1;
9c803869
CG
222#else
223 return APIC_INTEGRATED(lapic_get_version());
224#endif
ba7eda4c
TG
225}
226
227/*
0e078e2f 228 * Check, whether this is a modern or a first generation APIC
ba7eda4c 229 */
0e078e2f 230static int modern_apic(void)
ba7eda4c 231{
0e078e2f
TG
232 /* AMD systems use old APIC versions, so check the CPU */
233 if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
234 boot_cpu_data.x86 >= 0xf)
235 return 1;
236 return lapic_get_version() >= 0x14;
ba7eda4c
TG
237}
238
08306ce6 239/*
a933c618
CG
240 * right after this call apic become NOOP driven
241 * so apic->write/read doesn't do anything
08306ce6
CG
242 */
243void apic_disable(void)
244{
f88f2b4f 245 pr_info("APIC: switched to apic NOOP\n");
a933c618 246 apic = &apic_noop;
08306ce6
CG
247}
248
c1eeb2de 249void native_apic_wait_icr_idle(void)
8339e9fb
FLV
250{
251 while (apic_read(APIC_ICR) & APIC_ICR_BUSY)
252 cpu_relax();
253}
254
c1eeb2de 255u32 native_safe_apic_wait_icr_idle(void)
8339e9fb 256{
3c6bb07a 257 u32 send_status;
8339e9fb
FLV
258 int timeout;
259
260 timeout = 0;
261 do {
262 send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
263 if (!send_status)
264 break;
265 udelay(100);
266 } while (timeout++ < 1000);
267
268 return send_status;
269}
270
c1eeb2de 271void native_apic_icr_write(u32 low, u32 id)
1b374e4d 272{
ed4e5ec1 273 apic_write(APIC_ICR2, SET_APIC_DEST_FIELD(id));
1b374e4d
SS
274 apic_write(APIC_ICR, low);
275}
276
c1eeb2de 277u64 native_apic_icr_read(void)
1b374e4d
SS
278{
279 u32 icr1, icr2;
280
281 icr2 = apic_read(APIC_ICR2);
282 icr1 = apic_read(APIC_ICR);
283
cf9768d7 284 return icr1 | ((u64)icr2 << 32);
1b374e4d
SS
285}
286
0e078e2f
TG
287/**
288 * enable_NMI_through_LVT0 - enable NMI through local vector table 0
289 */
e9427101 290void __cpuinit enable_NMI_through_LVT0(void)
1da177e4 291{
11a8e778 292 unsigned int v;
6935d1f9
TG
293
294 /* unmask and set to NMI */
295 v = APIC_DM_NMI;
d4c63ec0
CG
296
297 /* Level triggered for 82489DX (32bit mode) */
298 if (!lapic_is_integrated())
299 v |= APIC_LVT_LEVEL_TRIGGER;
300
11a8e778 301 apic_write(APIC_LVT0, v);
1da177e4
LT
302}
303
7c37e48b
CG
304#ifdef CONFIG_X86_32
305/**
306 * get_physical_broadcast - Get number of physical broadcast IDs
307 */
308int get_physical_broadcast(void)
309{
310 return modern_apic() ? 0xff : 0xf;
311}
312#endif
313
0e078e2f
TG
314/**
315 * lapic_get_maxlvt - get the maximum number of local vector table entries
316 */
37e650c7 317int lapic_get_maxlvt(void)
1da177e4 318{
36a028de 319 unsigned int v;
1da177e4
LT
320
321 v = apic_read(APIC_LVR);
36a028de
CG
322 /*
323 * - we always have APIC integrated on 64bit mode
324 * - 82489DXs do not report # of LVT entries
325 */
326 return APIC_INTEGRATED(GET_APIC_VERSION(v)) ? GET_APIC_MAXLVT(v) : 2;
1da177e4
LT
327}
328
274cfe59
CG
329/*
330 * Local APIC timer
331 */
332
c40aaec6 333/* Clock divisor */
c40aaec6 334#define APIC_DIVISOR 16
f07f4f90 335
0e078e2f
TG
336/*
337 * This function sets up the local APIC timer, with a timeout of
338 * 'clocks' APIC bus clock. During calibration we actually call
339 * this function twice on the boot CPU, once with a bogus timeout
340 * value, second time for real. The other (noncalibrating) CPUs
341 * call this function only once, with the real, calibrated value.
342 *
343 * We do reads before writes even if unnecessary, to get around the
344 * P5 APIC double write bug.
345 */
0e078e2f 346static void __setup_APIC_LVTT(unsigned int clocks, int oneshot, int irqen)
1da177e4 347{
0e078e2f 348 unsigned int lvtt_value, tmp_value;
1da177e4 349
0e078e2f
TG
350 lvtt_value = LOCAL_TIMER_VECTOR;
351 if (!oneshot)
352 lvtt_value |= APIC_LVT_TIMER_PERIODIC;
f07f4f90
CG
353 if (!lapic_is_integrated())
354 lvtt_value |= SET_APIC_TIMER_BASE(APIC_TIMER_BASE_DIV);
355
0e078e2f
TG
356 if (!irqen)
357 lvtt_value |= APIC_LVT_MASKED;
1da177e4 358
0e078e2f 359 apic_write(APIC_LVTT, lvtt_value);
1da177e4
LT
360
361 /*
0e078e2f 362 * Divide PICLK by 16
1da177e4 363 */
0e078e2f 364 tmp_value = apic_read(APIC_TDCR);
c40aaec6
CG
365 apic_write(APIC_TDCR,
366 (tmp_value & ~(APIC_TDR_DIV_1 | APIC_TDR_DIV_TMBASE)) |
367 APIC_TDR_DIV_16);
0e078e2f
TG
368
369 if (!oneshot)
f07f4f90 370 apic_write(APIC_TMICT, clocks / APIC_DIVISOR);
1da177e4
LT
371}
372
0e078e2f 373/*
a68c439b 374 * Setup extended LVT, AMD specific
7b83dae7 375 *
a68c439b
RR
376 * Software should use the LVT offsets the BIOS provides. The offsets
377 * are determined by the subsystems using it like those for MCE
378 * threshold or IBS. On K8 only offset 0 (APIC500) and MCE interrupts
379 * are supported. Beginning with family 10h at least 4 offsets are
380 * available.
286f5718 381 *
a68c439b
RR
382 * Since the offsets must be consistent for all cores, we keep track
383 * of the LVT offsets in software and reserve the offset for the same
384 * vector also to be used on other cores. An offset is freed by
385 * setting the entry to APIC_EILVT_MASKED.
386 *
387 * If the BIOS is right, there should be no conflicts. Otherwise a
388 * "[Firmware Bug]: ..." error message is generated. However, if
389 * software does not properly determines the offsets, it is not
390 * necessarily a BIOS bug.
0e078e2f 391 */
7b83dae7 392
a68c439b
RR
393static atomic_t eilvt_offsets[APIC_EILVT_NR_MAX];
394
395static inline int eilvt_entry_is_changeable(unsigned int old, unsigned int new)
396{
397 return (old & APIC_EILVT_MASKED)
398 || (new == APIC_EILVT_MASKED)
399 || ((new & ~APIC_EILVT_MASKED) == old);
400}
401
402static unsigned int reserve_eilvt_offset(int offset, unsigned int new)
403{
404 unsigned int rsvd; /* 0: uninitialized */
405
406 if (offset >= APIC_EILVT_NR_MAX)
407 return ~0;
408
409 rsvd = atomic_read(&eilvt_offsets[offset]) & ~APIC_EILVT_MASKED;
410 do {
411 if (rsvd &&
412 !eilvt_entry_is_changeable(rsvd, new))
413 /* may not change if vectors are different */
414 return rsvd;
415 rsvd = atomic_cmpxchg(&eilvt_offsets[offset], rsvd, new);
416 } while (rsvd != new);
417
418 return new;
419}
420
421/*
422 * If mask=1, the LVT entry does not generate interrupts while mask=0
423 * enables the vector. See also the BKDGs.
424 */
425
27afdf20 426int setup_APIC_eilvt(u8 offset, u8 vector, u8 msg_type, u8 mask)
1da177e4 427{
a68c439b
RR
428 unsigned long reg = APIC_EILVTn(offset);
429 unsigned int new, old, reserved;
430
431 new = (mask << 16) | (msg_type << 8) | vector;
432 old = apic_read(reg);
433 reserved = reserve_eilvt_offset(offset, new);
434
435 if (reserved != new) {
436 pr_err(FW_BUG "cpu %d, try to setup vector 0x%x, but "
437 "vector 0x%x was already reserved by another core, "
438 "APIC%lX=0x%x\n",
439 smp_processor_id(), new, reserved, reg, old);
440 return -EINVAL;
441 }
442
443 if (!eilvt_entry_is_changeable(old, new)) {
444 pr_err(FW_BUG "cpu %d, try to setup vector 0x%x but "
445 "register already in use, APIC%lX=0x%x\n",
446 smp_processor_id(), new, reg, old);
447 return -EBUSY;
448 }
449
450 apic_write(reg, new);
a8fcf1a2 451
a68c439b 452 return 0;
1da177e4 453}
27afdf20 454EXPORT_SYMBOL_GPL(setup_APIC_eilvt);
7b83dae7 455
0e078e2f
TG
456/*
457 * Program the next event, relative to now
458 */
459static int lapic_next_event(unsigned long delta,
460 struct clock_event_device *evt)
1da177e4 461{
0e078e2f
TG
462 apic_write(APIC_TMICT, delta);
463 return 0;
1da177e4
LT
464}
465
0e078e2f
TG
466/*
467 * Setup the lapic timer in periodic or oneshot mode
468 */
469static void lapic_timer_setup(enum clock_event_mode mode,
470 struct clock_event_device *evt)
9b7711f0
HS
471{
472 unsigned long flags;
0e078e2f 473 unsigned int v;
9b7711f0 474
0e078e2f
TG
475 /* Lapic used as dummy for broadcast ? */
476 if (evt->features & CLOCK_EVT_FEAT_DUMMY)
9b7711f0
HS
477 return;
478
479 local_irq_save(flags);
480
0e078e2f
TG
481 switch (mode) {
482 case CLOCK_EVT_MODE_PERIODIC:
483 case CLOCK_EVT_MODE_ONESHOT:
484 __setup_APIC_LVTT(calibration_result,
485 mode != CLOCK_EVT_MODE_PERIODIC, 1);
486 break;
487 case CLOCK_EVT_MODE_UNUSED:
488 case CLOCK_EVT_MODE_SHUTDOWN:
489 v = apic_read(APIC_LVTT);
490 v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
491 apic_write(APIC_LVTT, v);
6f9b4100 492 apic_write(APIC_TMICT, 0);
0e078e2f
TG
493 break;
494 case CLOCK_EVT_MODE_RESUME:
495 /* Nothing to do here */
496 break;
497 }
9b7711f0
HS
498
499 local_irq_restore(flags);
500}
501
1da177e4 502/*
0e078e2f 503 * Local APIC timer broadcast function
1da177e4 504 */
9628937d 505static void lapic_timer_broadcast(const struct cpumask *mask)
1da177e4 506{
0e078e2f 507#ifdef CONFIG_SMP
dac5f412 508 apic->send_IPI_mask(mask, LOCAL_TIMER_VECTOR);
0e078e2f
TG
509#endif
510}
1da177e4 511
0e078e2f 512/*
421f91d2 513 * Setup the local APIC timer for this CPU. Copy the initialized values
0e078e2f
TG
514 * of the boot CPU and register the clock event in the framework.
515 */
db4b5525 516static void __cpuinit setup_APIC_timer(void)
0e078e2f
TG
517{
518 struct clock_event_device *levt = &__get_cpu_var(lapic_events);
1da177e4 519
db954b58
VP
520 if (cpu_has(&current_cpu_data, X86_FEATURE_ARAT)) {
521 lapic_clockevent.features &= ~CLOCK_EVT_FEAT_C3STOP;
522 /* Make LAPIC timer preferrable over percpu HPET */
523 lapic_clockevent.rating = 150;
524 }
525
0e078e2f 526 memcpy(levt, &lapic_clockevent, sizeof(*levt));
320ab2b0 527 levt->cpumask = cpumask_of(smp_processor_id());
1da177e4 528
0e078e2f
TG
529 clockevents_register_device(levt);
530}
1da177e4 531
2f04fa88
YL
532/*
533 * In this functions we calibrate APIC bus clocks to the external timer.
534 *
535 * We want to do the calibration only once since we want to have local timer
536 * irqs syncron. CPUs connected by the same APIC bus have the very same bus
537 * frequency.
538 *
539 * This was previously done by reading the PIT/HPET and waiting for a wrap
540 * around to find out, that a tick has elapsed. I have a box, where the PIT
541 * readout is broken, so it never gets out of the wait loop again. This was
542 * also reported by others.
543 *
544 * Monitoring the jiffies value is inaccurate and the clockevents
545 * infrastructure allows us to do a simple substitution of the interrupt
546 * handler.
547 *
548 * The calibration routine also uses the pm_timer when possible, as the PIT
549 * happens to run way too slow (factor 2.3 on my VAIO CoreDuo, which goes
550 * back to normal later in the boot process).
551 */
552
553#define LAPIC_CAL_LOOPS (HZ/10)
554
555static __initdata int lapic_cal_loops = -1;
556static __initdata long lapic_cal_t1, lapic_cal_t2;
557static __initdata unsigned long long lapic_cal_tsc1, lapic_cal_tsc2;
558static __initdata unsigned long lapic_cal_pm1, lapic_cal_pm2;
559static __initdata unsigned long lapic_cal_j1, lapic_cal_j2;
560
561/*
562 * Temporary interrupt handler.
563 */
564static void __init lapic_cal_handler(struct clock_event_device *dev)
565{
566 unsigned long long tsc = 0;
567 long tapic = apic_read(APIC_TMCCT);
568 unsigned long pm = acpi_pm_read_early();
569
570 if (cpu_has_tsc)
571 rdtscll(tsc);
572
573 switch (lapic_cal_loops++) {
574 case 0:
575 lapic_cal_t1 = tapic;
576 lapic_cal_tsc1 = tsc;
577 lapic_cal_pm1 = pm;
578 lapic_cal_j1 = jiffies;
579 break;
580
581 case LAPIC_CAL_LOOPS:
582 lapic_cal_t2 = tapic;
583 lapic_cal_tsc2 = tsc;
584 if (pm < lapic_cal_pm1)
585 pm += ACPI_PM_OVRRUN;
586 lapic_cal_pm2 = pm;
587 lapic_cal_j2 = jiffies;
588 break;
589 }
590}
591
754ef0cd
YI
592static int __init
593calibrate_by_pmtimer(long deltapm, long *delta, long *deltatsc)
b189892d
CG
594{
595 const long pm_100ms = PMTMR_TICKS_PER_SEC / 10;
596 const long pm_thresh = pm_100ms / 100;
597 unsigned long mult;
598 u64 res;
599
600#ifndef CONFIG_X86_PM_TIMER
601 return -1;
602#endif
603
39ba5d43 604 apic_printk(APIC_VERBOSE, "... PM-Timer delta = %ld\n", deltapm);
b189892d
CG
605
606 /* Check, if the PM timer is available */
607 if (!deltapm)
608 return -1;
609
610 mult = clocksource_hz2mult(PMTMR_TICKS_PER_SEC, 22);
611
612 if (deltapm > (pm_100ms - pm_thresh) &&
613 deltapm < (pm_100ms + pm_thresh)) {
39ba5d43 614 apic_printk(APIC_VERBOSE, "... PM-Timer result ok\n");
754ef0cd
YI
615 return 0;
616 }
617
618 res = (((u64)deltapm) * mult) >> 22;
619 do_div(res, 1000000);
620 pr_warning("APIC calibration not consistent "
39ba5d43 621 "with PM-Timer: %ldms instead of 100ms\n",(long)res);
754ef0cd
YI
622
623 /* Correct the lapic counter value */
624 res = (((u64)(*delta)) * pm_100ms);
625 do_div(res, deltapm);
626 pr_info("APIC delta adjusted to PM-Timer: "
627 "%lu (%ld)\n", (unsigned long)res, *delta);
628 *delta = (long)res;
629
630 /* Correct the tsc counter value */
631 if (cpu_has_tsc) {
632 res = (((u64)(*deltatsc)) * pm_100ms);
b189892d 633 do_div(res, deltapm);
754ef0cd 634 apic_printk(APIC_VERBOSE, "TSC delta adjusted to "
3235dc3f 635 "PM-Timer: %lu (%ld)\n",
754ef0cd
YI
636 (unsigned long)res, *deltatsc);
637 *deltatsc = (long)res;
b189892d
CG
638 }
639
640 return 0;
641}
642
2f04fa88
YL
643static int __init calibrate_APIC_clock(void)
644{
645 struct clock_event_device *levt = &__get_cpu_var(lapic_events);
2f04fa88
YL
646 void (*real_handler)(struct clock_event_device *dev);
647 unsigned long deltaj;
754ef0cd 648 long delta, deltatsc;
2f04fa88
YL
649 int pm_referenced = 0;
650
651 local_irq_disable();
652
653 /* Replace the global interrupt handler */
654 real_handler = global_clock_event->event_handler;
655 global_clock_event->event_handler = lapic_cal_handler;
656
657 /*
81608f3c 658 * Setup the APIC counter to maximum. There is no way the lapic
2f04fa88
YL
659 * can underflow in the 100ms detection time frame
660 */
81608f3c 661 __setup_APIC_LVTT(0xffffffff, 0, 0);
2f04fa88
YL
662
663 /* Let the interrupts run */
664 local_irq_enable();
665
666 while (lapic_cal_loops <= LAPIC_CAL_LOOPS)
667 cpu_relax();
668
669 local_irq_disable();
670
671 /* Restore the real event handler */
672 global_clock_event->event_handler = real_handler;
673
674 /* Build delta t1-t2 as apic timer counts down */
675 delta = lapic_cal_t1 - lapic_cal_t2;
676 apic_printk(APIC_VERBOSE, "... lapic delta = %ld\n", delta);
677
754ef0cd
YI
678 deltatsc = (long)(lapic_cal_tsc2 - lapic_cal_tsc1);
679
b189892d
CG
680 /* we trust the PM based calibration if possible */
681 pm_referenced = !calibrate_by_pmtimer(lapic_cal_pm2 - lapic_cal_pm1,
754ef0cd 682 &delta, &deltatsc);
2f04fa88
YL
683
684 /* Calculate the scaled math multiplication factor */
685 lapic_clockevent.mult = div_sc(delta, TICK_NSEC * LAPIC_CAL_LOOPS,
686 lapic_clockevent.shift);
687 lapic_clockevent.max_delta_ns =
688 clockevent_delta2ns(0x7FFFFF, &lapic_clockevent);
689 lapic_clockevent.min_delta_ns =
690 clockevent_delta2ns(0xF, &lapic_clockevent);
691
692 calibration_result = (delta * APIC_DIVISOR) / LAPIC_CAL_LOOPS;
693
694 apic_printk(APIC_VERBOSE, "..... delta %ld\n", delta);
411462f6 695 apic_printk(APIC_VERBOSE, "..... mult: %u\n", lapic_clockevent.mult);
2f04fa88
YL
696 apic_printk(APIC_VERBOSE, "..... calibration result: %u\n",
697 calibration_result);
698
699 if (cpu_has_tsc) {
2f04fa88
YL
700 apic_printk(APIC_VERBOSE, "..... CPU clock speed is "
701 "%ld.%04ld MHz.\n",
754ef0cd
YI
702 (deltatsc / LAPIC_CAL_LOOPS) / (1000000 / HZ),
703 (deltatsc / LAPIC_CAL_LOOPS) % (1000000 / HZ));
2f04fa88
YL
704 }
705
706 apic_printk(APIC_VERBOSE, "..... host bus clock speed is "
707 "%u.%04u MHz.\n",
708 calibration_result / (1000000 / HZ),
709 calibration_result % (1000000 / HZ));
710
711 /*
712 * Do a sanity check on the APIC calibration result
713 */
714 if (calibration_result < (1000000 / HZ)) {
715 local_irq_enable();
ba21ebb6 716 pr_warning("APIC frequency too slow, disabling apic timer\n");
2f04fa88
YL
717 return -1;
718 }
719
720 levt->features &= ~CLOCK_EVT_FEAT_DUMMY;
721
b189892d
CG
722 /*
723 * PM timer calibration failed or not turned on
724 * so lets try APIC timer based calibration
725 */
2f04fa88
YL
726 if (!pm_referenced) {
727 apic_printk(APIC_VERBOSE, "... verify APIC timer\n");
728
729 /*
730 * Setup the apic timer manually
731 */
732 levt->event_handler = lapic_cal_handler;
733 lapic_timer_setup(CLOCK_EVT_MODE_PERIODIC, levt);
734 lapic_cal_loops = -1;
735
736 /* Let the interrupts run */
737 local_irq_enable();
738
739 while (lapic_cal_loops <= LAPIC_CAL_LOOPS)
740 cpu_relax();
741
2f04fa88
YL
742 /* Stop the lapic timer */
743 lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, levt);
744
2f04fa88
YL
745 /* Jiffies delta */
746 deltaj = lapic_cal_j2 - lapic_cal_j1;
747 apic_printk(APIC_VERBOSE, "... jiffies delta = %lu\n", deltaj);
748
749 /* Check, if the jiffies result is consistent */
750 if (deltaj >= LAPIC_CAL_LOOPS-2 && deltaj <= LAPIC_CAL_LOOPS+2)
751 apic_printk(APIC_VERBOSE, "... jiffies result ok\n");
752 else
753 levt->features |= CLOCK_EVT_FEAT_DUMMY;
754 } else
755 local_irq_enable();
756
757 if (levt->features & CLOCK_EVT_FEAT_DUMMY) {
e423e33e 758 pr_warning("APIC timer disabled due to verification failure\n");
2f04fa88
YL
759 return -1;
760 }
761
762 return 0;
763}
764
e83a5fdc
HS
765/*
766 * Setup the boot APIC
767 *
768 * Calibrate and verify the result.
769 */
0e078e2f
TG
770void __init setup_boot_APIC_clock(void)
771{
772 /*
274cfe59
CG
773 * The local apic timer can be disabled via the kernel
774 * commandline or from the CPU detection code. Register the lapic
775 * timer as a dummy clock event source on SMP systems, so the
776 * broadcast mechanism is used. On UP systems simply ignore it.
0e078e2f
TG
777 */
778 if (disable_apic_timer) {
ba21ebb6 779 pr_info("Disabling APIC timer\n");
0e078e2f 780 /* No broadcast on UP ! */
9d09951d
TG
781 if (num_possible_cpus() > 1) {
782 lapic_clockevent.mult = 1;
0e078e2f 783 setup_APIC_timer();
9d09951d 784 }
0e078e2f
TG
785 return;
786 }
787
274cfe59
CG
788 apic_printk(APIC_VERBOSE, "Using local APIC timer interrupts.\n"
789 "calibrating APIC timer ...\n");
790
89b3b1f4 791 if (calibrate_APIC_clock()) {
c2b84b30
TG
792 /* No broadcast on UP ! */
793 if (num_possible_cpus() > 1)
794 setup_APIC_timer();
795 return;
796 }
797
0e078e2f
TG
798 /*
799 * If nmi_watchdog is set to IO_APIC, we need the
800 * PIT/HPET going. Otherwise register lapic as a dummy
801 * device.
802 */
803 if (nmi_watchdog != NMI_IO_APIC)
804 lapic_clockevent.features &= ~CLOCK_EVT_FEAT_DUMMY;
805 else
ba21ebb6 806 pr_warning("APIC timer registered as dummy,"
116f570e 807 " due to nmi_watchdog=%d!\n", nmi_watchdog);
0e078e2f 808
274cfe59 809 /* Setup the lapic or request the broadcast */
0e078e2f
TG
810 setup_APIC_timer();
811}
812
0e078e2f
TG
813void __cpuinit setup_secondary_APIC_clock(void)
814{
0e078e2f
TG
815 setup_APIC_timer();
816}
817
818/*
819 * The guts of the apic timer interrupt
820 */
821static void local_apic_timer_interrupt(void)
822{
823 int cpu = smp_processor_id();
824 struct clock_event_device *evt = &per_cpu(lapic_events, cpu);
825
826 /*
827 * Normally we should not be here till LAPIC has been initialized but
828 * in some cases like kdump, its possible that there is a pending LAPIC
829 * timer interrupt from previous kernel's context and is delivered in
830 * new kernel the moment interrupts are enabled.
831 *
832 * Interrupts are enabled early and LAPIC is setup much later, hence
833 * its possible that when we get here evt->event_handler is NULL.
834 * Check for event_handler being NULL and discard the interrupt as
835 * spurious.
836 */
837 if (!evt->event_handler) {
ba21ebb6 838 pr_warning("Spurious LAPIC timer interrupt on cpu %d\n", cpu);
0e078e2f
TG
839 /* Switch it off */
840 lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, evt);
841 return;
842 }
843
844 /*
845 * the NMI deadlock-detector uses this.
846 */
915b0d01 847 inc_irq_stat(apic_timer_irqs);
0e078e2f
TG
848
849 evt->event_handler(evt);
850}
851
852/*
853 * Local APIC timer interrupt. This is the most natural way for doing
854 * local interrupts, but local timer interrupts can be emulated by
855 * broadcast interrupts too. [in case the hw doesn't support APIC timers]
856 *
857 * [ if a single-CPU system runs an SMP kernel then we call the local
858 * interrupt as well. Thus we cannot inline the local irq ... ]
859 */
bcbc4f20 860void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs)
0e078e2f
TG
861{
862 struct pt_regs *old_regs = set_irq_regs(regs);
863
864 /*
865 * NOTE! We'd better ACK the irq immediately,
866 * because timer handling can be slow.
867 */
868 ack_APIC_irq();
869 /*
870 * update_process_times() expects us to have done irq_enter().
871 * Besides, if we don't timer interrupts ignore the global
872 * interrupt lock, which is the WrongThing (tm) to do.
873 */
874 exit_idle();
875 irq_enter();
876 local_apic_timer_interrupt();
877 irq_exit();
274cfe59 878
0e078e2f
TG
879 set_irq_regs(old_regs);
880}
881
882int setup_profiling_timer(unsigned int multiplier)
883{
884 return -EINVAL;
885}
886
0e078e2f
TG
887/*
888 * Local APIC start and shutdown
889 */
890
891/**
892 * clear_local_APIC - shutdown the local APIC
893 *
894 * This is called, when a CPU is disabled and before rebooting, so the state of
895 * the local APIC has no dangling leftovers. Also used to cleanout any BIOS
896 * leftovers during boot.
897 */
898void clear_local_APIC(void)
899{
2584a82d 900 int maxlvt;
0e078e2f
TG
901 u32 v;
902
d3432896 903 /* APIC hasn't been mapped yet */
fc1edaf9 904 if (!x2apic_mode && !apic_phys)
d3432896
AK
905 return;
906
907 maxlvt = lapic_get_maxlvt();
0e078e2f
TG
908 /*
909 * Masking an LVT entry can trigger a local APIC error
910 * if the vector is zero. Mask LVTERR first to prevent this.
911 */
912 if (maxlvt >= 3) {
913 v = ERROR_APIC_VECTOR; /* any non-zero vector will do */
914 apic_write(APIC_LVTERR, v | APIC_LVT_MASKED);
915 }
916 /*
917 * Careful: we have to set masks only first to deassert
918 * any level-triggered sources.
919 */
920 v = apic_read(APIC_LVTT);
921 apic_write(APIC_LVTT, v | APIC_LVT_MASKED);
922 v = apic_read(APIC_LVT0);
923 apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
924 v = apic_read(APIC_LVT1);
925 apic_write(APIC_LVT1, v | APIC_LVT_MASKED);
926 if (maxlvt >= 4) {
927 v = apic_read(APIC_LVTPC);
928 apic_write(APIC_LVTPC, v | APIC_LVT_MASKED);
929 }
930
6764014b 931 /* lets not touch this if we didn't frob it */
4efc0670 932#ifdef CONFIG_X86_THERMAL_VECTOR
6764014b
CG
933 if (maxlvt >= 5) {
934 v = apic_read(APIC_LVTTHMR);
935 apic_write(APIC_LVTTHMR, v | APIC_LVT_MASKED);
936 }
937#endif
5ca8681c
AK
938#ifdef CONFIG_X86_MCE_INTEL
939 if (maxlvt >= 6) {
940 v = apic_read(APIC_LVTCMCI);
941 if (!(v & APIC_LVT_MASKED))
942 apic_write(APIC_LVTCMCI, v | APIC_LVT_MASKED);
943 }
944#endif
945
0e078e2f
TG
946 /*
947 * Clean APIC state for other OSs:
948 */
949 apic_write(APIC_LVTT, APIC_LVT_MASKED);
950 apic_write(APIC_LVT0, APIC_LVT_MASKED);
951 apic_write(APIC_LVT1, APIC_LVT_MASKED);
952 if (maxlvt >= 3)
953 apic_write(APIC_LVTERR, APIC_LVT_MASKED);
954 if (maxlvt >= 4)
955 apic_write(APIC_LVTPC, APIC_LVT_MASKED);
6764014b
CG
956
957 /* Integrated APIC (!82489DX) ? */
958 if (lapic_is_integrated()) {
959 if (maxlvt > 3)
960 /* Clear ESR due to Pentium errata 3AP and 11AP */
961 apic_write(APIC_ESR, 0);
962 apic_read(APIC_ESR);
963 }
0e078e2f
TG
964}
965
966/**
967 * disable_local_APIC - clear and disable the local APIC
968 */
969void disable_local_APIC(void)
970{
971 unsigned int value;
972
4a13ad0b 973 /* APIC hasn't been mapped yet */
fd19dce7 974 if (!x2apic_mode && !apic_phys)
4a13ad0b
JB
975 return;
976
0e078e2f
TG
977 clear_local_APIC();
978
979 /*
980 * Disable APIC (implies clearing of registers
981 * for 82489DX!).
982 */
983 value = apic_read(APIC_SPIV);
984 value &= ~APIC_SPIV_APIC_ENABLED;
985 apic_write(APIC_SPIV, value);
990b183e
CG
986
987#ifdef CONFIG_X86_32
988 /*
989 * When LAPIC was disabled by the BIOS and enabled by the kernel,
990 * restore the disabled state.
991 */
992 if (enabled_via_apicbase) {
993 unsigned int l, h;
994
995 rdmsr(MSR_IA32_APICBASE, l, h);
996 l &= ~MSR_IA32_APICBASE_ENABLE;
997 wrmsr(MSR_IA32_APICBASE, l, h);
998 }
999#endif
0e078e2f
TG
1000}
1001
fe4024dc
CG
1002/*
1003 * If Linux enabled the LAPIC against the BIOS default disable it down before
1004 * re-entering the BIOS on shutdown. Otherwise the BIOS may get confused and
1005 * not power-off. Additionally clear all LVT entries before disable_local_APIC
1006 * for the case where Linux didn't enable the LAPIC.
1007 */
0e078e2f
TG
1008void lapic_shutdown(void)
1009{
1010 unsigned long flags;
1011
8312136f 1012 if (!cpu_has_apic && !apic_from_smp_config())
0e078e2f
TG
1013 return;
1014
1015 local_irq_save(flags);
1016
fe4024dc
CG
1017#ifdef CONFIG_X86_32
1018 if (!enabled_via_apicbase)
1019 clear_local_APIC();
1020 else
1021#endif
1022 disable_local_APIC();
1023
0e078e2f
TG
1024
1025 local_irq_restore(flags);
1026}
1027
1028/*
1029 * This is to verify that we're looking at a real local APIC.
1030 * Check these against your board if the CPUs aren't getting
1031 * started for no apparent reason.
1032 */
1033int __init verify_local_APIC(void)
1034{
1035 unsigned int reg0, reg1;
1036
1037 /*
1038 * The version register is read-only in a real APIC.
1039 */
1040 reg0 = apic_read(APIC_LVR);
1041 apic_printk(APIC_DEBUG, "Getting VERSION: %x\n", reg0);
1042 apic_write(APIC_LVR, reg0 ^ APIC_LVR_MASK);
1043 reg1 = apic_read(APIC_LVR);
1044 apic_printk(APIC_DEBUG, "Getting VERSION: %x\n", reg1);
1045
1046 /*
1047 * The two version reads above should print the same
1048 * numbers. If the second one is different, then we
1049 * poke at a non-APIC.
1050 */
1051 if (reg1 != reg0)
1052 return 0;
1053
1054 /*
1055 * Check if the version looks reasonably.
1056 */
1057 reg1 = GET_APIC_VERSION(reg0);
1058 if (reg1 == 0x00 || reg1 == 0xff)
1059 return 0;
1060 reg1 = lapic_get_maxlvt();
1061 if (reg1 < 0x02 || reg1 == 0xff)
1062 return 0;
1063
1064 /*
1065 * The ID register is read/write in a real APIC.
1066 */
2d7a66d0 1067 reg0 = apic_read(APIC_ID);
0e078e2f 1068 apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg0);
5b812727 1069 apic_write(APIC_ID, reg0 ^ apic->apic_id_mask);
2d7a66d0 1070 reg1 = apic_read(APIC_ID);
0e078e2f
TG
1071 apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg1);
1072 apic_write(APIC_ID, reg0);
5b812727 1073 if (reg1 != (reg0 ^ apic->apic_id_mask))
0e078e2f
TG
1074 return 0;
1075
1076 /*
1da177e4
LT
1077 * The next two are just to see if we have sane values.
1078 * They're only really relevant if we're in Virtual Wire
1079 * compatibility mode, but most boxes are anymore.
1080 */
1081 reg0 = apic_read(APIC_LVT0);
0e078e2f 1082 apic_printk(APIC_DEBUG, "Getting LVT0: %x\n", reg0);
1da177e4
LT
1083 reg1 = apic_read(APIC_LVT1);
1084 apic_printk(APIC_DEBUG, "Getting LVT1: %x\n", reg1);
1085
1086 return 1;
1087}
1088
0e078e2f
TG
1089/**
1090 * sync_Arb_IDs - synchronize APIC bus arbitration IDs
1091 */
1da177e4
LT
1092void __init sync_Arb_IDs(void)
1093{
296cb951
CG
1094 /*
1095 * Unsupported on P4 - see Intel Dev. Manual Vol. 3, Ch. 8.6.1 And not
1096 * needed on AMD.
1097 */
1098 if (modern_apic() || boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
1da177e4
LT
1099 return;
1100
1101 /*
1102 * Wait for idle.
1103 */
1104 apic_wait_icr_idle();
1105
1106 apic_printk(APIC_DEBUG, "Synchronizing Arb IDs.\n");
6f6da97f
CG
1107 apic_write(APIC_ICR, APIC_DEST_ALLINC |
1108 APIC_INT_LEVELTRIG | APIC_DM_INIT);
1da177e4
LT
1109}
1110
1da177e4
LT
1111/*
1112 * An initial setup of the virtual wire mode.
1113 */
1114void __init init_bsp_APIC(void)
1115{
11a8e778 1116 unsigned int value;
1da177e4
LT
1117
1118 /*
1119 * Don't do the setup now if we have a SMP BIOS as the
1120 * through-I/O-APIC virtual wire mode might be active.
1121 */
1122 if (smp_found_config || !cpu_has_apic)
1123 return;
1124
1da177e4
LT
1125 /*
1126 * Do not trust the local APIC being empty at bootup.
1127 */
1128 clear_local_APIC();
1129
1130 /*
1131 * Enable APIC.
1132 */
1133 value = apic_read(APIC_SPIV);
1134 value &= ~APIC_VECTOR_MASK;
1135 value |= APIC_SPIV_APIC_ENABLED;
638c0411
CG
1136
1137#ifdef CONFIG_X86_32
1138 /* This bit is reserved on P4/Xeon and should be cleared */
1139 if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) &&
1140 (boot_cpu_data.x86 == 15))
1141 value &= ~APIC_SPIV_FOCUS_DISABLED;
1142 else
1143#endif
1144 value |= APIC_SPIV_FOCUS_DISABLED;
1da177e4 1145 value |= SPURIOUS_APIC_VECTOR;
11a8e778 1146 apic_write(APIC_SPIV, value);
1da177e4
LT
1147
1148 /*
1149 * Set up the virtual wire mode.
1150 */
11a8e778 1151 apic_write(APIC_LVT0, APIC_DM_EXTINT);
1da177e4 1152 value = APIC_DM_NMI;
638c0411
CG
1153 if (!lapic_is_integrated()) /* 82489DX */
1154 value |= APIC_LVT_LEVEL_TRIGGER;
11a8e778 1155 apic_write(APIC_LVT1, value);
1da177e4
LT
1156}
1157
c43da2f5
CG
1158static void __cpuinit lapic_setup_esr(void)
1159{
9df08f10
CG
1160 unsigned int oldvalue, value, maxlvt;
1161
1162 if (!lapic_is_integrated()) {
ba21ebb6 1163 pr_info("No ESR for 82489DX.\n");
9df08f10
CG
1164 return;
1165 }
c43da2f5 1166
08125d3e 1167 if (apic->disable_esr) {
c43da2f5 1168 /*
9df08f10
CG
1169 * Something untraceable is creating bad interrupts on
1170 * secondary quads ... for the moment, just leave the
1171 * ESR disabled - we can't do anything useful with the
1172 * errors anyway - mbligh
c43da2f5 1173 */
ba21ebb6 1174 pr_info("Leaving ESR disabled.\n");
9df08f10 1175 return;
c43da2f5 1176 }
9df08f10
CG
1177
1178 maxlvt = lapic_get_maxlvt();
1179 if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */
1180 apic_write(APIC_ESR, 0);
1181 oldvalue = apic_read(APIC_ESR);
1182
1183 /* enables sending errors */
1184 value = ERROR_APIC_VECTOR;
1185 apic_write(APIC_LVTERR, value);
1186
1187 /*
1188 * spec says clear errors after enabling vector.
1189 */
1190 if (maxlvt > 3)
1191 apic_write(APIC_ESR, 0);
1192 value = apic_read(APIC_ESR);
1193 if (value != oldvalue)
1194 apic_printk(APIC_VERBOSE, "ESR value before enabling "
1195 "vector: 0x%08x after: 0x%08x\n",
1196 oldvalue, value);
c43da2f5
CG
1197}
1198
1199
0e078e2f
TG
1200/**
1201 * setup_local_APIC - setup the local APIC
1202 */
1203void __cpuinit setup_local_APIC(void)
1da177e4 1204{
8c3ba8d0
KJ
1205 unsigned int value, queued;
1206 int i, j, acked = 0;
1207 unsigned long long tsc = 0, ntsc;
1208 long long max_loops = cpu_khz;
1209
1210 if (cpu_has_tsc)
1211 rdtscll(tsc);
1da177e4 1212
f1182638 1213 if (disable_apic) {
65a4e574 1214 arch_disable_smp_support();
f1182638
JB
1215 return;
1216 }
1217
89c38c28
CG
1218#ifdef CONFIG_X86_32
1219 /* Pound the ESR really hard over the head with a big hammer - mbligh */
08125d3e 1220 if (lapic_is_integrated() && apic->disable_esr) {
89c38c28
CG
1221 apic_write(APIC_ESR, 0);
1222 apic_write(APIC_ESR, 0);
1223 apic_write(APIC_ESR, 0);
1224 apic_write(APIC_ESR, 0);
1225 }
1226#endif
cdd6c482 1227 perf_events_lapic_init();
89c38c28 1228
ac23d4ee 1229 preempt_disable();
1da177e4 1230
1da177e4
LT
1231 /*
1232 * Double-check whether this APIC is really registered.
1233 * This is meaningless in clustered apic mode, so we skip it.
1234 */
c2777f98 1235 BUG_ON(!apic->apic_id_registered());
1da177e4
LT
1236
1237 /*
1238 * Intel recommends to set DFR, LDR and TPR before enabling
1239 * an APIC. See e.g. "AP-388 82489DX User's Manual" (Intel
1240 * document number 292116). So here it goes...
1241 */
a5c43296 1242 apic->init_apic_ldr();
1da177e4
LT
1243
1244 /*
1245 * Set Task Priority to 'accept all'. We never change this
1246 * later on.
1247 */
1248 value = apic_read(APIC_TASKPRI);
1249 value &= ~APIC_TPRI_MASK;
11a8e778 1250 apic_write(APIC_TASKPRI, value);
1da177e4 1251
da7ed9f9
VG
1252 /*
1253 * After a crash, we no longer service the interrupts and a pending
1254 * interrupt from previous kernel might still have ISR bit set.
1255 *
1256 * Most probably by now CPU has serviced that pending interrupt and
1257 * it might not have done the ack_APIC_irq() because it thought,
1258 * interrupt came from i8259 as ExtInt. LAPIC did not get EOI so it
1259 * does not clear the ISR bit and cpu thinks it has already serivced
1260 * the interrupt. Hence a vector might get locked. It was noticed
1261 * for timer irq (vector 0x31). Issue an extra EOI to clear ISR.
1262 */
8c3ba8d0
KJ
1263 do {
1264 queued = 0;
1265 for (i = APIC_ISR_NR - 1; i >= 0; i--)
1266 queued |= apic_read(APIC_IRR + i*0x10);
1267
1268 for (i = APIC_ISR_NR - 1; i >= 0; i--) {
1269 value = apic_read(APIC_ISR + i*0x10);
1270 for (j = 31; j >= 0; j--) {
1271 if (value & (1<<j)) {
1272 ack_APIC_irq();
1273 acked++;
1274 }
1275 }
da7ed9f9 1276 }
8c3ba8d0
KJ
1277 if (acked > 256) {
1278 printk(KERN_ERR "LAPIC pending interrupts after %d EOI\n",
1279 acked);
1280 break;
1281 }
1282 if (cpu_has_tsc) {
1283 rdtscll(ntsc);
1284 max_loops = (cpu_khz << 10) - (ntsc - tsc);
1285 } else
1286 max_loops--;
1287 } while (queued && max_loops > 0);
1288 WARN_ON(max_loops <= 0);
da7ed9f9 1289
1da177e4
LT
1290 /*
1291 * Now that we are all set up, enable the APIC
1292 */
1293 value = apic_read(APIC_SPIV);
1294 value &= ~APIC_VECTOR_MASK;
1295 /*
1296 * Enable APIC
1297 */
1298 value |= APIC_SPIV_APIC_ENABLED;
1299
89c38c28
CG
1300#ifdef CONFIG_X86_32
1301 /*
1302 * Some unknown Intel IO/APIC (or APIC) errata is biting us with
1303 * certain networking cards. If high frequency interrupts are
1304 * happening on a particular IOAPIC pin, plus the IOAPIC routing
1305 * entry is masked/unmasked at a high rate as well then sooner or
1306 * later IOAPIC line gets 'stuck', no more interrupts are received
1307 * from the device. If focus CPU is disabled then the hang goes
1308 * away, oh well :-(
1309 *
1310 * [ This bug can be reproduced easily with a level-triggered
1311 * PCI Ne2000 networking cards and PII/PIII processors, dual
1312 * BX chipset. ]
1313 */
1314 /*
1315 * Actually disabling the focus CPU check just makes the hang less
1316 * frequent as it makes the interrupt distributon model be more
1317 * like LRU than MRU (the short-term load is more even across CPUs).
1318 * See also the comment in end_level_ioapic_irq(). --macro
1319 */
1320
1321 /*
1322 * - enable focus processor (bit==0)
1323 * - 64bit mode always use processor focus
1324 * so no need to set it
1325 */
1326 value &= ~APIC_SPIV_FOCUS_DISABLED;
1327#endif
3f14c746 1328
1da177e4
LT
1329 /*
1330 * Set spurious IRQ vector
1331 */
1332 value |= SPURIOUS_APIC_VECTOR;
11a8e778 1333 apic_write(APIC_SPIV, value);
1da177e4
LT
1334
1335 /*
1336 * Set up LVT0, LVT1:
1337 *
1338 * set up through-local-APIC on the BP's LINT0. This is not
1339 * strictly necessary in pure symmetric-IO mode, but sometimes
1340 * we delegate interrupts to the 8259A.
1341 */
1342 /*
1343 * TODO: set up through-local-APIC from through-I/O-APIC? --macro
1344 */
1345 value = apic_read(APIC_LVT0) & APIC_LVT_MASKED;
89c38c28 1346 if (!smp_processor_id() && (pic_mode || !value)) {
1da177e4 1347 value = APIC_DM_EXTINT;
bc1d99c1 1348 apic_printk(APIC_VERBOSE, "enabled ExtINT on CPU#%d\n",
89c38c28 1349 smp_processor_id());
1da177e4
LT
1350 } else {
1351 value = APIC_DM_EXTINT | APIC_LVT_MASKED;
bc1d99c1 1352 apic_printk(APIC_VERBOSE, "masked ExtINT on CPU#%d\n",
89c38c28 1353 smp_processor_id());
1da177e4 1354 }
11a8e778 1355 apic_write(APIC_LVT0, value);
1da177e4
LT
1356
1357 /*
1358 * only the BP should see the LINT1 NMI signal, obviously.
1359 */
1360 if (!smp_processor_id())
1361 value = APIC_DM_NMI;
1362 else
1363 value = APIC_DM_NMI | APIC_LVT_MASKED;
89c38c28
CG
1364 if (!lapic_is_integrated()) /* 82489DX */
1365 value |= APIC_LVT_LEVEL_TRIGGER;
11a8e778 1366 apic_write(APIC_LVT1, value);
89c38c28 1367
ac23d4ee 1368 preempt_enable();
be71b855
AK
1369
1370#ifdef CONFIG_X86_MCE_INTEL
1371 /* Recheck CMCI information after local APIC is up on CPU #0 */
1372 if (smp_processor_id() == 0)
1373 cmci_recheck();
1374#endif
739f33b3 1375}
1da177e4 1376
739f33b3
AK
1377void __cpuinit end_local_APIC_setup(void)
1378{
1379 lapic_setup_esr();
fa6b95fc
CG
1380
1381#ifdef CONFIG_X86_32
1b4ee4e4
CG
1382 {
1383 unsigned int value;
1384 /* Disable the local apic timer */
1385 value = apic_read(APIC_LVTT);
1386 value |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
1387 apic_write(APIC_LVTT, value);
1388 }
fa6b95fc
CG
1389#endif
1390
f2802e7f 1391 setup_apic_nmi_watchdog(NULL);
0e078e2f 1392 apic_pm_activate();
1da177e4 1393}
1da177e4 1394
06cd9a7d 1395#ifdef CONFIG_X86_X2APIC
6e1cb38a
SS
1396void check_x2apic(void)
1397{
ef1f87aa 1398 if (x2apic_enabled()) {
ba21ebb6 1399 pr_info("x2apic enabled by BIOS, switching to x2apic ops\n");
fc1edaf9 1400 x2apic_preenabled = x2apic_mode = 1;
6e1cb38a
SS
1401 }
1402}
1403
1404void enable_x2apic(void)
1405{
1406 int msr, msr2;
1407
fc1edaf9 1408 if (!x2apic_mode)
06cd9a7d
YL
1409 return;
1410
6e1cb38a
SS
1411 rdmsr(MSR_IA32_APICBASE, msr, msr2);
1412 if (!(msr & X2APIC_ENABLE)) {
450b1e8d 1413 printk_once(KERN_INFO "Enabling x2apic\n");
6e1cb38a
SS
1414 wrmsr(MSR_IA32_APICBASE, msr | X2APIC_ENABLE, 0);
1415 }
1416}
93758238 1417#endif /* CONFIG_X86_X2APIC */
6e1cb38a 1418
ce69a784 1419int __init enable_IR(void)
6e1cb38a
SS
1420{
1421#ifdef CONFIG_INTR_REMAP
93758238
WH
1422 if (!intr_remapping_supported()) {
1423 pr_debug("intr-remapping not supported\n");
ce69a784 1424 return 0;
6e1cb38a
SS
1425 }
1426
93758238
WH
1427 if (!x2apic_preenabled && skip_ioapic_setup) {
1428 pr_info("Skipped enabling intr-remap because of skipping "
1429 "io-apic setup\n");
ce69a784 1430 return 0;
6e1cb38a
SS
1431 }
1432
ce69a784
GN
1433 if (enable_intr_remapping(x2apic_supported()))
1434 return 0;
1435
1436 pr_info("Enabled Interrupt-remapping\n");
1437
1438 return 1;
1439
1440#endif
1441 return 0;
1442}
1443
1444void __init enable_IR_x2apic(void)
1445{
1446 unsigned long flags;
1447 struct IO_APIC_route_entry **ioapic_entries = NULL;
1448 int ret, x2apic_enabled = 0;
e670761f 1449 int dmar_table_init_ret;
b7f42ab2 1450
b7f42ab2 1451 dmar_table_init_ret = dmar_table_init();
e670761f
YL
1452 if (dmar_table_init_ret && !x2apic_supported())
1453 return;
ce69a784 1454
b24696bc
FY
1455 ioapic_entries = alloc_ioapic_entries();
1456 if (!ioapic_entries) {
ce69a784
GN
1457 pr_err("Allocate ioapic_entries failed\n");
1458 goto out;
b24696bc
FY
1459 }
1460
1461 ret = save_IO_APIC_setup(ioapic_entries);
5ffa4eb2 1462 if (ret) {
ba21ebb6 1463 pr_info("Saving IO-APIC state failed: %d\n", ret);
ce69a784 1464 goto out;
5ffa4eb2 1465 }
6e1cb38a 1466
05c3dc2c 1467 local_irq_save(flags);
b81bb373 1468 legacy_pic->mask_all();
ce69a784 1469 mask_IO_APIC_setup(ioapic_entries);
05c3dc2c 1470
b7f42ab2
YL
1471 if (dmar_table_init_ret)
1472 ret = 0;
1473 else
1474 ret = enable_IR();
1475
ce69a784
GN
1476 if (!ret) {
1477 /* IR is required if there is APIC ID > 255 even when running
1478 * under KVM
1479 */
1480 if (max_physical_apicid > 255 || !kvm_para_available())
1481 goto nox2apic;
1482 /*
1483 * without IR all CPUs can be addressed by IOAPIC/MSI
1484 * only in physical mode
1485 */
1486 x2apic_force_phys();
1487 }
6e1cb38a 1488
ce69a784 1489 x2apic_enabled = 1;
93758238 1490
fc1edaf9
SS
1491 if (x2apic_supported() && !x2apic_mode) {
1492 x2apic_mode = 1;
6e1cb38a 1493 enable_x2apic();
93758238 1494 pr_info("Enabled x2apic\n");
6e1cb38a 1495 }
5ffa4eb2 1496
ce69a784
GN
1497nox2apic:
1498 if (!ret) /* IR enabling failed */
b24696bc 1499 restore_IO_APIC_setup(ioapic_entries);
b81bb373 1500 legacy_pic->restore_mask();
6e1cb38a
SS
1501 local_irq_restore(flags);
1502
ce69a784 1503out:
b24696bc
FY
1504 if (ioapic_entries)
1505 free_ioapic_entries(ioapic_entries);
93758238 1506
ce69a784 1507 if (x2apic_enabled)
93758238
WH
1508 return;
1509
93758238 1510 if (x2apic_preenabled)
ce69a784 1511 panic("x2apic: enabled by BIOS but kernel init failed.");
93758238 1512 else if (cpu_has_x2apic)
ce69a784 1513 pr_info("Not enabling x2apic, Intr-remapping init failed.\n");
6e1cb38a 1514}
93758238 1515
be7a656f 1516#ifdef CONFIG_X86_64
1da177e4
LT
1517/*
1518 * Detect and enable local APICs on non-SMP boards.
1519 * Original code written by Keir Fraser.
1520 * On AMD64 we trust the BIOS - if it says no APIC it is likely
6935d1f9 1521 * not correctly set up (usually the APIC timer won't work etc.)
1da177e4 1522 */
0e078e2f 1523static int __init detect_init_APIC(void)
1da177e4
LT
1524{
1525 if (!cpu_has_apic) {
ba21ebb6 1526 pr_info("No local APIC present\n");
1da177e4
LT
1527 return -1;
1528 }
1529
1530 mp_lapic_addr = APIC_DEFAULT_PHYS_BASE;
1da177e4
LT
1531 return 0;
1532}
be7a656f 1533#else
5a7ae78f
TG
1534
1535static int apic_verify(void)
1536{
1537 u32 features, h, l;
1538
1539 /*
1540 * The APIC feature bit should now be enabled
1541 * in `cpuid'
1542 */
1543 features = cpuid_edx(1);
1544 if (!(features & (1 << X86_FEATURE_APIC))) {
1545 pr_warning("Could not enable APIC!\n");
1546 return -1;
1547 }
1548 set_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
1549 mp_lapic_addr = APIC_DEFAULT_PHYS_BASE;
1550
1551 /* The BIOS may have set up the APIC at some other address */
1552 rdmsr(MSR_IA32_APICBASE, l, h);
1553 if (l & MSR_IA32_APICBASE_ENABLE)
1554 mp_lapic_addr = l & MSR_IA32_APICBASE_BASE;
1555
1556 pr_info("Found and enabled local APIC!\n");
1557 return 0;
1558}
1559
1560int apic_force_enable(void)
1561{
1562 u32 h, l;
1563
1564 if (disable_apic)
1565 return -1;
1566
1567 /*
1568 * Some BIOSes disable the local APIC in the APIC_BASE
1569 * MSR. This can only be done in software for Intel P6 or later
1570 * and AMD K7 (Model > 1) or later.
1571 */
1572 rdmsr(MSR_IA32_APICBASE, l, h);
1573 if (!(l & MSR_IA32_APICBASE_ENABLE)) {
1574 pr_info("Local APIC disabled by BIOS -- reenabling.\n");
1575 l &= ~MSR_IA32_APICBASE_BASE;
1576 l |= MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE;
1577 wrmsr(MSR_IA32_APICBASE, l, h);
1578 enabled_via_apicbase = 1;
1579 }
1580 return apic_verify();
1581}
1582
be7a656f
YL
1583/*
1584 * Detect and initialize APIC
1585 */
1586static int __init detect_init_APIC(void)
1587{
be7a656f
YL
1588 /* Disabled by kernel option? */
1589 if (disable_apic)
1590 return -1;
1591
1592 switch (boot_cpu_data.x86_vendor) {
1593 case X86_VENDOR_AMD:
1594 if ((boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model > 1) ||
85877061 1595 (boot_cpu_data.x86 >= 15))
be7a656f
YL
1596 break;
1597 goto no_apic;
1598 case X86_VENDOR_INTEL:
1599 if (boot_cpu_data.x86 == 6 || boot_cpu_data.x86 == 15 ||
1600 (boot_cpu_data.x86 == 5 && cpu_has_apic))
1601 break;
1602 goto no_apic;
1603 default:
1604 goto no_apic;
1605 }
1606
1607 if (!cpu_has_apic) {
1608 /*
1609 * Over-ride BIOS and try to enable the local APIC only if
1610 * "lapic" specified.
1611 */
1612 if (!force_enable_local_apic) {
ba21ebb6
CG
1613 pr_info("Local APIC disabled by BIOS -- "
1614 "you can enable it with \"lapic\"\n");
be7a656f
YL
1615 return -1;
1616 }
5a7ae78f
TG
1617 if (apic_force_enable())
1618 return -1;
1619 } else {
1620 if (apic_verify())
1621 return -1;
be7a656f 1622 }
be7a656f
YL
1623
1624 apic_pm_activate();
1625
1626 return 0;
1627
1628no_apic:
ba21ebb6 1629 pr_info("No local APIC present or hardware disabled\n");
be7a656f
YL
1630 return -1;
1631}
1632#endif
1da177e4 1633
f28c0ae2 1634#ifdef CONFIG_X86_64
8643f9d0
YL
1635void __init early_init_lapic_mapping(void)
1636{
8643f9d0
YL
1637 /*
1638 * If no local APIC can be found then go out
1639 * : it means there is no mpatable and MADT
1640 */
1641 if (!smp_found_config)
1642 return;
1643
d3a247bf 1644 set_fixmap_nocache(FIX_APIC_BASE, mp_lapic_addr);
8643f9d0 1645 apic_printk(APIC_VERBOSE, "mapped APIC to %16lx (%16lx)\n",
d3a247bf 1646 APIC_BASE, mp_lapic_addr);
8643f9d0
YL
1647
1648 /*
1649 * Fetch the APIC ID of the BSP in case we have a
1650 * default configuration (or the MP table is broken).
1651 */
4c9961d5 1652 boot_cpu_physical_apicid = read_apic_id();
8643f9d0 1653}
f28c0ae2 1654#endif
8643f9d0 1655
0e078e2f
TG
1656/**
1657 * init_apic_mappings - initialize APIC mappings
1658 */
1da177e4
LT
1659void __init init_apic_mappings(void)
1660{
4401da61
YL
1661 unsigned int new_apicid;
1662
fc1edaf9 1663 if (x2apic_mode) {
4c9961d5 1664 boot_cpu_physical_apicid = read_apic_id();
6e1cb38a
SS
1665 return;
1666 }
1667
4797f6b0 1668 /* If no local APIC can be found return early */
1da177e4 1669 if (!smp_found_config && detect_init_APIC()) {
4797f6b0
YL
1670 /* lets NOP'ify apic operations */
1671 pr_info("APIC: disable apic facility\n");
1672 apic_disable();
1673 } else {
1da177e4
LT
1674 apic_phys = mp_lapic_addr;
1675
4797f6b0
YL
1676 /*
1677 * acpi lapic path already maps that address in
1678 * acpi_register_lapic_address()
1679 */
5989cd6a 1680 if (!acpi_lapic && !smp_found_config)
4797f6b0 1681 set_fixmap_nocache(FIX_APIC_BASE, apic_phys);
cec6be6d 1682
4797f6b0
YL
1683 apic_printk(APIC_VERBOSE, "mapped APIC to %08lx (%08lx)\n",
1684 APIC_BASE, apic_phys);
cec6be6d 1685 }
1da177e4
LT
1686
1687 /*
1688 * Fetch the APIC ID of the BSP in case we have a
1689 * default configuration (or the MP table is broken).
1690 */
4401da61
YL
1691 new_apicid = read_apic_id();
1692 if (boot_cpu_physical_apicid != new_apicid) {
1693 boot_cpu_physical_apicid = new_apicid;
103428e5
CG
1694 /*
1695 * yeah -- we lie about apic_version
1696 * in case if apic was disabled via boot option
1697 * but it's not a problem for SMP compiled kernel
1698 * since smp_sanity_check is prepared for such a case
1699 * and disable smp mode
1700 */
4401da61
YL
1701 apic_version[new_apicid] =
1702 GET_APIC_VERSION(apic_read(APIC_LVR));
08306ce6 1703 }
1da177e4
LT
1704}
1705
1706/*
0e078e2f
TG
1707 * This initializes the IO-APIC and APIC hardware if this is
1708 * a UP kernel.
1da177e4 1709 */
1b313f4a
CG
1710int apic_version[MAX_APICS];
1711
0e078e2f 1712int __init APIC_init_uniprocessor(void)
1da177e4 1713{
0e078e2f 1714 if (disable_apic) {
ba21ebb6 1715 pr_info("Apic disabled\n");
0e078e2f
TG
1716 return -1;
1717 }
f1182638 1718#ifdef CONFIG_X86_64
0e078e2f
TG
1719 if (!cpu_has_apic) {
1720 disable_apic = 1;
ba21ebb6 1721 pr_info("Apic disabled by BIOS\n");
0e078e2f
TG
1722 return -1;
1723 }
fa2bd35a
YL
1724#else
1725 if (!smp_found_config && !cpu_has_apic)
1726 return -1;
1727
1728 /*
1729 * Complain if the BIOS pretends there is one.
1730 */
1731 if (!cpu_has_apic &&
1732 APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
ba21ebb6
CG
1733 pr_err("BIOS bug, local APIC 0x%x not detected!...\n",
1734 boot_cpu_physical_apicid);
fa2bd35a
YL
1735 return -1;
1736 }
1737#endif
1738
72ce0165 1739 default_setup_apic_routing();
6e1cb38a 1740
0e078e2f 1741 verify_local_APIC();
b5841765
GC
1742 connect_bsp_APIC();
1743
fa2bd35a 1744#ifdef CONFIG_X86_64
c70dcb74 1745 apic_write(APIC_ID, SET_APIC_ID(boot_cpu_physical_apicid));
fa2bd35a
YL
1746#else
1747 /*
1748 * Hack: In case of kdump, after a crash, kernel might be booting
1749 * on a cpu with non-zero lapic id. But boot_cpu_physical_apicid
1750 * might be zero if read from MP tables. Get it from LAPIC.
1751 */
1752# ifdef CONFIG_CRASH_DUMP
1753 boot_cpu_physical_apicid = read_apic_id();
1754# endif
1755#endif
1756 physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map);
0e078e2f 1757 setup_local_APIC();
1da177e4 1758
88d0f550 1759#ifdef CONFIG_X86_IO_APIC
739f33b3
AK
1760 /*
1761 * Now enable IO-APICs, actually call clear_IO_APIC
98c061b6 1762 * We need clear_IO_APIC before enabling error vector
739f33b3
AK
1763 */
1764 if (!skip_ioapic_setup && nr_ioapics)
1765 enable_IO_APIC();
fa2bd35a 1766#endif
739f33b3
AK
1767
1768 end_local_APIC_setup();
1769
fa2bd35a 1770#ifdef CONFIG_X86_IO_APIC
0e078e2f
TG
1771 if (smp_found_config && !skip_ioapic_setup && nr_ioapics)
1772 setup_IO_APIC();
98c061b6 1773 else {
0e078e2f 1774 nr_ioapics = 0;
98c061b6
YL
1775 localise_nmi_watchdog();
1776 }
1777#else
1778 localise_nmi_watchdog();
fa2bd35a
YL
1779#endif
1780
736decac 1781 x86_init.timers.setup_percpu_clockev();
fa2bd35a 1782#ifdef CONFIG_X86_64
0e078e2f 1783 check_nmi_watchdog();
fa2bd35a
YL
1784#endif
1785
0e078e2f 1786 return 0;
1da177e4
LT
1787}
1788
1789/*
0e078e2f 1790 * Local APIC interrupts
1da177e4
LT
1791 */
1792
0e078e2f
TG
1793/*
1794 * This interrupt should _never_ happen with our APIC/SMP architecture
1795 */
dc1528dd 1796void smp_spurious_interrupt(struct pt_regs *regs)
1da177e4 1797{
dc1528dd
YL
1798 u32 v;
1799
0e078e2f
TG
1800 exit_idle();
1801 irq_enter();
1da177e4 1802 /*
0e078e2f
TG
1803 * Check if this really is a spurious interrupt and ACK it
1804 * if it is a vectored one. Just in case...
1805 * Spurious interrupts should not be ACKed.
1da177e4 1806 */
0e078e2f
TG
1807 v = apic_read(APIC_ISR + ((SPURIOUS_APIC_VECTOR & ~0x1f) >> 1));
1808 if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f)))
1809 ack_APIC_irq();
c4d58cbd 1810
915b0d01
HS
1811 inc_irq_stat(irq_spurious_count);
1812
dc1528dd 1813 /* see sw-dev-man vol 3, chapter 7.4.13.5 */
ba21ebb6
CG
1814 pr_info("spurious APIC interrupt on CPU#%d, "
1815 "should never happen.\n", smp_processor_id());
0e078e2f
TG
1816 irq_exit();
1817}
1da177e4 1818
0e078e2f
TG
1819/*
1820 * This interrupt should never happen with our APIC/SMP architecture
1821 */
dc1528dd 1822void smp_error_interrupt(struct pt_regs *regs)
0e078e2f 1823{
dc1528dd 1824 u32 v, v1;
1da177e4 1825
0e078e2f
TG
1826 exit_idle();
1827 irq_enter();
1828 /* First tickle the hardware, only then report what went on. -- REW */
1829 v = apic_read(APIC_ESR);
1830 apic_write(APIC_ESR, 0);
1831 v1 = apic_read(APIC_ESR);
1832 ack_APIC_irq();
1833 atomic_inc(&irq_err_count);
ba7eda4c 1834
ba21ebb6
CG
1835 /*
1836 * Here is what the APIC error bits mean:
1837 * 0: Send CS error
1838 * 1: Receive CS error
1839 * 2: Send accept error
1840 * 3: Receive accept error
1841 * 4: Reserved
1842 * 5: Send illegal vector
1843 * 6: Received illegal vector
1844 * 7: Illegal register address
1845 */
1846 pr_debug("APIC error on CPU%d: %02x(%02x)\n",
0e078e2f
TG
1847 smp_processor_id(), v , v1);
1848 irq_exit();
1da177e4
LT
1849}
1850
b5841765 1851/**
36c9d674
CG
1852 * connect_bsp_APIC - attach the APIC to the interrupt system
1853 */
b5841765
GC
1854void __init connect_bsp_APIC(void)
1855{
36c9d674
CG
1856#ifdef CONFIG_X86_32
1857 if (pic_mode) {
1858 /*
1859 * Do not trust the local APIC being empty at bootup.
1860 */
1861 clear_local_APIC();
1862 /*
1863 * PIC mode, enable APIC mode in the IMCR, i.e. connect BSP's
1864 * local APIC to INT and NMI lines.
1865 */
1866 apic_printk(APIC_VERBOSE, "leaving PIC mode, "
1867 "enabling APIC mode.\n");
c0eaa453 1868 imcr_pic_to_apic();
36c9d674
CG
1869 }
1870#endif
49040333
IM
1871 if (apic->enable_apic_mode)
1872 apic->enable_apic_mode();
b5841765
GC
1873}
1874
274cfe59
CG
1875/**
1876 * disconnect_bsp_APIC - detach the APIC from the interrupt system
1877 * @virt_wire_setup: indicates, whether virtual wire mode is selected
1878 *
1879 * Virtual wire mode is necessary to deliver legacy interrupts even when the
1880 * APIC is disabled.
1881 */
0e078e2f 1882void disconnect_bsp_APIC(int virt_wire_setup)
1da177e4 1883{
1b4ee4e4
CG
1884 unsigned int value;
1885
c177b0bc
CG
1886#ifdef CONFIG_X86_32
1887 if (pic_mode) {
1888 /*
1889 * Put the board back into PIC mode (has an effect only on
1890 * certain older boards). Note that APIC interrupts, including
1891 * IPIs, won't work beyond this point! The only exception are
1892 * INIT IPIs.
1893 */
1894 apic_printk(APIC_VERBOSE, "disabling APIC mode, "
1895 "entering PIC mode.\n");
c0eaa453 1896 imcr_apic_to_pic();
c177b0bc
CG
1897 return;
1898 }
1899#endif
1900
0e078e2f 1901 /* Go back to Virtual Wire compatibility mode */
1da177e4 1902
0e078e2f
TG
1903 /* For the spurious interrupt use vector F, and enable it */
1904 value = apic_read(APIC_SPIV);
1905 value &= ~APIC_VECTOR_MASK;
1906 value |= APIC_SPIV_APIC_ENABLED;
1907 value |= 0xf;
1908 apic_write(APIC_SPIV, value);
b8ce3359 1909
0e078e2f
TG
1910 if (!virt_wire_setup) {
1911 /*
1912 * For LVT0 make it edge triggered, active high,
1913 * external and enabled
1914 */
1915 value = apic_read(APIC_LVT0);
1916 value &= ~(APIC_MODE_MASK | APIC_SEND_PENDING |
1917 APIC_INPUT_POLARITY | APIC_LVT_REMOTE_IRR |
1918 APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED);
1919 value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING;
1920 value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_EXTINT);
1921 apic_write(APIC_LVT0, value);
1922 } else {
1923 /* Disable LVT0 */
1924 apic_write(APIC_LVT0, APIC_LVT_MASKED);
1925 }
b8ce3359 1926
c177b0bc
CG
1927 /*
1928 * For LVT1 make it edge triggered, active high,
1929 * nmi and enabled
1930 */
0e078e2f
TG
1931 value = apic_read(APIC_LVT1);
1932 value &= ~(APIC_MODE_MASK | APIC_SEND_PENDING |
1933 APIC_INPUT_POLARITY | APIC_LVT_REMOTE_IRR |
1934 APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED);
1935 value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING;
1936 value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_NMI);
1937 apic_write(APIC_LVT1, value);
1da177e4
LT
1938}
1939
be8a5685
AS
1940void __cpuinit generic_processor_info(int apicid, int version)
1941{
1942 int cpu;
be8a5685 1943
1b313f4a
CG
1944 /*
1945 * Validate version
1946 */
1947 if (version == 0x0) {
ba21ebb6 1948 pr_warning("BIOS bug, APIC version is 0 for CPU#%d! "
3b11ce7f
MT
1949 "fixing up to 0x10. (tell your hw vendor)\n",
1950 version);
1b313f4a 1951 version = 0x10;
be8a5685 1952 }
1b313f4a 1953 apic_version[apicid] = version;
be8a5685 1954
3b11ce7f
MT
1955 if (num_processors >= nr_cpu_ids) {
1956 int max = nr_cpu_ids;
1957 int thiscpu = max + disabled_cpus;
1958
1959 pr_warning(
1960 "ACPI: NR_CPUS/possible_cpus limit of %i reached."
1961 " Processor %d/0x%x ignored.\n", max, thiscpu, apicid);
1962
1963 disabled_cpus++;
be8a5685
AS
1964 return;
1965 }
1966
1967 num_processors++;
3b11ce7f 1968 cpu = cpumask_next_zero(-1, cpu_present_mask);
be8a5685 1969
b2b815d8
MT
1970 if (version != apic_version[boot_cpu_physical_apicid])
1971 WARN_ONCE(1,
1972 "ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n",
1973 apic_version[boot_cpu_physical_apicid], cpu, version);
1974
be8a5685
AS
1975 physid_set(apicid, phys_cpu_present_map);
1976 if (apicid == boot_cpu_physical_apicid) {
1977 /*
1978 * x86_bios_cpu_apicid is required to have processors listed
1979 * in same order as logical cpu numbers. Hence the first
1980 * entry is BSP, and so on.
1981 */
1982 cpu = 0;
1983 }
e0da3364
YL
1984 if (apicid > max_physical_apicid)
1985 max_physical_apicid = apicid;
1986
3e5095d1 1987#if defined(CONFIG_SMP) || defined(CONFIG_X86_64)
f10fcd47
TH
1988 early_per_cpu(x86_cpu_to_apicid, cpu) = apicid;
1989 early_per_cpu(x86_bios_cpu_apicid, cpu) = apicid;
1b313f4a 1990#endif
be8a5685 1991
1de88cd4
MT
1992 set_cpu_possible(cpu, true);
1993 set_cpu_present(cpu, true);
be8a5685
AS
1994}
1995
0c81c746
SS
1996int hard_smp_processor_id(void)
1997{
1998 return read_apic_id();
1999}
1dcdd3d1
IM
2000
2001void default_init_apic_ldr(void)
2002{
2003 unsigned long val;
2004
2005 apic_write(APIC_DFR, APIC_DFR_VALUE);
2006 val = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
2007 val |= SET_APIC_LOGICAL_ID(1UL << smp_processor_id());
2008 apic_write(APIC_LDR, val);
2009}
2010
2011#ifdef CONFIG_X86_32
2012int default_apicid_to_node(int logical_apicid)
2013{
2014#ifdef CONFIG_SMP
2015 return apicid_2_node[hard_smp_processor_id()];
2016#else
2017 return 0;
2018#endif
2019}
3491998d 2020#endif
0c81c746 2021
89039b37 2022/*
0e078e2f 2023 * Power management
89039b37 2024 */
0e078e2f
TG
2025#ifdef CONFIG_PM
2026
2027static struct {
274cfe59
CG
2028 /*
2029 * 'active' is true if the local APIC was enabled by us and
2030 * not the BIOS; this signifies that we are also responsible
2031 * for disabling it before entering apm/acpi suspend
2032 */
0e078e2f
TG
2033 int active;
2034 /* r/w apic fields */
2035 unsigned int apic_id;
2036 unsigned int apic_taskpri;
2037 unsigned int apic_ldr;
2038 unsigned int apic_dfr;
2039 unsigned int apic_spiv;
2040 unsigned int apic_lvtt;
2041 unsigned int apic_lvtpc;
2042 unsigned int apic_lvt0;
2043 unsigned int apic_lvt1;
2044 unsigned int apic_lvterr;
2045 unsigned int apic_tmict;
2046 unsigned int apic_tdcr;
2047 unsigned int apic_thmr;
2048} apic_pm_state;
2049
2050static int lapic_suspend(struct sys_device *dev, pm_message_t state)
2051{
2052 unsigned long flags;
2053 int maxlvt;
89039b37 2054
0e078e2f
TG
2055 if (!apic_pm_state.active)
2056 return 0;
89039b37 2057
0e078e2f 2058 maxlvt = lapic_get_maxlvt();
89039b37 2059
2d7a66d0 2060 apic_pm_state.apic_id = apic_read(APIC_ID);
0e078e2f
TG
2061 apic_pm_state.apic_taskpri = apic_read(APIC_TASKPRI);
2062 apic_pm_state.apic_ldr = apic_read(APIC_LDR);
2063 apic_pm_state.apic_dfr = apic_read(APIC_DFR);
2064 apic_pm_state.apic_spiv = apic_read(APIC_SPIV);
2065 apic_pm_state.apic_lvtt = apic_read(APIC_LVTT);
2066 if (maxlvt >= 4)
2067 apic_pm_state.apic_lvtpc = apic_read(APIC_LVTPC);
2068 apic_pm_state.apic_lvt0 = apic_read(APIC_LVT0);
2069 apic_pm_state.apic_lvt1 = apic_read(APIC_LVT1);
2070 apic_pm_state.apic_lvterr = apic_read(APIC_LVTERR);
2071 apic_pm_state.apic_tmict = apic_read(APIC_TMICT);
2072 apic_pm_state.apic_tdcr = apic_read(APIC_TDCR);
4efc0670 2073#ifdef CONFIG_X86_THERMAL_VECTOR
0e078e2f
TG
2074 if (maxlvt >= 5)
2075 apic_pm_state.apic_thmr = apic_read(APIC_LVTTHMR);
2076#endif
24968cfd 2077
0e078e2f
TG
2078 local_irq_save(flags);
2079 disable_local_APIC();
fc1edaf9 2080
b24696bc
FY
2081 if (intr_remapping_enabled)
2082 disable_intr_remapping();
fc1edaf9 2083
0e078e2f
TG
2084 local_irq_restore(flags);
2085 return 0;
1da177e4
LT
2086}
2087
0e078e2f 2088static int lapic_resume(struct sys_device *dev)
1da177e4 2089{
0e078e2f
TG
2090 unsigned int l, h;
2091 unsigned long flags;
2092 int maxlvt;
3d58829b 2093 int ret = 0;
b24696bc
FY
2094 struct IO_APIC_route_entry **ioapic_entries = NULL;
2095
0e078e2f
TG
2096 if (!apic_pm_state.active)
2097 return 0;
89b831ef 2098
0e078e2f 2099 local_irq_save(flags);
9a2755c3 2100 if (intr_remapping_enabled) {
b24696bc
FY
2101 ioapic_entries = alloc_ioapic_entries();
2102 if (!ioapic_entries) {
2103 WARN(1, "Alloc ioapic_entries in lapic resume failed.");
3d58829b
JS
2104 ret = -ENOMEM;
2105 goto restore;
b24696bc
FY
2106 }
2107
2108 ret = save_IO_APIC_setup(ioapic_entries);
2109 if (ret) {
2110 WARN(1, "Saving IO-APIC state failed: %d\n", ret);
2111 free_ioapic_entries(ioapic_entries);
3d58829b 2112 goto restore;
b24696bc
FY
2113 }
2114
2115 mask_IO_APIC_setup(ioapic_entries);
b81bb373 2116 legacy_pic->mask_all();
b24696bc 2117 }
92206c90 2118
fc1edaf9 2119 if (x2apic_mode)
92206c90 2120 enable_x2apic();
cf6567fe 2121 else {
92206c90
CG
2122 /*
2123 * Make sure the APICBASE points to the right address
2124 *
2125 * FIXME! This will be wrong if we ever support suspend on
2126 * SMP! We'll need to do this as part of the CPU restore!
2127 */
6e1cb38a
SS
2128 rdmsr(MSR_IA32_APICBASE, l, h);
2129 l &= ~MSR_IA32_APICBASE_BASE;
2130 l |= MSR_IA32_APICBASE_ENABLE | mp_lapic_addr;
2131 wrmsr(MSR_IA32_APICBASE, l, h);
d5e629a6 2132 }
6e1cb38a 2133
b24696bc 2134 maxlvt = lapic_get_maxlvt();
0e078e2f
TG
2135 apic_write(APIC_LVTERR, ERROR_APIC_VECTOR | APIC_LVT_MASKED);
2136 apic_write(APIC_ID, apic_pm_state.apic_id);
2137 apic_write(APIC_DFR, apic_pm_state.apic_dfr);
2138 apic_write(APIC_LDR, apic_pm_state.apic_ldr);
2139 apic_write(APIC_TASKPRI, apic_pm_state.apic_taskpri);
2140 apic_write(APIC_SPIV, apic_pm_state.apic_spiv);
2141 apic_write(APIC_LVT0, apic_pm_state.apic_lvt0);
2142 apic_write(APIC_LVT1, apic_pm_state.apic_lvt1);
92206c90 2143#if defined(CONFIG_X86_MCE_P4THERMAL) || defined(CONFIG_X86_MCE_INTEL)
0e078e2f
TG
2144 if (maxlvt >= 5)
2145 apic_write(APIC_LVTTHMR, apic_pm_state.apic_thmr);
2146#endif
2147 if (maxlvt >= 4)
2148 apic_write(APIC_LVTPC, apic_pm_state.apic_lvtpc);
2149 apic_write(APIC_LVTT, apic_pm_state.apic_lvtt);
2150 apic_write(APIC_TDCR, apic_pm_state.apic_tdcr);
2151 apic_write(APIC_TMICT, apic_pm_state.apic_tmict);
2152 apic_write(APIC_ESR, 0);
2153 apic_read(APIC_ESR);
2154 apic_write(APIC_LVTERR, apic_pm_state.apic_lvterr);
2155 apic_write(APIC_ESR, 0);
2156 apic_read(APIC_ESR);
92206c90 2157
9a2755c3 2158 if (intr_remapping_enabled) {
fc1edaf9 2159 reenable_intr_remapping(x2apic_mode);
b81bb373 2160 legacy_pic->restore_mask();
b24696bc
FY
2161 restore_IO_APIC_setup(ioapic_entries);
2162 free_ioapic_entries(ioapic_entries);
2163 }
3d58829b 2164restore:
0e078e2f 2165 local_irq_restore(flags);
92206c90 2166
3d58829b 2167 return ret;
0e078e2f 2168}
b8ce3359 2169
274cfe59
CG
2170/*
2171 * This device has no shutdown method - fully functioning local APICs
2172 * are needed on every CPU up until machine_halt/restart/poweroff.
2173 */
2174
0e078e2f
TG
2175static struct sysdev_class lapic_sysclass = {
2176 .name = "lapic",
2177 .resume = lapic_resume,
2178 .suspend = lapic_suspend,
2179};
b8ce3359 2180
0e078e2f 2181static struct sys_device device_lapic = {
e83a5fdc
HS
2182 .id = 0,
2183 .cls = &lapic_sysclass,
0e078e2f 2184};
b8ce3359 2185
0e078e2f
TG
2186static void __cpuinit apic_pm_activate(void)
2187{
2188 apic_pm_state.active = 1;
1da177e4
LT
2189}
2190
0e078e2f 2191static int __init init_lapic_sysfs(void)
1da177e4 2192{
0e078e2f 2193 int error;
e83a5fdc 2194
0e078e2f
TG
2195 if (!cpu_has_apic)
2196 return 0;
2197 /* XXX: remove suspend/resume procs if !apic_pm_state.active? */
e83a5fdc 2198
0e078e2f
TG
2199 error = sysdev_class_register(&lapic_sysclass);
2200 if (!error)
2201 error = sysdev_register(&device_lapic);
2202 return error;
1da177e4 2203}
b24696bc
FY
2204
2205/* local apic needs to resume before other devices access its registers. */
2206core_initcall(init_lapic_sysfs);
0e078e2f
TG
2207
2208#else /* CONFIG_PM */
2209
2210static void apic_pm_activate(void) { }
2211
2212#endif /* CONFIG_PM */
1da177e4 2213
f28c0ae2 2214#ifdef CONFIG_X86_64
e0e42142
YL
2215
2216static int __cpuinit apic_cluster_num(void)
1da177e4
LT
2217{
2218 int i, clusters, zeros;
2219 unsigned id;
322850af 2220 u16 *bios_cpu_apicid;
1da177e4
LT
2221 DECLARE_BITMAP(clustermap, NUM_APIC_CLUSTERS);
2222
23ca4bba 2223 bios_cpu_apicid = early_per_cpu_ptr(x86_bios_cpu_apicid);
376ec33f 2224 bitmap_zero(clustermap, NUM_APIC_CLUSTERS);
1da177e4 2225
168ef543 2226 for (i = 0; i < nr_cpu_ids; i++) {
e8c10ef9 2227 /* are we being called early in kernel startup? */
693e3c56
MT
2228 if (bios_cpu_apicid) {
2229 id = bios_cpu_apicid[i];
e423e33e 2230 } else if (i < nr_cpu_ids) {
e8c10ef9 2231 if (cpu_present(i))
2232 id = per_cpu(x86_bios_cpu_apicid, i);
2233 else
2234 continue;
e423e33e 2235 } else
e8c10ef9 2236 break;
2237
1da177e4
LT
2238 if (id != BAD_APICID)
2239 __set_bit(APIC_CLUSTERID(id), clustermap);
2240 }
2241
2242 /* Problem: Partially populated chassis may not have CPUs in some of
2243 * the APIC clusters they have been allocated. Only present CPUs have
602a54a8 2244 * x86_bios_cpu_apicid entries, thus causing zeroes in the bitmap.
2245 * Since clusters are allocated sequentially, count zeros only if
2246 * they are bounded by ones.
1da177e4
LT
2247 */
2248 clusters = 0;
2249 zeros = 0;
2250 for (i = 0; i < NUM_APIC_CLUSTERS; i++) {
2251 if (test_bit(i, clustermap)) {
2252 clusters += 1 + zeros;
2253 zeros = 0;
2254 } else
2255 ++zeros;
2256 }
2257
e0e42142
YL
2258 return clusters;
2259}
2260
2261static int __cpuinitdata multi_checked;
2262static int __cpuinitdata multi;
2263
2264static int __cpuinit set_multi(const struct dmi_system_id *d)
2265{
2266 if (multi)
2267 return 0;
6f0aced6 2268 pr_info("APIC: %s detected, Multi Chassis\n", d->ident);
e0e42142
YL
2269 multi = 1;
2270 return 0;
2271}
2272
2273static const __cpuinitconst struct dmi_system_id multi_dmi_table[] = {
2274 {
2275 .callback = set_multi,
2276 .ident = "IBM System Summit2",
2277 .matches = {
2278 DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
2279 DMI_MATCH(DMI_PRODUCT_NAME, "Summit2"),
2280 },
2281 },
2282 {}
2283};
2284
2285static void __cpuinit dmi_check_multi(void)
2286{
2287 if (multi_checked)
2288 return;
2289
2290 dmi_check_system(multi_dmi_table);
2291 multi_checked = 1;
2292}
2293
2294/*
2295 * apic_is_clustered_box() -- Check if we can expect good TSC
2296 *
2297 * Thus far, the major user of this is IBM's Summit2 series:
2298 * Clustered boxes may have unsynced TSC problems if they are
2299 * multi-chassis.
2300 * Use DMI to check them
2301 */
2302__cpuinit int apic_is_clustered_box(void)
2303{
2304 dmi_check_multi();
2305 if (multi)
1cb68487
RT
2306 return 1;
2307
e0e42142
YL
2308 if (!is_vsmp_box())
2309 return 0;
2310
1da177e4 2311 /*
e0e42142
YL
2312 * ScaleMP vSMPowered boxes have one cluster per board and TSCs are
2313 * not guaranteed to be synced between boards
1da177e4 2314 */
e0e42142
YL
2315 if (apic_cluster_num() > 1)
2316 return 1;
2317
2318 return 0;
1da177e4 2319}
f28c0ae2 2320#endif
1da177e4
LT
2321
2322/*
0e078e2f 2323 * APIC command line parameters
1da177e4 2324 */
789fa735 2325static int __init setup_disableapic(char *arg)
6935d1f9 2326{
1da177e4 2327 disable_apic = 1;
9175fc06 2328 setup_clear_cpu_cap(X86_FEATURE_APIC);
2c8c0e6b
AK
2329 return 0;
2330}
2331early_param("disableapic", setup_disableapic);
1da177e4 2332
2c8c0e6b 2333/* same as disableapic, for compatibility */
789fa735 2334static int __init setup_nolapic(char *arg)
6935d1f9 2335{
789fa735 2336 return setup_disableapic(arg);
6935d1f9 2337}
2c8c0e6b 2338early_param("nolapic", setup_nolapic);
1da177e4 2339
2e7c2838
LT
2340static int __init parse_lapic_timer_c2_ok(char *arg)
2341{
2342 local_apic_timer_c2_ok = 1;
2343 return 0;
2344}
2345early_param("lapic_timer_c2_ok", parse_lapic_timer_c2_ok);
2346
36fef094 2347static int __init parse_disable_apic_timer(char *arg)
6935d1f9 2348{
1da177e4 2349 disable_apic_timer = 1;
36fef094 2350 return 0;
6935d1f9 2351}
36fef094
CG
2352early_param("noapictimer", parse_disable_apic_timer);
2353
2354static int __init parse_nolapic_timer(char *arg)
2355{
2356 disable_apic_timer = 1;
2357 return 0;
6935d1f9 2358}
36fef094 2359early_param("nolapic_timer", parse_nolapic_timer);
73dea47f 2360
79af9bec
CG
2361static int __init apic_set_verbosity(char *arg)
2362{
2363 if (!arg) {
2364#ifdef CONFIG_X86_64
2365 skip_ioapic_setup = 0;
79af9bec
CG
2366 return 0;
2367#endif
2368 return -EINVAL;
2369 }
2370
2371 if (strcmp("debug", arg) == 0)
2372 apic_verbosity = APIC_DEBUG;
2373 else if (strcmp("verbose", arg) == 0)
2374 apic_verbosity = APIC_VERBOSE;
2375 else {
ba21ebb6 2376 pr_warning("APIC Verbosity level %s not recognised"
79af9bec
CG
2377 " use apic=verbose or apic=debug\n", arg);
2378 return -EINVAL;
2379 }
2380
2381 return 0;
2382}
2383early_param("apic", apic_set_verbosity);
2384
1e934dda
YL
2385static int __init lapic_insert_resource(void)
2386{
2387 if (!apic_phys)
2388 return -1;
2389
2390 /* Put local APIC into the resource map. */
2391 lapic_resource.start = apic_phys;
2392 lapic_resource.end = lapic_resource.start + PAGE_SIZE - 1;
2393 insert_resource(&iomem_resource, &lapic_resource);
2394
2395 return 0;
2396}
2397
2398/*
2399 * need call insert after e820_reserve_resources()
2400 * that is using request_resource
2401 */
2402late_initcall(lapic_insert_resource);
This page took 0.885465 seconds and 5 git commands to generate.