]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Summit: MPS table detection
authorMartin J. Bligh <martin.bligh@us.ibm.com>
Tue, 15 Oct 2002 12:38:02 +0000 (05:38 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Tue, 15 Oct 2002 12:38:02 +0000 (05:38 -0700)
Adds detection for summit machines from the MPS tables.
Prints a handy-dandy debug message telling you what kind of twisted
machine the kernel thinks you have.

arch/i386/kernel/mpparse.c
arch/i386/mach-generic/mach_apic.h
arch/i386/mach-summit/mach_apic.h

index 2f6f8b504523715f50b13fa224ca13a6b656083d..0768f1f09941a087a57265fe43531f4a648af3af 100644 (file)
@@ -30,6 +30,7 @@
 #include <asm/mpspec.h>
 #include <asm/pgalloc.h>
 #include <asm/io_apic.h>
+#include "mach_apic.h"
 
 /* Have we found an MP table */
 int smp_found_config;
@@ -69,6 +70,8 @@ static unsigned int __initdata num_processors;
 /* Bitmask of physically existing CPUs */
 unsigned long phys_cpu_present_map;
 
+int summit_x86 = 0;
+
 /*
  * Intel MP BIOS table parsing routines:
  */
@@ -356,6 +359,7 @@ static void __init smp_read_mpc_oem(struct mp_config_oemtable *oemtable, \
 static int __init smp_read_mpc(struct mp_config_table *mpc)
 {
        char str[16];
+       char oem[10];
        int count=sizeof(*mpc);
        unsigned char *mpt=((unsigned char *)mpc)+count;
 
@@ -380,14 +384,16 @@ static int __init smp_read_mpc(struct mp_config_table *mpc)
                printk(KERN_ERR "SMP mptable: null local APIC address!\n");
                return 0;
        }
-       memcpy(str,mpc->mpc_oem,8);
-       str[8]=0;
-       printk("OEM ID: %s ",str);
+       memcpy(oem,mpc->mpc_oem,8);
+       oem[8]=0;
+       printk("OEM ID: %s ",oem);
 
        memcpy(str,mpc->mpc_productid,12);
        str[12]=0;
        printk("Product ID: %s ",str);
 
+       summit_check(oem, str);
+
        printk("APIC at: 0x%lX\n",mpc->mpc_lapic);
 
        /* 
@@ -465,6 +471,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc)
                }
                ++mpc_record;
        }
+       clustered_apic_check();
        if (!num_processors)
                printk(KERN_ERR "SMP mptable: no processors registered!\n");
        return num_processors;
index ea38d35c8dedb6cf319b7df4f6b281a86b16f804..6b3dd2e232cc2668dbf9ab03c0d5fa7e83033cac 100644 (file)
@@ -20,4 +20,14 @@ static inline unsigned long calculate_ldr(unsigned long old)
 #define APIC_BROADCAST_ID      0x0F
 #define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid))
 
+static inline void summit_check(char *oem, char *productid) 
+{
+}
+
+static inline void clustered_apic_check(void)
+{
+       printk("Enabling APIC mode:  %s.  Using %d I/O APICs\n",
+               (clustered_apic_mode ? "NUMA-Q" : "Flat"), nr_ioapics);
+}
+
 #endif /* __ASM_MACH_APIC_H */
index 5b2a6999c968a07f298a61e638b09704a751105d..0c21ed845c1a8000e26867437fda59f12585fdcf 100644 (file)
@@ -26,4 +26,16 @@ static inline unsigned long calculate_ldr(unsigned long old)
 #define APIC_BROADCAST_ID     (x86_summit ? 0xFF : 0x0F)
 #define check_apicid_used(bitmap, apicid) (0)
 
+static inline void summit_check(char *oem, char *productid)
+{
+       if (!strncmp(oem, "IBM ENSW", 8) && !strncmp(str, "VIGIL SMP", 9))
+               x86_summit = 1;
+}
+
+static inline void clustered_apic_check(void)
+{
+       printk("Enabling APIC mode:  %s.  Using %d I/O APICs\n",
+               (x86_summit ? "Summit" : "Flat"), nr_ioapics);
+}
+
 #endif /* __ASM_MACH_APIC_H */