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 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