Difference between revisions of "Problem with e1000: EEPROM Checksum Is Not Valid"

From ThinkWiki
Jump to: navigation, search
m (Circumvention)
(Circumvention)
Line 43: Line 43:
 
# modprobe e1000
 
# modprobe e1000
 
</pre>
 
</pre>
 +
 +
On some occasions, the commands have to be run twice before eth0 becomes useable.
  
 
== See also ==
 
== See also ==

Revision as of 15:42, 31 August 2006

Problem Description

On certain ThinkPads, e1000 driver for Intel Gigabit controller fails to load with the following error message in /var/log/messages:

e1000: 0000:02:00.0: e1000_probe: The EEPROM Checksum Is Not Valid
e1000: probe of 0000:02:00.0 failed with error -5 

Circumvention

  • Upgrade your BIOS

Lenovo has published newer BIOS revisions that appear to fix the issue for some users. The BIOS upgrade turns off "Deep smart power down" which has been known to cause issues at initialization time (the driver can re-enable the issue later if you desire, the feature works correctly then).

  • Insert a cable

Inserting a linked network cable bypasses the problem.

  • Dangerous: turn off checksum checking in the driver

Disabling the checksum checking is dangerous: the network card has (obviously) read incorrect data from the EEPROM and will start operation based on these wrong values. You will see degraded network performance and possible data corruption and driver crashes. DO THIS AT YOUR OWN RISK.

In e1000_main.c, find the following code and comment out err assignment and the goto statement:

/* make sure the EEPROM is good */
if (e1000_validate_eeprom_checksum(&adapter->hw) < 0) {
        DPRINTK(PROBE, ERR, "The EEPROM Checksum Is Not Valid\n");
        /* err = -EIO;
        goto err_eeprom; */
}

Note: This is just a temporary solution until a better fix is developed. See the bug report for more information.


  • Remove/add kernel module

Removing and adding the kernel module is a possible work-around. As root, run

# modprobe -r e1000
# modprobe e1000

On some occasions, the commands have to be run twice before eth0 becomes useable.

See also