diff options
| -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 | ||
