diff options
author | stephen hemminger <shemminger@vyatta.com> | 2012-03-21 01:32:05 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-03-21 16:54:36 -0400 |
commit | 5676cc7bfe1e388e87843f71daa229610385b41e (patch) | |
tree | a46908a8b9e428e4689fd58d6c3b50fd53781993 | |
parent | 2a2a459eeeff48640dc557548ce576d666ab06ed (diff) |
sky2: override for PCI legacy power management
Some BIOS's don't setup power management correctly (what else is
new) and don't allow use of PCI Express power control. Add a special
exception module parameter to allow working around this issue.
Based on slightly different patch by Knut Petersen.
Reported-by: Arkadiusz Miskiewicz <arekm@maven.pl>
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/marvell/sky2.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c index 82c2c86a1951..423a1a2a702e 100644 --- a/drivers/net/ethernet/marvell/sky2.c +++ b/drivers/net/ethernet/marvell/sky2.c | |||
@@ -95,6 +95,10 @@ static int disable_msi = 0; | |||
95 | module_param(disable_msi, int, 0); | 95 | module_param(disable_msi, int, 0); |
96 | MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)"); | 96 | MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)"); |
97 | 97 | ||
98 | static int legacy_pme = 0; | ||
99 | module_param(legacy_pme, int, 0); | ||
100 | MODULE_PARM_DESC(legacy_pme, "Legacy power management"); | ||
101 | |||
98 | static DEFINE_PCI_DEVICE_TABLE(sky2_id_table) = { | 102 | static DEFINE_PCI_DEVICE_TABLE(sky2_id_table) = { |
99 | { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9000) }, /* SK-9Sxx */ | 103 | { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9000) }, /* SK-9Sxx */ |
100 | { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9E00) }, /* SK-9Exx */ | 104 | { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9E00) }, /* SK-9Exx */ |
@@ -867,6 +871,13 @@ static void sky2_wol_init(struct sky2_port *sky2) | |||
867 | /* Disable PiG firmware */ | 871 | /* Disable PiG firmware */ |
868 | sky2_write16(hw, B0_CTST, Y2_HW_WOL_OFF); | 872 | sky2_write16(hw, B0_CTST, Y2_HW_WOL_OFF); |
869 | 873 | ||
874 | /* Needed by some broken BIOSes, use PCI rather than PCI-e for WOL */ | ||
875 | if (legacy_pme) { | ||
876 | u32 reg1 = sky2_pci_read32(hw, PCI_DEV_REG1); | ||
877 | reg1 |= PCI_Y2_PME_LEGACY; | ||
878 | sky2_pci_write32(hw, PCI_DEV_REG1, reg1); | ||
879 | } | ||
880 | |||
870 | /* block receiver */ | 881 | /* block receiver */ |
871 | sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RST_SET); | 882 | sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RST_SET); |
872 | sky2_read32(hw, B0_CTST); | 883 | sky2_read32(hw, B0_CTST); |