Linux on a Thinkpad 600X (2645-5EU)

Note: I haven't updated this page since Sep. 2000. I don't regularly use a 600X anymore. The tips below might still be helpful though. Good luck.

See Thomas Hood's excellent Linux on TP600 page for more detail. So far, I'm just including differences between his work and my own, but I plan to make this more user friendly once the content changes settle down a bit. I installed Red Hat 6.1, and have since upgraded to RH 6.2, but this info should be applicable to any 2.2 kernel-based distribution with a recent XFree86. Thanks to the numerous people who have provided tips and corrections.

Getting the installer started

BIOS bug

Older kernels couldn't detect the hard drive because of a BIOS bug. To fix this, get a BIOS upgrade here, or just get a newer distribution (as new or newer than Mandrake 7.0). I'd recommend upgrading your BIOS regardless.

Also, upgrading to the very latest BIOS version seems to make suspend/resume with the ORiNOCO wireless LAN cards (a.k.a. WaveLAN IEEE) and the wvlan_cs driver more reliable, thought not 100%.

Victor Yarosh <vy@nac.net> says that he couldn't use his DVD until he applied the 1.01 BIOS update. I never had any problem, but I also use DVD patches (which have now been integrated into 2.2.16).

Booting the Red Hat 6.1 installer

I had to run Red Hat's installer in expert mode to boot successfully. When the installer asks for a driver disk, just hit "Cancel". Also, the graphical install was messed up on my machine, so I had to specify a text install. So, the Red Hat users that aren't using an update floppy should specify:

text expert

Red Hat users with an update floppy should instead use:

linux updates text expert

Partitioning on the large hard drive

I don't know if this section is relevant since the BIOS problems were fixed, but until I know better, I'll leave it in.

The next annoyance was partitioning. Disk Druid seemed to have trouble with hard drives > 1024 cylinders (and others have had problems with it), so for a Red Hat install, I'd suggest using fdisk and doing the partitioning yourself by choosing a Custom installaion. It would only see 1024 of the 1559 cylinders at first. But, there is an expert command "c", which lets you specify 1559. Then, you'll be able to use all of the hard drive.

You can also use PartitionMagic, but according to Red Hat, PM 4.0 doesn't create Linux partitions correctly, so Red Hat completely ignores them. Use PM 5.0.

I didn't use extended partitions at all, but Todd Ross <ToddRoss@Attachmate.com> says that you have to make sure to use the 0x0F partition type ("ExtendedX" in PartitionMagic 5, "Win95 Ext'd (LBA)" in fdisk) for your extended partition.

Memory detection

If you have more than 64MB of memory, 2.2 kernels won't properly detect it. There are two solutions. One is to specify memory explicitly to the kernel. On the LILO boot line, specify "mem=######k" (without the quotes). The number to fill in the #s is the number that appears in the upper left of your screen at the very beginning of the boot process before LILO starts. If this works, it can be made permanent with an append= line in lilo.conf.

The ubergeeks among you will notice that that number of kilobytes is not equal to the number of MB of RAM in the machine. Trust me, if you try to specify the number of MB in the machine instead, the kernel will crash.

A better solution is to apply a fancy memory detection patch to your kernel. This allows Linux to detect all available RAM without silly workarounds. Enable all of the memory detection options when configuring the kernel. See my kernel configuration for more specifics. This even detected more memory than the Thinkpad reports on boot (and it all works too).

X with the Neomagic 256ZX

X was easy to set up, but there is one glitch: XFree86 3.X doesn't know how to deal with a 256ZX. So, I used XF86Setup and forced the Chipset to "NM2200", a.k.a. a 256AV. I also told XF86Setup explicitly that I have 4MB of video RAM, since only 2.5MB was detected, but I don't know if that makes a real difference.

Here's my XF86Config for 3.3.6. Use it with the SVGA server.

I've now upgraded to XFree86 4.0.1 using the Red Hat Rawhide RPM; here's the XF86Config for it. 4.0.1 has native 256ZX support, meaning that the correct amount of video RAM is detected, and 24-bit color is now supported. I use 16-bit mode, because it's faster and you can't tell the difference on an LCD. I don't know if the new driver supports better acceleration, but 4.0.1 feels faster to me. I have a minor problem when I close the lid without suspending and I'm not using console framebuffer. Doing anything to reset the display, like xvidtune or switching virtual consoles back and forth, will fix the problem.

PCMCIA

PCMCIA worked without effort for me, using an IBM 56k modem (not the WinModem!) and a 3com Cardbus Ethernet card (3CXFE575BT at first, now a -CT). A WaveLAN 802.11 Gold card works very well with the provided driver from pcmcia_cs 3.1.19 and wireless_tools.

One advantage of the newer versions of pcmcia-cs (3.1.9 or later) is that they automatically use the PCI IRQ for card status notifications and Cardbus I/O. If you're using an earlier version, you can change PCIC_OPTS in /etc/sysconfig/pcmcia. This may be done in a different spot if you're not using Red Hat.

APM (Power Management)

See the APM entries from my kernel configuration. Rebuild your kernel with these entries. Suspending and hibernation work beautifully for me. You may want to get tpctl, which lets you configure various power management parameters, as well as others.

Make sure to run a kernel other than 2.2.15 (2.2.16 or later is preferable), or stop running apmd. A change in 2.2.15 broke suspends when apmd is running. If you must run 2.2.15, apply this patch.

PCI Bus Power Management

The Thinkpad 600X is the first in the 600 series (AFAIK) to support PCI bus power management. What this basically means is that when no device has asserted that it wants to use the bus (using the CLKRUN signal), the bus clock stops running, saving power. This is a good thing, but unfortunately, most Linux drivers don't know how to control CLKRUN, so devices expeceting the bus to be running will get very confused, resulting in errors and system crashes.

Some Cardbus cards continuously assert CLKRUN, so that when they are active, the problem goes away. One such card is the 3com Megahertz 10/100 Cardbus Ethernet card (which is what I have). Also, as of kernel 2.2.17pre16, the cs46xx driver supports controlling CLKRUN. But, no other device drivers that I know of support it, so if you run in to trouble with the modem, or certain Cardbus cards, I'd recommend disabling it.

To do this, run "ps2 pcibusp disable" under DOS. Now, there are problems with this as well. Naturally, you'll use more battery power. Also, I have found that I sometimes can't suspend properly under APM with this setting enabled. A recent BIOS or kernel may have fixed this, since I didn't have this problem the last time I tried it.

The Lucent PCI modem (sort of)

If you're willing to use a proprietary binary kernel module, and you're running a kernel between 2.2.12 and 2.2.14 or 15, this driver works for me sometimes, though it also crashes my machine hard sometimes. The module works fine with kernels besides the 2.2.12-20 that comes with Red Hat, but not with more recent kernels, and you have to use insmod -f. The ltinst script takes care of this for you.

I've gotten a report that shutting off PCI bus power saving (see the Sound section) fixes the crashes. I haven't tested this, though.

Here is a project to build an open-source driver.

Frame Buffer

Note: This configuration is designed to take full advantage of the 1024x768 resolution of the LCD screen. If you ever connect your laptop to a monitor with less than this resolution; don't follow these steps. The only purpose of setting this up is to get a 128x48 console with a decent font, and to get the penguin boot logo. X doesn't need it (for the most part), and the FB's console is slower that the true text-based console, so whether you use the FB device or not is personal preference. I like the roomy console and the nice font, but I spend most of my time in X anyway.

I used this kernel configuration. See the entries with FB if you are rolling your own config. Then, you need to specify the video mode to the kernel. I did this by adding "vga=0x305" on a line by itself to the top of /etc/lilo.conf.

Infrared

With the very latest patches, the Thinkpad 600X has full FIR (4 Mb/s) support under Linux (though I've only tested SIR). IrDA for Linux is still in heavy development, so expect things to be a little more difficult.

First, make sure to enable the IR port. For now, I think the only way to do this persistantly is with the DOS Thinkpad Configuration tool (PS2). Get at least kernel 2.2.15pre5 and and use the parameters from the IrDA section of my kernel configuration to rebuild your kernel. Build and install the irda-utils. Then see the Linux IrDA Project page, READMEs from irda-utils and the Linux IR HOWTO to help configure everything.

You will want to use the nsc_ircc module, with the option dongle_id=0x09. Also make sure that you modularize the serial driver, and load it only after you load IrDA. So far, I have my Palm Vx syncing with the Thinkpad, and object beaming works to the Palm. I haven't tried other PalmPilot tricks or any high-speed applications yet.

Sound

For a long time, the only support for this chipset was through ALSA, but there were still problems with that driver, such as not supporting PCI power saving.

But ALSA, isn't needed anymore. Recently, Alan Cox and others have ported this driver over to the base 2.2 kernel, and added PCI power saving support, so that you don't have to turn it off anymore to make sound work. I'd recommend getting at least kernel 2.2.18pre2 to have the most stable support. See the sound section of my kernel configuration for the appropriate options to enable when recompiling your kernel. Under Red Hat, add "alias sound cs46xx" to your conf.modules to get the module loaded on boot.

Last I checked, this module didn't support suspend and resume, so configure apmd to unload and reload the sound modules. On Red Hat, look for the appropriate entries in /etc/sysconfig/apmd.


Manoj Kasichainula (manoj+www@io.com)