Acer Predator G5910: Wake-on-LAN from power-off under Linux

Tested on Ubuntu 24.04, kernel 6.8, 2026-10-28. Board: Acer Predator G5910, Intel P67, BIOS P01-A4, onboard Intel 82579V (e1000e).

Short version: disable Deep Power Off Mode in the BIOS, then install the s5direct kernel module. On this board, Linux has to skip the BIOS's broken power-off routine (see Linux won't power off), and that routine is also where the chipset gets set up to let the LAN wake the PC. The module powers off the same way but sets the chipset's WOL_EN_OVRD bit first. A magic packet then wakes the PC in about 45 seconds.

Symptoms

Two separate causes

1. BIOS: Deep Power Off Mode

In the BIOS Power tab, Deep Power Off Mode (Intel "Deep S5") cuts standby power to almost everything when the PC is off, the LAN PHY included. Set it to Disabled, and check that Power On by Onboard LAN and Power On by PCIE Devices are Enabled. The PC then uses 1–2 W more while it's off.

That alone did not fix it.

2. The BIOS power-off routine that Linux has to skip

Plain Linux power-off doesn't work on this board. The ACPI _PTS method sets SLP_SMI_EN, so the final "enter S5" write traps into a BIOS SMI handler, and under Linux that handler never finishes. Both workarounds, GRUB's halt and a raw S5 write from a shutdown hook, power off without that handler. But that handler also prepares the chipset for wake-on-LAN, so with any workaround that setup never happens. Two things go missing:

The registers (Intel 6 Series / C200 datasheet, 324645)

GEN_PMCON_3 bit 8
SLP_LAN_DEFAULT
Value of SLP_LAN# in Sx when nothing else sets it. 1 = LAN PHY stays powered. Already 1 here.
GEN_PMCON_3 bit 13
WOL_EN_OVRD
1 = the integrated LAN may wake the system from S5, whatever PME_B0_EN says. This was the missing bit.
GEN_PMCON_3 bit 15
PME_B0_S5_DIS
1 blocks PME_B0 wake from S5. Keep it at 0.
GPIO29 (SLP_LAN#)If the BIOS set it as an output, its level decides SLP_LAN# in Sx (Table 5-37). Here it was an output at level 1.
Bits 1, 9, 14Write-1-to-clear status bits (PWR_FLR, GEN_RST_STS, SUS_PWR_FLR). Mask them out on a read-modify-write.

The fix (works)

Install the s5direct kernel module. It hooks into the kernel's own power-off sequence and runs at two points:

  1. Prepare (after ACPI's prepare step, before drivers shut down): re-enables the ACPI wake GPEs, then sets SLP_LAN_DEFAULT and WOL_EN_OVRD and clears PME_B0_S5_DIS.
  2. Power-off (after drivers shut down, so e1000e has armed the PHY): clears SLP_SMI_EN (port 0x430, bit 4) and writes SLP_TYP | SLP_EN = 0x3C00 to PM1a_CNT (port 0x404), like GRUB.
git clone https://github.com/jy-roda/acer-predator-g5910-linux-poweroff-wol.git
cd acer-predator-g5910-linux-poweroff-wol
sudo sh install.sh

The script builds the module with DKMS, so it's rebuilt on kernel updates, and loads it at boot. It adds a udev rule that sets wol g on the wired NIC, and installs the raw-write shell hook as a fallback for when the module isn't loaded (power-off still works then, without wake-on-LAN).

Test it: sudo poweroff. The port LEDs should stay lit. Then, from another machine on the LAN:

wakeonlan f8:0f:41:11:c9:d3      # Linux, package "wakeonlan"; use your NIC's MAC
# or Windows PowerShell:
$m=[byte[]]('f8:0f:41:11:c9:d3' -split ':' | % {[Convert]::ToByte($_,16)})
$p=[byte[]](,0xFF*6)+($m*16); $u=New-Object Net.Sockets.UdpClient; $u.EnableBroadcast=$true
[void]$u.Send($p,$p.Length,'255.255.255.255',9)

It woke in 43–56 seconds in three tests (most of that is POST and boot, until it answered ping).

What did not help

Other boards

The same pattern (an ACPI _PTS that sets an SMI-on-sleep bit, and a BIOS SMI handler that owns wake-on-LAN setup) is common on AMI boards of that era. The register bits above are for Intel 6-series PCHs and are probably similar on 5/7-series, but check your datasheet first. The README explains how to read your own port addresses from the ACPI tables.