SPARC NVRAMRC Hints

How do you make a SPARC machine boot reliably from a non-OpenFirmware PCI SCSI card?

On modern SPARC based machines, the onboard OpenFirmware knows how to program and use various types of Symbios SCSI cards (also known as LSI Logic SCSI controllers or what used to be called NCR SCSI controllers). One of the problems encountered when using a third party card, not supplied by Sun is that the SCSI card will often (always?) not get reset properly when the machine is rebooted or power-cycled. Not resetting the PCI SCSI controller can have reliability consequences if the computer's boot device is located on the PCI SCSI controller. Specifically, the computer will often failed to boot, with a message similar to Drive not ready.

Often the only operation truely needed to make the any SCSI problems disappear is to have the computer perform a probe of the PCI SCSI bus.

Most SPARC machines have the capability to execute a user-supplied program before any booting attempt is made, this is refered to as the nvramrc. The following nvramrc will print a message, and then perform the initialization of the PCI scsi card. The text inside the parentheses are just comments, but should help describe what is happening.

    : probe-scsi-device ( probe a specific SCSI controller )
    ." Probing " parse-word 2dup type ." :" cr (report what's being probed )
    " show-children" execute-device-method drop cr ( perform the probe )
    ;
    ." Probing normal devices... " cr cr
    probe-all
    probe-scsi-device /pci@1f,0/pci@1/pci@1/scsi@f
    ttya io
    cr banner
    ." Proceeding with boot... " cr

The ttya io is required for BSD/OS to operate properly. Without that command, the BSD/OS boot program (/boot) would give up, because the PROM stdin and stdout channels were not defined. This command may, or may not, be necessary for FreeBSD, NetBSD, OpenBSD or Solaris. It probably is required, as the normal thing that gets done (install-console) to hook up the console doesn't get done in this nvramrc.

If you are going to do this on a SPARC machine, you might need to adjust the actual locator for the PCI SCSI controller that you have. This happens to be correct for a Sun Netra-T1 model 105, but your computer might be different. You can probably use the probe-scsi-all command from the PROM monitor to determine which controllers you have on your computer.

Thanks to Chris Ross for supplying both the idea and the implementation.

Back to the page of Not So Frequently Asked Questions.

Valid HTML 4.01! Kurt J. Lidl
lidl at pix dot net
Last Updated: $Date: 2004/02/16 20:30:48 $