OpenBSD on the Thinkpad A21p

I got my first laptop in 1989, a Zenith SupersPort 286. Much to my surprise, I really used it extensively, mostly living off it as my primary computer for quite some time. However, since then, I really have not seen too many laptops I liked, most were just cutting way too many corners or too expensive or by the time they ended up in my hands, too beat up. Or...they just didn't run OpenBSD well.

Recently (2007), I ended up with a pair of used IBM Thinkpad A21p systems. I'd used Thinkpad machines before, even other A21 machines. The machine arrived in my life minus everything of resale value, no power supply, no CD or DVD, no RAM. Curiously (and fortunately!) it did come with a hard disk, and borrowing parts, I was able to find out it was worth making some investment in.



OpenBSD 4.4-current (GENERIC) #0: Sun Nov 16 23:33:45 EST 2008
cpu0: Intel Pentium III ("GenuineIntel" 686-class) 847 MHz
real mem  = 402157568 (383MB)
avail mem = 380178432 (362MB)
mainbus0 at root
bios0 at mainbus0: AT/286+ BIOS, date 05/29/03, BIOS32 rev. 0 @ 0xfd820, SMBIOS rev. 2.3 @ 0xe0010 (47 entries)
bios0: vendor IBM version "KYET37WW (1.10 )" date 05/29/2003
bios0: IBM 2629HXU
apm0 at bios0: Power Management spec V1.2
apm0: battery life expectancy 100%
apm0: AC on, battery charge high
acpi at bios0 function 0x0 not configured
pcibios0 at bios0: rev 2.1 @ 0xfd7b0/0x850
pcibios0: PCI IRQ Routing Table rev 1.0 @ 0xfdee0/208 (11 entries)
pcibios0: PCI Interrupt Router at 000:07:0 ("Intel 82371FB ISA" rev 0x00)
pcibios0: PCI bus #5 is the last bus
bios0: ROM list: 0xc0000/0x10000 0xd0000/0x800 0xe0000/0x10000
cpu0 at mainbus0: (uniprocessor)
pci0 at mainbus0 bus 0: configuration mode 1 (no bios)
pchb0 at pci0 dev 0 function 0 "Intel 82443BX AGP" rev 0x03
intelagp0 at pchb0
agp0 at intelagp0: aperture at 0xf4000000, size 0x4000000
ppb0 at pci0 dev 1 function 0 "Intel 82443BX AGP" rev 0x03
pci1 at ppb0 bus 1
vga1 at pci1 dev 0 function 0 "ATI Mobility M3" rev 0x02
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
cbb0 at pci0 dev 2 function 0 "TI PCI1450 CardBus" rev 0x03: irq 11
cbb1 at pci0 dev 2 function 1 "TI PCI1450 CardBus" rev 0x03: irq 11
xl0 at pci0 dev 3 function 0 "3Com 3c556B 100Base-TX" rev 0x20: irq 11, address 00:00:86:4c:d1:02
acphy0 at xl0 phy 0: AC101 10/100 PHY, rev. 11
"3Com V.90 Modem" rev 0x20 at pci0 dev 3 function 1 not configured
clcs0 at pci0 dev 5 function 0 "Cirrus Logic CS4280/46xx CrystalClear" rev 0x01: irq 11
ac97: codec id 0x43525914 (Cirrus Logic CS4297A rev 4)
ac97: codec features headphone, 20 bit DAC, 18 bit ADC, Crystal Semi 3D
piixpcib0 at pci0 dev 7 function 0 "Intel 82371AB PIIX4 ISA" rev 0x02: SpeedStep
pciide0 at pci0 dev 7 function 1 "Intel 82371AB IDE" rev 0x01: DMA, channel 0 wired to compatibility, channel 1 wired to compatibility
wd0 at pciide0 channel 0 drive 0: 
wd0: 16-sector PIO, LBA48, 238475MB, 488397168 sectors
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 2
atapiscsi0 at pciide0 channel 1 drive 0
scsibus0 at atapiscsi0: 2 targets, initiator 7
cd0 at scsibus0 targ 0 lun 0:  ATAPI 5/cdrom removable
cd0(pciide0:1:0): using PIO mode 4, Ultra-DMA mode 2
uhci0 at pci0 dev 7 function 2 "Intel 82371AB USB" rev 0x01: irq 11
piixpm0 at pci0 dev 7 function 3 "Intel 82371AB Power" rev 0x03: SMI
iic0 at piixpm0
cardslot0 at cbb0 slot 0 flags 0
cardbus0 at cardslot0: bus 2 device 0 cacheline 0x8, lattimer 0xb0
pcmcia0 at cardslot0
cardslot1 at cbb1 slot 1 flags 0
cardbus1 at cardslot1: bus 5 device 0 cacheline 0x8, lattimer 0xb0
pcmcia1 at cardslot1
isa0 at piixpcib0
isadma0 at isa0
com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
com1 at isa0 port 0x2f8/8 irq 3: ns16550a, 16 byte fifo
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pms0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pcppi0 at isa0 port 0x61
midi0 at pcppi0: 
spkr0 at pcppi0
lpt2 at isa0 port 0x3bc/4: polled
npx0 at isa0 port 0xf0/16: reported by CPUID; using exception 16
fdc0 at isa0 port 0x3f0/6 irq 6 drq 2
fd0 at fdc0 drive 0: 1.44MB 80 cyl, 2 head, 18 sec
usb0 at uhci0: USB revision 1.0
uhub0 at usb0 "Intel UHCI root hub" rev 1.00/1.00 addr 1
biomask efe5 netmask efe5 ttymask ffff
mtrr: Pentium Pro MTRR support
softraid0 at root
root on wd0a swap on wd0b dump on wd0b
clcs0: firmware loaded
audio0 at clcs0
(raw dmesg)

Hardware monitoring:

Not too much exciting here...
$ sysctl hw
hw.model=Intel Pentium III ("GenuineIntel" 686-class)

X configuration:

This ended up one of the oddly more difficult X configs I've done. The video system on this thing seems to want to run at no other resolution other than it's screen resolution of 1600x1200.

Please do NOT take me as an X authority, if you find solutions to some of these quirks, let me know.

Attempts to run the screen at other than 1600x1200 resulted in a strangely chopped up and fuzzy screen, and exiting that display resulted in a strange "fade-to-white" on the display and a hard-locked computer.

Running X -configure resulted in a display which attempted to run at 640x480, and behaved as mentioned above. The "solution" to this seemed to be defining the horizontal and vertical sweep speeds for this machine's display. Unfortunately, information like this is hard to find on laptops, it seems. So, I did the next best thing, and started punching in not-quite-wild guesses. Saving you a possibly educational story, the following changes to the generated file "works for me":

---       Mon Jul 16 21:33:36 2007
+++ /etc/X11/xorg.conf  Mon Jul 16 21:34:26 2007
@@ -42,8 +42,10 @@
 Section "Monitor"
        Identifier   "Monitor0"
-       VendorName   "Monitor Vendor"
-       ModelName    "Monitor Model"
+       VendorName   "IBM"
+       ModelName    "A21p 1600x1200 LCD"
+       HorizSync       31.0 - 75.0
+       VertRefresh     50.0 - 70.0
 Section "Device"
@@ -74,6 +76,7 @@
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
+       DefaultDepth 24
        SubSection "Display"
                Viewport   0 0
                Depth     1
@@ -97,6 +100,7 @@
        SubSection "Display"
                Viewport   0 0
                Depth     24
+               Modes   "1600x1200"
(note: no attempt to preserve whitespace is done there. Diff is provided for documentation purposes only, not for application!)

I actually initially used much wilder values for HorizSync and VertRefresh, but xvidtune told me it was running at a HorizSync of 75kHz and a vertical refresh of 60Hz, so I backed those values down a bit to the more conservative values above.

Full xorg.conf file that works for OpenBSD 4.1+ is here. Again, this is a "works for me" configuration, not necessarily an optimal config.


Just Works. Make sure the Thinkpad volume buttons aren't mutted! Yes, those buttons work, including the mute button.



Not the fastest beast in the world anymore, but well built, and an incredible screen. For OpenBSD, IF you like high-resolution screens, it rocks. Nine (3x3) default-sized Xterms fit in the display without overlapping!

Only complaint is it is not a small machine. Certainly not as big as many more modern machines with mega-displays, but you will know you have it with you.


Holland Consulting home page
Contact Holland Consulting

since Nov 27, 2008

Copyright 2008, Nick Holland, Holland Consulting

$Id: IBM-A21p.html,v 1.5 2008/11/28 03:51:42 nick Exp $