[solved] Intel i226 Firmware (see post #39)

Started by BrandyWine, August 31, 2025, 05:21:07 PM

Previous topic - Next topic
It's well documented, 2.5Gb+ needs more power, no way around it
Mini-pc N150 i226v x520, FREEDOM

I will leave it off for now for the card.

Sure 2,5 GB/a will draw more power than GB speeds, but i think this could be handled by firmware and/or driver.

Like so:
If ASPM mode enabled and pci-e link is in an low power mode while bandwidth hits an certain threshold for an specified amount of time, card should requesting system to put link out of low power mode so 2,5 GB/s will be reached. If bandwidth is below an certain threshold, low power mode will be activated again.

This way we can have our systems/CPU's can reach higher C states and safe more juice out of our walls.

@pOpY2k25
I think you are misunderstanding ASPM L0 L0s and L1 states.
L0s and L1 are when the device is idle. It does not throttle power based on current bandwidth.

Also note, "low power" is not a control that says, as example, idle down from 5w to 1w, it's a control that "powers off" parts of pcie link.

L0 is full on
L0s is half link off
L1 is full link off
"link" here being pcie link.

The tech specifications say the link should recover back to L0 fast from L0s, and tad slower for L1.

Mini-pc N150 i226v x520, FREEDOM

Jumping on the bandwagon here instead of a new post since it seems related. Appreciate the wealth of information in this thread. Hoping for a sanity check...

New to OPNsense and experienced what it seems many others were with the i226 NICs on my device (which has two). Read through this thread several times, the read me for the NVM update tool, etc.. and moved forward with trying to flash the firmware. Long story short... I can't figure out if the flash was successful or not. Sounds crazy I know.

Here's is the latest output from dmesg (igc0 is WAN, igc1 is LAN).

# dmesg | grep igc | grep EEPROM
[1] igc0: EEPROM V2.17-0 eTrack 0x80000303
[1] igc1: EEPROM V2.17-0 eTrack 0x80000303
[1] igc0: EEPROM V2.17-0 eTrack 0x80000303
[1] igc1: EEPROM V2.17-0 eTrack 0x80000303
[1] igc0: EEPROM V2.17-0 eTrack 0x80000303
[1] igc1: EEPROM V2.17-0 eTrack 0x80000303
[1] igc0: EEPROM V2.32-0 eTrack 0x80000422
[1] igc1: EEPROM V2.17-0 eTrack 0x80000303
[1] igc0: EEPROM V2.32-0 eTrack 0x80000422
[1] igc1: EEPROM V2.17-0 eTrack 0x80000303

For good measure, here's the output of pciconf:

# pciconf -lV | grep igc
igc0@pci0:2:0:0:        class=0x020000 rev=0x04 hdr=0x00 vendor=0x8086 device=0x125c subvendor=0x8086 subdevice=0x0000
igc1@pci0:4:0:0:        class=0x020000 rev=0x04 hdr=0x00 vendor=0x8086 device=0x125c subvendor=0x8086 subdevice=0x0000

From my reading, the eTrack ID ending in 303 indicated I had the 2MB variant. As such, I used the following nvm.cfg:

CURRENT FAMILY: 1.0.0
CONFIG VERSION: 1.20.0

; NIC device
BEGIN DEVICE
DEVICENAME: Intel(R) Ethernet Controller I226-V
VENDOR: 8086
DEVICE: 125C
SUBVENDOR: 8086
SUBDEVICE: 0000
NVM IMAGE: FXVL_125C_V_2MB_2.32.bin
EEPID: 80000422
RESET TYPE: REBOOT
REPLACES: 80000303
END DEVICE

However, the output from nvmupdate64e was:

Intel(R) Ethernet NVM Update Tool
NVMUpdate version 1.43.20.0
Copyright(C) 2013 - 2025 Intel Corporation.

./nvmupdate64e -b -l nvm.log -m 6462662501e5 -f -u -c nvm.cfg

Config file read.
Inventory
[00:002:00:00]: Intel(R) Ethernet Controller I226-V
        Alternate MAC address is not set.
        Flash inventory started.
        Shadow RAM inventory started.
        Shadow RAM inventory finished.
        Flash inventory finished.
        OROM inventory started.
        OROM inventory finished.
Update
[00:002:00:00]: Intel(R) Ethernet Controller I226-V
        Creating backup images in directory: 6462662501E5.
        Backup images created.
        Flash update started.
        NVM verification started.
        Shadow RAM verification started.
        Shadow RAM verification finished.
        Flash verification started.
Difference found in module Invalid at offset 0x202E - update required.
        Flash verification finished.
        NVM update is required.
        NVM verification finished.
Error:          Flash update failed.
        Device update failed.
Update security revisions
[00:002:00:00]: Intel(R) Ethernet Controller I226-V
        Skipping update minimum security revisions.
Update VPD with VPD template
[00:002:00:00]: Intel(R) Ethernet Controller I226-V
        Skipping VPD update with VPD template.

So... it failed? But dmesg shows (after a reboot and the subsequent reboot) the new version v2.32 and eTrack ID 0x80000422, so it... succeeded? My WAN interface is working. I'm in a monitoring mode to see if previous issues persist.

Figured it best to pause and get a sanity check before moving forward with the other NIC.

Am I missing something obvious?


I don't always trust the etid's as being 100% accurate in relating 1MB vs 2MB nvram. I does look like the OROM didn't finish.
What does the log file say?

You can also use the flash util to get all the info of the 226.
Mini-pc N150 i226v x520, FREEDOM

Quote from: BrandyWine on November 11, 2025, 04:48:13 AMI don't always trust the etid's as being 100% accurate in relating 1MB vs 2MB nvram. I does look like the OROM didn't finish.
What does the log file say?

My last code block is what I assumed was the log (dumped to file when attempting the update).

Quote from: BrandyWine on November 11, 2025, 04:48:13 AMYou can also use the flash util to get all the info of the 226.

Using the flash util to get an inventory, here's the output relevant to the two i226 NICs:

# ./nvmupdate64e -i -l inventory.log
<snip>
[00:002:00:00]: Intel(R) Ethernet Controller I226-V
        Alternate MAC address is not set.
        Flash inventory started.
        Shadow RAM inventory started.
        Shadow RAM inventory finished.
        Flash inventory finished.
        OROM inventory started.
        OROM inventory finished.
[00:004:00:00]: Intel(R) Ethernet Controller I226-V
        Alternate MAC address is not set.
        Flash inventory started.
        Shadow RAM inventory started.
        Shadow RAM inventory finished.
        Flash inventory finished.
        OROM inventory started.
        OROM inventory finished.
[00:002:00:00]: Intel(R) Ethernet Controller I226-V
        Vendor                 : 8086
        Device                 : 125C
        Subvendor              : 8086
        Subdevice              : 0000
        Revision               : 4
        LAN MAC                : 6462662501E5
        Alt MAC                : 000000000000
        SAN MAC                : 000000000000
        ETrackId               : 80000422
        SerialNumber           : 646266FFFF2501E5
        NVM Version            : 2.50(2.32)
        PBA                    : G23456-000
        VPD status             : Not set
        VPD size               : 0
        NVM update             : No config file entry
          checksum             : Valid
        OROM update            : No config file entry
          CIVD                 : 0.0.0
          EFI                  : 0.1.4, checksum None
[00:004:00:00]: Intel(R) Ethernet Controller I226-V
        Vendor                 : 8086
        Device                 : 125C
        Subvendor              : 8086
        Subdevice              : 0000
        Revision               : 4
        LAN MAC                : 6462662501E6
        Alt MAC                : 000000000000
        SAN MAC                : 000000000000
        ETrackId               : 80000303
        SerialNumber           : 646266FFFF2501E6
        NVM Version            : 2.23(2.17)
        PBA                    : G23456-000
        VPD status             : Not set
        VPD size               : 0
        NVM update             : No config file entry
          checksum             : Valid
        OROM update            : No config file entry
          CIVD                 : 0.0.0
          EFI                  : 0.1.4, checksum None

I'm still new to all this, but the flash utility is reporting the updated version for the igc0 NIC.

@BrandyWine With "link" i meant the PCIe link speed. Sorry but i dont get it. ASPM is designed to lower or cut off the PCIe link when the device is idle. So when it's not idle the whole PCIe link bandwidth should be available, hence also the 2,5GBE ethernet speed.

A few months back i had an realtek RTL8125B where ASPM was working as it should, up to the point where unraid (driver or linux kernel) removed ASPM support.
You had to use an own driver for it to get i working again, but ASPM was working fine with always 2,5 GBE speeds.

There is clearly an issue in the mainboard BIOS, card firmware, driver or linux kernel when it's stuck @ ~600 MB/s with ASPM on.

Quote from: pOpY2k25 on November 11, 2025, 09:40:57 AMThere is clearly an issue in the mainboard BIOS, card firmware, driver or linux kernel when it's stuck @ ~600 MB/s with ASPM on.
I don't get how ASPM state is impacting your through-device speed. Can a nic even function at all when it's in L0s state?
Also, I assume you mean 600Mb and not MB. Getting a hit of -75% seems very bad. Unless the nic is flip-flopping in out of L0-L0s a gazillion times I am not sure why ASPM just being enabled would be so impactful.

I also have not heard of anyone else having this issue the way you describe it.
Mini-pc N150 i226v x520, FREEDOM

@Waldhaar_
You only flashed one 226?

Here's some tidbit from Intel docs for flash tool, maybe try using the debug env variables and then grab an inventory

QuoteIntel ® Ethernet NVM Update Tool
Quick Usage Guide for EFI
14 332160-006
6.0 Troubleshooting
• Update to the most current base driver prior to running the NVM Update Tool to ensure the newest
features of the NVM image can be installed.
• Refer to the "NVM and Software Compatibility" section in each of the following documents:
The "Software/NVM Compatibility" tables indicate the set of NVM images and Intel ® Ethernet
Controller software releases that go together. Intel recommends that you update the NVM and
Software driver to compatible versions.
The "NVM Transition Support" tables indicate the version of NVM from which the NVM Update Tool
allows updates.
• In case of a security issue, the security revision might be incremented and then an NVM update to
an older NVM with a lower security revision might not be allowed.
• The NVM version for the X550 is NOT shown in the GUI. Only the EEtrack ID is displayed. If you run
nvmupdate with -i, the version is displayed.
6.1 Troubleshooting Using Debug Logs
1. Use the following command to get the log file if there is any error seen.
nvmupdate64e -l nvmupdate.log
This is a text file that contains history of the NVM Update Tool's execution, including the success or
failure status for each operation, and what adapters and ORMs were discovered. After running this
command, the tool creates the nvmupdate.log file under the same folder as nvmupdate.cfg. The log
file is overwritten each time the NVM Update Tool is executed.
2. Use following command to get a little more information on what is in the system by using
nvmupdate with an inventory mode.
nvmupdate64e -i -l inv.log
This provides more details about the adapters in the system to help narrow down the debug scope.
3. Use following command(s) to get a superset of debug logs.
First set following environment variables before nvmupdate execution. For debugging purposes, it
is necessary to set these flags:
export NUL_DEBUGLOG=1
export QV_DEBUG_LOG=0xFFFFFFFF
Now the log generated using the following command is much more detailed.
nvmupdate64e -l nvmupdate.log
Mini-pc N150 i226v x520, FREEDOM

Quote from: BrandyWine on November 11, 2025, 09:01:50 PM@Waldhaar_
You only flashed one 226?

That is correct; flashed the one I am using for WAN. As a side note, I am using one of the IPs on a vlan interface for ssh (those vlans are connected via the dual X710 interfaces to my switch), so I should be able update the LAN without any interruption to the ssh session.

Quote from: BrandyWine on November 11, 2025, 09:01:50 PMHere's some tidbit from Intel docs for flash tool, maybe try using the debug env variables and then grab an inventory

Looked through the guide and couldn't seem to get any additional information than has already been shared. I did fail trying to set the environment variables for additional debug; I guess I am out of my depth with regards to setting those on FreeBSD/OPNsense. I'll keep at it.

@BrandyWine
Sorry i meant Mb = Mbit.

I have found similar reports on the net regarding slow speeds when ASPM is enabled:
https://www.reddit.com/r/intelnuc/comments/1951rgk/very_slow_speeds_with_i226v_on_intel_nuc13anbi5/
https://lists.osuosl.org/pipermail/intel-wired-lan/Week-of-Mon-20241202/045288.html

When i am reading this correctly, it seems a driver issue which seems to fixed already in windows driver but not linux?

I have ASRock NUC BOX-255H with i226V and i226LM. I'm on 2.22 with BIOS that disables ASPM for both of them. i226V works rock solid. i226LM stops forwarding traffic every few days. Can i update i226LM NVM using file for i226V? I don't care about "LM" management features. This happens on Proxmox 9 where I have 2xOPNsense VMs.

Quote from: Waldhaar_ on November 11, 2025, 03:56:42 AMJumping on the bandwagon here instead of a new post since it seems related. Appreciate the wealth of information in this thread. Hoping for a sanity check...

...snip...

Following up.

Put in a support ticket with Protectli (my device is a VP2440) and they confirmed it has the 2MB variant of the i226V and recommended I try flashing under Ubuntu. Booted my device into a live USB Ubuntu environment and flashed both NICs. This time nvmupdate64e reported success. No discernible difference otherwise in the flash process or in the state of the NICs post flashing.

So, while the flash process reported an error under OPNsense, I wonder if the error was... erroneous. Regardless, both NICs show 2.32 2MB ROM has been applied with a successful output from the flash tool. So, time to monitor my link stability and move on to other troubleshooting if necessary.

Appreciate the help.

Quote from: Waldhaar_ on November 12, 2025, 05:37:59 AMI did fail trying to set the environment variables for additional debug; I guess I am out of my depth with regards to setting those on FreeBSD/OPNsense. I'll keep at it.

No worries, you can set them like this, using setenv (echo just returns the variable value). Then when you run the flash util it will pickup those environment variables.

# setenv NUL_DEBUGLOG 1
# setenv QV_DEBUG_LOG 0xFFFFFFFF
# echo $NUL_DEBUGLOG
1
# echo $QV_DEBUG_LOG
0xFFFFFFFF
Mini-pc N150 i226v x520, FREEDOM

Quote from: Waldus66668 on November 12, 2025, 10:12:13 PMI have ASRock NUC BOX-255H with i226V and i226LM. I'm on 2.22 with BIOS that disables ASPM for both of them. i226V works rock solid. i226LM stops forwarding traffic every few days. Can i update i226LM NVM using file for i226V? I don't care about "LM" management features. This happens on Proxmox 9 where I have 2xOPNsense VMs.
The LM has an OROM, so I guess it's the 2MB bin. I suspect the bin's are not exactly the same, but I still do suspect the -V bin would work on on the -LM hardware. The -V has some versions that are 2MB flash, while others are just 1MB flash. Given the LM hardware just appears to be different in temp range, perhaps the bins are the same? Makes sense to limit the number of unique bins.

 
Mini-pc N150 i226v x520, FREEDOM