diff options
Diffstat (limited to 'drivers/net/ethernet/marvell/sky2.c')
-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 82c2c86a195..423a1a2a702 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); |