mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-12 05:36:43 +07:00
874c4fe389
There are some machines around (large xSeries or Unisys ES7000) that need physical IO-APIC destination mode to access all of their IO devices. This currently doesn't work in UP kernels as used in distribution installers. This patch allows to compile even UP kernels as GENERICARCH which allows to use physical or clustered APIC mode. Signed-off-by: Andi Kleen <ak@suse.de>
58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
/*
|
|
* APIC driver for "bigsmp" XAPIC machines with more than 8 virtual CPUs.
|
|
* Drives the local APIC in "clustered mode".
|
|
*/
|
|
#define APIC_DEFINITION 1
|
|
#include <linux/threads.h>
|
|
#include <linux/cpumask.h>
|
|
#include <asm/smp.h>
|
|
#include <asm/mpspec.h>
|
|
#include <asm/genapic.h>
|
|
#include <asm/fixmap.h>
|
|
#include <asm/apicdef.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/smp.h>
|
|
#include <linux/init.h>
|
|
#include <linux/dmi.h>
|
|
#include <asm/mach-bigsmp/mach_apic.h>
|
|
#include <asm/mach-bigsmp/mach_apicdef.h>
|
|
#include <asm/mach-bigsmp/mach_ipi.h>
|
|
#include <asm/mach-default/mach_mpparse.h>
|
|
|
|
static int dmi_bigsmp; /* can be set by dmi scanners */
|
|
|
|
static __init int hp_ht_bigsmp(struct dmi_system_id *d)
|
|
{
|
|
#ifdef CONFIG_X86_GENERICARCH
|
|
printk(KERN_NOTICE "%s detected: force use of apic=bigsmp\n", d->ident);
|
|
dmi_bigsmp = 1;
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
|
|
static struct dmi_system_id __initdata bigsmp_dmi_table[] = {
|
|
{ hp_ht_bigsmp, "HP ProLiant DL760 G2", {
|
|
DMI_MATCH(DMI_BIOS_VENDOR, "HP"),
|
|
DMI_MATCH(DMI_BIOS_VERSION, "P44-"),
|
|
}},
|
|
|
|
{ hp_ht_bigsmp, "HP ProLiant DL740", {
|
|
DMI_MATCH(DMI_BIOS_VENDOR, "HP"),
|
|
DMI_MATCH(DMI_BIOS_VERSION, "P47-"),
|
|
}},
|
|
{ }
|
|
};
|
|
|
|
|
|
static __init int probe_bigsmp(void)
|
|
{
|
|
if (def_to_bigsmp)
|
|
dmi_bigsmp = 1;
|
|
else
|
|
dmi_check_system(bigsmp_dmi_table);
|
|
return dmi_bigsmp;
|
|
}
|
|
|
|
struct genapic apic_bigsmp = APIC_INIT("bigsmp", probe_bigsmp);
|