| From stable-bounces@linux.kernel.org Mon May 12 08:34:37 2008 |
| From: Jean Delvare <khali@linux-fr.org> |
| Date: Mon, 12 May 2008 16:21:24 +0200 |
| Subject: i2c-piix4: Blacklist two mainboards |
| To: stable@kernel.org |
| Message-ID: <20080512162124.21baa05f@hyperion.delvare> |
| |
| From: Jean Delvare <khali@linux-fr.org> |
| |
| commit c2fc54fcd340cbee47510aa84c346aab3440ba09 upstream |
| |
| We had a report that running sensors-detect on a Sapphire AM2RD790 |
| motherbord killed the CPU. While the exact cause is still unknown, |
| I'd rather play it safe and prevent any access to the SMBus on that |
| machine by not letting the i2c-piix4 driver attach to the SMBus host |
| device on that machine. Also blacklist a similar board made by DFI. |
| |
| Signed-off-by: Jean Delvare <khali@linux-fr.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/i2c/busses/i2c-piix4.c | 32 ++++++++++++++++++++++++++++++-- |
| 1 file changed, 30 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/i2c/busses/i2c-piix4.c |
| +++ b/drivers/i2c/busses/i2c-piix4.c |
| @@ -108,7 +108,27 @@ static unsigned short piix4_smba; |
| 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"), }, |
| @@ -123,8 +143,16 @@ static int __devinit piix4_setup(struct |
| |
| dev_info(&PIIX4_dev->dev, "Found %s device\n", pci_name(PIIX4_dev)); |
| |
| + /* 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 " |