git: f1bd97bc567b - main - sysutils/intel-nvmupdate-i225-i226: New port

From: Kevin Bowling <kbowling_at_FreeBSD.org>
Date: Fri, 04 Sep 2026 05:50:35 UTC
The branch main has been updated by kbowling:

URL: https://cgit.FreeBSD.org/ports/commit/?id=f1bd97bc567b293fcbe53b5f6b5e1cbe0d059cb1

commit f1bd97bc567b293fcbe53b5f6b5e1cbe0d059cb1
Author:     Kevin Bowling <kbowling@FreeBSD.org>
AuthorDate: 2026-09-04 05:31:54 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2026-09-04 05:50:28 +0000

    sysutils/intel-nvmupdate-i225-i226: New port
    
    PR:             265714
---
 sysutils/Makefile                                  |   1 +
 sysutils/intel-nvmupdate-i225-i226/Makefile        |  76 +++++++++++++++
 sysutils/intel-nvmupdate-i225-i226/distinfo        |   5 +
 .../intel-nvmupdate-i225-i226/files/README.FreeBSD |  80 ++++++++++++++++
 .../files/nvmupdate-i225-i226.in                   |   4 +
 .../files/nvmupdate-i226-it-1mb.cfg                |  14 +++
 .../files/nvmupdate-i226-it-2mb.cfg                |  14 +++
 .../files/nvmupdate-i226-lm-1mb.cfg                |  14 +++
 .../files/nvmupdate-i226-lm-2mb.cfg                |  14 +++
 .../intel-nvmupdate-i225-i226/files/nvmupdate.cfg  | 102 +++++++++++++++++++++
 .../intel-nvmupdate-i225-i226/files/pkg-message.in |  45 +++++++++
 .../files/source_manifest.txt                      |  52 +++++++++++
 .../intel-nvmupdate-i225-i226/files/version.txt    |   6 ++
 sysutils/intel-nvmupdate-i225-i226/pkg-descr       |  11 +++
 sysutils/intel-nvmupdate-i225-i226/pkg-plist       |  24 +++++
 15 files changed, 462 insertions(+)

diff --git a/sysutils/Makefile b/sysutils/Makefile
index 132af50b9bf6..54df9d836c4c 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -558,6 +558,7 @@
     SUBDIR += intel-nvmupdate-e810
     SUBDIR += intel-nvmupdate-e830
     SUBDIR += intel-nvmupdate-i210
+    SUBDIR += intel-nvmupdate-i225-i226
     SUBDIR += intel-nvmupdate-x550
     SUBDIR += intel-pcm
     SUBDIR += intel-undervolt
diff --git a/sysutils/intel-nvmupdate-i225-i226/Makefile b/sysutils/intel-nvmupdate-i225-i226/Makefile
new file mode 100644
index 000000000000..5e74a216165c
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/Makefile
@@ -0,0 +1,76 @@
+PORTNAME=	nvmupdate
+DISTVERSION=	20260903
+CATEGORIES=	sysutils
+MASTER_SITES=	https://downloadmirror.intel.com/923640/:intel
+PKGNAMEPREFIX=	intel-
+PKGNAMESUFFIX=	-i225-i226
+DISTFILES=	E610_NVMUpdatePackage_v1_61_FreeBSD.tar.gz:intel
+
+MAINTAINER=	kbowling@FreeBSD.org
+COMMENT=	NVM update utility for Intel I225-V and I226 Ethernet controllers
+WWW=		https://github.com/BillyCurtis/Intel-I226-V-NVM-Firmware \
+		https://www.intel.com/content/www/us/en/download/15084/intel-ethernet-adapter-complete-driver-pack.html
+
+LICENSE=	IFL IPL
+LICENSE_COMB=	multi
+
+LICENSE_NAME_IFL=	Intel Firmware License
+LICENSE_NAME_IPL=	Intel Proprietary License
+LICENSE_FILE_IFL=	${INTEL_WRKSRC}/Intel_firmware_license.txt
+LICENSE_FILE_IPL=	${INTEL_WRKSRC}/license.txt
+LICENSE_PERMS_IFL=	dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+LICENSE_PERMS_IPL=	dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+
+IGNORE_DragonFly=	FreeBSD binary port
+ONLY_FOR_ARCHS=	amd64
+ONLY_FOR_ARCHS_REASON=	not supported on anything other than amd64
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	BillyCurtis
+GH_PROJECT=	Intel-I226-V-NVM-Firmware
+GH_TAGNAME=	5fb02f3128f894fdeb47bea6450af872fb85ff45
+
+NO_ARCH=	yes
+NO_ARCH_IGNORE=	nvmupdate64e
+NO_BUILD=	yes
+
+SUB_FILES=	nvmupdate-i225-i226 pkg-message
+SUB_LIST=	NVMUPDATE_DIR=${NVMUPDATE_DIR}
+
+INTEL_WRKSRC=	${WRKDIR}/E610/FreeBSDx64
+NVMUPDATE_DIR=	intel-nvmupdate-i225-i226
+
+CONFIG_FILES=	nvmupdate-i226-it-1mb.cfg nvmupdate-i226-it-2mb.cfg \
+		nvmupdate-i226-lm-1mb.cfg nvmupdate-i226-lm-2mb.cfg \
+		nvmupdate.cfg
+INTEL_FILES=	Intel_Proprietary_License.pdf Intel_firmware_license.txt \
+		file_license.txt license.pdf license.txt
+NVM_FILES=	I225-V/1.89/FXVL_15F3_V_1MB_1.89.bin \
+		I225-V/1.89/FXVL_15F3_V_2MB_1.89.bin \
+		I226-V/2.32/FXVL_125B_LM_1MB_2.32.bin \
+		I226-V/2.32/FXVL_125B_LM_2MB_2.32.bin \
+		I226-V/2.32/FXVL_125C_V_1MB_2.32.bin \
+		I226-V/2.32/FXVL_125C_V_2MB_2.32.bin \
+		I226-V/2.32/FXVL_125D_IT_1MB_2.32.bin \
+		I226-V/2.32/FXVL_125D_IT_2MB_2.32.bin
+PORT_FILES=	README.FreeBSD source_manifest.txt version.txt
+
+do-install:
+	${MKDIR} ${STAGEDIR}${PREFIX}/${NVMUPDATE_DIR}
+.for f in ${CONFIG_FILES} ${PORT_FILES}
+	${INSTALL_DATA} ${FILESDIR}/${f} ${STAGEDIR}${PREFIX}/${NVMUPDATE_DIR}/
+.endfor
+.for f in ${INTEL_FILES}
+	${INSTALL_DATA} ${INTEL_WRKSRC}/${f} ${STAGEDIR}${PREFIX}/${NVMUPDATE_DIR}/
+.endfor
+.for f in ${NVM_FILES}
+	${INSTALL_DATA} ${WRKSRC}/${f} ${STAGEDIR}${PREFIX}/${NVMUPDATE_DIR}/
+.endfor
+	${INSTALL_DATA} ${WRKSRC}/README.md \
+		${STAGEDIR}${PREFIX}/${NVMUPDATE_DIR}/README.mirror
+	${INSTALL_PROGRAM} ${INTEL_WRKSRC}/nvmupdate64e \
+		${STAGEDIR}${PREFIX}/${NVMUPDATE_DIR}/
+	${INSTALL_SCRIPT} ${WRKDIR}/nvmupdate-i225-i226 \
+		${STAGEDIR}${PREFIX}/sbin/
+
+.include <bsd.port.mk>
diff --git a/sysutils/intel-nvmupdate-i225-i226/distinfo b/sysutils/intel-nvmupdate-i225-i226/distinfo
new file mode 100644
index 000000000000..1f5fed5576b0
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1788499038
+SHA256 (E610_NVMUpdatePackage_v1_61_FreeBSD.tar.gz) = b88cbbd093611f35bbb892b3cdb8cfcdf0df92fa0783b8bdeae24f659275fd70
+SIZE (E610_NVMUpdatePackage_v1_61_FreeBSD.tar.gz) = 14886287
+SHA256 (BillyCurtis-Intel-I226-V-NVM-Firmware-20260903-5fb02f3128f894fdeb47bea6450af872fb85ff45_GH0.tar.gz) = 4f5f88793f9faed2ad64c8271cad359ffe31c7fc520011ea05bf43e5c8c64fea
+SIZE (BillyCurtis-Intel-I226-V-NVM-Firmware-20260903-5fb02f3128f894fdeb47bea6450af872fb85ff45_GH0.tar.gz) = 4856862
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/README.FreeBSD b/sysutils/intel-nvmupdate-i225-i226/files/README.FreeBSD
new file mode 100644
index 000000000000..d1c4d8ee82ec
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/README.FreeBSD
@@ -0,0 +1,80 @@
+Intel I225-V/I226 NVM Update Port for FreeBSD
+==============================================
+
+This is an unofficial combination assembled by the FreeBSD port.  Intel did
+not publish or support it as an Intel NVM Update Package.
+
+Sources
+-------
+
+* The FreeBSD nvmupdate64e 1.43.37.1a executable and Intel license files are
+  fetched unmodified from Intel's E610 v1.61 FreeBSD NVM Update Package.
+  Although that archive also contains E610 firmware, this port does not install
+  any of it.
+* The I225-V device 15F3 NVM 1.89 images and I226-V, I226-LM, and I226-IT NVM
+  2.32 images are fetched unmodified from
+  BillyCurtis/Intel-I226-V-NVM-Firmware at commit
+  5fb02f3128f894fdeb47bea6450af872fb85ff45.  This is an unofficial,
+  unsupported GitHub mirror.  Intel's corresponding I226 NVM package is
+  access-controlled in RDC.  FreeBSD does not vouch for the mirror's provenance
+  or assert that it is authorized by Intel.
+* This port installs only the current images named in source_manifest.txt; the
+  GitHub snapshot also contains historical images that are not installed.
+* The configuration files, README.FreeBSD, source_manifest.txt, and version.txt
+  are generated and maintained by the FreeBSD port.  They were not supplied or
+  approved by Intel or the GitHub mirror maintainer.
+
+Configuration matching
+----------------------
+
+EEPID identifies and verifies the target image.  REPLACES is optional.  Per
+Intel's NVMUpdate documentation, a device block without REPLACES wildcard-
+matches its exact vendor, device, subvendor, and subdevice IDs.
+
+The I225-V and I226-V entries in nvmupdate.cfg list known ETrack lineages, which
+also distinguish their 1MB and 2MB variants.  The I226-LM and I226-IT entries
+omit REPLACES so they can update any NVM version with the matching four-part PCI
+ID.  Four single-image configuration files let the operator select the intended
+LM/IT flash size explicitly.
+
+Security model
+--------------
+
+Intel documents a secure NVM flow for I225/I226 in which secured OROM, PHY, and
+firmware modules are signed by Intel and authenticated by the controller.  This
+does not establish the provenance of the complete .bin container, its filename,
+the GitHub archive, or nvmupdate.cfg as a unit.  The NVMUpdate tool also verifies
+images by default; keep that verification enabled and never pass its -sv option.
+
+Scope and safety
+----------------
+
+The generated entries intentionally match only the Intel reference subsystem
+IDs listed in nvmupdate.cfg.  They do not match arbitrary OEM subsystem IDs,
+I225 device 15F2, or I225-IT device 0D9F.
+
+The combined nvmupdate.cfg contains both flash-size candidates for I226-LM and
+I226-IT, whose PCI IDs do not reveal flash size.  Do not use the combined file
+to update those devices.  Select exactly one of these files with -c after
+determining the correct flash size from authoritative platform information:
+
+    nvmupdate-i226-lm-1mb.cfg
+    nvmupdate-i226-lm-2mb.cfg
+    nvmupdate-i226-it-1mb.cfg
+    nvmupdate-i226-it-2mb.cfg
+
+A 2MB backup does not prove that the device has 2MB flash.  Reports in the
+OPNsense thread show that NVMUpdate backups can be 2MB for a 1MB device.
+
+Run inventory mode first and save its output:
+
+    nvmupdate-i225-i226 -i -l inventory.log -o inventory.xml
+
+For example, inventory an I226-LM against only the selected 2MB image with:
+
+    nvmupdate-i225-i226 -i -c nvmupdate-i226-lm-2mb.cfg \
+        -l inventory.log -o inventory.xml
+
+An update can interrupt networking and requires a complete power cycle.  Make
+a backup, use an out-of-band management path, and follow Intel's NVM Update Tool
+documentation before choosing to update any device.
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i225-i226.in b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i225-i226.in
new file mode 100644
index 000000000000..05beba1bf604
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i225-i226.in
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+cd %%PREFIX%%/%%NVMUPDATE_DIR%% || exit 1
+exec ./nvmupdate64e "$@"
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-it-1mb.cfg b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-it-1mb.cfg
new file mode 100644
index 000000000000..0593ca410a41
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-it-1mb.cfg
@@ -0,0 +1,14 @@
+CURRENT FAMILY: 1.0.0
+CONFIG VERSION: 1.20.0
+
+; REPLACES is intentionally omitted to wildcard-match the exact PCI IDs.
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-IT 1MB
+VENDOR: 8086
+DEVICE: 125D
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125D_IT_1MB_2.32.bin
+EEPID: 80000433
+RESET TYPE: REBOOT
+END DEVICE
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-it-2mb.cfg b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-it-2mb.cfg
new file mode 100644
index 000000000000..e9f5e559584c
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-it-2mb.cfg
@@ -0,0 +1,14 @@
+CURRENT FAMILY: 1.0.0
+CONFIG VERSION: 1.20.0
+
+; REPLACES is intentionally omitted to wildcard-match the exact PCI IDs.
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-IT 2MB
+VENDOR: 8086
+DEVICE: 125D
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125D_IT_2MB_2.32.bin
+EEPID: 80000431
+RESET TYPE: REBOOT
+END DEVICE
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-lm-1mb.cfg b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-lm-1mb.cfg
new file mode 100644
index 000000000000..b23d55ae874c
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-lm-1mb.cfg
@@ -0,0 +1,14 @@
+CURRENT FAMILY: 1.0.0
+CONFIG VERSION: 1.20.0
+
+; REPLACES is intentionally omitted to wildcard-match the exact PCI IDs.
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-LM 1MB
+VENDOR: 8086
+DEVICE: 125B
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125B_LM_1MB_2.32.bin
+EEPID: 80000424
+RESET TYPE: REBOOT
+END DEVICE
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-lm-2mb.cfg b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-lm-2mb.cfg
new file mode 100644
index 000000000000..b27f24dff93a
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate-i226-lm-2mb.cfg
@@ -0,0 +1,14 @@
+CURRENT FAMILY: 1.0.0
+CONFIG VERSION: 1.20.0
+
+; REPLACES is intentionally omitted to wildcard-match the exact PCI IDs.
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-LM 2MB
+VENDOR: 8086
+DEVICE: 125B
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125B_LM_2MB_2.32.bin
+EEPID: 80000421
+RESET TYPE: REBOOT
+END DEVICE
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate.cfg b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate.cfg
new file mode 100644
index 000000000000..ae51986070f8
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/nvmupdate.cfg
@@ -0,0 +1,102 @@
+CURRENT FAMILY: 1.0.0
+CONFIG VERSION: 1.20.0
+
+; Unofficial mirror: I225-V 1MB reference image
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I225-V 1MB
+VENDOR: 8086
+DEVICE: 15F3
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_15F3_V_1MB_1.89.bin
+EEPID: 800002FC
+RESET TYPE: REBOOT
+REPLACES: 80000150 80000182 800001CE 800002FC
+END DEVICE
+
+; Unofficial mirror: I225-V 2MB reference image
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I225-V 2MB
+VENDOR: 8086
+DEVICE: 15F3
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_15F3_V_2MB_1.89.bin
+EEPID: 800002F4
+RESET TYPE: REBOOT
+REPLACES: 8000014B 80000185 800001C7 800002F4
+END DEVICE
+
+; Unofficial mirror: I226-V 1MB reference image
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-V 1MB
+VENDOR: 8086
+DEVICE: 125C
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125C_V_1MB_2.32.bin
+EEPID: 80000425
+RESET TYPE: REBOOT
+REPLACES: 80000110 80000290 80000308 8000039D 80000425
+END DEVICE
+
+; Unofficial mirror: I226-V 2MB reference image
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-V 2MB
+VENDOR: 8086
+DEVICE: 125C
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125C_V_2MB_2.32.bin
+EEPID: 80000422
+RESET TYPE: REBOOT
+REPLACES: 80000284 8000028D 80000303 80000371 800003AD 80000422
+END DEVICE
+
+; Unofficial mirror: I226-LM 1MB image; REPLACES omitted for wildcard match
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-LM 1MB
+VENDOR: 8086
+DEVICE: 125B
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125B_LM_1MB_2.32.bin
+EEPID: 80000424
+RESET TYPE: REBOOT
+END DEVICE
+
+; Unofficial mirror: I226-LM 2MB image; REPLACES omitted for wildcard match
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-LM 2MB
+VENDOR: 8086
+DEVICE: 125B
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125B_LM_2MB_2.32.bin
+EEPID: 80000421
+RESET TYPE: REBOOT
+END DEVICE
+
+; Unofficial mirror: I226-IT 1MB image; REPLACES omitted for wildcard match
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-IT 1MB
+VENDOR: 8086
+DEVICE: 125D
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125D_IT_1MB_2.32.bin
+EEPID: 80000433
+RESET TYPE: REBOOT
+END DEVICE
+
+; Unofficial mirror: I226-IT 2MB image; REPLACES omitted for wildcard match
+BEGIN DEVICE
+DEVICENAME: Intel(R) Ethernet Controller I226-IT 2MB
+VENDOR: 8086
+DEVICE: 125D
+SUBVENDOR: 8086
+SUBDEVICE: 0000
+NVM IMAGE: FXVL_125D_IT_2MB_2.32.bin
+EEPID: 80000431
+RESET TYPE: REBOOT
+END DEVICE
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/pkg-message.in b/sysutils/intel-nvmupdate-i225-i226/files/pkg-message.in
new file mode 100644
index 000000000000..e0cc4cb294cb
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/pkg-message.in
@@ -0,0 +1,45 @@
+[
+{ type: install
+  message: <<EOM
+The NVM images in this package come from an unofficial, unsupported GitHub
+mirror.  Intel supplies the FreeBSD updater, but did not supply or approve the
+mirror or this port's generated configuration.
+
+Intel documents that secured modules within I225/I226 NVM images are signed by
+Intel and authenticated by the controller, and NVMUpdate verifies images by
+default.  These checks do not authenticate the GitHub archive or the generated
+configuration as a unit.  Never disable image verification with the -sv option.
+
+The generated entries match only these Intel reference devices:
+
+- I225-V device 15F3, subsystem 8086:0000
+- I226-V device 125C, subsystem 8086:0000
+- I226-LM device 125B, subsystem 8086:0000
+- I226-IT device 125D, subsystem 8086:0000
+
+They do not support arbitrary OEM devices, I225 device 15F2, or I225-IT device
+0D9F.  The I226-LM/IT entries omit the optional REPLACES field and therefore
+match any NVM version with the exact four-part PCI ID.  Obtain an update package
+from the system or motherboard vendor for an OEM design.
+
+Both 1MB and 2MB I226-LM/IT entries are present in nvmupdate.cfg, but their PCI
+IDs do not identify flash size.  Do not update an LM/IT device with that
+combined file.  Select exactly one of the dedicated
+nvmupdate-i226-*-1mb.cfg or nvmupdate-i226-*-2mb.cfg files with -c after
+determining the correct flash size.
+
+Inventory is read-only and should always be run first:
+
+# nvmupdate-i225-i226 -i -l inventory.log -o inventory.xml
+
+Before any update, read the FreeBSD-specific instructions and provenance notes:
+
+%%PREFIX%%/%%NVMUPDATE_DIR%%/README.FreeBSD
+
+Save a backup, use an out-of-band management path, ensure stable power, and
+read Intel's NVMUpdate documentation.  An interrupted or mismatched update can
+make the controller unusable.  A complete power cycle is required after an
+update.  Use the latest igc driver available for the installed FreeBSD release.
+EOM
+}
+]
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/source_manifest.txt b/sysutils/intel-nvmupdate-i225-i226/files/source_manifest.txt
new file mode 100644
index 000000000000..4b811d3618f5
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/source_manifest.txt
@@ -0,0 +1,52 @@
+FreeBSD port data version: 20260903
+
+Intel I225/I226 secure NVM documentation
+  Intel Ethernet Controller I225/I226 Datasheet, document 596659
+  URL: https://www.intel.com/content/www/us/en/secure/content-details/596659/intel-ethernet-controller-i225-i226-datasheet.html
+
+Intel NVMUpdate configuration semantics
+  Intel Ethernet Adapters and Devices User Guide
+  URL: https://edc.intel.com/content/www/us/en/design/products/ethernet/adapters-and-devices-user-guide/intel-ethernet-nvm-update-tool/
+  EEPID is the optional target image ETrack tag.  With REPLACES omitted, a
+  device block wildcard-matches its VENDOR, DEVICE, SUBVENDOR, and SUBDEVICE.
+
+Intel I226 NVM package
+  Intel Ethernet Controller I226 NVM, document 686540
+  URL: https://www.intel.com/content/www/us/en/secure/content-details/686540/intel-ethernet-controller-i226-nvm.html
+
+Intel FreeBSD updater source
+  URL: https://downloadmirror.intel.com/923640/E610_NVMUpdatePackage_v1_61_FreeBSD.tar.gz
+  Archive: E610_NVMUpdatePackage_v1_61_FreeBSD.tar.gz
+  SHA256: b88cbbd093611f35bbb892b3cdb8cfcdf0df92fa0783b8bdeae24f659275fd70
+  nvmupdate64e SHA256: 8de98098a32798b668357bbdb9364d779bc177f624a47bd42b7544149936c179
+  Version: 1.43.37.1a
+
+Unofficial I225-V/I226 image mirror
+  URL: https://github.com/BillyCurtis/Intel-I226-V-NVM-Firmware
+  Commit: 5fb02f3128f894fdeb47bea6450af872fb85ff45
+  This is not an official or supported Intel distribution channel.
+
+  FXVL_15F3_V_1MB_1.89.bin
+    ETrack: 800002FC
+    SHA256: f0329ccb43a4e5d44a74c772c29404253bbf7d208920ae6414ec053358cf0f61
+  FXVL_15F3_V_2MB_1.89.bin
+    ETrack: 800002F4
+    SHA256: 227121965e7248ef1cd1723ec59e381d9c80c3116b4350267f5fbee588602683
+  FXVL_125C_V_1MB_2.32.bin
+    ETrack: 80000425
+    SHA256: 881434a8e54ebaf70117dd5061c3a2f04b16fe1cc3e443777337fb6774892024
+  FXVL_125C_V_2MB_2.32.bin
+    ETrack: 80000422
+    SHA256: 1bc7ce6aec0dfacb1bd4f156054af0018efee7fbff23687a20efe8c50b346e08
+  FXVL_125B_LM_1MB_2.32.bin (wildcard four-part PCI ID config entry)
+    ETrack: 80000424
+    SHA256: 5426ed761d21527105fc794cd8f694e3013db580d1203fd07c387192a6c9e710
+  FXVL_125B_LM_2MB_2.32.bin (wildcard four-part PCI ID config entry)
+    ETrack: 80000421
+    SHA256: cddc090b99541e05a0a2a36c5e2cb52e8d920e2d07067d565d486aad3a9728f6
+  FXVL_125D_IT_1MB_2.32.bin (wildcard four-part PCI ID config entry)
+    ETrack: 80000433
+    SHA256: b0a3eeea63b0d26f669337c55c0aed727978b365913633af524983b4d866017a
+  FXVL_125D_IT_2MB_2.32.bin (wildcard four-part PCI ID config entry)
+    ETrack: 80000431
+    SHA256: f0825b2136ecd35a0cd357789ca53cfbe9bd0f4270036a5782de95cb5fde1869
diff --git a/sysutils/intel-nvmupdate-i225-i226/files/version.txt b/sysutils/intel-nvmupdate-i225-i226/files/version.txt
new file mode 100644
index 000000000000..fc3ab406268f
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/files/version.txt
@@ -0,0 +1,6 @@
+FreeBSD port data version: 20260903
+Intel NVMUpdate: 1.43.37.1a
+I225-V device 15F3: NVM 1.89
+I226-V device 125C: NVM 2.32
+I226-LM device 125B: NVM 2.32
+I226-IT device 125D: NVM 2.32
diff --git a/sysutils/intel-nvmupdate-i225-i226/pkg-descr b/sysutils/intel-nvmupdate-i225-i226/pkg-descr
new file mode 100644
index 000000000000..3a3cc6aa3b53
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/pkg-descr
@@ -0,0 +1,11 @@
+Intel's FreeBSD NVMUpdate utility and NVM images for Intel I225-V and I226
+Ethernet controllers.  The utility and license files are fetched directly
+from Intel's E610 FreeBSD update package.  The NVM images are fetched from a
+pinned commit of an unofficial, unsupported GitHub mirror and are not supplied
+or endorsed by Intel through that mirror.
+
+The generated configuration is limited to Intel reference subsystem IDs.  It
+uses known ETrack lineages for I225-V and I226-V.  I226-LM and I226-IT entries
+omit REPLACES so they match the exact four-part PCI ID regardless of installed
+NVM version; separate configurations select each flash-size variant.  The
+generated configuration is not supplied, approved, or supported by Intel.
diff --git a/sysutils/intel-nvmupdate-i225-i226/pkg-plist b/sysutils/intel-nvmupdate-i225-i226/pkg-plist
new file mode 100644
index 000000000000..dd1741a87f63
--- /dev/null
+++ b/sysutils/intel-nvmupdate-i225-i226/pkg-plist
@@ -0,0 +1,24 @@
+intel-nvmupdate-i225-i226/FXVL_125B_LM_1MB_2.32.bin
+intel-nvmupdate-i225-i226/FXVL_125B_LM_2MB_2.32.bin
+intel-nvmupdate-i225-i226/FXVL_125C_V_1MB_2.32.bin
+intel-nvmupdate-i225-i226/FXVL_125C_V_2MB_2.32.bin
+intel-nvmupdate-i225-i226/FXVL_125D_IT_1MB_2.32.bin
+intel-nvmupdate-i225-i226/FXVL_125D_IT_2MB_2.32.bin
+intel-nvmupdate-i225-i226/FXVL_15F3_V_1MB_1.89.bin
+intel-nvmupdate-i225-i226/FXVL_15F3_V_2MB_1.89.bin
+intel-nvmupdate-i225-i226/Intel_Proprietary_License.pdf
+intel-nvmupdate-i225-i226/Intel_firmware_license.txt
+intel-nvmupdate-i225-i226/README.FreeBSD
+intel-nvmupdate-i225-i226/README.mirror
+intel-nvmupdate-i225-i226/file_license.txt
+intel-nvmupdate-i225-i226/license.pdf
+intel-nvmupdate-i225-i226/license.txt
+intel-nvmupdate-i225-i226/nvmupdate-i226-it-1mb.cfg
+intel-nvmupdate-i225-i226/nvmupdate-i226-it-2mb.cfg
+intel-nvmupdate-i225-i226/nvmupdate-i226-lm-1mb.cfg
+intel-nvmupdate-i225-i226/nvmupdate-i226-lm-2mb.cfg
+intel-nvmupdate-i225-i226/nvmupdate.cfg
+intel-nvmupdate-i225-i226/nvmupdate64e
+intel-nvmupdate-i225-i226/source_manifest.txt
+intel-nvmupdate-i225-i226/version.txt
+sbin/nvmupdate-i225-i226