diff options
author | Andi Kleen <ak@suse.de> | 2006-01-11 16:46:51 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-11 22:05:03 -0500 |
commit | 11a8e778c46ee76fc46b0a7fa9d455b5a8e3e19f (patch) | |
tree | 2e6d19e5fbb9d686448868bc087673e696b5b4be | |
parent | 5f1d189f8a87930d62c507800a8ac20b9a185e41 (diff) |
[PATCH] x86_64: Some housekeeping in local APIC code
Remove support for obsolete hardware and cleanup.
- Remove checks for non integrated APICs
- Replace apic_write_around with apic_write.
- Remove apic_read_around
- Remove APIC version reads used by old workarounds
- Remove old workaround for Simics
- Fix indentation
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | arch/x86_64/kernel/apic.c | 83 | ||||
-rw-r--r-- | arch/x86_64/kernel/io_apic.c | 14 | ||||
-rw-r--r-- | arch/x86_64/kernel/mce_intel.c | 4 | ||||
-rw-r--r-- | arch/x86_64/kernel/smpboot.c | 11 | ||||
-rw-r--r-- | include/asm-x86_64/apic.h | 6 |
5 files changed, 49 insertions, 69 deletions
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c index c3239f6c22be..8fdd089fd17e 100644 --- a/arch/x86_64/kernel/apic.c +++ b/arch/x86_64/kernel/apic.c | |||
@@ -53,20 +53,17 @@ static void apic_pm_activate(void); | |||
53 | 53 | ||
54 | void enable_NMI_through_LVT0 (void * dummy) | 54 | void enable_NMI_through_LVT0 (void * dummy) |
55 | { | 55 | { |
56 | unsigned int v, ver; | 56 | unsigned int v; |
57 | 57 | ||
58 | ver = apic_read(APIC_LVR); | ||
59 | ver = GET_APIC_VERSION(ver); | ||
60 | v = APIC_DM_NMI; /* unmask and set to NMI */ | 58 | v = APIC_DM_NMI; /* unmask and set to NMI */ |
61 | apic_write_around(APIC_LVT0, v); | 59 | apic_write(APIC_LVT0, v); |
62 | } | 60 | } |
63 | 61 | ||
64 | int get_maxlvt(void) | 62 | int get_maxlvt(void) |
65 | { | 63 | { |
66 | unsigned int v, ver, maxlvt; | 64 | unsigned int v, maxlvt; |
67 | 65 | ||
68 | v = apic_read(APIC_LVR); | 66 | v = apic_read(APIC_LVR); |
69 | ver = GET_APIC_VERSION(v); | ||
70 | maxlvt = GET_APIC_MAXLVT(v); | 67 | maxlvt = GET_APIC_MAXLVT(v); |
71 | return maxlvt; | 68 | return maxlvt; |
72 | } | 69 | } |
@@ -84,33 +81,33 @@ void clear_local_APIC(void) | |||
84 | */ | 81 | */ |
85 | if (maxlvt >= 3) { | 82 | if (maxlvt >= 3) { |
86 | v = ERROR_APIC_VECTOR; /* any non-zero vector will do */ | 83 | v = ERROR_APIC_VECTOR; /* any non-zero vector will do */ |
87 | apic_write_around(APIC_LVTERR, v | APIC_LVT_MASKED); | 84 | apic_write(APIC_LVTERR, v | APIC_LVT_MASKED); |
88 | } | 85 | } |
89 | /* | 86 | /* |
90 | * Careful: we have to set masks only first to deassert | 87 | * Careful: we have to set masks only first to deassert |
91 | * any level-triggered sources. | 88 | * any level-triggered sources. |
92 | */ | 89 | */ |
93 | v = apic_read(APIC_LVTT); | 90 | v = apic_read(APIC_LVTT); |
94 | apic_write_around(APIC_LVTT, v | APIC_LVT_MASKED); | 91 | apic_write(APIC_LVTT, v | APIC_LVT_MASKED); |
95 | v = apic_read(APIC_LVT0); | 92 | v = apic_read(APIC_LVT0); |
96 | apic_write_around(APIC_LVT0, v | APIC_LVT_MASKED); | 93 | apic_write(APIC_LVT0, v | APIC_LVT_MASKED); |
97 | v = apic_read(APIC_LVT1); | 94 | v = apic_read(APIC_LVT1); |
98 | apic_write_around(APIC_LVT1, v | APIC_LVT_MASKED); | 95 | apic_write(APIC_LVT1, v | APIC_LVT_MASKED); |
99 | if (maxlvt >= 4) { | 96 | if (maxlvt >= 4) { |
100 | v = apic_read(APIC_LVTPC); | 97 | v = apic_read(APIC_LVTPC); |
101 | apic_write_around(APIC_LVTPC, v | APIC_LVT_MASKED); | 98 | apic_write(APIC_LVTPC, v | APIC_LVT_MASKED); |
102 | } | 99 | } |
103 | 100 | ||
104 | /* | 101 | /* |
105 | * Clean APIC state for other OSs: | 102 | * Clean APIC state for other OSs: |
106 | */ | 103 | */ |
107 | apic_write_around(APIC_LVTT, APIC_LVT_MASKED); | 104 | apic_write(APIC_LVTT, APIC_LVT_MASKED); |
108 | apic_write_around(APIC_LVT0, APIC_LVT_MASKED); | 105 | apic_write(APIC_LVT0, APIC_LVT_MASKED); |
109 | apic_write_around(APIC_LVT1, APIC_LVT_MASKED); | 106 | apic_write(APIC_LVT1, APIC_LVT_MASKED); |
110 | if (maxlvt >= 3) | 107 | if (maxlvt >= 3) |
111 | apic_write_around(APIC_LVTERR, APIC_LVT_MASKED); | 108 | apic_write(APIC_LVTERR, APIC_LVT_MASKED); |
112 | if (maxlvt >= 4) | 109 | if (maxlvt >= 4) |
113 | apic_write_around(APIC_LVTPC, APIC_LVT_MASKED); | 110 | apic_write(APIC_LVTPC, APIC_LVT_MASKED); |
114 | v = GET_APIC_VERSION(apic_read(APIC_LVR)); | 111 | v = GET_APIC_VERSION(apic_read(APIC_LVR)); |
115 | apic_write(APIC_ESR, 0); | 112 | apic_write(APIC_ESR, 0); |
116 | apic_read(APIC_ESR); | 113 | apic_read(APIC_ESR); |
@@ -155,7 +152,7 @@ void disconnect_bsp_APIC(int virt_wire_setup) | |||
155 | value &= ~APIC_VECTOR_MASK; | 152 | value &= ~APIC_VECTOR_MASK; |
156 | value |= APIC_SPIV_APIC_ENABLED; | 153 | value |= APIC_SPIV_APIC_ENABLED; |
157 | value |= 0xf; | 154 | value |= 0xf; |
158 | apic_write_around(APIC_SPIV, value); | 155 | apic_write(APIC_SPIV, value); |
159 | 156 | ||
160 | if (!virt_wire_setup) { | 157 | if (!virt_wire_setup) { |
161 | /* For LVT0 make it edge triggered, active high, external and enabled */ | 158 | /* For LVT0 make it edge triggered, active high, external and enabled */ |
@@ -165,11 +162,11 @@ void disconnect_bsp_APIC(int virt_wire_setup) | |||
165 | APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED ); | 162 | APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED ); |
166 | value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING; | 163 | value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING; |
167 | value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_EXTINT); | 164 | value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_EXTINT); |
168 | apic_write_around(APIC_LVT0, value); | 165 | apic_write(APIC_LVT0, value); |
169 | } | 166 | } |
170 | else { | 167 | else { |
171 | /* Disable LVT0 */ | 168 | /* Disable LVT0 */ |
172 | apic_write_around(APIC_LVT0, APIC_LVT_MASKED); | 169 | apic_write(APIC_LVT0, APIC_LVT_MASKED); |
173 | } | 170 | } |
174 | 171 | ||
175 | /* For LVT1 make it edge triggered, active high, nmi and enabled */ | 172 | /* For LVT1 make it edge triggered, active high, nmi and enabled */ |
@@ -180,7 +177,7 @@ void disconnect_bsp_APIC(int virt_wire_setup) | |||
180 | APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED); | 177 | APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED); |
181 | value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING; | 178 | value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING; |
182 | value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_NMI); | 179 | value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_NMI); |
183 | apic_write_around(APIC_LVT1, value); | 180 | apic_write(APIC_LVT1, value); |
184 | } | 181 | } |
185 | } | 182 | } |
186 | 183 | ||
@@ -196,7 +193,7 @@ void disable_local_APIC(void) | |||
196 | */ | 193 | */ |
197 | value = apic_read(APIC_SPIV); | 194 | value = apic_read(APIC_SPIV); |
198 | value &= ~APIC_SPIV_APIC_ENABLED; | 195 | value &= ~APIC_SPIV_APIC_ENABLED; |
199 | apic_write_around(APIC_SPIV, value); | 196 | apic_write(APIC_SPIV, value); |
200 | } | 197 | } |
201 | 198 | ||
202 | /* | 199 | /* |
@@ -273,7 +270,7 @@ void __init sync_Arb_IDs(void) | |||
273 | apic_wait_icr_idle(); | 270 | apic_wait_icr_idle(); |
274 | 271 | ||
275 | apic_printk(APIC_DEBUG, "Synchronizing Arb IDs.\n"); | 272 | apic_printk(APIC_DEBUG, "Synchronizing Arb IDs.\n"); |
276 | apic_write_around(APIC_ICR, APIC_DEST_ALLINC | APIC_INT_LEVELTRIG | 273 | apic_write(APIC_ICR, APIC_DEST_ALLINC | APIC_INT_LEVELTRIG |
277 | | APIC_DM_INIT); | 274 | | APIC_DM_INIT); |
278 | } | 275 | } |
279 | 276 | ||
@@ -284,7 +281,7 @@ extern void __error_in_apic_c (void); | |||
284 | */ | 281 | */ |
285 | void __init init_bsp_APIC(void) | 282 | void __init init_bsp_APIC(void) |
286 | { | 283 | { |
287 | unsigned int value, ver; | 284 | unsigned int value; |
288 | 285 | ||
289 | /* | 286 | /* |
290 | * Don't do the setup now if we have a SMP BIOS as the | 287 | * Don't do the setup now if we have a SMP BIOS as the |
@@ -294,7 +291,6 @@ void __init init_bsp_APIC(void) | |||
294 | return; | 291 | return; |
295 | 292 | ||
296 | value = apic_read(APIC_LVR); | 293 | value = apic_read(APIC_LVR); |
297 | ver = GET_APIC_VERSION(value); | ||
298 | 294 | ||
299 | /* | 295 | /* |
300 | * Do not trust the local APIC being empty at bootup. | 296 | * Do not trust the local APIC being empty at bootup. |
@@ -309,22 +305,21 @@ void __init init_bsp_APIC(void) | |||
309 | value |= APIC_SPIV_APIC_ENABLED; | 305 | value |= APIC_SPIV_APIC_ENABLED; |
310 | value |= APIC_SPIV_FOCUS_DISABLED; | 306 | value |= APIC_SPIV_FOCUS_DISABLED; |
311 | value |= SPURIOUS_APIC_VECTOR; | 307 | value |= SPURIOUS_APIC_VECTOR; |
312 | apic_write_around(APIC_SPIV, value); | 308 | apic_write(APIC_SPIV, value); |
313 | 309 | ||
314 | /* | 310 | /* |
315 | * Set up the virtual wire mode. | 311 | * Set up the virtual wire mode. |
316 | */ | 312 | */ |
317 | apic_write_around(APIC_LVT0, APIC_DM_EXTINT); | 313 | apic_write(APIC_LVT0, APIC_DM_EXTINT); |
318 | value = APIC_DM_NMI; | 314 | value = APIC_DM_NMI; |
319 | apic_write_around(APIC_LVT1, value); | 315 | apic_write(APIC_LVT1, value); |
320 | } | 316 | } |
321 | 317 | ||
322 | void __cpuinit setup_local_APIC (void) | 318 | void __cpuinit setup_local_APIC (void) |
323 | { | 319 | { |
324 | unsigned int value, ver, maxlvt; | 320 | unsigned int value, maxlvt; |
325 | 321 | ||
326 | value = apic_read(APIC_LVR); | 322 | value = apic_read(APIC_LVR); |
327 | ver = GET_APIC_VERSION(value); | ||
328 | 323 | ||
329 | if ((SPURIOUS_APIC_VECTOR & 0x0f) != 0x0f) | 324 | if ((SPURIOUS_APIC_VECTOR & 0x0f) != 0x0f) |
330 | __error_in_apic_c(); | 325 | __error_in_apic_c(); |
@@ -349,7 +344,7 @@ void __cpuinit setup_local_APIC (void) | |||
349 | */ | 344 | */ |
350 | value = apic_read(APIC_TASKPRI); | 345 | value = apic_read(APIC_TASKPRI); |
351 | value &= ~APIC_TPRI_MASK; | 346 | value &= ~APIC_TPRI_MASK; |
352 | apic_write_around(APIC_TASKPRI, value); | 347 | apic_write(APIC_TASKPRI, value); |
353 | 348 | ||
354 | /* | 349 | /* |
355 | * Now that we are all set up, enable the APIC | 350 | * Now that we are all set up, enable the APIC |
@@ -391,7 +386,7 @@ void __cpuinit setup_local_APIC (void) | |||
391 | * Set spurious IRQ vector | 386 | * Set spurious IRQ vector |
392 | */ | 387 | */ |
393 | value |= SPURIOUS_APIC_VECTOR; | 388 | value |= SPURIOUS_APIC_VECTOR; |
394 | apic_write_around(APIC_SPIV, value); | 389 | apic_write(APIC_SPIV, value); |
395 | 390 | ||
396 | /* | 391 | /* |
397 | * Set up LVT0, LVT1: | 392 | * Set up LVT0, LVT1: |
@@ -411,7 +406,7 @@ void __cpuinit setup_local_APIC (void) | |||
411 | value = APIC_DM_EXTINT | APIC_LVT_MASKED; | 406 | value = APIC_DM_EXTINT | APIC_LVT_MASKED; |
412 | apic_printk(APIC_VERBOSE, "masked ExtINT on CPU#%d\n", smp_processor_id()); | 407 | apic_printk(APIC_VERBOSE, "masked ExtINT on CPU#%d\n", smp_processor_id()); |
413 | } | 408 | } |
414 | apic_write_around(APIC_LVT0, value); | 409 | apic_write(APIC_LVT0, value); |
415 | 410 | ||
416 | /* | 411 | /* |
417 | * only the BP should see the LINT1 NMI signal, obviously. | 412 | * only the BP should see the LINT1 NMI signal, obviously. |
@@ -420,14 +415,14 @@ void __cpuinit setup_local_APIC (void) | |||
420 | value = APIC_DM_NMI; | 415 | value = APIC_DM_NMI; |
421 | else | 416 | else |
422 | value = APIC_DM_NMI | APIC_LVT_MASKED; | 417 | value = APIC_DM_NMI | APIC_LVT_MASKED; |
423 | apic_write_around(APIC_LVT1, value); | 418 | apic_write(APIC_LVT1, value); |
424 | 419 | ||
425 | { | 420 | { |
426 | unsigned oldvalue; | 421 | unsigned oldvalue; |
427 | maxlvt = get_maxlvt(); | 422 | maxlvt = get_maxlvt(); |
428 | oldvalue = apic_read(APIC_ESR); | 423 | oldvalue = apic_read(APIC_ESR); |
429 | value = ERROR_APIC_VECTOR; // enables sending errors | 424 | value = ERROR_APIC_VECTOR; // enables sending errors |
430 | apic_write_around(APIC_LVTERR, value); | 425 | apic_write(APIC_LVTERR, value); |
431 | /* | 426 | /* |
432 | * spec says clear errors after enabling vector. | 427 | * spec says clear errors after enabling vector. |
433 | */ | 428 | */ |
@@ -672,17 +667,17 @@ static void __setup_APIC_LVTT(unsigned int clocks) | |||
672 | if (cpu_isset(cpu, timer_interrupt_broadcast_ipi_mask)) | 667 | if (cpu_isset(cpu, timer_interrupt_broadcast_ipi_mask)) |
673 | lvtt_value |= APIC_LVT_MASKED; | 668 | lvtt_value |= APIC_LVT_MASKED; |
674 | 669 | ||
675 | apic_write_around(APIC_LVTT, lvtt_value); | 670 | apic_write(APIC_LVTT, lvtt_value); |
676 | 671 | ||
677 | /* | 672 | /* |
678 | * Divide PICLK by 16 | 673 | * Divide PICLK by 16 |
679 | */ | 674 | */ |
680 | tmp_value = apic_read(APIC_TDCR); | 675 | tmp_value = apic_read(APIC_TDCR); |
681 | apic_write_around(APIC_TDCR, (tmp_value | 676 | apic_write(APIC_TDCR, (tmp_value |
682 | & ~(APIC_TDR_DIV_1 | APIC_TDR_DIV_TMBASE)) | 677 | & ~(APIC_TDR_DIV_1 | APIC_TDR_DIV_TMBASE)) |
683 | | APIC_TDR_DIV_16); | 678 | | APIC_TDR_DIV_16); |
684 | 679 | ||
685 | apic_write_around(APIC_TMICT, clocks/APIC_DIVISOR); | 680 | apic_write(APIC_TMICT, clocks/APIC_DIVISOR); |
686 | } | 681 | } |
687 | 682 | ||
688 | static void setup_APIC_timer(unsigned int clocks) | 683 | static void setup_APIC_timer(unsigned int clocks) |
@@ -691,12 +686,6 @@ static void setup_APIC_timer(unsigned int clocks) | |||
691 | 686 | ||
692 | local_irq_save(flags); | 687 | local_irq_save(flags); |
693 | 688 | ||
694 | /* For some reasons this doesn't work on Simics, so fake it for now */ | ||
695 | if (!strstr(boot_cpu_data.x86_model_id, "Screwdriver")) { | ||
696 | __setup_APIC_LVTT(clocks); | ||
697 | return; | ||
698 | } | ||
699 | |||
700 | /* wait for irq slice */ | 689 | /* wait for irq slice */ |
701 | if (vxtime.hpet_address) { | 690 | if (vxtime.hpet_address) { |
702 | int trigger = hpet_readl(HPET_T0_CMP); | 691 | int trigger = hpet_readl(HPET_T0_CMP); |
@@ -709,7 +698,7 @@ static void setup_APIC_timer(unsigned int clocks) | |||
709 | outb_p(0x00, 0x43); | 698 | outb_p(0x00, 0x43); |
710 | c2 = inb_p(0x40); | 699 | c2 = inb_p(0x40); |
711 | c2 |= inb_p(0x40) << 8; | 700 | c2 |= inb_p(0x40) << 8; |
712 | do { | 701 | do { |
713 | c1 = c2; | 702 | c1 = c2; |
714 | outb_p(0x00, 0x43); | 703 | outb_p(0x00, 0x43); |
715 | c2 = inb_p(0x40); | 704 | c2 = inb_p(0x40); |
@@ -800,7 +789,7 @@ void disable_APIC_timer(void) | |||
800 | unsigned long v; | 789 | unsigned long v; |
801 | 790 | ||
802 | v = apic_read(APIC_LVTT); | 791 | v = apic_read(APIC_LVTT); |
803 | apic_write_around(APIC_LVTT, v | APIC_LVT_MASKED); | 792 | apic_write(APIC_LVTT, v | APIC_LVT_MASKED); |
804 | } | 793 | } |
805 | } | 794 | } |
806 | 795 | ||
@@ -813,7 +802,7 @@ void enable_APIC_timer(void) | |||
813 | unsigned long v; | 802 | unsigned long v; |
814 | 803 | ||
815 | v = apic_read(APIC_LVTT); | 804 | v = apic_read(APIC_LVTT); |
816 | apic_write_around(APIC_LVTT, v & ~APIC_LVT_MASKED); | 805 | apic_write(APIC_LVTT, v & ~APIC_LVT_MASKED); |
817 | } | 806 | } |
818 | } | 807 | } |
819 | 808 | ||
@@ -1066,7 +1055,7 @@ int __init APIC_init_uniprocessor (void) | |||
1066 | connect_bsp_APIC(); | 1055 | connect_bsp_APIC(); |
1067 | 1056 | ||
1068 | phys_cpu_present_map = physid_mask_of_physid(boot_cpu_id); | 1057 | phys_cpu_present_map = physid_mask_of_physid(boot_cpu_id); |
1069 | apic_write_around(APIC_ID, SET_APIC_ID(boot_cpu_id)); | 1058 | apic_write(APIC_ID, SET_APIC_ID(boot_cpu_id)); |
1070 | 1059 | ||
1071 | setup_local_APIC(); | 1060 | setup_local_APIC(); |
1072 | 1061 | ||
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c index fd1e7c36dc23..e8cf44ef8778 100644 --- a/arch/x86_64/kernel/io_apic.c +++ b/arch/x86_64/kernel/io_apic.c | |||
@@ -910,7 +910,7 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in | |||
910 | disable_8259A_irq(0); | 910 | disable_8259A_irq(0); |
911 | 911 | ||
912 | /* mask LVT0 */ | 912 | /* mask LVT0 */ |
913 | apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); | 913 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); |
914 | 914 | ||
915 | /* | 915 | /* |
916 | * We use logical delivery to get the timer IRQ | 916 | * We use logical delivery to get the timer IRQ |
@@ -1635,7 +1635,7 @@ static void enable_lapic_irq (unsigned int irq) | |||
1635 | unsigned long v; | 1635 | unsigned long v; |
1636 | 1636 | ||
1637 | v = apic_read(APIC_LVT0); | 1637 | v = apic_read(APIC_LVT0); |
1638 | apic_write_around(APIC_LVT0, v & ~APIC_LVT_MASKED); | 1638 | apic_write(APIC_LVT0, v & ~APIC_LVT_MASKED); |
1639 | } | 1639 | } |
1640 | 1640 | ||
1641 | static void disable_lapic_irq (unsigned int irq) | 1641 | static void disable_lapic_irq (unsigned int irq) |
@@ -1643,7 +1643,7 @@ static void disable_lapic_irq (unsigned int irq) | |||
1643 | unsigned long v; | 1643 | unsigned long v; |
1644 | 1644 | ||
1645 | v = apic_read(APIC_LVT0); | 1645 | v = apic_read(APIC_LVT0); |
1646 | apic_write_around(APIC_LVT0, v | APIC_LVT_MASKED); | 1646 | apic_write(APIC_LVT0, v | APIC_LVT_MASKED); |
1647 | } | 1647 | } |
1648 | 1648 | ||
1649 | static void ack_lapic_irq (unsigned int irq) | 1649 | static void ack_lapic_irq (unsigned int irq) |
@@ -1769,7 +1769,7 @@ static inline void check_timer(void) | |||
1769 | * the 8259A which implies the virtual wire has to be | 1769 | * the 8259A which implies the virtual wire has to be |
1770 | * disabled in the local APIC. | 1770 | * disabled in the local APIC. |
1771 | */ | 1771 | */ |
1772 | apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); | 1772 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); |
1773 | init_8259A(1); | 1773 | init_8259A(1); |
1774 | enable_8259A_irq(0); | 1774 | enable_8259A_irq(0); |
1775 | 1775 | ||
@@ -1835,21 +1835,21 @@ static inline void check_timer(void) | |||
1835 | 1835 | ||
1836 | disable_8259A_irq(0); | 1836 | disable_8259A_irq(0); |
1837 | irq_desc[0].handler = &lapic_irq_type; | 1837 | irq_desc[0].handler = &lapic_irq_type; |
1838 | apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ | 1838 | apic_write(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ |
1839 | enable_8259A_irq(0); | 1839 | enable_8259A_irq(0); |
1840 | 1840 | ||
1841 | if (timer_irq_works()) { | 1841 | if (timer_irq_works()) { |
1842 | apic_printk(APIC_QUIET, " works.\n"); | 1842 | apic_printk(APIC_QUIET, " works.\n"); |
1843 | return; | 1843 | return; |
1844 | } | 1844 | } |
1845 | apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector); | 1845 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector); |
1846 | apic_printk(APIC_VERBOSE," failed.\n"); | 1846 | apic_printk(APIC_VERBOSE," failed.\n"); |
1847 | 1847 | ||
1848 | apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as ExtINT IRQ..."); | 1848 | apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as ExtINT IRQ..."); |
1849 | 1849 | ||
1850 | init_8259A(0); | 1850 | init_8259A(0); |
1851 | make_8259A_irq(0); | 1851 | make_8259A_irq(0); |
1852 | apic_write_around(APIC_LVT0, APIC_DM_EXTINT); | 1852 | apic_write(APIC_LVT0, APIC_DM_EXTINT); |
1853 | 1853 | ||
1854 | unlock_ExtINT_logic(); | 1854 | unlock_ExtINT_logic(); |
1855 | 1855 | ||
diff --git a/arch/x86_64/kernel/mce_intel.c b/arch/x86_64/kernel/mce_intel.c index 3ef845e8d3b0..8f533d2c40cb 100644 --- a/arch/x86_64/kernel/mce_intel.c +++ b/arch/x86_64/kernel/mce_intel.c | |||
@@ -80,7 +80,7 @@ static void __cpuinit intel_init_thermal(struct cpuinfo_x86 *c) | |||
80 | 80 | ||
81 | h = THERMAL_APIC_VECTOR; | 81 | h = THERMAL_APIC_VECTOR; |
82 | h |= (APIC_DM_FIXED | APIC_LVT_MASKED); | 82 | h |= (APIC_DM_FIXED | APIC_LVT_MASKED); |
83 | apic_write_around(APIC_LVTTHMR, h); | 83 | apic_write(APIC_LVTTHMR, h); |
84 | 84 | ||
85 | rdmsr(MSR_IA32_THERM_INTERRUPT, l, h); | 85 | rdmsr(MSR_IA32_THERM_INTERRUPT, l, h); |
86 | wrmsr(MSR_IA32_THERM_INTERRUPT, l | 0x03, h); | 86 | wrmsr(MSR_IA32_THERM_INTERRUPT, l | 0x03, h); |
@@ -89,7 +89,7 @@ static void __cpuinit intel_init_thermal(struct cpuinfo_x86 *c) | |||
89 | wrmsr(MSR_IA32_MISC_ENABLE, l | (1 << 3), h); | 89 | wrmsr(MSR_IA32_MISC_ENABLE, l | (1 << 3), h); |
90 | 90 | ||
91 | l = apic_read(APIC_LVTTHMR); | 91 | l = apic_read(APIC_LVTTHMR); |
92 | apic_write_around(APIC_LVTTHMR, l & ~APIC_LVT_MASKED); | 92 | apic_write(APIC_LVTTHMR, l & ~APIC_LVT_MASKED); |
93 | printk(KERN_INFO "CPU%d: Thermal monitoring enabled (%s)\n", | 93 | printk(KERN_INFO "CPU%d: Thermal monitoring enabled (%s)\n", |
94 | cpu, tm2 ? "TM2" : "TM1"); | 94 | cpu, tm2 ? "TM2" : "TM1"); |
95 | return; | 95 | return; |
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c index c8169d066cbd..c9e941ae5019 100644 --- a/arch/x86_64/kernel/smpboot.c +++ b/arch/x86_64/kernel/smpboot.c | |||
@@ -666,7 +666,6 @@ static int __cpuinit wakeup_secondary_via_INIT(int phys_apicid, unsigned int sta | |||
666 | 666 | ||
667 | for (j = 1; j <= num_starts; j++) { | 667 | for (j = 1; j <= num_starts; j++) { |
668 | Dprintk("Sending STARTUP #%d.\n",j); | 668 | Dprintk("Sending STARTUP #%d.\n",j); |
669 | apic_read_around(APIC_SPIV); | ||
670 | apic_write(APIC_ESR, 0); | 669 | apic_write(APIC_ESR, 0); |
671 | apic_read(APIC_ESR); | 670 | apic_read(APIC_ESR); |
672 | Dprintk("After apic_write.\n"); | 671 | Dprintk("After apic_write.\n"); |
@@ -705,7 +704,6 @@ static int __cpuinit wakeup_secondary_via_INIT(int phys_apicid, unsigned int sta | |||
705 | * Due to the Pentium erratum 3AP. | 704 | * Due to the Pentium erratum 3AP. |
706 | */ | 705 | */ |
707 | if (maxlvt > 3) { | 706 | if (maxlvt > 3) { |
708 | apic_read_around(APIC_SPIV); | ||
709 | apic_write(APIC_ESR, 0); | 707 | apic_write(APIC_ESR, 0); |
710 | } | 708 | } |
711 | accept_status = (apic_read(APIC_ESR) & 0xEF); | 709 | accept_status = (apic_read(APIC_ESR) & 0xEF); |
@@ -842,11 +840,8 @@ do_rest: | |||
842 | /* | 840 | /* |
843 | * Be paranoid about clearing APIC errors. | 841 | * Be paranoid about clearing APIC errors. |
844 | */ | 842 | */ |
845 | if (APIC_INTEGRATED(apic_version[apicid])) { | 843 | apic_write(APIC_ESR, 0); |
846 | apic_read_around(APIC_SPIV); | 844 | apic_read(APIC_ESR); |
847 | apic_write(APIC_ESR, 0); | ||
848 | apic_read(APIC_ESR); | ||
849 | } | ||
850 | 845 | ||
851 | /* | 846 | /* |
852 | * Status is now clean | 847 | * Status is now clean |
@@ -1024,7 +1019,7 @@ static int __init smp_sanity_check(unsigned max_cpus) | |||
1024 | /* | 1019 | /* |
1025 | * If we couldn't find a local APIC, then get out of here now! | 1020 | * If we couldn't find a local APIC, then get out of here now! |
1026 | */ | 1021 | */ |
1027 | if (APIC_INTEGRATED(apic_version[boot_cpu_id]) && !cpu_has_apic) { | 1022 | if (!cpu_has_apic) { |
1028 | printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n", | 1023 | printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n", |
1029 | boot_cpu_id); | 1024 | boot_cpu_id); |
1030 | printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n"); | 1025 | printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n"); |
diff --git a/include/asm-x86_64/apic.h b/include/asm-x86_64/apic.h index f95847acd0f0..4f6a4dc455bb 100644 --- a/include/asm-x86_64/apic.h +++ b/include/asm-x86_64/apic.h | |||
@@ -52,10 +52,6 @@ static __inline__ void apic_wait_icr_idle(void) | |||
52 | while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY ); | 52 | while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY ); |
53 | } | 53 | } |
54 | 54 | ||
55 | #define FORCE_READ_AROUND_WRITE 0 | ||
56 | #define apic_read_around(x) | ||
57 | #define apic_write_around(x,y) apic_write((x),(y)) | ||
58 | |||
59 | static inline void ack_APIC_irq(void) | 55 | static inline void ack_APIC_irq(void) |
60 | { | 56 | { |
61 | /* | 57 | /* |
@@ -66,7 +62,7 @@ static inline void ack_APIC_irq(void) | |||
66 | */ | 62 | */ |
67 | 63 | ||
68 | /* Docs say use 0 for future compatibility */ | 64 | /* Docs say use 0 for future compatibility */ |
69 | apic_write_around(APIC_EOI, 0); | 65 | apic_write(APIC_EOI, 0); |
70 | } | 66 | } |
71 | 67 | ||
72 | extern int get_maxlvt (void); | 68 | extern int get_maxlvt (void); |