WOL on Intel I225-V (Rev 03)

So I’m using CachyOS on a machine dual-booting with Windows.

Trying to get WOL to work, system works perfectly fine when powering off from Windows (magic packet is sent, and system wakes up), however I can’t make it work when powering off from Linux, and I’m starting to feel really stupid :expressionless:

This is my Ethernet adapter:

❯ sudo lspci -v -d ::0200
08:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)
	DeviceName: Intel LAN
	Subsystem: ASUSTeK Computer Inc. Device 87d2
	Flags: bus master, fast devsel, latency 0, IRQ 37, IOMMU group 20
	Memory at f4800000 (32-bit, non-prefetchable) [size=1M]
	Memory at f4900000 (32-bit, non-prefetchable) [size=16K]
	Capabilities: [40] Power Management version 3
	Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
	Capabilities: [70] MSI-X: Enable+ Count=5 Masked-
	Capabilities: [a0] Express Endpoint, IntMsgNum 0
	Capabilities: [100] Advanced Error Reporting
	Capabilities: [140] Device Serial Number e8-9c-25-ff-ff-43-63-9e
	Capabilities: [1c0] Latency Tolerance Reporting
	Capabilities: [1f0] Precision Time Measurement
	Capabilities: [1e0] L1 PM Substates
	Kernel driver in use: igc
	Kernel modules: igc

And the driver I’m currently using:

❯ modinfo igc
filename:       /lib/modules/6.15.2-2-cachyos/kernel/drivers/net/ethernet/intel/igc/igc.ko.zst
license:        GPL v2
description:    Intel(R) 2.5G Ethernet Linux Driver
srcversion:     A4B7C375BCBE05927ECA1F6
alias:          pci:v00008086d000015FDsv*sd*bc*sc*i*
alias:          pci:v00008086d0000125Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000125Esv*sd*bc*sc*i*
alias:          pci:v00008086d0000125Dsv*sd*bc*sc*i*
alias:          pci:v00008086d0000125Csv*sd*bc*sc*i*
alias:          pci:v00008086d0000125Bsv*sd*bc*sc*i*
alias:          pci:v00008086d00000D9Fsv*sd*bc*sc*i*
alias:          pci:v00008086d00005503sv*sd*bc*sc*i*
alias:          pci:v00008086d00005502sv*sd*bc*sc*i*
alias:          pci:v00008086d00003102sv*sd*bc*sc*i*
alias:          pci:v00008086d00003101sv*sd*bc*sc*i*
alias:          pci:v00008086d00003100sv*sd*bc*sc*i*
alias:          pci:v00008086d000015F7sv*sd*bc*sc*i*
alias:          pci:v00008086d000015F8sv*sd*bc*sc*i*
alias:          pci:v00008086d000015F3sv*sd*bc*sc*i*
alias:          pci:v00008086d000015F2sv*sd*bc*sc*i*
depends:        ptp
intree:         Y
name:           igc
retpoline:      Y
vermagic:       6.15.2-2-cachyos SMP preempt mod_unload 
sig_id:         PKCS#7
signer:         Build time autogenerated kernel key
sig_key:        2B:C1:99:EB:A2:29:F5:49:DE:E4:13:3E:5D:55:F8:F5:BD:31:8B:EB
sig_hashalgo:   sha512
signature:      30:65:02:30:4A:D3:28:B4:B8:E7:06:B5:68:64:0B:85:08:7A:EE:D7:
		BC:B7:DB:DC:BB:CF:8A:AF:1B:8A:43:2B:C2:1A:EB:D7:11:DF:F5:D2:
		A2:7D:BD:4A:8D:38:D5:D5:E5:7B:9D:9F:02:31:00:B7:A0:2D:B9:AB:
		F3:D0:A8:DB:C5:2C:18:2E:82:20:AC:54:C5:DB:5D:83:33:12:C9:7A:
		37:2B:60:69:81:5E:B8:3E:C5:8A:F7:B3:2C:18:08:0D:B3:7F:64:41:
		0B:22:05
parm:           debug:Debug level (0=none,...,16=all) (int)

And finally this is my NIC config:

❯ sudo ethtool eno1
Settings for eno1:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                       100baseT/Half 100baseT/Full
	                       1000baseT/Full
	                       2500baseT/Full
	Supported pause frame use: Symmetric
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full
	                       100baseT/Half 100baseT/Full
	                       1000baseT/Full
	                       2500baseT/Full
	Advertised pause frame use: Symmetric
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Speed: 2500Mb/s
	Duplex: Full
	Auto-negotiation: on
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	MDI-X: Unknown
	Supports Wake-on: pumbg
	Wake-on: g
        Current message level: 0x00000007 (7)
                               drv probe link
	Link detected: yes

With emphasis on:

	Wake-on: g

And it won’t wake up no matter what command I use to shut down/suspend it. So far I’ve tried with:

shutdown -h now
systemctl poweroff
systemctl suspend

etc… But nothing seems to make any difference.
Power on over PCI-E is enabled on the BIOS, and Fast Boot is disabled, although I don’t think it’s a BIOS related problem since system can wake up perfectly after powering off from Windows.
Motherboard model is ASUS ROG STRIX B650-E Gaming Wi-Fi with an integrated Intel NIC.

Any ideas anyone?

Thanks in advance, and sorry for spelling/grammar.

I’m having the same issue… did you get anywhere on it ?

I actually got mine to work now… these were the steps i used to enable Wake-on-LAN on CachyOS with dual boot after shutdown

Install ethtool: sudo pacman -S ethtool

If you have Realtek then install this driver: yay -S r8125-dkms (rebuilds on kernel update) and reboot system

Enable WOL: sudo ethtool -s <iface> wol g (use ip link for your iface)

Verify: ethtool <iface> | grep Wake-on (should show g)

For persistence: Create file /etc/systemd/network/50-wired.link:

[Match]
MACAddress=your:mac:address (from ip link)

[Link]
WakeOnLan=magic

Reload: systemctl restart systemd-networkd

Test: Shutdown from Linux, send magic packet.

This is still an issue for this specific hardware, where the Realtek fix does not apply.

Ethernet controller: Intel I225-V Rev 03, device ID [8086:15f3]

Kernel module: igc

WOL is working for me from Windows on the same hardware, but not Linux. I have reproduced this on linux-cachyos and linux-cachyos-lts kernels, and also when booting to Arch and Debian live ISOs.

My motherboard is ASUS ROG STRIX Z690-I. This reddit thread documents a different issue with this controller and suggests that it could be specific to the combination of this device and the motherboard. It’s notable that most of the users reporting problems there, as well as here, are on the “Strix” family of ASUS motherboards. However I have never experienced the problems mentioned there; the device is stable while the system is awake and my only issue is with WOL.

Is there any hope of getting this working?