diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-09 13:38:23 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-09 13:38:23 -0400 |
commit | e66dd19092497f566e4dda1664688e28fa667265 (patch) | |
tree | 57876e6c8c2a2b3701b0b5d666593f5428dc3514 /arch | |
parent | c2ea122cd7c4a094be71641f3961796398035513 (diff) | |
parent | f20ab9c38fb85b4dde8b4139788ab9e735a35279 (diff) |
Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
x86: cpu_debug remove execute permission
x86: smarten /proc/interrupts output for new counters
x86: DMI match for the Dell DXP061 as it needs BIOS reboot
x86: make 64 bit to use default_inquire_remote_apic
x86, setup: un-resequence mode setting for VGA 80x34 and 80x60 modes
x86, intel-iommu: fix X2APIC && !ACPI build failure
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/Kconfig | 6 | ||||
-rw-r--r-- | arch/x86/boot/video-vga.c | 33 | ||||
-rw-r--r--[-rwxr-xr-x] | arch/x86/include/asm/cpu_debug.h | 0 | ||||
-rw-r--r-- | arch/x86/kernel/apic/apic_flat_64.c | 4 | ||||
-rw-r--r--[-rwxr-xr-x] | arch/x86/kernel/cpu/cpu_debug.c | 0 | ||||
-rw-r--r-- | arch/x86/kernel/irq.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/reboot.c | 8 |
7 files changed, 35 insertions, 18 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 4b3408206091..bc25b9f5e4cd 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -252,17 +252,13 @@ config SMP | |||
252 | 252 | ||
253 | config X86_X2APIC | 253 | config X86_X2APIC |
254 | bool "Support x2apic" | 254 | bool "Support x2apic" |
255 | depends on X86_LOCAL_APIC && X86_64 | 255 | depends on X86_LOCAL_APIC && X86_64 && INTR_REMAP |
256 | select INTR_REMAP | ||
257 | ---help--- | 256 | ---help--- |
258 | This enables x2apic support on CPUs that have this feature. | 257 | This enables x2apic support on CPUs that have this feature. |
259 | 258 | ||
260 | This allows 32-bit apic IDs (so it can support very large systems), | 259 | This allows 32-bit apic IDs (so it can support very large systems), |
261 | and accesses the local apic via MSRs not via mmio. | 260 | and accesses the local apic via MSRs not via mmio. |
262 | 261 | ||
263 | ( On certain CPU models you may need to enable INTR_REMAP too, | ||
264 | to get functional x2apic mode. ) | ||
265 | |||
266 | If you don't know what to do here, say N. | 262 | If you don't know what to do here, say N. |
267 | 263 | ||
268 | config SPARSE_IRQ | 264 | config SPARSE_IRQ |
diff --git a/arch/x86/boot/video-vga.c b/arch/x86/boot/video-vga.c index 95d86ce0421c..9e0587a37768 100644 --- a/arch/x86/boot/video-vga.c +++ b/arch/x86/boot/video-vga.c | |||
@@ -129,22 +129,18 @@ u16 vga_crtc(void) | |||
129 | return (inb(0x3cc) & 1) ? 0x3d4 : 0x3b4; | 129 | return (inb(0x3cc) & 1) ? 0x3d4 : 0x3b4; |
130 | } | 130 | } |
131 | 131 | ||
132 | static void vga_set_480_scanlines(int lines) | 132 | static void vga_set_480_scanlines(void) |
133 | { | 133 | { |
134 | u16 crtc; /* CRTC base address */ | 134 | u16 crtc; /* CRTC base address */ |
135 | u8 csel; /* CRTC miscellaneous output register */ | 135 | u8 csel; /* CRTC miscellaneous output register */ |
136 | u8 ovfw; /* CRTC overflow register */ | ||
137 | int end = lines-1; | ||
138 | 136 | ||
139 | crtc = vga_crtc(); | 137 | crtc = vga_crtc(); |
140 | 138 | ||
141 | ovfw = 0x3c | ((end >> (8-1)) & 0x02) | ((end >> (9-6)) & 0x40); | ||
142 | |||
143 | out_idx(0x0c, crtc, 0x11); /* Vertical sync end, unlock CR0-7 */ | 139 | out_idx(0x0c, crtc, 0x11); /* Vertical sync end, unlock CR0-7 */ |
144 | out_idx(0x0b, crtc, 0x06); /* Vertical total */ | 140 | out_idx(0x0b, crtc, 0x06); /* Vertical total */ |
145 | out_idx(ovfw, crtc, 0x07); /* Vertical overflow */ | 141 | out_idx(0x3e, crtc, 0x07); /* Vertical overflow */ |
146 | out_idx(0xea, crtc, 0x10); /* Vertical sync start */ | 142 | out_idx(0xea, crtc, 0x10); /* Vertical sync start */ |
147 | out_idx(end, crtc, 0x12); /* Vertical display end */ | 143 | out_idx(0xdf, crtc, 0x12); /* Vertical display end */ |
148 | out_idx(0xe7, crtc, 0x15); /* Vertical blank start */ | 144 | out_idx(0xe7, crtc, 0x15); /* Vertical blank start */ |
149 | out_idx(0x04, crtc, 0x16); /* Vertical blank end */ | 145 | out_idx(0x04, crtc, 0x16); /* Vertical blank end */ |
150 | csel = inb(0x3cc); | 146 | csel = inb(0x3cc); |
@@ -153,21 +149,38 @@ static void vga_set_480_scanlines(int lines) | |||
153 | outb(csel, 0x3c2); | 149 | outb(csel, 0x3c2); |
154 | } | 150 | } |
155 | 151 | ||
152 | static void vga_set_vertical_end(int lines) | ||
153 | { | ||
154 | u16 crtc; /* CRTC base address */ | ||
155 | u8 ovfw; /* CRTC overflow register */ | ||
156 | int end = lines-1; | ||
157 | |||
158 | crtc = vga_crtc(); | ||
159 | |||
160 | ovfw = 0x3c | ((end >> (8-1)) & 0x02) | ((end >> (9-6)) & 0x40); | ||
161 | |||
162 | out_idx(ovfw, crtc, 0x07); /* Vertical overflow */ | ||
163 | out_idx(end, crtc, 0x12); /* Vertical display end */ | ||
164 | } | ||
165 | |||
156 | static void vga_set_80x30(void) | 166 | static void vga_set_80x30(void) |
157 | { | 167 | { |
158 | vga_set_480_scanlines(30*16); | 168 | vga_set_480_scanlines(); |
169 | vga_set_vertical_end(30*16); | ||
159 | } | 170 | } |
160 | 171 | ||
161 | static void vga_set_80x34(void) | 172 | static void vga_set_80x34(void) |
162 | { | 173 | { |
174 | vga_set_480_scanlines(); | ||
163 | vga_set_14font(); | 175 | vga_set_14font(); |
164 | vga_set_480_scanlines(34*14); | 176 | vga_set_vertical_end(34*14); |
165 | } | 177 | } |
166 | 178 | ||
167 | static void vga_set_80x60(void) | 179 | static void vga_set_80x60(void) |
168 | { | 180 | { |
181 | vga_set_480_scanlines(); | ||
169 | vga_set_8font(); | 182 | vga_set_8font(); |
170 | vga_set_480_scanlines(60*8); | 183 | vga_set_vertical_end(60*8); |
171 | } | 184 | } |
172 | 185 | ||
173 | static int vga_set_mode(struct mode_info *mode) | 186 | static int vga_set_mode(struct mode_info *mode) |
diff --git a/arch/x86/include/asm/cpu_debug.h b/arch/x86/include/asm/cpu_debug.h index 222802029fa6..222802029fa6 100755..100644 --- a/arch/x86/include/asm/cpu_debug.h +++ b/arch/x86/include/asm/cpu_debug.h | |||
diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c index 0014714ea97b..306e5e88fb6f 100644 --- a/arch/x86/kernel/apic/apic_flat_64.c +++ b/arch/x86/kernel/apic/apic_flat_64.c | |||
@@ -212,7 +212,7 @@ struct apic apic_flat = { | |||
212 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 212 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
213 | .wait_for_init_deassert = NULL, | 213 | .wait_for_init_deassert = NULL, |
214 | .smp_callin_clear_local_apic = NULL, | 214 | .smp_callin_clear_local_apic = NULL, |
215 | .inquire_remote_apic = NULL, | 215 | .inquire_remote_apic = default_inquire_remote_apic, |
216 | 216 | ||
217 | .read = native_apic_mem_read, | 217 | .read = native_apic_mem_read, |
218 | .write = native_apic_mem_write, | 218 | .write = native_apic_mem_write, |
@@ -362,7 +362,7 @@ struct apic apic_physflat = { | |||
362 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 362 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
363 | .wait_for_init_deassert = NULL, | 363 | .wait_for_init_deassert = NULL, |
364 | .smp_callin_clear_local_apic = NULL, | 364 | .smp_callin_clear_local_apic = NULL, |
365 | .inquire_remote_apic = NULL, | 365 | .inquire_remote_apic = default_inquire_remote_apic, |
366 | 366 | ||
367 | .read = native_apic_mem_read, | 367 | .read = native_apic_mem_read, |
368 | .write = native_apic_mem_write, | 368 | .write = native_apic_mem_write, |
diff --git a/arch/x86/kernel/cpu/cpu_debug.c b/arch/x86/kernel/cpu/cpu_debug.c index 46e29ab96c6a..46e29ab96c6a 100755..100644 --- a/arch/x86/kernel/cpu/cpu_debug.c +++ b/arch/x86/kernel/cpu/cpu_debug.c | |||
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 3aaf7b9e3a8b..c3fe010d74c8 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c | |||
@@ -65,7 +65,7 @@ static int show_other_interrupts(struct seq_file *p, int prec) | |||
65 | seq_printf(p, " Spurious interrupts\n"); | 65 | seq_printf(p, " Spurious interrupts\n"); |
66 | #endif | 66 | #endif |
67 | if (generic_interrupt_extension) { | 67 | if (generic_interrupt_extension) { |
68 | seq_printf(p, "PLT: "); | 68 | seq_printf(p, "%*s: ", prec, "PLT"); |
69 | for_each_online_cpu(j) | 69 | for_each_online_cpu(j) |
70 | seq_printf(p, "%10u ", irq_stats(j)->generic_irqs); | 70 | seq_printf(p, "%10u ", irq_stats(j)->generic_irqs); |
71 | seq_printf(p, " Platform interrupts\n"); | 71 | seq_printf(p, " Platform interrupts\n"); |
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 2aef36d8aca2..1340dad417f4 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c | |||
@@ -224,6 +224,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { | |||
224 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"), | 224 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"), |
225 | }, | 225 | }, |
226 | }, | 226 | }, |
227 | { /* Handle problems with rebooting on Dell DXP061 */ | ||
228 | .callback = set_bios_reboot, | ||
229 | .ident = "Dell DXP061", | ||
230 | .matches = { | ||
231 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
232 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"), | ||
233 | }, | ||
234 | }, | ||
227 | { } | 235 | { } |
228 | }; | 236 | }; |
229 | 237 | ||