prevent intel I225-V onboard network controller from "crashing" on some recent ASUS mainboards
HerrLange Oct 2, 2023
As you might have heard recent ASUS mainboards with the integrated network controller based on intel I225-V have an issue that in combination with power management the device disappears and the driver crashes over time.

E.g. https://www.reddit.com/r/buildapc/comments/xypn1m/network_card_intel_ethernet_controller_i225v_igc/ gives a good overview.
As a fix from ASUS (We do not support Linux) seems to be very unlikely the known workaround is to deactivate PCI Power Management via the Linux Kernel at all and always keep any PCI device on full power. This is described to be achieved via setting a global Kernel parameter "pcie_port_pm=off".

However, I do not like the idea to disable the entire feature for any PCI device (which includes PCIe) just because of a single faulty device. I started reading a bit about pci power management (https://docs.kernel.org/power/pci.html). I also found https://wiki.archlinux.org/title/Power_management#Bus_power_management with the intersting part:
QuoteAlternatively, to blacklist devices that are not working with PCI runtime power management and enable it for all other devices:
/etc/udev/rules.d/pci_pm.rules
# blacklist for pci runtime power management
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="on", GOTO="pci_pm_end"

SUBSYSTEM=="pci", ATTR{power/control}="auto"
LABEL="pci_pm_end"


So I have
$ lspci -m -v -s 0c:00.0
Device: 0c:00.0
Class:  Ethernet controller
Vendor: Intel Corporation
Device: Ethernet Controller I225-V
SVendor:        ASUSTeK Computer Inc.
SDevice:        Ethernet Controller I225-V
Rev:    03
ProgIf: 00
IOMMUGroup:     20

to retrieve vendor:device ids:
$ lspci -n -s 0c:00.0
0c:00.0 0200: 8086:15f3 (rev 03)

to check that vendor:device is correct:
$ lspci -d 8086:15f3
0c:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)


Do I get it right that I would just need to add the file
/etc/udev/rules.d/pci_pm.rules
with the content
# blacklist for pci runtime power management
SUBSYSTEM=="pci", ATTR{vendor}=="0x8086", ATTR{device}=="0x15f3", ATTR{power/control}="on", GOTO="pci_pm_end"

SUBSYSTEM=="pci", ATTR{power/control}="auto"
LABEL="pci_pm_end"


to have the same as "pcie_port_pm=off" but only for the faulty device?
This should work? Shouldn't it? Does anybody has a better idea to apply the workaround of disabling power management?

Any other suggestions or comments?

--

P.S. I hope this is not to technical for the audience here.

Last edited by HerrLange on 2 October 2023 at 5:50 pm UTC
While you're here, please consider supporting GamingOnLinux on:

Reward Tiers: Patreon. Plain Donations: PayPal.

This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring good, fresh content. Without your continued support, we simply could not continue!

You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
Login / Register


Or login with...
Sign in with Steam Sign in with Google
Social logins require cookies to stay logged in.