|
@@ -108,7 +108,27 @@ static int srvrworks_csb5_delay;
|
|
|
static struct pci_driver piix4_driver;
|
|
|
static struct i2c_adapter piix4_adapter;
|
|
|
|
|
|
-static struct dmi_system_id __devinitdata piix4_dmi_table[] = {
|
|
|
+static struct dmi_system_id __devinitdata piix4_dmi_blacklist[] = {
|
|
|
+ {
|
|
|
+ .ident = "Sapphire AM2RD790",
|
|
|
+ .matches = {
|
|
|
+ DMI_MATCH(DMI_BOARD_VENDOR, "SAPPHIRE Inc."),
|
|
|
+ DMI_MATCH(DMI_BOARD_NAME, "PC-AM2RD790"),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .ident = "DFI Lanparty UT 790FX",
|
|
|
+ .matches = {
|
|
|
+ DMI_MATCH(DMI_BOARD_VENDOR, "DFI Inc."),
|
|
|
+ DMI_MATCH(DMI_BOARD_NAME, "LP UT 790FX"),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ { }
|
|
|
+};
|
|
|
+
|
|
|
+/* The IBM entry is in a separate table because we only check it
|
|
|
+ on Intel-based systems */
|
|
|
+static struct dmi_system_id __devinitdata piix4_dmi_ibm[] = {
|
|
|
{
|
|
|
.ident = "IBM",
|
|
|
.matches = { DMI_MATCH(DMI_SYS_VENDOR, "IBM"), },
|
|
@@ -127,8 +147,16 @@ static int __devinit piix4_setup(struct pci_dev *PIIX4_dev,
|
|
|
(PIIX4_dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5))
|
|
|
srvrworks_csb5_delay = 1;
|
|
|
|
|
|
+ /* On some motherboards, it was reported that accessing the SMBus
|
|
|
+ caused severe hardware problems */
|
|
|
+ if (dmi_check_system(piix4_dmi_blacklist)) {
|
|
|
+ dev_err(&PIIX4_dev->dev,
|
|
|
+ "Accessing the SMBus on this system is unsafe!\n");
|
|
|
+ return -EPERM;
|
|
|
+ }
|
|
|
+
|
|
|
/* Don't access SMBus on IBM systems which get corrupted eeproms */
|
|
|
- if (dmi_check_system(piix4_dmi_table) &&
|
|
|
+ if (dmi_check_system(piix4_dmi_ibm) &&
|
|
|
PIIX4_dev->vendor == PCI_VENDOR_ID_INTEL) {
|
|
|
dev_err(&PIIX4_dev->dev, "IBM system detected; this module "
|
|
|
"may corrupt your serial eeprom! Refusing to load "
|