Patchwork Add support for Intel 82574L ethernet card

Submitter Bill Paul
Date 2014-03-13 22:57:03
Message ID <>
Download mbox | patch
Permalink /patch/4118/
State Superseded
Headers show


Bill Paul - 2014-03-13 22:57:03
I recently found a need to re-flash the option ROM on an Intel 82574L gigabit 
ethernet card. These are a bit more common these days than the 82571 and 82572 
and relatively cheap. It turns out this works with flashrom, but it doesn't 
detect the PCI ID for the device out of the box.

Attached is a patch add it to nicintel_spi.c. Note that there are probably 
other devices in the PRO/1000 family that would work too.

Here's an example run with the latest code from svn:

flashrom v0.9.7-unknown on FreeBSD 10.0-RELEASE (amd64)
flashrom is free software, get the source code at

Calibrating delay loop... OK.
Found Winbond flash chip "W25X40" (512 kB, SPI) on nicintel_spi.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.

FreeBSD detects the device as follows:

em1@pci0:2:0:0: class=0x020000 card=0xa01f8086 chip=0x10d38086 rev=0x00 
    vendor     = 'Intel Corporation'
    device     = '82574L Gigabit Network Connection'
    class      = network
    subclass   = ethernet

I also added links to the Intel PCIe ethernet controllers programming manual 
and the 82574 datasheet.

Incidentally, thanks to everyone involved for their work in this project. It 
helped me out of a bit of a jam.



Signed-off-by: Bill Paul <>

Index: nicintel_spi.c
--- nicintel_spi.c	(revision 1765)
+++ nicintel_spi.c	(working copy)
@@ -17,14 +17,20 @@ 
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- * Datasheet:
+ * Datasheets:
  * PCI/PCI-X Family of Gigabit Ethernet Controllers Software Developer's Manual
  * 82540EP/EM, 82541xx, 82544GC/EI, 82545GM/EM, 82546GB/EB, and 82547xx
+ *
+ * PCIe GbE Controllers Open Source Software Developer's Manual
+ *
+ *
+ * Intel 82574 Gigabit Ethernet Controller Family Datasheet
+ *
 #include <stdlib.h>
 #include <unistd.h>
 #include "flash.h"
@@ -70,10 +76,11 @@ 
 const struct dev_entry nics_intel_spi[] = {
 	{PCI_VENDOR_ID_INTEL, 0x105e, OK, "Intel", "82571EB Gigabit Ethernet Controller"},
 	{PCI_VENDOR_ID_INTEL, 0x1076, OK, "Intel", "82541GI Gigabit Ethernet Controller"},
 	{PCI_VENDOR_ID_INTEL, 0x107c, OK, "Intel", "82541PI Gigabit Ethernet Controller"},
 	{PCI_VENDOR_ID_INTEL, 0x10b9, OK, "Intel", "82572EI Gigabit Ethernet Controller"},
+	{PCI_VENDOR_ID_INTEL, 0x10d3, OK, "Intel", "82574L Gigabit Ethernet Controller"},
 static void nicintel_request_spibus(void)