From shivers@lambda.ai.mit.edu Wed Aug 12 21:45:57 1998
Date: Wed, 12 Aug 1998 13:40:14 -0400 (EDT)
From: Olin Shivers <shivers@lambda.ai.mit.edu>
To: dgaudet@artic.org
Subject: Suspension/hibernation problem & fix
Reply-To: shivers@ai.mit.edu
A little up-front warning: if you fry your computer based on this advice,
I take no responsibility. Check everything I say, because it is pretty
low-level advice.
I just had my ThinkPad 560 repaired. It's an original TP560, not a 560E or a
560X. The repair involved getting a brand new system board, and the friendly
guys at IBM upgraded my BIOS to the latest 560 BIOS. Unfortunately, this BIOS
causes linux to hang after a suspend or hibernation -- I have no idea why, but
it's 100% reliable. Everything worked fine under my original BIOS. Under the
new one, everything works fine under DOS, but if you suspend under linux, when
you come back, you get your screen back, but the whole system is locked up
hard; I had to reboot every time.
I tried with the latest Linux kernel (2.0.35, as of today, August 12, 1998).
I still lose. I tried with older kernels. I still lose. It happens if you boot
single-user and have no daemons running, such as the PCMCIA or APM daemon.
The TP560/linux web pages have no useful info.
So I called up IBM. "You're running Windows 95?" "No, Linux." "What's that?"
"It's an OS popular in the research community; the guy who wrote it is on
the front cover of Forbes this month." From this point on, the guy on the
phone made it clear that (a) Linux was obviously some kind of fringe thing
used by a couple of dozen people, obviously quite sensitive to reasonable
changes in the underlying system, and (b) IBM only supports the installed
software, i.e., Win95. I said I didn't want support; I didn't want IBM to
debug my OS; I just wanted a URL pointing to the older BIOS's. He went and
spoke to his supervisor. Then he came back and said IBM only provided the
latest BIOS on their Web sites.
Fortunately, while I was on hold, I used some search tools on one of IBM's web
pages to locate the penultimate BIOS. This was my fourth or fifth such search
through their Web site, but I just happened to get lucky this time out and
stumbled over the right search page that led me to this BIOS (there are three
or four other easy-to-find decoy search pages that are useless).
So I told him he was mistaken, rang off, snarfed the bits, wrote a floppy,
downgraded my BIOS, and it worked. Which is a good thing, too, because that
FTP site of IBM's didn't have any BIOS's prior to the the next-most-recent.
Now suspension and hibernation works completely.
Is this useful to you? Maybe. My BIOS is for a 560, *NOT* for a 560E
or a 560X. If that's you, and you are being hosed then you can downgrade
your BIOS and win. If you have a 560E or a 560X, see below.
The new BIOS that screws me up is 1.20 (released either 98/6/24 or 98/4/9,
depending on which page you check). The one right before that, 1.11 (released
98/3/18) works fine. You can get 1.11 by going to
http://www.pc.ibm.com/us/searchfiles.html
and searching for "560 BIOS", which will lead you to these two
files:
ftp://ftp.pc.ibm.com/pub/pccbbs/mobiles/sytpk111.exe
ftp://ftp.pc.ibm.com/pub/pccbbs/mobiles/sytpk111.txt
Note that IBM only seems to have the latest BIOS and the one before that
-- so if they come out with a new one, they might dump 1.11 off their
ftp site. So you might also look in
ftp://ftp.ai.mit.edu/pub/shivers/
If you've got a more recent 560E or 560X, do *NOT* use this BIOS -- the web
pages are really clear that you must use different BIOS' for different models,
and you could really mess up your machine if you install the wrong flavor. Go
to the search page and grub around yourself for the right BIOS for your
machine. There are a lot of BIOS's there for these models, but I haven't
tried any of them.
It is quite difficult to find this searchfiles.html page; you can wander
around in a maze of twisty HTML passages at http:/www.pc.ibm.com/ for hours,
looking at pages that scream at you how much they want to help you, but never
actually take you to useful information. It's an infuriating site -- but it
does have a lot of useful information cleverly hidden away as a reward for the
persistent, including technical specs and full manuals for the machines. So
I've been careful to include the URL for the ftp site search page in this msg.
The install procedure is:
Boot DOS or Windows and run
sytpk.exe a:
You are sternly warned that you *must* have your notebook
plugged into both AC *and* a fresh battery. You insert a fresh
floppy into your drive, and sytpk.exe will write magic bits onto
it. Reboot with that magic floppy, and it'll install the new bios.
Reboot, holding down F1, go into the hindbrain of the thing, click
the "initialise" button, and you are done. Dire, horrible things
will happen should you turn your computer off in the middle of
the actual install.
But don't take my word for it. Read sytpk111.txt yourself to confirm
my summary.
What would be *really* good would be for a real kernel-type person, one
who understands BIOS interfacing and the APM spec -- which I believe has
undergone revision over time -- to figure out why Linux screws up with the
newer BIOS'. Because the newer 560's are certainly going use the newer
BIOS's, and there may not be a downgrade path for them. If some wizard figures
this out, I'd appreciate it if you could send me email. And email the
maintainers of the extremely useful TP560/linux pages, of course:
http://www.arctic.org/~dgaudet/tp560/
http://chaos.ph.utexas.edu/~lera/tp560.html
http://www.cs.utexas.edu/users/kharker/linux-laptop/tp560.txt
One more thing: the current Linux kernel, 2.0.35, does *not* require the
APM patch
http://www.arctic.org/~dgaudet/tp560/linux-apm.patch
because it's been folded into the kernel. But you do have to set
CONFIG_APM_IGNORE_MULTIPLE_SUSPEND=y
when you configure your kernel to get the fix.
-Olin