A bug in early revisions of IBM's BIOS on these machines mistakenly identifies the FreeBSD partition as a potential FAT suspend-to-disk partition. When the BIOS tries to parse the FreeBSD partition it hangs.
According to IBM , the following model/BIOS release numbers incorporate the fix.
|T20||IYET49WW or later|
|T21||KZET22WW or later|
|A20p||IVET62WW or later|
|A20m||IWET54WW or later|
|A21p||KYET27WW or later|
|A21m||KXET24WW or later|
It has been reported that later IBM BIOS revisions may have reintroduced the bug. This message from Jacques Vidrine to the FreeBSD laptop computer mailing list < freebsd-mobile@FreeBSD.org> describes a procedure which may work if your newer IBM laptop does not boot FreeBSD properly, and you can upgrade or downgrade the BIOS..
If you have an earlier BIOS, and upgrading is not an option a workaround is to install FreeBSD, change the partition ID FreeBSD uses, and install new boot blocks that can handle the different partition ID.
First, you will need to restore the machine to a state where it can get through its self-test screen. Doing this requires powering up the machine without letting it find a FreeBSD partition on its primary disk. One way is to remove the hard disk and temporarily move it to an older ThinkPad (such as a ThinkPad 600) or a desktop PC with an appropriate conversion cable. Once it is there, you can delete the FreeBSD partition and move the hard disk back. The ThinkPad should now be in a bootable state again.
With the machine functional again, you can use the workaround procedure described here to get a working FreeBSD installation.
Download boot1 and boot2 from http://people.FreeBSD.org/~bmah/ThinkPad/. Put these files somewhere you will be able to retrieve them later.
Install FreeBSD as normal on to the ThinkPad. Do not use Dangerously Dedicated mode. Do not reboot when the install has finished.
Either switch to the ``Emergency Holographic Shell'' (ALT+F4) or start a ``fixit'' shell.
Use fdisk(8) to change the FreeBSD partition ID from 165 to 166 (this is the type used by OpenBSD).
Bring the boot1 and boot2 files to the local filesystem.
Use disklabel(8) to write boot1 and boot2 to your FreeBSD slice.
# disklabel -B -b boot1 -s boot2 ad0sn
n is the number of the slice where you installed FreeBSD.
Reboot. At the boot prompt you will be given the option of booting OpenBSD. This will actually boot FreeBSD.
Getting this to work in the case where you want to dual boot OpenBSD and FreeBSD on the same laptop is left as an exercise for the reader.