The Sun SPARCstation 10 and Linux in 2021

Hardware

I’m not an expert on Sun hardware, and the online availbable documentation is somewhat sparse. There has been some effort in the past of getting datasheets from Sun for various hardware parts, which have been collected here.

Processor

The Sun SPARCstation 10 has two types of buses: the MBus and the SBus. The MBus is for high-speed interconnects and the SBus for the slower peripherals.

In my machine, there is a one CPU board with a single CPU connected to the MBus, which contains a SPARCv8 SuperSPARC TMS390.

There are quite a few chips from LSI Logic on the main board. I suspect that the chip that is labled with L1A7258 is an error-correcting memory controller, because there is also a chip from Sun labeled with the same model number that has this function. See the datasheet here. The RAM are SIMMs, which contain asynchronous Fast Page Mode chips. There are two kind of SIMMs used on this board, not sure if this was done by the OEM or the previous owner who moved modules between machines.

L1A7258

The big IC that is underneath the CPU is unknown because there is a heatsink on top of it and I don’t want to remove it.

My guess would be that it is connecting the MBus and the SBus together, like the STP2011 in the following diagram:

The MBus contains at most 8 devices. Because there are already 2 occupied by the DRAM controller and MBus<->SBus interface, 6 CPUs could be connected. In a SPARCstation 10, there is only room for 2 daughterboards that can contain 2 CPUs each.

SBus architecture

The MBus interface specification and module design guide is only available through a .Z (Lempel–Ziv–Welch) compressed PostScript file from the Wayback Machine. I have published a converted PDF here.

Network

The Ethernet controller is an AMD Lance Am7990. An ISDN card is connected to one SBus slot.

Storage

For the disks, SCSI is used with a 50-pin IDC connector which is converted into some Sun proprietary connector for connecting it to the mainboard. The two disk cables are daisy chained together through one of the disk connectors. For the floppy drive a separate cable is used. On the mainboard side the two cables are combined in a single connector.

Graphics

The graphics card wasn’t originally included but added by the previous owner. It’s labeled as a Turbo XGX. The output connector is an DB13W3, which can be passively converted to VGA.

NVRAM battery

Sun made a stupid design, namely putting a button cell battery into a DIP chip package. This can be fixed by using a dremel and soldering wires to this DIP chip or just buying a replacement.

Software support

Bootloader

The original website for SILO was taken offline a long time ago. I’ve pulled the site from the Wayback Machine and mirrored it here. Some URLs have been fixed to resolve again correctly.

Grub has only support for Sparc64.

Kernel

Sun4m was previously quite good supported by various operating systems.

Of course the official vendor software from Sun: SunOS and Solaris. Third party support included OpenBSD, NetBSD, various Linux distributions such as Red Hat, Debian, Gentoo and Fedora.

Various distribtions dropped support over time, Gentoo decided to drop it in 2016 and did so in 2017 (https://lwn.net/Articles/724700/ ), Debian dropped it after Etch, Fedora dropped it in 2012. RHEL also dropped it at some point, I could not find an exact date.

OpenBSD support for sparc32 was dropped with the release of 5.9

The Linux kernel supports it until the latest version, but is considering dropping it. The only Linux distribution that still support it in 2021 is T2sde from René Rebe. After discussing it on chat he made a new build.

NetBSD is the only BSD that still supports Sparc 32 and Sun hardware. They include this in their test suite, so the support should be quite good. I tried running it in QEMU but it crashed during early boot because of this bug. After installing a newer QEMU it works fine, even though it was newer than my current distro package:

qemu-system-sparc -nographic -cdrom NetBSD-9.1-sparc.iso -boot d

The SPARCv8 microarchitecure does not has necessarily include compare and swap (CAS) instructions, so software that uses some kind of atomics is required to be compiled with libatomic. That is a library which implements atomics in software for instruction sets that don’t implement it themselves. The LEON SPARC chips that implement SPARCv8 do support the optional CAS instructions.

Graphics driver

The TurboXGX is probably compatible with the X.org suncg6 driver.

I would like to have a classic interface on this machine. Solaris and other Unix distributions originally used the proprietary Common Desktop Environment which was collaborative developed by the (ironically named) Open Group. It was released as free software under the LGPLv2 in 2012. I would like to package this in T2sde, but currently the build scripts for CDE aren’t that good, because it’s quite ancient anyway.

Installing

Because the SPARCstation 10 does not have a CD-ROM drive built in and I don’t have an external one. Netbooting could work but is not really a good option because the size of the kernel is rather limited. I was lucky and found a PCI card with an 50-pin IDC connector with a cable in the e-waste bin of my local hackerspace!

I attached the card to my desktop and it still worked! (It even included some command prompt during boot…)

eloy@eloy-desktop:~$ lspci | grep SCSI
05:05.0 SCSI storage controller: Adaptec AIC-7870P/7881U [AHA-2940U/UW/D/S76] (rev 01)

But after rebooting and connecting the disk, it seemed pretty broken, with repeating errors like this:

[  510.274821] sd 1:0:3:0: [sdb] tag#152 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  510.274876] sd 1:0:3:0: [sdb] tag#152 Sense Key : Medium Error [current] 
[  510.274885] sd 1:0:3:0: [sdb] tag#152 Add. Sense: Address mark not found for id field
[  510.274899] sd 1:0:3:0: [sdb] tag#152 CDB: Read(10) 28 00 00 00 00 04 00 00 04 00
[  510.274907] blk_update_request: I/O error, dev sdb, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[  510.274918] Buffer I/O error on dev sdb, logical block 1, async page read

To be continued…

I collected various useful links over time: