Red Hat Linux 9 (kernel 2.4.20-8) on Nokia IP330: "Invalid EEPROM checksum 0xff00" or "Corrupted EEPROM" with EtherExpress Pro 100 drivers

"Matthew X. Economou" <[email protected]> Sun, 27 Jul 2003 22:16:10 -0400
Newsgroups gmane.linux.drivers.eepro100.devel
Organization Cincinnati Children's Hospital Medical Center
Message-ID <[email protected]>
Please help!  I'm having problems getting the 3 on-board EtherExpress
Pro 100 NICs of a Nokia IP330 working under Linux (Red Hat Linux 9
with kernel 2.4.20-8).  Obviously, the NICs work under Nokia's IPSO
operating system.  I have also tested FreeBSD, where the NICs work as
long as I specify each NIC's MAC address on the ifconfig command line.
Here's what I've tried under Linux thus far:

 - Intel's e100 driver (get the "Corrupted EEPROM on instance #0"
   error)
 - Becker's eepro100 driver (loads but reports "Invalid checksum
   0xff00" and MAC addresses of FF:FF:FF:FF:FF:FF on all interfaces)
 - Specifying the MAC (ifconfig fails with "SIOCSIFHWADDR: Device or
   resource busy", eepro100-diag fails with "Modifying the station
   (MAC) address has been disabled in this release of the diagnostic")
 - Disabling plug-and-play in the system's BIOS (no effect)
 - Enabling PCI 2.1 compliance in the system's BIOS (no effect)
 - Passing IRQ and IO address arguments to the modules (no affect)
 - Disabling sleep mode with Becker's eepro100-diag utility (it
   doesn't work; sleep mode remains enabled)

I am at my wits end.  Everything I have found on Google or Usenet thus
far has not worked.

Details are below.  Relevant diagnostic information can be seen at the
following URLs:

http://www.cs.rose-hulman.edu/~econommx/eepro100-diag.txt
http://www.cs.rose-hulman.edu/~econommx/eepro100-dmesg.txt
http://www.cs.rose-hulman.edu/~econommx/eepro100-error.txt
http://www.cs.rose-hulman.edu/~econommx/eepro100-lspci.txt
http://www.cs.rose-hulman.edu/~econommx/eepro100-pciconfig.txt

1. Using the Intel "e100" driver

Kudzu (Red Hat's device management tool) configured the cards to use
the Intel "e100" device driver (version 2.1.29-k2).  This driver
returns the following errors:

    e100: selftest OK.
    e100: Corrupted EEPROM on instance #0
    e100: selftest OK.
    e100: Corrupted EEPROM on instance #0
    e100: selftest OK.
    e100: Corrupted EEPROM on instance #0

Modprobe issues the following:

    [root@gw1 root]# modprobe e100
    Intel(R) PRO/100 Network Driver - version 2.1.29-k2
    Copyright (c) 2002 Intel Corporation

    e100: Corrupted EEPROM on instance #0
    e100: Corrupted EEPROM on instance #0
    e100: Corrupted EEPROM on instance #0
    /lib/modules/2.4.20-8/kernel/drivers/net/e100/e100.o: init_module:
No such device
    Hint: insmod errors can be caused by incorrect module parameters,
including invalid IO or IRQ parameters.
          You may find more information in syslog or the output from
dmesg
    /lib/modules/2.4.20-8/kernel/drivers/net/e100/e100.o: insmod
/lib/modules/2.4.20-8/kernel/drivers/net/e100/e100.o failed
    /lib/modules/2.4.20-8/kernel/drivers/net/e100/e100.o: insmod e100
failed

After this point, the e100 driver refuses to load.

2. Using Donald Becker's "eepro100" driver

I built the latest version of the eepro100 driver as a module.  It
loads into the kernel, but not after issuing the following error
messages:

    pci-scan.c:v1.11 8/31/2002  Donald Becker <[email protected]>
http://www.scyld.com/linux/drivers.html
    eepro100.c:v1.26 11/17/2002 Donald Becker <[email protected]>
      http://www.scyld.com/network/eepro100.html
    divert: allocating divert_blk for eth0
    eth0: Invalid EEPROM checksum 0xff00, check settings before
activating this device!
    eth0: OEM Intel PCI EtherExpress Pro100 at 0xc4888000,
FF:FF:FF:FF:FF:FF, IRQ 10.
      Board assembly ffffff-255, Physical connectors present: RJ45 BNC
AUI MII
      Primary interface chip unknown-15 PHY #31.
        Secondary interface chip i82555.

      ** The configuration EEPROM enables Sleep Mode.

      ** This will cause PCI bus errors!
      ** Update the configuration EEPROM with the eepro100-diag
program.
      General self-test: passed.
      Serial sub-system self-test: passed.
      Internal registers self-test: passed.
      ROM checksum self-test: passed (0x24c9f043).

(The errors are the same for the other two interfaces.)  This driver
does load, and an "ifconfig -a" command shows three network
interfaces, eth[0-2].

3. Specifying the MAC address

With the Becker driver loaded, the network interfaces work but all of
the packets have the Ethernet broadcast address (FF:FF:FF:FF:FF:FF).
I did record the actual MAC addresses as reported by IPSO, but when I
attempt to specify them on the ifconfig command line, I get the
following error regardless of the interface:

    [root@gw1 root]# ifconfig eth0 hw ether 00:a0:8e:0a:ff:48
    SIOCSIFHWADDR: Device or resource busy

eepro100-diag fails with the error "Modifying the station (MAC)
address has been disabled in this release of the diagnostic."

4. Disabling plug-and-play in the BIOS

The IP330 uses an Award BIOS.  In the PNP/PCI configuration menu, I
set "Resources controlled by" to "Manual".  All IRQs are assigned to
"PCI/ISA PnP".  I could not find any other PnP-related settings in the
BIOS configuration menus.

Changing the "Resources controlled by" setting has no effect.

5. Enabling PCI 2.1 compliance in the BIOS

I toggled the setting "PCI 2.1 compliance" (from disabled to enabled).
This had no effect.

6. Passing IRQ and IO address arguments to the drivers

I tried specifying the IRQ and IO address of each NIC in the arguments
to modprobe.  This had no effect.

7. Disabling sleep mode with Becker's eepro100-diag utility

The device driver recommends disabling sleep mode with the
eepro100-diag utility.  This does not work.  Subsequent invocations of
the eepro100-diag utility show that PCI sleep mode is still enabled:

    sh-2.05b# /usr/local/bin/eepro100-diag -G 0 -w -w -f -# 1
    eepro100-diag.c:v2.12 4/15/2003 Donald Becker ([email protected])
     http://www.scyld.com/diag/index.html
    Index #1: Found a Intel i82557/8/9 EtherExpressPro100 adapter at
0x6800.
    Changing the chip configuration word (offset 10) to 0xffff.
    Writing 0xfffd to configuration EEPROM word 10.
    Writing 0xbbbb to configuration EEPROM word 255.
         Use '-a' or '-aa' to show device registers,
             '-e' to show EEPROM contents, -ee for parsed contents,
      or '-m' or '-mm' to show MII management registers.
    sh-2.05b# /usr/local/bin/eepro100-diag -ee -# 1
    eepro100-diag.c:v2.12 4/15/2003 Donald Becker ([email protected])
     http://www.scyld.com/diag/index.html
    Index #1: Found a Intel i82557/8/9 EtherExpressPro100 adapter at
0x6800.
    EEPROM contents, size 256x16:
        00: ffff ffff ffff ffff ffff ffff ffff ffff  ________________
      0x08: ffff ffff ffff ffff ffff ffff ffff ffff  ________________
      0x10: ffff ffff ffff ffff ffff ffff ffff ffff  ________________
..output elided...
      0xf0: ffff ffff ffff ffff ffff ffff ffff ffff  ________________
      0xf8: ffff ffff ffff ffff ffff ffff ffff ffff  ________________
     *****  The EEPROM checksum is INCORRECT!  *****
      The checksum is 0xFF00, it should be 0xBABA!
    Intel EtherExpress Pro 10/100 EEPROM contents:
      Station address FF:FF:FF:FF:FF:FF.
      Board assembly ffffff-255, Physical connectors present: RJ45 BNC
AUI MII
      Primary interface chip i82555 PHY #-1.
        Secondary interface chip i82555, PHY -1.
       Sleep mode is enabled.  This is not recommended.
       Under high load the card may not respond to
       PCI requests, and thus cause a master abort.
       To clear sleep mode use the '-G 0 -w -w -f' options.

I even tried powering off the hardware after running the above
commands as recommended in
http://www.scyld.com/pipermail/eepro100/2003-April/000007.html, to no
effect.

-- 
Matthew X. Economou, Sr. Systems Analyst, I.S. Information Security
Cincinnati Children's Hospital Medical Center, Inc.
ATTN: VP1/eHealth, MLC 9009, 2900 Vernon Place, Cincinnati, OH 45219
Desk: +1 513 6365621, Fax: +1 513 6367737, Page: +1 877 7801326