via-rhine: set avoid_D3 for broken BIOSes

This patch sets avoid_D3 for BIOSes known to be broken. Said BIOSes fail
at PXE boot if the chip is in power state D3.

Signed-off-by: Roger Luethi <rl@hellgate.ch>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
Roger Luethi 2007-03-06 19:57:37 +01:00 committed by Jeff Garzik
parent d0035aef39
commit e84df485c8

View file

@ -30,8 +30,8 @@
*/
#define DRV_NAME "via-rhine"
#define DRV_VERSION "1.4.2"
#define DRV_RELDATE "Sept-11-2006"
#define DRV_VERSION "1.4.3"
#define DRV_RELDATE "2007-03-06"
/* A few user-configurable values.
@ -105,6 +105,7 @@ static const int multicast_filter_limit = 32;
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/uaccess.h>
#include <linux/dmi.h>
/* These identify the driver base version and may not be removed. */
static char version[] __devinitdata =
@ -1995,6 +1996,23 @@ static struct pci_driver rhine_driver = {
.shutdown = rhine_shutdown,
};
static struct dmi_system_id __initdata rhine_dmi_table[] = {
{
.ident = "EPIA-M",
.matches = {
DMI_MATCH(DMI_BIOS_VENDOR, "Award Software International, Inc."),
DMI_MATCH(DMI_BIOS_VERSION, "6.00 PG"),
},
},
{
.ident = "KV7",
.matches = {
DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"),
DMI_MATCH(DMI_BIOS_VERSION, "6.00 PG"),
},
},
{ NULL }
};
static int __init rhine_init(void)
{
@ -2002,6 +2020,16 @@ static int __init rhine_init(void)
#ifdef MODULE
printk(version);
#endif
if (dmi_check_system(rhine_dmi_table)) {
/* these BIOSes fail at PXE boot if chip is in D3 */
avoid_D3 = 1;
printk(KERN_WARNING "%s: Broken BIOS detected, avoid_D3 "
"enabled.\n",
DRV_NAME);
}
else if (avoid_D3)
printk(KERN_INFO "%s: avoid_D3 set.\n", DRV_NAME);
return pci_register_driver(&rhine_driver);
}