Commit 8d7dfcd0 authored by Martin J. Bligh's avatar Martin J. Bligh Committed by Linus Torvalds

[PATCH] Summit: MPS table detection

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.
parent f0175f7f
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <asm/mpspec.h> #include <asm/mpspec.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/io_apic.h> #include <asm/io_apic.h>
#include "mach_apic.h"
/* Have we found an MP table */ /* Have we found an MP table */
int smp_found_config; int smp_found_config;
...@@ -69,6 +70,8 @@ static unsigned int __initdata num_processors; ...@@ -69,6 +70,8 @@ static unsigned int __initdata num_processors;
/* Bitmask of physically existing CPUs */ /* Bitmask of physically existing CPUs */
unsigned long phys_cpu_present_map; unsigned long phys_cpu_present_map;
int summit_x86 = 0;
/* /*
* Intel MP BIOS table parsing routines: * Intel MP BIOS table parsing routines:
*/ */
...@@ -356,6 +359,7 @@ static void __init smp_read_mpc_oem(struct mp_config_oemtable *oemtable, \ ...@@ -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) static int __init smp_read_mpc(struct mp_config_table *mpc)
{ {
char str[16]; char str[16];
char oem[10];
int count=sizeof(*mpc); int count=sizeof(*mpc);
unsigned char *mpt=((unsigned char *)mpc)+count; unsigned char *mpt=((unsigned char *)mpc)+count;
...@@ -380,14 +384,16 @@ static int __init smp_read_mpc(struct mp_config_table *mpc) ...@@ -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"); printk(KERN_ERR "SMP mptable: null local APIC address!\n");
return 0; return 0;
} }
memcpy(str,mpc->mpc_oem,8); memcpy(oem,mpc->mpc_oem,8);
str[8]=0; oem[8]=0;
printk("OEM ID: %s ",str); printk("OEM ID: %s ",oem);
memcpy(str,mpc->mpc_productid,12); memcpy(str,mpc->mpc_productid,12);
str[12]=0; str[12]=0;
printk("Product ID: %s ",str); printk("Product ID: %s ",str);
summit_check(oem, str);
printk("APIC at: 0x%lX\n",mpc->mpc_lapic); printk("APIC at: 0x%lX\n",mpc->mpc_lapic);
/* /*
...@@ -465,6 +471,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc) ...@@ -465,6 +471,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc)
} }
++mpc_record; ++mpc_record;
} }
clustered_apic_check();
if (!num_processors) if (!num_processors)
printk(KERN_ERR "SMP mptable: no processors registered!\n"); printk(KERN_ERR "SMP mptable: no processors registered!\n");
return num_processors; return num_processors;
......
...@@ -20,4 +20,14 @@ static inline unsigned long calculate_ldr(unsigned long old) ...@@ -20,4 +20,14 @@ static inline unsigned long calculate_ldr(unsigned long old)
#define APIC_BROADCAST_ID 0x0F #define APIC_BROADCAST_ID 0x0F
#define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid)) #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 */ #endif /* __ASM_MACH_APIC_H */
...@@ -26,4 +26,16 @@ static inline unsigned long calculate_ldr(unsigned long old) ...@@ -26,4 +26,16 @@ static inline unsigned long calculate_ldr(unsigned long old)
#define APIC_BROADCAST_ID (x86_summit ? 0xFF : 0x0F) #define APIC_BROADCAST_ID (x86_summit ? 0xFF : 0x0F)
#define check_apicid_used(bitmap, apicid) (0) #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 */ #endif /* __ASM_MACH_APIC_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment