From fdd90c3c5bad6012360cce37737d6b85212a1af6 Mon Sep 17 00:00:00 2001 From: Len Brown Date: Sun, 10 Oct 2004 04:56:59 -0400 Subject: [PATCH] Cset exclude: len.brown@intel.com|ChangeSet|20041010081245|01886 --- arch/i386/kernel/apic.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c index 2c647f98a4f48..8042a1472501e 100644 --- a/arch/i386/kernel/apic.c +++ b/arch/i386/kernel/apic.c @@ -690,8 +690,22 @@ static int __init detect_init_APIC (void) goto no_apic; } - if (!cpu_has_apic) - goto no_apic; + if (!cpu_has_apic) { + /* + * Some BIOSes disable the local APIC in the + * APIC_BASE MSR. This can only be done in + * software for Intel P6 and AMD K7 (Model > 1). + */ + rdmsr(MSR_IA32_APICBASE, l, h); + if (!(l & MSR_IA32_APICBASE_ENABLE)) { + apic_printk(APIC_VERBOSE, "Local APIC disabled " + "by BIOS -- reenabling.\n"); + l &= ~MSR_IA32_APICBASE_BASE; + l |= MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE; + wrmsr(MSR_IA32_APICBASE, l, h); + enabled_via_apicbase = 1; + } + } /* * The APIC feature bit should now be enabled * in `cpuid' -- 2.53.0