mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 19:56:18 +00:00
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
This commit is contained in:
commit
e66dd19092
7 changed files with 35 additions and 18 deletions
|
@ -252,17 +252,13 @@ config SMP
|
||||||
|
|
||||||
config X86_X2APIC
|
config X86_X2APIC
|
||||||
bool "Support x2apic"
|
bool "Support x2apic"
|
||||||
depends on X86_LOCAL_APIC && X86_64
|
depends on X86_LOCAL_APIC && X86_64 && INTR_REMAP
|
||||||
select INTR_REMAP
|
|
||||||
---help---
|
---help---
|
||||||
This enables x2apic support on CPUs that have this feature.
|
This enables x2apic support on CPUs that have this feature.
|
||||||
|
|
||||||
This allows 32-bit apic IDs (so it can support very large systems),
|
This allows 32-bit apic IDs (so it can support very large systems),
|
||||||
and accesses the local apic via MSRs not via mmio.
|
and accesses the local apic via MSRs not via mmio.
|
||||||
|
|
||||||
( On certain CPU models you may need to enable INTR_REMAP too,
|
|
||||||
to get functional x2apic mode. )
|
|
||||||
|
|
||||||
If you don't know what to do here, say N.
|
If you don't know what to do here, say N.
|
||||||
|
|
||||||
config SPARSE_IRQ
|
config SPARSE_IRQ
|
||||||
|
|
|
@ -129,22 +129,18 @@ u16 vga_crtc(void)
|
||||||
return (inb(0x3cc) & 1) ? 0x3d4 : 0x3b4;
|
return (inb(0x3cc) & 1) ? 0x3d4 : 0x3b4;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vga_set_480_scanlines(int lines)
|
static void vga_set_480_scanlines(void)
|
||||||
{
|
{
|
||||||
u16 crtc; /* CRTC base address */
|
u16 crtc; /* CRTC base address */
|
||||||
u8 csel; /* CRTC miscellaneous output register */
|
u8 csel; /* CRTC miscellaneous output register */
|
||||||
u8 ovfw; /* CRTC overflow register */
|
|
||||||
int end = lines-1;
|
|
||||||
|
|
||||||
crtc = vga_crtc();
|
crtc = vga_crtc();
|
||||||
|
|
||||||
ovfw = 0x3c | ((end >> (8-1)) & 0x02) | ((end >> (9-6)) & 0x40);
|
|
||||||
|
|
||||||
out_idx(0x0c, crtc, 0x11); /* Vertical sync end, unlock CR0-7 */
|
out_idx(0x0c, crtc, 0x11); /* Vertical sync end, unlock CR0-7 */
|
||||||
out_idx(0x0b, crtc, 0x06); /* Vertical total */
|
out_idx(0x0b, crtc, 0x06); /* Vertical total */
|
||||||
out_idx(ovfw, crtc, 0x07); /* Vertical overflow */
|
out_idx(0x3e, crtc, 0x07); /* Vertical overflow */
|
||||||
out_idx(0xea, crtc, 0x10); /* Vertical sync start */
|
out_idx(0xea, crtc, 0x10); /* Vertical sync start */
|
||||||
out_idx(end, crtc, 0x12); /* Vertical display end */
|
out_idx(0xdf, crtc, 0x12); /* Vertical display end */
|
||||||
out_idx(0xe7, crtc, 0x15); /* Vertical blank start */
|
out_idx(0xe7, crtc, 0x15); /* Vertical blank start */
|
||||||
out_idx(0x04, crtc, 0x16); /* Vertical blank end */
|
out_idx(0x04, crtc, 0x16); /* Vertical blank end */
|
||||||
csel = inb(0x3cc);
|
csel = inb(0x3cc);
|
||||||
|
@ -153,21 +149,38 @@ static void vga_set_480_scanlines(int lines)
|
||||||
outb(csel, 0x3c2);
|
outb(csel, 0x3c2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void vga_set_vertical_end(int lines)
|
||||||
|
{
|
||||||
|
u16 crtc; /* CRTC base address */
|
||||||
|
u8 ovfw; /* CRTC overflow register */
|
||||||
|
int end = lines-1;
|
||||||
|
|
||||||
|
crtc = vga_crtc();
|
||||||
|
|
||||||
|
ovfw = 0x3c | ((end >> (8-1)) & 0x02) | ((end >> (9-6)) & 0x40);
|
||||||
|
|
||||||
|
out_idx(ovfw, crtc, 0x07); /* Vertical overflow */
|
||||||
|
out_idx(end, crtc, 0x12); /* Vertical display end */
|
||||||
|
}
|
||||||
|
|
||||||
static void vga_set_80x30(void)
|
static void vga_set_80x30(void)
|
||||||
{
|
{
|
||||||
vga_set_480_scanlines(30*16);
|
vga_set_480_scanlines();
|
||||||
|
vga_set_vertical_end(30*16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vga_set_80x34(void)
|
static void vga_set_80x34(void)
|
||||||
{
|
{
|
||||||
|
vga_set_480_scanlines();
|
||||||
vga_set_14font();
|
vga_set_14font();
|
||||||
vga_set_480_scanlines(34*14);
|
vga_set_vertical_end(34*14);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vga_set_80x60(void)
|
static void vga_set_80x60(void)
|
||||||
{
|
{
|
||||||
|
vga_set_480_scanlines();
|
||||||
vga_set_8font();
|
vga_set_8font();
|
||||||
vga_set_480_scanlines(60*8);
|
vga_set_vertical_end(60*8);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vga_set_mode(struct mode_info *mode)
|
static int vga_set_mode(struct mode_info *mode)
|
||||||
|
|
0
arch/x86/include/asm/cpu_debug.h
Executable file → Normal file
0
arch/x86/include/asm/cpu_debug.h
Executable file → Normal file
|
@ -212,7 +212,7 @@ struct apic apic_flat = {
|
||||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||||
.wait_for_init_deassert = NULL,
|
.wait_for_init_deassert = NULL,
|
||||||
.smp_callin_clear_local_apic = NULL,
|
.smp_callin_clear_local_apic = NULL,
|
||||||
.inquire_remote_apic = NULL,
|
.inquire_remote_apic = default_inquire_remote_apic,
|
||||||
|
|
||||||
.read = native_apic_mem_read,
|
.read = native_apic_mem_read,
|
||||||
.write = native_apic_mem_write,
|
.write = native_apic_mem_write,
|
||||||
|
@ -362,7 +362,7 @@ struct apic apic_physflat = {
|
||||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||||
.wait_for_init_deassert = NULL,
|
.wait_for_init_deassert = NULL,
|
||||||
.smp_callin_clear_local_apic = NULL,
|
.smp_callin_clear_local_apic = NULL,
|
||||||
.inquire_remote_apic = NULL,
|
.inquire_remote_apic = default_inquire_remote_apic,
|
||||||
|
|
||||||
.read = native_apic_mem_read,
|
.read = native_apic_mem_read,
|
||||||
.write = native_apic_mem_write,
|
.write = native_apic_mem_write,
|
||||||
|
|
0
arch/x86/kernel/cpu/cpu_debug.c
Executable file → Normal file
0
arch/x86/kernel/cpu/cpu_debug.c
Executable file → Normal file
|
@ -65,7 +65,7 @@ static int show_other_interrupts(struct seq_file *p, int prec)
|
||||||
seq_printf(p, " Spurious interrupts\n");
|
seq_printf(p, " Spurious interrupts\n");
|
||||||
#endif
|
#endif
|
||||||
if (generic_interrupt_extension) {
|
if (generic_interrupt_extension) {
|
||||||
seq_printf(p, "PLT: ");
|
seq_printf(p, "%*s: ", prec, "PLT");
|
||||||
for_each_online_cpu(j)
|
for_each_online_cpu(j)
|
||||||
seq_printf(p, "%10u ", irq_stats(j)->generic_irqs);
|
seq_printf(p, "%10u ", irq_stats(j)->generic_irqs);
|
||||||
seq_printf(p, " Platform interrupts\n");
|
seq_printf(p, " Platform interrupts\n");
|
||||||
|
|
|
@ -224,6 +224,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{ /* Handle problems with rebooting on Dell DXP061 */
|
||||||
|
.callback = set_bios_reboot,
|
||||||
|
.ident = "Dell DXP061",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue