Configuring cs8920 ethernet card for Linux 2.4 kernel

I recently bought a IBM PC300 GL computer that had been removed from corporate use and delivered to a second-hand computer shop. It came with a cs8920 ethernet card. I encountered two rather annoying problems with the card. [Note: At the time of writing I used a late 2.4.x series kernel, probably 2.4.18.]

Disabling PnP

After I had built a non-modular kernel with support for the cs89x0 driver, I got the following message on every boot:

cs89x0: no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP

Needless to say, the card didn't work and the message wasn't very helpful either. The only way — at least that I am aware of — to disable PnP was to use the utility available at:

http://www.cirrus.com/en/software/drivers/ethernet/Windows_Networking_SWDiskV310.zip

That package contains utilities for configuring the card for DOS and Windows. The DOS utility that can be used to configure the PnP, IRQ, and other settings, is called “setup.exe”. I installed a tiny FreeDOS partition for this purpose. After disabling PnP with setup.exe, this problem was out of the way.

Kernel boot parameters

After disabling the PnP the cs8920 card started working. However the kernel driver wouldn't detect the card if I rebooted the computer. The only way to get the card working again was to halt the system, take power off, and then start again. This was very inconvinient.

Luckily I found a message from the linux-net mailing list archives that had the solution. It was to pass an IO address along the kernel boot line or as a module parameter. The address should be the base address of the card plus one, i.e. if the card is at 0x300, specify 0x301.

By doing “/sbin/ifconfig eth0” as root before any rebooting, the output revealed the base address:

Interrupt:10 Base address:0x360

With this information I could provide the kernel with the proper boot line by adding the following line to “/etc/lilo.conf”:

append="ether=10,0x361,eth0"

More information

Janne Nikula, jni@iki.fi