Skip to content

Instantly share code, notes, and snippets.

@peteonrails
Last active February 11, 2017 22:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peteonrails/b7c41b74d2c2b60e457ce1db50752100 to your computer and use it in GitHub Desktop.
Save peteonrails/b7c41b74d2c2b60e457ce1db50752100 to your computer and use it in GitHub Desktop.
ASUS z270 Motherboard with Intel onboard controller Fix EEPROM Checksum for e1000 Linux Driver
8276c8276,8279
< for(i=0;; i++)
---
> // Temporarily disable checksumming
> // ASUS z270 mothboard issue
> // causes the validation to fail
> for(i=0; false; i++)
The ASUS z270 motherboard ships with a bug in the firmware that prevents the Linux kernel driver (e1000)
from activating the hardware. The system will boot correctly, but will not activate your network interface
with this error in place.
In order to fix the issue, I followed these steps:
1. Download the latest Intel Linux drivers from https://downloadcenter.intel.com/product/19297/Intel-82573L-Gigabit-Ethernet-Controller
2. Transfer the drivers to the z270 machine with a thumbdrive
3. Patch the linux drivers to ignore the checksum error. See diff below.
4. make, make install the patched driver. Please note, this will taint your kernel We can fix that later.
5. `modprobe -r e1000`
6. `modprobe e1000e WriteProtectNVM=0`
7. `ifconfg -a` should now show your network device
8. Install `ethtool` by running `configure; make; make install`
9. Using ethtool, read the current checksum value: `$ sudo ethtool -e enp0s31f6 offset 0x7e length 2` Write down the output of this command under the "values" column. This is the current checksum.
10. Using ethtool, find an unused word byte (ff) by running `sudo ethtool -e enp0s31f6 | less`. In my system, this was in the row 0x0010 at position 0.
11. Find your magic value by
a. running `lspci | grep Ethernet`,
b. then use the address value at the beginning of the line in my case: 00:1f.6
c. lspci -n | grep '00:1f.6'
d. Note the vendor code, in my case: 8086:15b8
e. Magic value is the device code and vendor code reversed as a hexidecimal, so for me: 0x15b88086
12. Rewrite the value ff to the existing spot in the EEPROM: `$ sudo ethtool -E enp0s31f6 magic 0x15b88086 offset 0x10 value 0xff`
13. ethtool will recalculate the correct checksum and update it. Verify this by running `$ sudo ethtool -e enp0s31f6 offset 0x7e length 2` The number should no longer match the value you wrote down earlier.
14. Switch back to the stock Intel driver:
a. modprobe -r e1000e
b. re-unzip the Intel drivers, rebuild them, and reinstall them useing make: make install.
c. modprobe e1000e
15. Your interface should be running. `ifconfig -a`
16. Configure the network and reboot
http://blog.vodkamelone.de/archives/146-Unbricking-an-Intel-Pro1000-e1000-network-interface.html
http://superuser.com/questions/1104537/how-to-repair-the-checksum-of-the-non-volatile-memory-nvm-of-intel-ethernet-co/1106641#1106641?newreg=c361cd236b4a4e99b0543ef784226ced
https://forums.linuxmint.com/viewtopic.php?t=209410
https://thesorcerer.wordpress.com/2011/07/01/guide-intel-82573l-gigabit-ethernet-with-ubuntu-11-04-and-fix-pxe-e05/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment