On corporate (CSME) ADL systems, the Ethernet Controller may stop working ("HW unit hang") after exiting from the s0ix state. The reason is that CSME misses the message sent by the host. Enabling the dynamic GPT clock solves this problem. This clock is cleared upon HW initialization.
Unified · Split
| @@ -6494,6 +6494,10 @@ static void e1000e_s0ix_exit_flow(struct e1000_adapter *adapter) · 6493 unmodified lines | |||
| 6494 | 6494 | ||
| 6495 | if (er32(FWSM) & E1000_ICH_FWSM_FW_VALID && | 6495 | if (er32(FWSM) & E1000_ICH_FWSM_FW_VALID && |
| 6496 | hw->mac.type >= e1000_pch_adp) { | 6496 | hw->mac.type >= e1000_pch_adp) { |
| 6497 | /* Keep the GPT clock enabled for CSME */ | ||
| 6498 | mac_data = er32(FEXTNVM); | ||
| 6499 | mac_data |= BIT(3); | ||
| 6500 | ew32(FEXTNVM, mac_data); | ||
| 6497 | /* Request ME unconfigure the device from S0ix */ | 6501 | /* Request ME unconfigure the device from S0ix */ |
| 6498 | mac_data = er32(H2ME); | 6502 | mac_data = er32(H2ME); |
| 6499 | mac_data &= ~E1000_H2ME_START_DPG; | 6503 | mac_data &= ~E1000_H2ME_START_DPG; |