tg3 is supposed to enable WoL by default on adapters which support that, but it fails to do so unless the adapter's /sys/devices/.../power/wakeup file contains 'enabled' during the initialization of the adapter. Fix that by making tg3 use device_set_wakeup_enable() to enable wakeup automatically whenever WoL should be enabled by default.
Unified · Split
| @@ -12327,8 +12327,10 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) · 12326 unmodified lines | ||
| 12327 | 12327 | if (val & VCPU_CFGSHDW_ASPM_DBNC) |
| 12328 | 12328 | tp->tg3_flags |= TG3_FLAG_ASPM_WORKAROUND; |
| 12329 | 12329 | if ((val & VCPU_CFGSHDW_WOL_ENABLE) && |
| 12330 | − (val & VCPU_CFGSHDW_WOL_MAGPKT)) | |
| 12330 | + (val & VCPU_CFGSHDW_WOL_MAGPKT)) { | |
| 12331 | 12331 | tp->tg3_flags |= TG3_FLAG_WOL_ENABLE; |
| 12332 | + device_set_wakeup_enable(&tp->pdev->dev, true); | |
| 12333 | + } | |
| 12332 | 12334 | goto done; |
| 12333 | 12335 | } |
| 12334 | 12336 | |
| @@ -12461,8 +12463,10 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) · 126 unmodified lines | ||
| 12461 | 12463 | tp->tg3_flags &= ~TG3_FLAG_WOL_CAP; |
| 12462 | 12464 | |
| 12463 | 12465 | if ((tp->tg3_flags & TG3_FLAG_WOL_CAP) && |
| 12464 | − (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) | |
| 12466 | + (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { | |
| 12465 | 12467 | tp->tg3_flags |= TG3_FLAG_WOL_ENABLE; |
| 12468 | + device_set_wakeup_enable(&tp->pdev->dev, true); | |
| 12469 | + } | |
| 12466 | 12470 | |
| 12467 | 12471 | if (cfg2 & (1 << 17)) |
| 12468 | 12472 | tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; |