mirror of
https://github.com/memtest86plus/memtest86plus
synced 2025-03-13 09:23:10 +03:00
Add a quirk to disable SMP on SuperMicro X10SDV (#244)
This commit is contained in:
parent
b15a8bb632
commit
485bfa46a3
@ -72,8 +72,8 @@ void quirks_init(void)
|
||||
{
|
||||
quirk.id = QUIRK_NONE;
|
||||
quirk.type = QUIRK_TYPE_NONE;
|
||||
quirk.root_vid = pci_config_read16(0, 0, 0, 0);
|
||||
quirk.root_did = pci_config_read16(0, 0, 0, 2);
|
||||
quirk.root_vid = pci_config_read16(0, 0, 0, PCI_VID_REG);
|
||||
quirk.root_did = pci_config_read16(0, 0, 0, PCI_DID_REG);
|
||||
quirk.process = NULL;
|
||||
|
||||
// -------------------------
|
||||
@ -93,13 +93,26 @@ void quirks_init(void)
|
||||
// This motherboard has an ASB100 ASIC with a SMBUS Mux Integrated.
|
||||
// To access SPD later in the code, we need to configure the mux.
|
||||
// PS: Detection via DMI is unreliable, so using Root PCI Registers
|
||||
if (quirk.root_vid == PCI_VID_INTEL && quirk.root_did == 0x1130) { // Intel i815
|
||||
if (pci_config_read16(0, 0, 0, 0x2C) == PCI_VID_ASUS) { // ASUS
|
||||
if (pci_config_read16(0, 0, 0, 0x2E) == 0x8027) { // TUSL2-C
|
||||
if (quirk.root_vid == PCI_VID_INTEL && quirk.root_did == 0x1130) { // Intel i815
|
||||
if (pci_config_read16(0, 0, 0, PCI_SUB_VID_REG) == PCI_VID_ASUS) { // ASUS
|
||||
if (pci_config_read16(0, 0, 0, PCI_SUB_DID_REG) == 0x8027) { // TUSL2-C
|
||||
quirk.id = QUIRK_TUSL2;
|
||||
quirk.type |= QUIRK_TYPE_SMBUS;
|
||||
quirk.process = asus_tusl2_configure_mux;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------
|
||||
// -- SuperMicro X10SDV Quirk (GitHub Issue #233) --
|
||||
// -------------------------------------------------
|
||||
// Memtest86+ crashs on Super Micro X10SDV motherboard with SMP Enabled
|
||||
// We were unable to find a solution so far, so disable SMP by default
|
||||
if (quirk.root_vid == PCI_VID_INTEL && quirk.root_did == 0x6F00) { // Broadwell-E (Xeon-D)
|
||||
if (pci_config_read16(0, 0, 0, PCI_SUB_VID_REG) == PCI_VID_SUPERMICRO) { // Super Micro
|
||||
quirk.id = QUIRK_X10SDV_NOSMP;
|
||||
quirk.type |= QUIRK_TYPE_SMP;
|
||||
quirk.process = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,8 @@
|
||||
typedef enum {
|
||||
QUIRK_NONE,
|
||||
QUIRK_TUSL2,
|
||||
QUIRK_ALI_ALADDIN_V
|
||||
QUIRK_ALI_ALADDIN_V,
|
||||
QUIRK_X10SDV_NOSMP
|
||||
} quirk_id_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -12,6 +12,11 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define PCI_VID_REG 0x00
|
||||
#define PCI_DID_REG 0x02
|
||||
#define PCI_SUB_VID_REG 0x2C
|
||||
#define PCI_SUB_DID_REG 0x2E
|
||||
|
||||
/* Vendor IDs */
|
||||
#define PCI_VID_ATI 0x1002
|
||||
#define PCI_VID_AMD 0x1022
|
||||
@ -22,6 +27,7 @@
|
||||
#define PCI_VID_NVIDIA 0x10DE
|
||||
#define PCI_VID_VIA 0x1106
|
||||
#define PCI_VID_SERVERWORKS 0x1166
|
||||
#define PCI_VID_SUPERMICRO 0x15D9
|
||||
#define PCI_VID_HYGON 0x1D94
|
||||
#define PCI_VID_INTEL 0x8086
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include "cpuid.h"
|
||||
#include "heap.h"
|
||||
#include "hwquirks.h"
|
||||
#include "memrw32.h"
|
||||
#include "memsize.h"
|
||||
#include "msr.h"
|
||||
@ -539,6 +540,12 @@ void smp_init(bool smp_enable)
|
||||
}
|
||||
}
|
||||
|
||||
// Process SMP Quirks
|
||||
if (quirk.type & QUIRK_TYPE_SMP) {
|
||||
// quirk.process();
|
||||
smp_enable = false;
|
||||
}
|
||||
|
||||
if (smp_enable) {
|
||||
(void)(find_cpus_in_madt() || find_cpus_in_floating_mp_struct());
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user