12.5. SBus
While most computers nowadays are
equipped with a PCI or ISA interface bus, most older SPARC-based
workstations use SBus to connect their peripherals.
SBus
is quite an advanced design, although it has been around for a long
time. It is meant to be processor independent (even though only SPARC
computers use it) and is optimized for I/O peripheral boards. In
other words, you can't plug additional RAM into SBus
slots (RAM expansion boards have long been forgotten even in the ISA
world, and PCI does not support them either). This optimization is
meant to simplify the design of both hardware devices and system
software, at the expense of some additional complexity in the
motherboard.
This I/O bias of the bus results in peripherals using
virtual addresses to transfer data, thus
bypassing the need to allocate a contiguous DMA buffer. The
motherboard is responsible for decoding the virtual addresses and
mapping them to physical addresses. This requires attaching an MMU
(memory management unit) to the bus; the chipset in charge of the
task is called IOMMU. Although somehow more complex than using
physical addresses on the interface bus, this design is greatly
simplified by the fact that SPARC processors have always been
designed by keeping the MMU core separate from the CPU core (either
physically or at least conceptually). Actually, this design choice is
shared by other smart processor designs and is beneficial overall.
Another feature of this bus is that device boards exploit massive
geographical addressing, so there's no need to
implement an address decoder in every peripheral or to deal with
address conflicts.
SBus peripherals use the Forth language in their PROMs to initialize
themselves. Forth was chosen because the interpreter is lightweight
and, therefore, can be easily implemented in the firmware of any
computer system. In addition, the SBus specification outlines the
boot process, so that compliant I/O devices fit easily into the
system and are recognized at system boot. This was a great step to
support multi-platform devices; it's a completely
different world from the PC-centric ISA stuff we were used to.
However, it didn't succeed for a variety of
commercial reasons.
Although current kernel versions offer quite full-featured support
for SBus devices, the bus is used so little nowadays that
it's not worth covering in detail here. Interested
readers can look at source files in
arch/sparc/kernel and
arch/sparc/mm.
|