We are not able to program the MAC address to an I210 on our PCB.
This is our own design PCBA which lands an off-module I210 on a motherboard connected to a E3950 ComExpress Type10 single board computer via PCIe. The i210 uses the PCIe reference clock from the E3950 ("common clock configuration"). The i210 has a flash attached which we programmed first before soldering into the system.
Our design was based off the Intel i210 reference design ("i210-at-i211-at-1g-base-t-reference-design-schematic.pdf") referencing the "i210-ethernet-controller-datasheet.pdf" datasheet. This design is currently being reviewed by Intel.
The OS is Ubuntu 18.04 using Intel igb driver v188.8.131.52
# lspci -vx ... 02:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03) Subsystem: Intel Corporation I210 Gigabit Network Connection Flags: fast devsel, IRQ 20 Memory at 91200000 (32-bit, non-prefetchable) [size=128K] I/O ports at e000 [size=32] Memory at 91220000 (32-bit, non-prefetchable) [size=16K] Capabilities:  Power Management version 3 Capabilities:  MSI: Enable- Count=1/1 Maskable+ 64bit+ Capabilities:  MSI-X: Enable- Count=5 Masked- Capabilities: [a0] Express Endpoint, MSI 00 Capabilities:  Advanced Error Reporting Capabilities:  Device Serial Number 00-a0-c9-ff-ff-00-00-00 Capabilities: [1a0] Transaction Processing Hints Kernel modules: igb 00: 86 80 33 15 03 00 10 00 03 00 00 02 00 00 00 00 10: 00 00 20 91 00 00 00 00 01 e0 00 00 00 00 22 91 20: 00 00 00 00 00 00 00 00 00 00 00 00 86 80 33 15 30: 00 00 00 00 40 00 00 00 00 00 00 00 ff 01 00 00
We are able to program the NVM,
# eeupdate64e Using: Intel (R) PRO Network Connections SDK v2.32.20 EEUPDATE v184.108.40.206 Copyright (C) 1995 - 2018 Intel Corporation Intel (R) Confidential and not for general distribution. Warning: No Adapter Selected NIC Bus Dev Fun Vendor-Device Branding string === === === === ============= ================================================= 1 2 00 00 8086-1533 Intel(R) I210 Gigabit Network Connection 2 3 00 00 8086-1539 Intel(R) I211 Gigabit Network Connection # ./eeupdate64e /NIC=1 /FILE=I210_Invm_Copper_NoAPM_v0.6.txt /INVMUPDATE Using: Intel (R) PRO Network Connections SDK v2.32.20 EEUPDATE v220.127.116.11 Copyright (C) 1995 - 2018 Intel Corporation Intel (R) Confidential and not for general distribution. NIC Bus Dev Fun Vendor-Device Branding string === === === === ============= ================================================= 1 2 00 00 8086-1533 Intel(R) I210 Gigabit Network Connection 2 3 00 00 8086-1539 Intel(R) I211 Gigabit Network Connection Update INVM content ... Verify autoload configuration ... done.
Where our NVM file contains
IMGVER 0.6 IMGTYPE 6 ; I210 Copper without APM CSRALD 0x5ba0 = 0x00001541 LPG_RST ; [Intel] Set GPAR_EN from CSR auto config. CSRALD 0x0E34 = 0x0B403C21 LPG_RST ; [Intel] Clear EE_SU.LPI_Clock_Stop. WALD 0x0a = 0x402F PCIE_RST ; [Intel] Set GPAR_EN. WALD 0x1b = 0x3400 PCIE_RST ; [Intel] Default settings. WALD 0x28 = 0x1C60 PCIE_RST ; [Intel] FLBAR_Size = 000 WALD 0x0d = 0x1533 PCIE_RST ; [Intel] I210 Copper w/ flash Device ID WALD 0x21 = 0x0584 PCIE_RST ; [Intel] Default settings. WALD 0x24 = 0x0280 PCIE_RST ; [Intel] Default settings WALD 0x0F = 0x7343 SW_RST ; [Intel] Set TX_LPI_EN. CSRALD 0x0000 = 0x08100241 SW_RST ; [Intel] Set CTRL.SLU. WALD 0x0B = 0x1533 PCIE_RST ; Subsystem ID WALD 0x0C = 0x8086 PCIE_RST ; Susbsystem Vendor ID Ordered_Section_Start CSRALD 0x5B44 = 0x00FF00A8 LPG_RST ; [Intel] Set NFTS to 0xA8. CSRALD 0x5B40 = 0x5E000090 LPG_RST ; [Intel] cont. Ordered_Section_End
After programming the NVM, all power is removed for ~20secs before rebooting.
Now running celo64e, it passes tests
# ./celo64e Using: Intel (R) PRO Network Connections SDK v2.32.20 Intel (R) PRO Adapter End of Line Diagnostic Utility v18.104.22.168 Copyright (C) 2002 - 2018 by Intel (R) Corporation. Intel (R) Confidential and not for general distribution. Found Intel(R) I210 Gigabit Network Connection Card 1: Bus=2 Dev=0 Function=0 MAC Address=000000000000 IRQ=255 Testing adapter...hit <ESC> to abort. Device Registers...PASSED EEPROM Test...PASSED FIFO Test...PASSED Internal (Extended) Loopback Test...PASSED Testing completed.
But the MAC is '000000000000' so we want to program. But this command fails.
# ./eeupdate64e /NIC=1 /MAC=001395286279 Using: Intel (R) PRO Network Connections SDK v2.32.20 EEUPDATE v22.214.171.124 Copyright (C) 1995 - 2018 Intel Corporation Intel (R) Confidential and not for general distribution. NIC Bus Dev Fun Vendor-Device Branding string === === === === ============= ================================================= 1 2 00 00 8086-1533 Intel(R) I210 Gigabit Network Connection 2 3 00 00 8086-1539 Intel(R) I211 Gigabit Network Connection 1: Updating Mac Address to 001395286279...Done. 1: Updating Checksum and CRCs...Failed.
If we boot into the BIOS, we can see the card listed and inspect it's parameters. It looks good there but has blank MAC.
And linux fails to bring up the card because the MAC is not programmed.
# dmesg | grep '02:00' [ 0.219329] pci 0000:02:00.0: [8086:1533] type 00 class 0x020000 [ 0.219368] pci 0000:02:00.0: reg 0x10: [mem 0x91200000-0x9121ffff] [ 0.219399] pci 0000:02:00.0: reg 0x18: [io 0xe000-0xe01f] [ 0.219414] pci 0000:02:00.0: reg 0x1c: [mem 0x91220000-0x91223fff] [ 0.219569] pci 0000:02:00.0: PME# supported from D0 D3hot D3cold [ 3.613883] igb 0000:02:00.0: Invalid MAC Address [ 3.876238] igb: probe of 0000:02:00.0 failed with error -5
Thanks for your help
Thank you for contacting Intel Embedded Community.
Could you please clarify if you are running Ubuntu in the E3950 processor, and the Eeupdate version 126.96.36.199 in the affected design?
Could you please verify that the affected design has implemented the suggestions that answer the question 2.23, on page 9 of the Intel(R) Ethernet Controller I210/I211 Frequently Asked Questions [FAQs] document # 335346? This document can be found at:
We are waiting for the information that should answer these questions.
Yes we are running Ubuntu on the E3950 where we are also running that version of eeupdate to program the i210 NVM.
I had seen that question 2.23 in the FAQ, but it seems to say the MAC can be programmed again,
"Pin 12 on the I210 is designated for the purpose of overriding the security feature. To override the security when it is in effect, a pull down resistor can be applied to that pin. This pin is sampled during initialization to determine if security is disabled.
Not all fields in the image are protected. Fields that are normally subject to change by the OEM, such as the MAC address, PCI subsystem ID fields and LED customizations, can be changed without invalidating the digital signature."
This 2nd paragraph seems to indicate some fields such as MAC can be re-programmed after initial NVM programming.
We can also try pulling pin12 low at boot and see if that allows us to program the MAC.
But can you provide any clarification if the MAC should be able to re-program after initial NVM programming?
Thanks for your reply.
Could you please verify if this situation persists using any of the following Operating System (OS) instead of Ubuntu?
- Windows* 10 Enterprise (64-bit).
- Windows* IoT Core (32/64-bit).
- Wind River 8 Linux distribution (64-bit).
- Yocto Project* BSP tool-based embedded Linux distribution (64-bit).
- Android (64-bit) Marshmallow PV April 17.
- Android O ETA target Q2 ’18.
- Wind River VxWorks* 7.
We appreciate your cooperation.