2779 lines
174 KiB
HTML
2779 lines
174 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<HTML VERSION="2.0">
|
|
<HEAD>
|
|
<!-- WEBMAGIC VERSION NUMBER="2.0.1" -->
|
|
<!-- WEBMAGIC TRANSLATION NAME="ServerRoot" SRC="/var/www/htdocs/" DST="/" -->
|
|
<!-- WEBMAGIC TRANSLATION NAME="ProjectRoot" SRC="./" DST="" -->
|
|
<TITLE>Silicon Graphics Origin2000 IP27prom Technical Reference Manual</TITLE>
|
|
</HEAD>
|
|
<BODY VLINK="#014c02" LINK="#000396" BACKGROUND="background.gif" BGCOLOR="#ffffff" TEXT="#000000">
|
|
<HR>
|
|
<CENTER><P ALIGN="CENTER"><B><FONT SIZE="5">Silicon Graphics Origin200/2000</FONT></B></P>
|
|
</CENTER><CENTER><P ALIGN="CENTER"><IMG SRC="3dlogo.gif" WIDTH="361" HEIGHT="64" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/3dlogo.gif"></P>
|
|
</CENTER><CENTER><P ALIGN="CENTER"><B><FONT SIZE="5">Technical Reference Manual</FONT></B></P>
|
|
</CENTER><CENTER><P ALIGN="CENTER"><I>Last Revised: December 30, 1996</I><BR>
|
|
<I>by Curt McDowell, <A HREF="mailto:csm@sgi.com">csm@sgi.com</I></A></P>
|
|
</CENTER><HR>
|
|
<H2>Table of Contents</H2>
|
|
<UL>
|
|
<LI><A HREF="#DocumentOverview">Document Overview</A>
|
|
<UL>
|
|
<LI><A HREF="#AboutThisDocument">About this Document </A>
|
|
<LI><A HREF="#IntendedAudience">Intended Audience </A>
|
|
<LI><A HREF="#RelatedDocuments">Related Documents</A>
|
|
</UL>
|
|
<LI><A HREF="#Origin2000SystemOverview">Origin2000/200 System Overview </A>
|
|
<UL>
|
|
<LI><A HREF="#SlotNumbering">Slot Numbering </A>
|
|
<LI><A HREF="#PartNumbers">Part Numbers </A>
|
|
<LI><A HREF="#NodeIDsNASIDs">Node IDs (NASIDs) </A>
|
|
<LI><A HREF="NumberInACan">NICs (Number In a Can)</A>
|
|
<LI><A HREF="#MemoryConfigurations">Memory Configurations</A>
|
|
<LI><A HREF="#ModuleNumbers">Module Numbers</A>
|
|
</UL>
|
|
<LI><A HREF="#ModuleSystemController">Module System Controller </A>
|
|
<UL>
|
|
<LI><A HREF="#AlternateConsolePort">Alternate Console (Diagnostic) Port </A>
|
|
<LI><A HREF="#MSCSecurity">Security</A>
|
|
<LI><A HREF="#MSCCommands">Commands </A>
|
|
</UL>
|
|
<LI><A HREF="#MultiModuleSystemController">Multi-Module System Controller</A>
|
|
<UL>
|
|
<LI><A HREF="#FunctionsOfTheMMSC">Functions of the MMSC</A>
|
|
<LI><A HREF="#MMSCConnectivity">MMSC Connectivity</A>
|
|
</UL>
|
|
<LI><A HREF="#IP27prom">IP27prom </A>
|
|
<UL>
|
|
<LI><A HREF="#PROMCompatibility">PROM Compatibility</A>
|
|
<LI><A HREF="#SystemBootProcess">System Boot Process </A>
|
|
<LI><A HREF="#DebugSwitchUse">Using the System Controller Debug Switches </A>
|
|
<LI><A HREF="#DebugSwitchAssignments">System Controller Debug Switch Assignments </A>
|
|
<LI><A HREF="#PROMImages">PROM Images</A>
|
|
</UL>
|
|
<LI><A HREF="#PowerOnDiags">Power-On Diagnostics </A>
|
|
<UL>
|
|
<LI><A HREF="#BootStatusLEDs">Boot Status LEDs </A>
|
|
<LI><A HREF="#ReadingTheLEDs">Reading the LEDs </A>
|
|
<LI><A HREF="#PODMode">POD Mode (PROM Command Interpreter) </A>
|
|
<LI><A HREF="#PODConsoles">POD Consoles </A>
|
|
<LI><A HREF="#PODConstants">Constants</A>
|
|
<LI><A HREF="#PODExpressions">Expressions</A>
|
|
<LI><A HREF="#PODStatements">Statements</A>
|
|
<LI><A HREF="#PODAddressModifiers">Address Modifiers </A>
|
|
<LI><A HREF="#PODHardwareRegisters">Hardware Registers </A>
|
|
<UL>
|
|
<LI><A HREF="#HubPIRegs">Hub PI Registers </A>
|
|
<LI><A HREF="#HubMDRegs">Hub MD Registers </A>
|
|
<LI><A HREF="#HubIIRegs">Hub II Registers </A>
|
|
<LI><A HREF="#HubNIRegs">Hub NI Registers </A>
|
|
<LI><A HREF="#HubCoreRegs">Hub Core Registers </A>
|
|
<LI><A HREF="#CrossbowRegs">Crossbow Registers (midplane) </A>
|
|
<LI><A HREF="#RouterRegs">Router Registers </A>
|
|
<LI><A HREF="#Cop0Regs">R10000 Coprocessor 0 Registers </A>
|
|
</UL>
|
|
<LI><A HREF="#PODSymbols">Symbols</A>
|
|
</UL>
|
|
<LI><A HREF="#PODModeCommands">POD Mode Commands </A>
|
|
<UL>
|
|
<LI><A HREF="#CommandConventions">Conventions</A>
|
|
<LI><A HREF="#CommandSummary">Command Summary </A>
|
|
<LI><A HREF="#CommandDescriptions">Command Descriptions </A>
|
|
</UL>
|
|
<LI><A HREF="#Debugging">Debugging with the IP27prom </A>
|
|
<UL>
|
|
<LI><A HREF="#DebugReset">Reset </A>
|
|
<LI><A HREF="#DebugNMI">Non-Maskable Interrupt (NMI) </A>
|
|
<LI><A HREF="#KernelDebugging">Kernel Debugging</A>
|
|
<LI><A HREF="#DebugMSC">Use of the MSC </A>
|
|
<LI><A HREF="#DebugFastLoops">Fast Loops </A>
|
|
<LI><A HREF="#DebugMemoryTests">Memory Tests </A>
|
|
<UL>
|
|
<LI><A HREF="#BankOrganization">Bank Organization</A>
|
|
<LI><A HREF="#RunningTheTests">Running the Tests </A>
|
|
</UL>
|
|
<LI><A HREF="#DebugProblemReporting">Problem Reporting </A>
|
|
<LI><A HREF="#FlashingPROMs">Flashing PROMs</A>
|
|
</UL>
|
|
<LI><A HREF="#PROMLogOverview">PROM Log Overview </A>
|
|
<UL>
|
|
<LI><A HREF="#ReservedPROMLogVariables">Reserved PROM Log Variables </A>
|
|
<LI><A HREF="#ErrorLogKeys">Error Log Keys </A>
|
|
<LI><A HREF="#ListKeys">List Keys </A>
|
|
</UL>
|
|
<LI><A HREF="#Origin2000Routers">Origin2000 Routers </A>
|
|
<UL>
|
|
<LI><A HREF="#ReadingTheRouterLEDs">Reading the Router LEDs </A>
|
|
<LI><A HREF="#VectorAddressing">Vector Addressing </A>
|
|
<LI><A HREF="#SystemConfigurations">System Configurations </A>
|
|
<UL>
|
|
<LI><A HREF="#FullRouterConfiguration">Full Router Configuration </A>
|
|
<LI><A HREF="#FirstStarRouterConfiguration">Star Router Configuration (First Possibility)</A>
|
|
<LI><A HREF="#SecondStarRouterConfiguration">Star Router Configuration (Second Possibility)</A>
|
|
<LI><A HREF="#NullRouterConfiguration">Null Router Configuration </A>
|
|
</UL>
|
|
</UL>
|
|
</UL>
|
|
<HR>
|
|
<H2><A NAME="DocumentOverview">Document Overview</A></H2>
|
|
<H3><A NAME="AboutThisDocument">About This Document</A></H3>
|
|
<P>This manual contains information needed to use the IP27prom to boot or debug
|
|
an Origin2000 system. Coverage includes the following, but does not extend
|
|
into the IO6prom or IRIX Kernel:</P>
|
|
<UL>
|
|
<LI>Module System Controller
|
|
<LI>Multi-Module System Controller
|
|
<LI>CrayLink Interconnect Topology Primer
|
|
<LI>IP27prom Operation
|
|
<LI>IP27prom Command Set
|
|
<LI>Debugging with the IP27prom
|
|
</UL>
|
|
<P>A lot of basic information about the Origin2000 is included to minimize
|
|
the number of other documents required to use the IP27prom. Information
|
|
is presented in a reference format.</P>
|
|
<H3><A NAME="IntendedAudience">Intended Audience</A></H3>
|
|
<UL>
|
|
<LI>Kernel developers
|
|
<LI>IP27prom and IO6prom engineers
|
|
<LI>Origin2000/200 hardware developers
|
|
<LI>Manufacturing engineers
|
|
<LI>Field engineers with need to know
|
|
</UL>
|
|
<P><IMG SRC="mad_hacker.gif" ALIGN="RIGHT" WIDTH="48" HEIGHT="48" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/mad_hacker.gif">This document contains no proprietary information and is suitable for use
|
|
by SGI Power Customers.</P>
|
|
<H3><A NAME="RelatedDocuments">Related Documents (SGI Access Only)</A></H3>
|
|
<UL>
|
|
<LI><A HREF="http://b7/doc/index.html">ASD Doc Depot</A> (Engineering Access Only)
|
|
<UL>
|
|
<LI><A HREF="http://b7/doc/arch/lego/sys_spec.book.doc.html">Lego System Specification</A>
|
|
<LI><A HREF="http://b7/doc/chips/hub_spec/hub.book.doc.html">Hub Specification</A>
|
|
<LI><A HREF="http://b7/doc/chips/hub_prog_man/hub.regbook.doc.html">Hub Programming Manual </A>
|
|
<LI><A HREF="http://b7/doc/chips/legonet/legonet.overview.doc.html">CrayLink Interconnect Specification</A>
|
|
</UL>
|
|
<LI><A HREF="http://babylon.engr.sgi.com/lego/firmware.html">Lego Firmware</A>
|
|
<LI>Module System Controller (Engineering Access Only)
|
|
<UL>
|
|
<LI><A HREF="http://babylon.engr.sgi.com/lego/elsc/elsc-hardware.ps">Hardware Manual (PostScript)</A>
|
|
<LI><A HREF="http://babylon.engr.sgi.com/lego/elsc/elsc-firmware.ps">Firmware Manual (PostScript)</A>
|
|
</UL>
|
|
<LI><A HREF="http://uniscan.engr/~rdb/FFSC/index.html">Multi-Module System Controller</A>
|
|
<UL>
|
|
<LI><A HREF="http://uniscan.engr/~rdb/FFSC/commands.html">Command Language</A>
|
|
<LI><A HREF="http://uniscan.engr/FFSC/addressing.html">Network Addressing</A>
|
|
</UL>
|
|
<LI><A HREF="http://babylon.engr.sgi.com/lego/doc/fru.ps">FRU Analyzer (PostScript)</A>
|
|
<LI><A HREF="http://babylon.engr.sgi.com/lego/doc/serial.html">Serial Numbers</A>
|
|
<LI><A HREF="http://bits.csd/digest/topics/Lego/">Global Customer Support</A>
|
|
</UL>
|
|
<HR>
|
|
<H2><A NAME="Origin2000SystemOverview">Origin2000/200 System Overview</A></H2>
|
|
<H3><A NAME="SlotNumbering">Slot Numbering</A></H3>
|
|
<CENTER><P ALIGN="CENTER"><IMG SRC="slot_numbering.gif" WIDTH="603" HEIGHT="289" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/slot_numbering.gif"></P>
|
|
</CENTER><CENTER><P ALIGN="CENTER"><EM>Picture Courtesy of Steve Whitney</EM></P>
|
|
</CENTER><P>The two Router card slots in the front right of the machine are numbered
|
|
R1 and R2, going left to right. Router cable ports are numbered 1, 2, and
|
|
3 from top to bottom. Router ports 4, 5, and 6 are internal to the system.</P>
|
|
<P>The four Node card slots in the back of the machine are numbered N1 through
|
|
N4, going <I>right to left</I>. Each Node card contains two CPUs called A and B. Therefore, each module
|
|
may contain up to 8 CPUs, which are called 1A, 1B, 2A, 2B, 3A, 3B, 4A, and
|
|
4B (or sometimes simply CPU 0 through CPU 7).</P>
|
|
<P>R1 is connected directly to N1 and N2, while R2 is connected directly to
|
|
N3 and N4 (see <A HREF="#VectorAddressing">Vector Addressing</A> for a more thorough treatment of Router port connectivity).</P>
|
|
<P>IO1 through IO6 are connected directly to the Crossbows on N1 and N3, while
|
|
IO7 through IO12 are connected directly to the Crossbows on N2 and N4. </P>
|
|
<H3><A NAME="PartNumbers">Part Numbers</A></H3>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>Common Part Numbers</CAPTION>
|
|
<TR><TH> Number </TH><TH ALIGN=LEFT> Part </TH></TR>
|
|
<TR><TD ALIGN=CENTER>013-1547</TD><TD> Origin2000 Midplane (8 CPU + 12 I/O) </TD><TR><TR><TD ALIGN=CENTER>013-1025</TD><TD> Origin200 Motherboard </TD><TR><TD ALIGN=CENTER>030-0841</TD><TD> Origin2000 Router Card </TD><TR><TD ALIGN=CENTER>030-0733</TD><TD> Origin2000 IP27 Node Card </TD></TR>
|
|
<TR><TD ALIGN=CENTER>030-1124</TD><TD> Server BaseIO Card </TD></TR>
|
|
<TR><TD ALIGN=CENTER>030-0872</TD><TD> MSCSI Card </TD></TR>
|
|
<TR><TD ALIGN=CENTER>030-0873</TD><TD> MENET Card </TD></TR>
|
|
<TR><TD ALIGN=CENTER>030-0880</TD><TD> MIO Card </TD></TR>
|
|
<TR><TD ALIGN=CENTER>030-0927</TD><TD> FibreChannel Card </TD></TR>
|
|
<TR><TD ALIGN=CENTER>030-0968</TD><TD> HIPPI_S Card </TD></TR>
|
|
<TR><TD ALIGN=CENTER>030-0956</TD><TD> HPCX Card </TD></TR>
|
|
</TABLE></P>
|
|
</CENTER><H3><A NAME="NodeIDsNASIDs">Node IDs (NASIDs)</A> </H3>
|
|
<H4>What is a Node ID?</H4>
|
|
<P>During the boot process, the PROM assigns a Node ID to each Hub in the system.
|
|
Node IDs are small integer values ranging from 0 to 255. Since there is
|
|
one Hub on each node card, each Node card receives its own Node ID and the
|
|
ID is shared between the CPUs on the same node card.</P>
|
|
<P>Node IDs are more correctly referred to as NASIDs (NUMA Address Space Identifiers).
|
|
Hardware folks use the term Node ID, while software folks use the term NASID
|
|
to avoid confusion with several other types of node identifiers used internal
|
|
to the IRIX kernel.</P>
|
|
<H4>What are Node IDs used for?</H4>
|
|
<P>Node IDs allow any node to access the full address spaces of any other node.
|
|
Addressing a remote node's space is done simply by placing the remote node's
|
|
ID in bits 32 through 40 of the desired physical address. This is true whether
|
|
talking to the node's memory, I/O devices, Hub chip, PROM, etc. For example,
|
|
one could talk to various parts of remote node 7's address space using addresses
|
|
as follows:</P>
|
|
<UL>
|
|
<LI><B>0x9000000700000000</B> - HSPEC (PROMs, back door directory memory)
|
|
<LI><B>0x9200000700000000</B> - I/O windows, including Hub and Bridge registers
|
|
<LI><B>0x9600000700000000</B> - Base of bank 0 memory, treated as uncached
|
|
<LI><B>0xa800000700000000</B> - Base of bank 0 memory, treated as cached
|
|
</UL>
|
|
<H4>How do node IDs get assigned?</H4>
|
|
<P>After a system reset, there is a period of time when no Node IDs are assigned.
|
|
In this situation, all Node IDs are zero and it is not possible to access
|
|
the address spaces of remote nodes.</P>
|
|
<P>A special Hub feature called Vector Routing provides a way to access a small
|
|
subset of Hub registers on a remote node. It is through Vector Routing that
|
|
the CrayLink Interconnect topology is discovered, a global master is arbitrated,
|
|
node IDs are assigned and distributed to all nodes in the system, and the
|
|
full address space access becomes defined.</P>
|
|
<P>After the Node IDs are assigned, routing tables in each Hub and Router in
|
|
the system are programmed with information that allows nodes to find one
|
|
another, so that a Node IDs is effectively used as a network address. The
|
|
Node ID is used as an index into the routing tables at each network hop
|
|
in order to determine to which router output port a request or response
|
|
should be forwarded.</P>
|
|
<H3><A NAME="NumberInACan">NICs (Number In a Can)</A></H3>
|
|
<P>A tiny chip from Dallas Semiconductor called a NIC is used extensively throughout
|
|
the Origin2000 system. There is a NIC on each type of board in the system,
|
|
including the Node card, Router card, BaseIO card (with two NICs), module
|
|
midplane, etc.</P>
|
|
<P>The NIC contains a 48-bit number that is permanently laser-burned in at
|
|
the time the NIC is manufactured and is guaranteed to be unique from all
|
|
other NICs. The Node card NICs help identify Nodes during the boot process
|
|
when the system is probing the network. The NIC on the midplane is used
|
|
for software licensing.</P>
|
|
<P>In addition to the 48-bit number, NICs also contain several <I>pages</I> of non-volatile memory that can be read or written by the system. This
|
|
memory is used to store additional information, primarily for purposes of
|
|
inventory tracking, such as:</P>
|
|
<UL>
|
|
<LI>Board type
|
|
<LI>Board revision number
|
|
<LI>Board serial number (as it appears on the bar code)
|
|
<LI>Board-specific information (e.g., on the BaseIO card, the Ethernet MAC address)
|
|
</UL>
|
|
<P>In general, Origin2000 software never writes to the NIC. Rather, it is programmed
|
|
once by an external NIC programming device in the manufacturing plant, and
|
|
subsequently reprogrammed by Manufacturing should a board be upgraded to
|
|
a new revision level.</P>
|
|
<H3><A NAME="MemoryConfigurations">Memory Configurations</A></H3>
|
|
<P>The Origin family memory consists of two parts, the <I>system memory</I> and the <I>directory memory</I>. Directory memory is used for storing cache coherence protocol information
|
|
and is much smaller than system memory.</P>
|
|
<P>The Origin2000 supports from 64 MB to 4 GB of RAM per node card. Two types
|
|
of directory memory are available for the Origin2000, referred to as <I>standard</I> and <I>premium</I>. Premium directory memory is required for systems that are not a subset
|
|
of a standard 32-processor hypercube. They can also be used in smaller systems
|
|
to provide greater process migration accuracy.</P>
|
|
<P>System memory must be populated one bank at a time. Each bank consists of
|
|
two memory DIMM slots and one directory DIMM slot (be careful, because the
|
|
three slots are separated from one another on the node card). The two memory
|
|
DIMMs making up one bank must contain the same size DIMMs. Each bank may
|
|
contain a different amount of memory. There should be memory in bank zero.</P>
|
|
<P>Standard directory memory resides in the same DIMMs in which the system
|
|
memory resides, and is automatically populated when the system memory is
|
|
populated. The directory DIMM slots are left empty.</P>
|
|
<P>Premium directory memory is populated by inserting additional smaller DIMMs
|
|
into the directory DIMM slots, adding more precision to the standard directory
|
|
memory. </P>
|
|
<P>The Origin200 supports from 32 MB to 4 GB of RAM per node card and does
|
|
not support premium directory memory. Banks are populated from two outermost
|
|
DIMM slots (making up bank 0) to the two innermost DIMM slots (making up
|
|
bank 3).</P>
|
|
<H3><A NAME="ModuleNumbers">Module Numbers</A></H3>
|
|
<P>In an Origin2000 system, each Module (4 node cards, 8 processors) is assigned
|
|
a unique number from 1 to 255, called the <I>module number</I>. The module number is the mechanism by which Irix identifies particular
|
|
modules. The module number is stored in MSC NVRAM. A backup copy of the
|
|
module number is stored in each node card PROM Log, so that in the event
|
|
that the MSC NVRAM becomes inaccessible, the module number is voted from
|
|
the last value stored in the PROM Logs. A module number of 0 indicates that
|
|
a module number has not yet been assigned.</P>
|
|
<P>The most important use of module numbers is device naming in the Irix Hardware
|
|
Graph. Disks and other devices are referred to by the number of the module
|
|
containing them, as well as the slot within that module. For example, the
|
|
root disk device might be called</P>
|
|
<P><I>/hw/module/1/slot/io1/baseio/pci/0/scsi_ctlr/0/target/1/lun/0/disk/partition/0/block</I></P>
|
|
<P>indicating that the disk is in module 1, slot io1, BaseIO card, PCI slot
|
|
0, etc.</P>
|
|
<P>If a module number is changed, all affected devices in the hardware graph
|
|
will change names. This would most likely require the system administrator
|
|
to reconfigure filesystem mounts, among other things.</P>
|
|
<P>Maintainence of module numbers may be performed using the IP27prom <B>module</B> command, or using the MSC <B>mod</B> command. When module numbers are changed in this manner, the change will
|
|
not take place until the next time the system is rebooted.</P>
|
|
<P>The IO6prom verifies the consistency of module numbers. To be consistent,
|
|
every module must have a number assigned to it, and there must not be any
|
|
duplicate numbers.</P>
|
|
<P>Modules found to be without numbers will have a number automatically assigned
|
|
to them, and then the system will reboot. Therefore, if a new module is
|
|
added to an existing system, a module number will be automatically assigned
|
|
and any attached devices will show up in the hardware graph.</P>
|
|
<P>Duplicate module numbers will prevent the system from booting until the
|
|
problem is rectified. A message indicating the problem will display on the
|
|
system console.</P>
|
|
<H2><A NAME="ModuleSystemController">Module System Controller</A></H2>
|
|
<P><B><I>Note </I></B>: The MSC was at one time called the Entry Level System Controller, or ELSC.
|
|
They are one and the same.</P>
|
|
<P><IMG SRC="elsc_front.gif" ALIGN="RIGHT" WIDTH="206" HEIGHT="295" BORDER="0" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/elsc_front.gif">The MSC front panel is shown in the figure and comprises the following elements:</P>
|
|
<UL>
|
|
<LI>Reset momentary pushbutton switch, with associated LED
|
|
<LI><A HREF="#DebugNMI">NMI</A> momentary pushbutton switch, with associated LED
|
|
<LI>Eight-character alphanumeric dot matrix LED display
|
|
<LI>Three-position rotary keyswitch (Off, On, Diagnostics)
|
|
<LI>DIN-type RS-232 serial port connector (diagnostics port)
|
|
<LI>A block of eight small DIP switches (called the <A HREF="#DebugSwitchUse">Debug Switches</A>)
|
|
</UL>
|
|
<H3><BR CLEAR=ALL>
|
|
<A NAME="AlternateConsolePort">Alternate (Diagnostic) Console Port</A></H3>
|
|
<P>The Origin2000 Module System Controller (MSC) front panel has a DIN-type
|
|
RS-232 serial port, labelled the Diagnostic Port, and internally referred
|
|
to as the Alternate Console Port (ACP). A second connector for the same
|
|
serial port is provided in the back of the module for when it is to be connected
|
|
to a Multi-Module System Controller (MMSC). The ACP is always available
|
|
and is primarily used for debugging during manufacturing bring-up of a system,
|
|
as well as system debugging when for some reason the regular serial port
|
|
console is not available.</P>
|
|
<P>An RS-232 dumb terminal connected to the ACP can talk to the MSC, and through
|
|
the MSC to the individual CPUs. All of the CPUs in a single module must
|
|
share this console. For this reason, output from multiple CPUs appears on
|
|
the console simultaneously, interleaving on a line by line basis, with CPU
|
|
identification at the start of each line in the form of a slot (1 to 4)
|
|
and slice (A or B). The MSC can be directed to send ACP keyboard input to
|
|
a particular CPU. It can also be directed to show only the output from a
|
|
particular CPU.</P>
|
|
<P>The MSC itself has a command set. Commands are sent to the MSC by typing
|
|
the escape character ^T (Control-T), followed by the text of the command
|
|
and <TT>ENTER</TT>. Ordinary ACP output is discarded between the time that the ^T and the <TT>ENTER</TT> are received. If echoing is enabled (default), the prompt <B>MSC></B> will be displayed upon the reception of the ^T and characters typed will
|
|
be visible. If echoing is not enabled (see the <B><A HREF="#MSCCommandEch">ech</B></A> command), nothing will be visible as the command is typed.</P>
|
|
<H3><A NAME="MSCSecurity">Security</A></H3>
|
|
<P>MSC commands which could potentially be destructive to system operation
|
|
may only be executed when the MSC is in supervisor mode. If the MSC is not
|
|
in supervisor mode, these commands result in the following error:</P>
|
|
<PRE>
|
|
err perm
|
|
</PRE>
|
|
<P>The MSC is automatically in supervisor mode when the front panel keyswitch
|
|
is in the <I>Diag</I> position. It may also be placed in supervisor mode by issuing the MSC command <B>pas none</B> to enter the four-character MSC password, where <B>none</B> is the default MSC password. The command <B>pas s abcd</B> would change the MSC password to <B>abcd</B>.</P>
|
|
<H3><A NAME="MSCCommands">Commands</A></H3>
|
|
<P>Commands are typed to the MSC ACP by prefixing them with a <B>^T</B> (Control-T) character. Commands are visible as they are typed only if echoing
|
|
is turned on (which is true after power-on). Each command is three letters
|
|
in length. Some of them take parameters. Numeric parameters are <I>always</I> in hexadecimal. All commands return responses consisting of <B>ok</B> and possibly some hexadecimal values, or one of the three error responses:</P>
|
|
<P><TABLE BORDER=1>
|
|
<CAPTION>MSC Responses</CAPTION>
|
|
<TR><TH> Response </TH><TH ALIGN=LEFT> Reason </TH></TR>
|
|
<TR><TD ALIGN=CENTER>err perm</TD><TD> Permission denied. Keyswitch must be in diagnostic position, or password
|
|
entered via the <B>pas</B> command. </TD> <TR><TD ALIGN=CENTER>err cmd</TD><TD> Unrecognized command mnemonic. </TD> <TR><TD ALIGN=CENTER>err arg</TD><TD> Invalid command argument(s). </TD></TR>
|
|
</TABLE> </P>
|
|
<P>The supported commands are:</P>
|
|
<P><TABLE BORDER=1>
|
|
<CAPTION>MSC Commands</CAPTION>
|
|
<TR><TH> Command </TH><TH ALIGN=LEFT> Function </TH></TR>
|
|
<TR><TD ALIGN=CENTER>aut 1</TD><TD> Turns on automatic power-on mode so the MSC automatically issues a <B>pwr u</B> when the MSC is powered on (Origin200 only). </TD></TR>
|
|
<TR><TD ALIGN=CENTER>aut 0</TD><TD> Turns off automatic power-on mode (Origin200 only). </TD></TR>
|
|
<TR><TD ALIGN=CENTER>clr</TD><TD> Resets all MSC options to their power-up defaults. This includes echo mode,
|
|
no heartbeats, etc. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>dbg</TD><TD> Displays the virtual and physical <A HREF="#DebugSwitchUse">Debug Switch</A> bytes.</TD></TR>
|
|
<TR><TD ALIGN=CENTER>dbg <I>V</I> <I>P</I></TD><TD> Sets the virtual <A HREF="#DebugSwitchUse">Debug Switch</A> byte to <I>V</I>, and the physical <A HREF="#DebugSwitchUse">Debug Switch</A> byte to <I>P</I>.</TD></TR>
|
|
<TR><TD ALIGN=CENTER>dsp <I>M</I></TD><TD> Displays message <I>M</I> on the 8-character alphanumeric display. M may contain up to 8 ASCII characters
|
|
other than <TT>NUL</TT>. For example, <B>dsp testing</B> would overwrite the first seven characters with "testing," while leaving
|
|
the eighth character alone. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>dsc <I>C</I></TD><TD> Modifies only the Nth character on the alphanumeric display. <I>N</I> is a digit from 0 to 7, and <I>C</I> is any ASCII character other than <TT>NUL</TT>. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>ech 0</TD><TD> Turns off echoing as MSC commands are entered. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>ech 1</TD><TD> Turns on echoing. </TD></TR>
|
|
<TR><TD ALIGN=CENTER><A NAME="MSCCommandEch">ech</A></TD><TD> Toggles the echoing. Echoing is on by default after reset. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>fan</TD><TD> If no fan has failed, returns <B>n</B> or <B>h</B>, according to whether the fans are currently operating at Normal or High
|
|
speed. If a fan has failed on an Origin200, returns <B>f x</B>, where x is a bit map of the failed fans (fan 1 = 1, fan 2 = 2, fan 3=
|
|
4). If a fan has failed on an Origin2000, returns <B>f xyz</B>, where xyz are bit maps of the failed fans by row (fan 1 = 1, fan 2 = 2,
|
|
fan 3= 4). When the MSC detects that a fan has failed, it speeds up the remaining fans
|
|
to maintain cooling levels. The failed fan should be replaced because the
|
|
increased speed reduces the life of the remaining fans. If more than one
|
|
fan fails, the system is powered down. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>fan n</TD><TD> Sets the fans to normal speed. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>fan h</TD><TD> Sets the fans to high speed. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>key</TD><TD>Returns the status of the key-switch as <B>off</B>, <B>on</B>, or <B>diag</B>.</TD></TR>
|
|
<TR><TD ALIGN=CENTER>mod</TD><TD>Displays the number of the module containing the MSC.</TD></TR>
|
|
<TR><TD ALIGN=CENTER>mod <I>xx</I></TD><TD>Sets the number of the module containing the MSC to <I>xx</I>, where <I>xx</I> is a hexadecimal <A HREF="#ModuleNumbers">module number</A> from 01 to ff (a module number of 00 indicates no module number is yet
|
|
assigned).</TD></TR>
|
|
<TR><TD ALIGN=CENTER>nmi</TD><TD> Sends a hardware <A HREF="#DebugNMI">NMI</A> to all node cards in the MSC's module. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>pas <I>xxx</I> </TD><TD>When <I>xxxx</I> is replaced with the correct four-character password, places the MSC into
|
|
supervisor mode where various restricted commands may be used. If the MSC
|
|
is not in supervisor mode, restricted commands will result in a permission
|
|
error (<B>err perm</B>). The MSC is automatically in supervisor mode if the key-switch is in the
|
|
diag position. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>pas s <I>xxxx</I></TD><TD> Set the password to <I>xxxx</I>. This is a restricted command. The password is stored in NVRAM and defaults
|
|
to <B>none</B>. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>pwr</TD><TD> Returns <B>u</B> or <B>d</B>, according to whether the system is powered up or down. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>pwr u</TD><TD> Powers the system up. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>pwr d</TD><TD> Powers the system down. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>pwr d <I>N</I></TD><TD> Waits N seconds and then powers the system down. <I>N</I> is a hex value from 5 to 258 (5 to 600 decimal). </TD></TR>
|
|
<TR><TD ALIGN=CENTER>pwr c <I>N</I></TD><TD> Powers the system down, waits N seconds, then powers the system back up. <I>N</I> is a hex value from 5 to 258 (5 to 600 decimal). </TD></TR>
|
|
<TR><TD ALIGN=CENTER>rst</TD><TD> Sends a hardware <A HREF="#DebugReset">reset</A> to all node cards in the MSC's module. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>rsw</TD><TD> Returns the current Debug Switch settings as an inverted hexadecimal byte.
|
|
See section on <A HREF="#DebugSwitchUse">Debug Switch Use</A> for bit correspondence. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>sel <I>cpu</I></TD><TD> Selects which CPU is to receive input from the ACP. Anything typed on the
|
|
ACP which is not an escaped command is sent through to the selected CPU.
|
|
CPUs are named by slot and slice as described in Slot and CPU Numbering.
|
|
For example, <B>sel 2a</B> would select CPU A in slot N2 for input. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>sel</TD><TD> Displays which CPU is currently selected to receive ACP input, or <B>none</B> if no CPU is selected. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>sel auto</TD><TD> Causes the last CPU to have output anything to be automatically selected
|
|
to receive ACP input (this is the power-up default). </TD></TR>
|
|
<TR><TD ALIGN=CENTER>sel none</TD><TD> Causes no CPU to be selected to receive ACP input. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>see <I>cpu</I></TD><TD> Causes output from all CPUs other than a specific CPU to be discarded (ordinarily,
|
|
the output from all CPUs is displayed intermixed by line). CPUs are named
|
|
by slot and slice as described in Slot and CPU Numbering. For example, <B>see 2a</B> would cause only CPU 2A's output to be shown. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>see</TD><TD> Displays which CPU is currently being shown, or <B>all</B> if all CPUs are being shown. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>see all</TD><TD> Causes output from all CPUs to be displayed (this is the power-up default). </TD></TR>
|
|
<TR><TD ALIGN=CENTER>tmp</TD><TD> Returns <B>o</B>, <B>h</B>, or <B>n</B>, indicating whether the system is over-temperature, dangerously high-temperature,
|
|
or normal temperature, respectively. </TD></TR>
|
|
<TR><TD ALIGN=CENTER>ver</TD><TD> Reports the MSC firmware revision number. </TD></TR>
|
|
</TABLE> </P>
|
|
<P>The following MSC commands are not documented here: <B>get</B>,<B> hbt</B>,<B> rcf</B>,<B> scf</B>, <B>tas</B>, and <B>vlm.</B> </P>
|
|
<HR>
|
|
<H2><A NAME="MultiModuleSystemController">Multi-Module System Controller</A></H2>
|
|
<P><B><I>Note </I></B>: The MMSC was at one time called the Full-Featured System Controller, or
|
|
FFSC. They are one and the same.</P>
|
|
<P>The Multi-Module System Controller provides a way to manage Origin2000 systems
|
|
consisting of more than one module, and also provides an enhanced graphical
|
|
display of system activity. An MMSC is specified in the standard configuration
|
|
for Origin2000 systems consisting of more than one module.</P>
|
|
<P>Multi-module systems can be operated without an MMSC. However, certain aspects
|
|
of system management are less convenient. Moreover, if no MMSC is provided,
|
|
the individual modules in the system must be manually powered on one at
|
|
a time, with each switch being powered on less than 15 seconds after the
|
|
previous one.</P>
|
|
<P>For detailed information about MMSC operations and command set, please refer
|
|
to the <A HREF="http://uniscan.engr/~rdb/FFSC/index.html">Multi-Module System Controller</A> document.</P>
|
|
<H3><A NAME="FunctionsOfTheMMSC">Functions of the MMSC</A></H3>
|
|
<P>The Multi-Module System Controller serves the following purposes:</P>
|
|
<UL>
|
|
<LI>Simplifies partition management
|
|
<LI>Manages a system from a single point of control<BR>
|
|
(Important for remote modem control of systems)
|
|
<UL>
|
|
<LI>Access to individual MSC command features
|
|
<LI>Access to individual MSC console I/O features
|
|
<LI>Powering up or down all modules in a system
|
|
<LI>Resetting all modules or one partition
|
|
<LI>Sending an NMI to all modules in a partition
|
|
</UL>
|
|
<LI>Enhanced graphical display of system activity
|
|
<UL>
|
|
<LI>High resolution color display
|
|
</UL>
|
|
<LI>Retrieving information about the system while it is powered down
|
|
</UL>
|
|
<H3><A NAME="MMSCConnectivity">MMSC Connectivity</A></H3>
|
|
<P>A typical multi-module installation consists of:</P>
|
|
<UL>
|
|
<LI>Modules containing from 1 to 4 Node cards each
|
|
<LI>One MSC per module, internally connected to each Node card
|
|
<LI>One or two modules per rack
|
|
<LI>One MMSC per rack, connected via 9600 baud serial port to both MSCs
|
|
<LI>One designated master MMSC with a graphical display and input device
|
|
<LI>One 115 kbaud serial port from each MMSC to one module's BaseIO console
|
|
port
|
|
<LI>An ethernet network connecting all MMSCs together
|
|
<LI>An optional IRIS Console workstation (usually large systems only)
|
|
</UL>
|
|
<CENTER><P ALIGN="CENTER"><IMG SRC="syscon_hier.gif" WIDTH="547" HEIGHT="601" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/syscon_hier.gif"></P>
|
|
</CENTER><CENTER><P ALIGN="CENTER"><B><FONT SIZE="4">Origin2000 Hierarchical System Control</FONT></B></P>
|
|
</CENTER><H2><A NAME="IP27prom">IP27prom</A></H2>
|
|
<P>There is one IP27prom per node card, connected directly to the Hub chip.
|
|
The device is physically an AMDF080 containing 1,048,576 bytes. It is possible
|
|
to erase individual sectors consisting of 65,536 bytes, a process which
|
|
sets all of the bits in the sector to 1. It is then possible to program
|
|
any individual 1 bit into a 0 bit, but not vice versa.</P>
|
|
<P>The first 14 sectors of the PROM are used for the IP27prom firmware. The
|
|
last 2 sectors are used for the <A HREF="#PROMLogOverview">PROM Log</A> which stores environment variables and log messages.</P>
|
|
<CENTER><P ALIGN="CENTER"><IMG SRC="prom_in_system.gif" WIDTH="635" HEIGHT="386" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/prom_in_system.gif"></P>
|
|
</CENTER><CENTER><P ALIGN="CENTER"><FONT SIZE="4">How the IP27prom Fits Into the Origin2000 System</FONT></P>
|
|
</CENTER><CENTER><P ALIGN="CENTER"><EM>Picture Courtesy of Steve Whitney</EM></P>
|
|
</CENTER><H3><A NAME="PROMCompatibility">PROM Compatibility</A></H3>
|
|
<P>It is illegal to run different versions of the IP27prom on different nodes
|
|
because the details of the boot sequence vary from release to release. Each
|
|
node relies on the implicit actions of other nodes in order to maintain
|
|
proper synchronization. The IP27prom cross-checks version numbers with other
|
|
IP27proms and displays a <I>promrev mismatch</I> warning if there is an incompatibility.</P>
|
|
<P>There are also restrictions on which versions of the IP27prom may run with
|
|
which versions of the IO6prom, although they do not necessarily need to
|
|
be synchronized on every release. Refer to the individual PROM release nodes
|
|
for compabitility information.</P>
|
|
<H3><A NAME="SystemBootProcess">System Boot Process</A></H3>
|
|
<P>When the system is powered on or reset, the following processes take place.</P>
|
|
<OL>
|
|
<LI>Initialize CPU
|
|
<UL>
|
|
<LI>Set up R10000 status registers
|
|
<LI>Clear register files
|
|
</UL>
|
|
<LI>Test CPU caches
|
|
<UL>
|
|
<LI>Instruction cache
|
|
<LI>Data cache
|
|
</UL>
|
|
<LI>Set up Dex mode
|
|
<UL>
|
|
<LI>Begin treating the CPU data cache as memory
|
|
<LI>Initialize the stack
|
|
<LI>Execute the boot procedure (written in C)
|
|
</UL>
|
|
<LI><A HREF="#EnableAndDisableHardware">Disable CPU A and/or CPU B</A>
|
|
<UL>
|
|
<LI>The DisableA and DisableB environment variables specify which CPUs to disable.
|
|
<LI>In emergencies, disabling can be overridden using <A HREF="#DebugSwitchUse">Virtual Debug Switch</A> 10.
|
|
<LI>CPUs are completely separated from the Hub by turning off PI_CPU_ENABLE.
|
|
</UL>
|
|
<LI>Arbitrate local master (one per node card)
|
|
<UL>
|
|
<LI>Check for presence of other CPU, if any
|
|
<LI>Time out if other CPU does not respond
|
|
<LI>Disable other CPU if not responding
|
|
</UL>
|
|
<LI>Read <A HREF="#DebugSwitchUse">Debug Switch</A> settings from the MSC
|
|
<LI>Determine the initial console device, and initialize it
|
|
<UL>
|
|
<LI>The MSC diagnostics serial port is normally used, but
|
|
<LI>if there is a Junk UART plugged in, it takes precedence
|
|
<LI>At this point, detailed boot status information can be printed
|
|
</UL>
|
|
<LI>Record error information that may indicate the cause of a prior crash
|
|
<UL>
|
|
<LI>Save state of Hub error registers in the cache
|
|
<LI>Clear state of Hub error registers
|
|
<LI>Enable SYSAD error checking
|
|
</UL>
|
|
<LI>Initialize I/O
|
|
<UL>
|
|
<LI>II section of the Hub
|
|
<LI>Bridge
|
|
<LI>PCI bus
|
|
</UL>
|
|
<LI>Check if there is a BaseIO card with a console port
|
|
<UL>
|
|
<LI>If so, switch the console to the BaseIO
|
|
</UL>
|
|
<LI>Display the PROM boot banner on the console
|
|
<UL>
|
|
<LI>IP27prom version and size
|
|
<LI>Chip revisions
|
|
<LI>Slot ID and CPUs present
|
|
<LI>Other miscellaneous information
|
|
</UL>
|
|
<LI>Display which <A HREF="#DebugSwitchUse">Debug Switch</A> settings are set to other than the default
|
|
<LI>Determine node's serial number and advertise it to other nodes
|
|
<LI>Run Hub Chip Self-Test if Heavy or Manufacturing diagnostics are selected
|
|
<UL>
|
|
<LI>Runs the BIST (built-in self test) procedure, which automatically reboots
|
|
the system
|
|
<LI>On reboot, if the test failed, stops with a failure LED value
|
|
</UL>
|
|
<LI>Configure local memory
|
|
<UL>
|
|
<LI>Initialize SIMM control registers
|
|
<LI>Probe <A HREF="#BankOrganization">amount and type</A> (premium or standard) of memory
|
|
<LI>Program Hub memory configuration registers
|
|
</UL>
|
|
<LI>Perform basic <A HREF="#DebugMemoryTests">memory tests</A>
|
|
<UL>
|
|
<LI>Make sure address 0 of each bank is accessible
|
|
<LI>Disables banks that aren't accessible
|
|
<LI>If bank 0 is bad, swaps it with a good bank (see SwapBank environment variable)
|
|
</UL>
|
|
<LI>Download PROM to memory
|
|
<UL>
|
|
<LI>Perform memory test on small PROM area of memory
|
|
<LI>Download a copy of the PROM
|
|
<LI>Verify the download checksum
|
|
</UL>
|
|
<LI>Transfer program counter to uncached RAM
|
|
<UL>
|
|
<LI>Runs much, much faster than running out of the PROM
|
|
<LI>Still does not require the secondary cache
|
|
</UL>
|
|
<LI>Switch crucial structures from the cache into uncached memory
|
|
<LI>Test and invalidate the secondary cache
|
|
<LI>Transfer the stack to uncached RAM
|
|
<UL>
|
|
<LI>Discard the Dex contents of the data cache
|
|
</UL>
|
|
<LI>Transfer the program counter and stack to cached RAM
|
|
<UL>
|
|
<LI>Runs at top speed
|
|
</UL>
|
|
<LI>Initialize the first 32 MB of bank 0 memory for use by the PROM
|
|
<LI>Initialize permanent low-memory system data structures
|
|
<UL>
|
|
<LI>These structures persist across the IRIX kernel
|
|
<LI><B>KLDIR</B> - Indirection table for accessing all other low-memory structures
|
|
<LI><B>NMI</B> - Non-maskable Interrupt vector area
|
|
<LI><B>KLCONFIG</B> - System topology and configuration information
|
|
</UL>
|
|
<LI>Run diagnostics on the local CrayLink port
|
|
<LI>Discover the <A HREF="#SystemConfigurations">CrayLink Interconnect Topology</A>
|
|
<UL>
|
|
<LI>Depth-first search using Vector Routing operations
|
|
<LI>Builds <B>promcfg</B> data structure in PROM memory
|
|
</UL>
|
|
<LI>Verify all PROMs are running the same firmware version
|
|
<LI>Arbitrate global master
|
|
<UL>
|
|
<LI>Protocol uses Vector Routing operations
|
|
<LI>One global master per partition
|
|
</UL>
|
|
<LI>Global Master configures CrayLink Interconnect
|
|
<UL>
|
|
<LI>Determines <A HREF="#NodeIDsNASIDs">Node ID</A> for each node (not yet assigned)
|
|
<LI>Programs CrayLink routing tables in all Hubs and Routers
|
|
<LI>Tells each Node what their ID will be
|
|
</UL>
|
|
<LI>All nodes switch back to uncached memory
|
|
<UL>
|
|
<LI>Required for changing <A HREF="#NodeIDsNASIDs">Node ID</A>
|
|
<LI>Flush caches
|
|
<LI>Closely synchronize all nodes
|
|
<LI>Quiesce bus activity with tight loops internal to R10000
|
|
</UL>
|
|
<LI>Change <A HREF="#NodeIDsNASIDs">Node ID</A>
|
|
<UL>
|
|
<LI>Update data structures that were assuming Node ID was zero
|
|
<LI>Re-initialize coherence directories for first 32 MB of memory
|
|
</UL>
|
|
<LI>Switch back to cached memory in new Node ID space
|
|
<LI><A HREF="#DebugMemoryTests">Test</A> and initialize all of the rest of local memory (above 32 MB)
|
|
<LI>Initialize any headless nodes (nodes without functional CPUs)
|
|
<UL>
|
|
<LI>Disable CPUs
|
|
<LI>Read <A HREF="#NumberInACan">NIC</A>
|
|
<LI>Probe, configure, and initialize memory
|
|
<LI>Initialize low-memory data structures
|
|
<LI>Initialize I/O
|
|
</UL>
|
|
<LI>Display error state information (if not cold power-on)
|
|
<UL>
|
|
<LI>Hub error registers, decoded in detail
|
|
</UL>
|
|
<LI>Transfer control to IO6prom
|
|
<UL>
|
|
<LI>May be inhibited by <A HREF="#DebugSwitchUse">Debug Switch</A> setting
|
|
<LI>Decompress IO6prom image into memory from master BaseIO card
|
|
<LI>If no master BaseIO, decompress copy internal to IP27prom
|
|
<LI>Jump to entry point of IO6prom
|
|
</UL>
|
|
</OL>
|
|
<P>As it boots, the IO6prom displays several messages about booting and probing
|
|
devices, then proceeds to the IO6prom menu:</P>
|
|
<PRE>
|
|
Numbering nodes...
|
|
2 node(s) found.
|
|
Clocks synchronized.
|
|
Modules numbered.
|
|
IO6 PROM Monitor SGI Version 2.1 Rev A IP27, Sep 17, 1996 (BE64)
|
|
Sizing caches...
|
|
Sizing caches...
|
|
Initializing exception vectors.
|
|
Initializing environment
|
|
Initing environment
|
|
Initializing software and devices.
|
|
Reiniting caches..
|
|
Initing saio...
|
|
Installing Devices...
|
|
|
|
Walking SCSI Adapter 0
|
|
1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- 14- 15- = 0 device(s)
|
|
|
|
Walking SCSI Adapter 1
|
|
1- 2+ 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- 14- 15- = 1 device(s)
|
|
Initializing devices...
|
|
|
|
|
|
|
|
System Maintenance Menu
|
|
|
|
1) Start System
|
|
2) Install System Software
|
|
3) Run Diagnostics
|
|
4) Recover System
|
|
5) Enter Command Monitor
|
|
|
|
Option?
|
|
</PRE>
|
|
<H3><A NAME="DebugSwitchUse">Using the System Controller Debug Switches</A></H3>
|
|
<P>There are two sets of Debug Switches maintained in NVRAM by the MSC:</P>
|
|
<UL>
|
|
<LI>Eight Physical Debug Switches, numbered 1 through 8
|
|
<LI>Eight Virtual Debug Switches, numbered 9 through 16
|
|
</UL>
|
|
<P>These switches are set by the MSC <B>dbg xx yy</B> command, where <B>xx</B> and <B>yy</B> are hexadecimal bytes. The Virtual Debug Switches are set to <B>xx</B> and the Physical Debug Switches are set to <B>yy</B>. The most significant bit of <B>xx</B> corresponds to Debug Switch 16, while the least significant bit of <B>yy</B> corresponds to Debug Switch 1. Using the <B>dbg</B> command without arguments displays what the current settings are. Ordinarily,
|
|
both sets of Debug Switches should be set to zero. An equivalent <B>dbg</B> command is also available in IP27prom POD mode (but be careful because
|
|
it takes decimal by default).</P>
|
|
<P>There are also eight Hardware Debug Switches that directly correspond to
|
|
the Physical Debug Switches. The Hardware Debug Switches are exclusive-ORed
|
|
with the Physical Debug Switches so debug functions can be controlled via
|
|
both MSC serial port commands and MSC Hardware Debug Switches. The exclusive-OR
|
|
allows Hardware Debug Switches that are on to be turned off remotely, and
|
|
switches that are off to be turned on. The Origin2000 Hardware Debug Switches
|
|
are mounted on a blue block below the MSC keyswitch.</P>
|
|
<P>The Origin200 also has Hardware Debug Switches which accessible by removing
|
|
a small EMI panel cover on the top of the chassis, and are slightly different
|
|
than the Origin2000 switches in appearance (however, they are still <TT>OFF</TT> when switched <I>away</I> from the labelled numbers).</P>
|
|
<P>Examples:</P>
|
|
<UL>
|
|
<LI>To turn off all boot diagnostics: <B>dbg 0 1</B><BR>
|
|
If Hardware Debug Switch 1 is already on, this will turn <I>on</I> boot diagnostics.
|
|
<LI>To stop at Memoryless POD mode on reset: <B>dbg 0 18</B><BR>
|
|
The 4th and 5th bits in the hex value 0x18 are one, so this is the same
|
|
as turning on Hardware Debug Switches 4 and 5.
|
|
<LI>To override CPU disables: <B>dbg 1 0</B><BR>
|
|
This turns on Virtual Debug Switch 9 (not available as a Hardware Debug
|
|
Switch).
|
|
</UL>
|
|
<P><IMG SRC="dip_switch.gif" ALIGN="RIGHT" WIDTH="329" HEIGHT="167" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dip_switch.gif">All switches should be <TT>OFF</TT> for normal system operation. Changing Hardware Debug Switch settings requires
|
|
using a sharp stylus to press the switch in on the top (switch <TT>ON</TT>) or bottom (switch <TT>OFF</TT>). The Debug Switch block shown here has switches 1, 2, and 6 set to <TT>ON</TT> and all others <TT>OFF</TT>.</P>
|
|
<P>When reading the raw binary value of the Hardware Debug Switches using the<B> rsw</B> command, a hexadecimal byte value is returned. The most significant bit
|
|
is switch 8, and a bit is 1 when its switch is OFF. The bit values are reversed
|
|
(1 when off, 0 when on). Reading the Hardware Debug Switch block shown here
|
|
would return 0xdc.<BR CLEAR=ALL>
|
|
</P>
|
|
<H3><A NAME="DebugSwitchAssignments">System Controller Debug Switch Assignments</A></H3>
|
|
<UL>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw1.gif" ALIGN="MIDDLE" WIDTH="30" HEIGHT="30" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw1.gif"></TH><TH><IMG SRC="dipsw2.gif" WIDTH="30" HEIGHT="30" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw2.gif"></TH><TH>Diagnostics Level</TH></TR>
|
|
<TR><TD ALIGN=CENTER>Off</TD><TD ALIGN=CENTER>Off</TD><TD ALIGN=CENTER>Normal</TD></TR>
|
|
<TR><TD ALIGN=CENTER>Off</TD><TD ALIGN=CENTER>On</TD><TD ALIGN=CENTER>Heavy</TD></TR>
|
|
<TR><TD ALIGN=CENTER>On</TD><TD ALIGN=CENTER>Off</TD><TD ALIGN=CENTER>None</TD></TR>
|
|
<TR><TD ALIGN=CENTER>On</TD><TD ALIGN=CENTER>On</TD><TD ALIGN=CENTER>Manufacturing</TD></TR>
|
|
</TABLE>
|
|
<P>These switches select the kind of diagnostics that are run after a system
|
|
reset, before booting Irix. The switches apply only to the nodes in the
|
|
module on which they're set.</P>
|
|
<P><B>Normal</B> tests each part of the system for basic functionality, only using relatively
|
|
fast tests to expedite system boot while catching any blatantly troubled
|
|
hardware.</P>
|
|
<P><B>Heavy</B> runs the most thorough diagnostics available on each part of the system.
|
|
They may take a very long time to complete, especially the memory tests.
|
|
It may be desirable to run them after installing new hardware or if the
|
|
system is having problems thought to be hardware-related.</P>
|
|
<P><B>Manufacturing</B> runs heavy diagnostics and outputs special FRU (field replacable unit)
|
|
information. Console input and output are handled through the system controller
|
|
port which must be connected to Silicon Graphics manufacturing equipment.</P>
|
|
<P><B>None</B> performs no diagnostics and the system will boot as fast as possible. This
|
|
might be used when debugging software such as kernel drivers, when there
|
|
is complete confidence in the hardware.</P>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw3.gif" ALIGN="MIDDLE" WIDTH="30" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw3.gif"></TH><TH>Information Level </TH></TR>
|
|
</TABLE>
|
|
<P>If this switch is On, PROM shows very detailed information messages during
|
|
boot, interspersed with the normal boot status messages. The switch applies
|
|
only to the nodes in the module on which it's set.</P>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw4.gif" ALIGN="MIDDLE" WIDTH="30" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw4.gif"></TH><TH><IMG SRC="dipsw5.gif" WIDTH="30" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw5.gif"></TH><TH>Boot Stop Point</TH></TR>
|
|
<TR><TD ALIGN=CENTER>Off</TD><TD ALIGN=CENTER>Off</TD><TD ALIGN=CENTER>Never</TD></TR>
|
|
<TR><TD ALIGN=CENTER>Off</TD><TD ALIGN=CENTER>On</TD><TD ALIGN=CENTER>Local</TD></TR>
|
|
<TR><TD ALIGN=CENTER>On</TD><TD ALIGN=CENTER>Off</TD><TD ALIGN=CENTER>Global</TD></TR>
|
|
<TR><TD ALIGN=CENTER>On</TD><TD ALIGN=CENTER>On</TD><TD ALIGN=CENTER>Memoryless</TD></TR>
|
|
</TABLE>
|
|
<P>These switches allow the boot process to be stopped at various stages.</P>
|
|
<P><B>Never</B> allows the boot to proceed all the way through to Irix (default).</P>
|
|
<P><B>Local</B> allows the boot to proceed up to the point where it would normally load
|
|
and jump to the IO6prom. Instead of continuing, all nodes enter cached (Cac)
|
|
POD Mode. If this switch is set on any module, it will be propagated to
|
|
all modules.</P>
|
|
<P><B>Global</B> allows the boot to proceed up to the point where it would normally load
|
|
and jump to the IO6prom. Instead of continuing, the master node enters cached
|
|
(Cac) POD Mode and all of the slaves enter the Slave Loop. If this switch
|
|
is set on any module, it will be propagated to all modules.</P>
|
|
<P><B>Memoryless</B> stops as soon as possible after setting up just the bare minimum portion
|
|
of the system required to enter POD mode. All nodes enter dirty exclusive
|
|
(Dex) POD Mode even if there is no local memory. <I>Warning</I>: If this switch is set on in one module, the system containing the module
|
|
will not boot properly.</P>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw6.gif" ALIGN="MIDDLE" WIDTH="30" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw6.gif"></TH><TH>Default Environment</TH></TR>
|
|
</TABLE>
|
|
<P>If this switch is On, the PROM ignores all PROM Log environment variables
|
|
and IO6 NVRAM settings, and uses the system defaults. This may be useful
|
|
for proceeding if any of the variable storage mechanisms contain data that
|
|
is preventing the system from booting. This switch applies only to the module
|
|
on which it is set.</P>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw7.gif" ALIGN="MIDDLE" WIDTH="30" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw7.gif"></TH><TH>Bypass IO6</TH></TR>
|
|
</TABLE>
|
|
<P>If this switch is On, the PROM bypasses the first IO6 card that is found
|
|
and tries to boot from the second one found. This may help to boot the system
|
|
if the first IO6 card is not working, without having to physically remove
|
|
the card. This switch applies only to the module on which it is set.</P>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw8.gif" ALIGN="MIDDLE" WIDTH="30" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw8.gif"></TH><TH>Bypass Global Master</TH></TR>
|
|
</TABLE>
|
|
<P>If this switch is On, the node that would ordinarly become the global master
|
|
will become a slave, and the next CPU in line will become the global master.
|
|
This switch applies only to the module on which it is set.</P>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw9.gif" ALIGN="MIDDLE" WIDTH="30" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw9.gif"></TH><TH>Override CPU Disabling</TH></TR>
|
|
</TABLE>
|
|
<P>If this switch is On, the all CPUs that would otherwise be disabled due
|
|
to the DisableA or DisableB environment variables being set (see POD mode
|
|
disable command) will no longer be disabled after a reset.</P>
|
|
<P>This is useful for getting out of the situation in which all CPUs in the
|
|
system have accidentally been disabled simultaneously.</P>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw10.gif" ALIGN="MIDDLE" WIDTH="48" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw10.gif"></TH><TH>Override System Partitioning</TH></TR>
|
|
</TABLE>
|
|
<P>If this switch is On, the all CPUs that would otherwise be disabled due
|
|
to the DisableA or DisableB environment variables being set (see POD mode
|
|
disable command) will no longer be disabled after a reset.</P>
|
|
<P>This is useful for getting out of the situation in which all CPUs in the
|
|
system have accidentally been disabled simultaneously.</P>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw11.gif" ALIGN="MIDDLE" WIDTH="48" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw11.gif"></TH><TH>Use Default Console</TH></TR>
|
|
</TABLE>
|
|
<P>If no user-defined console can be located by means of the ConsolePath environment
|
|
variable in the IO6prom, and this switch is turned On, then the first serial
|
|
device found in each module will be treated as a console device. The module
|
|
containing the Global Master CPU will become the overall system console.</P>
|
|
<LI><TABLE BORDER=1>
|
|
<TR><TH><IMG SRC="dipsw12.gif" ALIGN="MIDDLE" WIDTH="48" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw12.gif"></TH><TH> through </TH><TH><IMG SRC="dipsw16.gif" ALIGN="MIDDLE" WIDTH="48" HEIGHT="30" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/dipsw16.gif"></TH><TH>Not yet assigned</TH></TR>
|
|
</TABLE>
|
|
<P>These switches are reserved for future use.</P>
|
|
</UL>
|
|
<H3><A NAME="PROMImages">PROM Images</A></H3>
|
|
<P><I>Of interest to developers only</I></P>
|
|
<P>The IP27prom build directory and the Irix flash commands deal with PROM
|
|
images in the <B>promgen</B> format. The file extension for such images is <I>.img</I>. Under Irix, they reside in the directory <I>/usr/cpu/firmware</I>.</P>
|
|
<P>To verify an image and view the version number of an image, use the command <B>promgen -h file.img</B>. The promgen utility resides in <I>stand/arcs/tools/promgen</I>.</P>
|
|
<HR>
|
|
<H2><A NAME="PowerOnDiags">Power-On Diagnostics</A></H2>
|
|
<H3><A NAME="BootStatusLEDs">Boot Status LEDs</A></H3>
|
|
<P>During system boot, the node board LEDs are constantly updated with values
|
|
indicating the boot progress, so that if the system were to crash during
|
|
any phase, the LEDs would indicate what it was doing at the time. Also,
|
|
diagnostics values are displayed on the Origin2000/200 Module System Controller
|
|
display during boot. Further into the boot process, a console becomes available
|
|
to report more detailed information on failures.</P>
|
|
<P>If a single processor fails very early during boot, before a console is
|
|
available, the PROM will present a non-flashing FLED (failure LED) value
|
|
and completely disable that processor by setting its PI_CPU_ENABLE bit to
|
|
zero. The system will continue to boot without that processor.</P>
|
|
<P>If a single process fails after a console is available, the PROM will flash
|
|
a FLED value, and wait for ^C to be entered on the console, whereupon it
|
|
will enter Dex POD mode. The system will continue to boot without that processor.</P>
|
|
<H3><A NAME="ReadingTheLEDs">Reading the LEDs</A></H3>
|
|
<P><IMG SRC="cpu_leds.gif" ALIGN="RIGHT" WIDTH="53" HEIGHT="184" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/cpu_leds.gif"><BR>
|
|
Each node card has two side-by-side columns of 8 discreet LEDs. The left
|
|
column presents a status value from CPU (slice) A, and the right column
|
|
presents a status value from CPU B.</P>
|
|
<P>The columns have the most significant bit on top. The sense of the LED bits
|
|
is reversed such that a lit LED indicates a zero bit and an extinguished
|
|
LED indicates a one bit. For example, in the figure at right, CPU A is showing
|
|
0xf8, while CPU B is showing 0x03.<BR CLEAR=ALL>
|
|
</P>
|
|
<P>During the boot process, the CPU changes the LEDs before each phase of initialization.
|
|
If a CPU were to hang during any phase, the residual LED value would help
|
|
to indicate which phase hung and perhaps pinpoint the failing component
|
|
(for example, the R10000 data cache). LED values from 0x00 to 0x7f, as shown
|
|
in Table 1, are used for this purpose.</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION> Progress LED Values </CAPTION>
|
|
<TR><TH ALIGN=LEFT> LED </TH><TH ALIGN=LEFT> Name </TH><TH ALIGN=LEFT> Phase </TH></TR>
|
|
<TR><TD>0x00</TD><TD>RESET</TD><TD>-</TD><TR><TD>0x01</TD><TD>INITCPU</TD><TD>Initializing R10000 GPRS, FPRS, and COP0</TD><TR><TD>0x02</TD><TD>TESTCP1</TD><TD>Testing R10000 COP1 registers</TD><TR><TD>0x03</TD><TD>RUNTLB</TD><TD>Switch to mapped mode</TD><TR><TD>0x04</TD><TD>TESTICACHE</TD><TD>Test R10000 primary instruction cache</TD><TR><TD>0x05</TD><TD>TESTDCACHE</TD><TD>Test R10000 primary data cache</TD><TR><TD>0x06</TD><TD>TESTSCACHE</TD><TD>Test secondary cache</TD><TR><TD>0x07</TD><TD>FLUSHCACHES</TD><TD>Flush all caches</TD><TR><TD>0x08</TD><TD>CKHUBLOCAL</TD><TD>-</TD><TR><TD>0x09</TD><TD>CKHUBCONFIG</TD><TD>-</TD><TR><TD>0x0a</TD><TD>INVICACHE</TD><TD>Invalidate R10000 primary instruction cache</TD><TR><TD>0x0b</TD><TD>INVDCACHE</TD><TD>Invalidate R10000 primary data cache</TD><TR><TD>0x0c</TD><TD>INVSCACHE</TD><TD>Invalidate secondary cache</TD><TR><TD>0x0d</TD><TD>INMAIN</TD><TD>Succeeded in jumping to main()</TD><TR><TD>0x0e</TD><TD>SPEEDUP</TD><TD>About to increase PROM access speed</TD><TR><TD>0x0f</TD><TD>SPEEDUPOK</TD><TD>Increased PROM access speed</TD><TR><TD>0x10</TD><TD>INITDCACHE</TD><TD>-</TD><TR><TD>0x11</TD><TD>INITICACHE</TD><TD>-</TD><TR><TD>0x12</TD><TD>INITCOP0</TD><TD>-</TD><TR><TD>0x13</TD><TD>FLUSHTLB</TD><TD>-</TD><TR><TD>0x14</TD><TD>CLEARTAGS</TD><TD>-</TD><TR><TD>0x15</TD><TD>CCLFAILED_INITUART</TD><TD>-</TD><TR><TD>0x16</TD><TD>HUBINIT</TD><TD>-</TD><TR><TD>0x17</TD><TD>HUBCFAILED_INITUART</TD><TD>-</TD><TR><TD>0x18</TD><TD>NOCLOCK_INITUART</TD><TD>-</TD><TR><TD>0x19</TD><TD>HUBINITDONE</TD><TD>-</TD><TR><TD>0x1a</TD><TD>MSCPROBE</TD><TD>About to probe for presence of MSC</TD><TR><TD>0x1b</TD><TD>JUNKPROBE</TD><TD>About to probe for presence of Junk UART</TD><TR><TD>0x1c</TD><TD>DONEPROBE</TD><TD>Done probing for presence of MSC</TD><TR><TD>0x1d</TD><TD>UARTINIT</TD><TD>About to initialize selected UART</TD><TR><TD>0x1e</TD><TD>UARTINITDONE</TD><TD>Done initializing selected UART</TD><TR><TD>0x1f</TD><TD>CKHUBCHIP</TD><TD>-</TD><TR><TD>0x20</TD><TD>PODMAIN</TD><TD>-</TD><TR><TD>0x21</TD><TD>PODLOOP</TD><TD>About to enter POD mode, C portion</TD><TR><TD>0x22</TD><TD>PODPROMPT</TD><TD>Just about to enter POD prompt loop</TD><TR><TD>0x23</TD><TD>PODMODE</TD><TD>About to enter POD mode, assembler portion</TD><TR><TD>0x24</TD><TD>LOCALARB</TD><TD>Performing local arbitration (CPU A/B)</TD><TR><TD>0x25</TD><TD>SCINIT</TD><TD>-</TD><TR><TD>0x26</TD><TD>BMARB</TD><TD>-</TD><TR><TD>0x27</TD><TD>BMASTER</TD><TD>-</TD><TR><TD>0x28</TD><TD>BARRIER</TD><TD>About to perform first local barrier</TD><TR><TD>0x29</TD><TD>CKPDCACHE1</TD><TD>-</TD><TR><TD>0x2a</TD><TD>MAKESTACK</TD><TD>About to configure Dex mode stack and data</TD><TR><TD>0x2b</TD><TD>MAIN</TD><TD>Reached main()</TD><TR><TD>0x2c</TD><TD>LOADPROM</TD><TD>-</TD><TR><TD>0x2d</TD><TD>CKSCACHE1</TD><TD>-</TD><TR><TD>0x2e</TD><TD>CKBT</TD><TD>-</TD><TR><TD>0x2f</TD><TD>INSLAVE</TD><TD>-</TD><TR><TD>0x30</TD><TD>PROMJUMP</TD><TD>-</TD><TR><TD>0x31</TD><TD>NMI</TD><TD>-</TD><TR><TD>0x32</TD><TD>INV_IDCACHES</TD><TD>-</TD><TR><TD>0x33</TD><TD>INV_SCACHE</TD><TD>-</TD><TR><TD>0x34</TD><TD>WRCONFIG</TD><TD>-</TD><TR><TD>0x35</TD><TD>RTCINIT</TD><TD>About to initialize Hub Real Time Counter</TD><TR><TD>0x36</TD><TD>RTCINITDONE</TD><TD>Done initializing Hub Real Time Counter</TD><TR><TD>0x37</TD><TD>LOCK</TD><TD>-</TD><TR><TD>0x38</TD><TD>BARRIEROK</TD><TD>First local barrier succeeded</TD><TR><TD>0x39</TD><TD>LOCKOK</TD><TD>-</TD><TR><TD>0x3a</TD><TD>FPROMINIT</TD><TD>-</TD><TR><TD>0x3b</TD><TD>FPROMINITDONE</TD><TD>-</TD><TR><TD>0x3c</TD><TD>JUMPRAMU</TD><TD>About to jump to UALIAS space</TD><TR><TD>0x3d</TD><TD>JUMPRAMUOK</TD><TD>Jumped to UALIAS space</TD><TR><TD>0x3e</TD><TD>JUMPRAMC</TD><TD>About to jump to cached space</TD><TR><TD>0x3f</TD><TD>JUMPRAMCOK</TD><TD>Jumped to cached space</TD><TR><TD>0x40</TD><TD>STACKRAM</TD><TD>About to test stack area of memory</TD><TR><TD>0x41</TD><TD>STACKRAMOK</TD><TD>Done testing stack area of memory</TD><TR><TD>0x42</TD><TD>SLAVEINT</TD><TD>Slave saw command request interrupt</TD><TR><TD>0x43</TD><TD>SLAVECALL</TD><TD>Slave about to call requested command</TD><TR><TD>0x44</TD><TD>SLAVEREND</TD><TD>Slave command completed</TD><TR><TD>0x45</TD><TD>LAUNCHLOOP</TD><TD>About to enter slave launch loop</TD><TR><TD>0x46</TD><TD>LAUNCHINTR</TD><TD>Received launch interrupt</TD><TR><TD>0x47</TD><TD>LAUNCHCALL</TD><TD>Calling launched function</TD><TR><TD>0x48</TD><TD>LAUNCHDONE</TD><TD>Launched function returned</TD><TR><TD>0x49</TD><TD>UARTBASE</TD><TD>-</TD><TR><TD>0x4a</TD><TD>MDIRINIT</TD><TD>About to initialize Hub MD and SIMM controls</TD><TR><TD>0x4b</TD><TD>MDIRCONFIG</TD><TD>About to probe and configure memory size</TD><TR><TD>0x4c</TD><TD>I2CINIT</TD><TD>About to initialize PCF8584 I2C chip</TD><TR><TD>0x4d</TD><TD>I2CDONE</TD><TD>Done initializing PCF8584 I2C chip</TD><TR><TD>0x4e</TD><TD>CONFIG_INIT</TD><TD>-</TD><TR><TD>0x4f</TD><TD>IODISCOVER</TD><TD>About to discover Hub I/O</TD><TR><TD>0x50</TD><TD>HUB_CONFIG</TD><TD>-</TD><TR><TD>0x51</TD><TD>ROUTER_CONFIG</TD><TD>About to write Router cfg info into KLCONFIG</TD><TR><TD>0x52</TD><TD>INITII</TD><TD>About to initialize I/O section of Hub</TD><TR><TD>0x53</TD><TD>CONSOLE_GET</TD><TD>About to probe I/O section for console</TD><TR><TD>0x54</TD><TD>CONSOLE_GET_OK</TD><TD>Console probing completed</TD><TR><TD>0x55</TD><TD>NOT_USED_55</TD><TD>-</TD><TR><TD>0x56</TD><TD>INITIODONE</TD><TD>Done initializing I/O section of Hub</TD><TR><TD>0x57</TD><TD>STASH2</TD><TD>Reset error state saved</TD><TR><TD>0x58</TD><TD>STASH3</TD><TD>Hub error registers cleared</TD><TR><TD>0x59</TD><TD>STASH4</TD><TD>Hub error checking enabled</TD><TR><TD>0x5a</TD><TD>IODISCOVER_DONE</TD><TD>Done discovering Hub I/O</TD><TR><TD>0x5b</TD><TD>NMI_INIT</TD><TD>About to initialize NMI handler area</TD><TR><TR><TD>0x5c</TD><TD>TEST_INTS</TD><TD>About to test Hub interrupts</TD><TR><TD>0x5d</TD><TD>IORESET</TD><TD>About to perform early reset of Hub I/O section</TD><TR></TABLE></P>
|
|
</CENTER><P>In addition to indicating boot progress, the LEDs are used to indicate fatal
|
|
hardware problems found during diagnostics the PROM performs in each <A HREF="#SystemBootProcess">boot phase</A>. If a fatal problem is found, the CPU sets the LEDs to a failure value
|
|
between 0x80 and 0xff, as shown in Table 2, and automatically disables itself. </P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION> Failure LED Values </CAPTION>
|
|
<TR><TH ALIGN=LEFT> LED </TH><TH ALIGN=LEFT> Name </TH><TH ALIGN=LEFT> Reason </TH></TR>
|
|
<TR><TD>0x81</TD><TD>CP1</TD><TD>R10000 COP1 register test failed</TD><TR><TD>0x82</TD><TD>RESTART</TD><TD>Restart Master unable to load io6prom</TD><TR><TD>0x83</TD><TD>ICACHE</TD><TD>R10000 primary instruction cache test failed</TD><TR><TD>0x84</TD><TD>DCACHE</TD><TD>R10000 primary data cache test failed</TD><TR><TD>0x85</TD><TD>SCACHE</TD><TD>Secondary cache test failed</TD><TR><TD>0x86</TD><TD>KILLED</TD><TD>CPU disabled by another node</TD><TR><TD>0x87</TD><TD>RTC</TD><TD>Real-time counter not counting</TD><TR><TD>0x88</TD><TD>ECC</TD><TD>-</TD><TR><TD>0x89</TD><TD>XTLBMISS</TD><TD>-</TD><TR><TD>0x8a</TD><TD>UTLBMISS</TD><TD>-</TD><TR><TD>0x8b</TD><TD>KTLBMISS</TD><TD>-</TD><TR><TD>0x8c</TD><TD>GENERAL</TD><TD>-</TD><TR><TD>0x8d</TD><TD>NOTIMPL</TD><TD>-</TD><TR><TD>0x8e</TD><TD>CACHE</TD><TD>-</TD><TR><TD>0x8f</TD><TD>OS</TD><TD>-</TD><TR><TD>0x90</TD><TD>HUBINTS</TD><TD>-</TD><TR><TD>0x91</TD><TD>HUBLOCAL</TD><TD>-</TD><TR><TD>0x92</TD><TD>HUBCONFIG</TD><TD>-</TD><TR><TD>0x93</TD><TD>PREM_DIR_REQ</TD><TD>All nodes must have premium DIMMs for this configuration</TD><TR><TD>0x94</TD><TD>UNUSED1</TD><TD>-</TD><TR><TD>0x95</TD><TD>HUBUART</TD><TD>-</TD><TR><TD>0x96</TD><TD>HUBCCS</TD><TD>-</TD><TR><TD>0x97</TD><TD>MAINRET</TD><TD>main() returned</TD><TR><TD>0x98</TD><TD>NOMEM</TD><TD>Node card has no local memory</TD><TR><TD>0x99</TD><TD>I2CFATAL</TD><TD>-</TD><TR><TD>0x9a</TD><TD>DISABLED</TD><TD>CPU is disabled by environment variable</TD><TR><TD>0x9b</TD><TD>DOWNLOAD</TD><TD>Error downloading IO6prom into RAM</TD><TR><TD>0x9c</TD><TD>COREDEBUG</TD><TD>Can't set CORE debug registers</TD><TR><TD>0x9d</TD><TD>IODISCOVER</TD><TD>Hub I/O discovery failed</TD><TR><TD>0x9e</TD><TD>HUB_CONFIG</TD><TD>Failed writing Hub info into KLCONFIG</TD><TR><TD>0x9f</TD><TD>ROUTER_CONFIG</TD><TD>Failed writing Router info into KLCONFIG</TD><TR><TD>0xa0</TD><TD>HUBIO_INIT</TD><TD>Hub I/O initialization failed</TD><TR><TD>0xa1</TD><TD>CONFIG_INIT</TD><TD>Failed initializing KLCONFIG</TD><TR><TD>0xa2</TD><TD>RTRCHIP</TD><TD>Router chip failed diags</TD><TR><TR><TD>0xa3</TD><TD>LINKDEAD</TD><TD>LLP link failed diags</TD><TR><TR><TD>0xa4</TD><TD>HUBBIST</TD><TD>Hub chip failed built-in self test (BIST)</TD><TR><TR><TD>0xa5</TD><TD>RTRBIST</TD><TD>Router chip failed built-in self test (BIST)</TD><TR><TR><TD>0xa6</TD><TD>RESETWAIT</TD><TD>Waiting for reset to go</TD><TR><TR><TD>0xa7</TD><TD>LLP_FAIL</TD><TD>LLP failed after reset</TD><TR><TR><TD>0xa8</TD><TD>LLP_NORESET</TD><TD>LLP never came up after reset</TD><TR><TR><TD>0xa9</TD><TD>BADMEM</TD><TD>No good local memory</TD><TR><TR><TD>0xaa</TD><TD>NOT_USED_AA</TD><TD>-</TD><TR><TR><TD>0xab</TD><TD>NET_DISCOVER</TD><TD>Hub Network discovery failed</TD><TR><TR><TD>0xac</TD><TD>NASID_CALC</TD><TD>NASID calculation failed</TD><TR><TR><TD>0xad</TD><TD>ROUTE_CALC</TD><TD>Route calculation failed</TD><TR><TR><TD>0xae</TD><TD>ROUTE_DIST</TD><TD>Route distribution failed</TD><TR><TR><TD>0xaf</TD><TD>NASID_DIST</TD><TD>NASID distribution failed</TD><TR><TR><TD>0xb0</TD><TD>NO_NASID</TD><TD>Master did not assign a NASID</TD><TR><TR><TD>0xb1</TD><TD>NO_MODULEID</TD><TD>Module ID arbitration failed</TD><TR><TR><TD>0xb2</TD><TD>MIXED_SN00</TD><TD>Origin200 mixed with Origin2000</TD><TR><TR><TD>0xb3</TD><TD>ERRPART</TD><TD>Error partition config</TD><TR><TR><TD>0xb3</TD><TD>MODEBIT</TD><TD>Error copying modebits</TD><TR></TABLE></P>
|
|
</CENTER><P>The following codes blink and indicate that an exception occurred so early
|
|
in the PROM that no TTY device was available print information about the
|
|
exception:</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION> Early Exception LED Values </CAPTION>
|
|
<TR><TH ALIGN=LEFT> LED </TH><TH ALIGN=LEFT> Name </TH><TH ALIGN=LEFT> Exception Type </TH></TR>
|
|
<TR><TD>0xf2</TD><TD>EXC_GENERAL</TD><TD>(Blinking) General exception</TD><TR><TD>0xf3</TD><TD>EXC_ECC</TD><TD>(Blinking) ECC exception</TD><TR><TD>0xf4</TD><TD>EXC_TLB</TD><TD>(Blinking) TLB exception</TD><TR><TD>0xf5</TD><TD>EXC_XTLB</TD><TD>(Blinking) XTLB exception</TD><TR><TD>0xf6</TD><TD>EXC_UNIMPL</TD><TD>(Blinking) Unimplemented exception</TD><TR><TD>0xf7</TD><TD>EXC_CACHE</TD><TD>(Blinking) Cache Error exception</TD></TABLE></P>
|
|
</CENTER><H3><A NAME="PODMode">POD Mode (PROM Command Interpreter)</A></H3>
|
|
<P>POD mode is a command interpreter present in the PROM which is most often
|
|
used for debugging of a crashed system. It can be used to examine the contents
|
|
of CPU registers, support chip registers, and memory. It can also enable
|
|
or disable certain node card features, such as CPUs and memory banks.</P>
|
|
<P>POD can be run in three modes: Dex, Cac, and Unc.</P>
|
|
<P>When running in Dex mode, POD requires very few system resources to run.
|
|
It does not require memory -- instead, it accesses its program text directly
|
|
from the PROM and uses the R10000 microprocessor's data cache as memory
|
|
for its stack. The secondary cache is not used. <A HREF="#DebugNMI">NMI</A> and uncaught exceptions typically result in a Dex mode POD prompt.</P>
|
|
<P><IMG SRC="snail.gif" ALIGN="RIGHT" WIDTH="48" HEIGHT="48" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/snail.gif">Dex mode is generally very slow because PROM instruction fetches are very
|
|
slow. You would want to avoid performing long memory tests or flashing remote
|
|
PROMs from Dex mode. Certain commands may not be executed in Dex mode, especially
|
|
ones that attempt to program the PROM. See the <B>go cac</B> command for getting out of Dex mode.<BR CLEAR=RIGHT>
|
|
</P>
|
|
<P><IMG SRC="abomb.gif" ALIGN="RIGHT" WIDTH="48" HEIGHT="48" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/abomb.gif"> Also, when loading or storing data or running memory tests, <EM>be sure not to access cached memory addresses while running in Dex mode</EM>. See the <B><A HREF="#GoCommand">go dex</B> command</A>.<BR CLEAR=RIGHT>
|
|
</P>
|
|
<P>When running in Cac mode, POD places its program text, data, and stack in
|
|
cached memory. This may only occur after memory has been probed and configured.
|
|
POD runs very quickly out of cached memory. When the PROM takes an exception
|
|
or NMI and enters POD mode, it goes into Dex mode. In the right circumstances
|
|
it is possible to get back to Cac mode using the <B><A HREF="#GoCommand">go cac</B></A> command.</P>
|
|
<P>When running in Unc mode, POD places its program text, data, and stack in
|
|
uncached memory. This is similar to Cac mode, except the cache is not used
|
|
and it runs slower.</P>
|
|
<P>The PROM can be forced to enter POD mode at different stages of the boot
|
|
process by setting Debug Switches.</P>
|
|
<P>The POD mode prompt is in the format:</P>
|
|
<PRE>
|
|
|
|
<FONT SIZE="6"> POD Dex MSC 001 3A></FONT>
|
|
<FONT SIZE="6"> ___ ___ ___ ___ _ __</FONT>
|
|
<FONT SIZE="6"> 1 2 3 4 5 6</FONT>
|
|
|
|
</PRE>
|
|
<P>where the fields are:</P>
|
|
<OL>
|
|
<LI>Always POD, indicating POD mode.
|
|
<LI><I>Dex</I>, indicating POD mode is running memoryless out of the cache only, or<BR>
|
|
<I>Cac</I>, indicating POD mode is running out of cached memory, or<BR>
|
|
<I>Unc</I>, indicating POD mode is running out of uncached memory.
|
|
<LI><I>MSC</I>, indicating the POD prompt is being displayed on the MSC ACP port, or<BR>
|
|
<I>Junk</I>, indicating the POD prompt is being displayed on the Junk UART, or<BR>
|
|
<I>IOC3</I>, indicating the POD prompt is being displayed on an IOC3 UART, or<BR>
|
|
<I>Talk</I>, indicating the POD prompt is being displayed on the Net UART.
|
|
<LI>The NASID (node ID) of the current node.
|
|
<LI>Occasionally, status fields may be inserted here indicating errors or alternate
|
|
operating modes. <I>MDerr</I> indicates MD errors are pending (use the <B>error</B> command to view them and <B>clear</B> to clear them). <I>AltRegs</I> indicates the kernel register set is in effect rather than the PROM register
|
|
set.
|
|
<LI>The slot (1 to 4) and slice (A or B) of the CPU displaying the prompt.
|
|
<LI>Many POD mode commands, including memory tests, flashing PROMs, and <B>loop</B> or <B>repeat </B>statements can be aborted by typing ^C.
|
|
</OL>
|
|
<P>The following editing characters are provided at the POD prompt:</P>
|
|
<PRE>
|
|
^C Abort
|
|
^H, Backspace, or DEL Backspace
|
|
^R Redisplay line
|
|
^U Erase line
|
|
|
|
</PRE>
|
|
<P>Three handy command line editing features are borrowed from the C shell:</P>
|
|
<OL>
|
|
<LI>Wherever the symbol <B>!!</B> appears in a command line, it is substituted with the contents of the previous
|
|
command line.
|
|
<LI>Wherever the symbol <B>!$</B> appears in a command line, it is substituted with the last word from the
|
|
previous command line.
|
|
<LI>The command line <B>^<I>xxx</I>^<I>yyy</I></B> repeats the previous command line, except substitutes the first occurrence
|
|
of the string <I>xxx</I> with the string <I>yyy</I>.
|
|
</OL>
|
|
<P>In addition, environment variables (see <B><A HREF="#EnvironmentCommands">setenv</B> command</A>) are substituted wherever the name of an environment variable appears in
|
|
backquotes (``). This is useful as a form of aliases. For example,</P>
|
|
<PRE>
|
|
POD Dex Hub 000 1A> setenv range
|
|
Set "range" to? n:1 u: 0x3ff0000 2m
|
|
POD Dex Hub 000 1A> dirtest `range`
|
|
POD Dex Hub 000 1A> dirinit `range`
|
|
POD Dex Hub 000 1A> memtest `range`
|
|
</PRE>
|
|
<H3><A NAME="PODConsoles">POD Consoles</A></H3>
|
|
<P>POD mode will present a prompt on several possible I/O devices. It probes
|
|
for devices in the order listed below and uses the first one found. When
|
|
the CPU is at the POD prompt, it will blink an LED pattern at 0.5 Hz indicating
|
|
on which UART input is expected.</P>
|
|
<PRE>
|
|
junk If a Junk UART is plugged in, it is used preferentially.
|
|
Junk UARTs are available only in manufacturing and bring-up.
|
|
LED pattern: 0x80/0xb3
|
|
|
|
ioc3 If a BaseIO (IO6) is found, and one of the ports on it is
|
|
marked as the system console, and it can be initialized and
|
|
accessed without causing an exception, the ioc3 uart is used.
|
|
LED pattern: 0x80/0x8c
|
|
|
|
msc If the Module System Controller is responsive, the MSC
|
|
is used for I/O. (The MSC was at one time called the
|
|
Entry Level System Controller, or ELSC).
|
|
LED pattern: 0x80/0xbc
|
|
|
|
netuart If no UART is available, the netuart is used (see below).
|
|
This is not a real UART, but an emulation that allows one
|
|
Hub to talk to another.
|
|
LED pattern: 0x80/0xbf
|
|
|
|
</PRE>
|
|
<H4><A NAME="Netuart">Netuart</A></H4>
|
|
<P>When a CPU is using the netuart, it monitors some shared memory locations
|
|
and interrupt lines used for communication. From any node that has a UART
|
|
and is at the POD prompt, you can use the <B><A HREF="#TalkCommand">talk</B></A> command to communicate with CPUs that are using the netuart. Use of the
|
|
netuart is not recommended.</P>
|
|
<H3><A NAME="PODConstants">Constants</A></H3>
|
|
<P>PROM constants are similar to C constants. Hexadecimal numbers are prefixed
|
|
with <B>0x</B>; octal numbers are prefixed with <B>0</B>; binary numbers are prefixed with <B>0b</B>; all other numbers are in decimal.</P>
|
|
<P>Three special suffixes are provided to facilitate entering large constants:</P>
|
|
<PRE>
|
|
g Gigabytes e.g.: 1g == (1 << 30)
|
|
m Megabytes e.g.: 32m == (32 << 20)
|
|
k Kilobytes e.g.: 100k == (100 << 10)
|
|
</PRE>
|
|
<H3><A NAME="PODExpressions">Expressions</A></H3>
|
|
<P>Arithmetic expressions are permitted and are similar to C expressions in
|
|
operators and order of evaluation. Many commands require expressions to
|
|
be parenthesized to avoid ambiguity. For example:</P>
|
|
<PRE>
|
|
px (0xdeadbeef >> 6) & 0xff
|
|
sd md_memory_config (ld md_memory_config | 077777777)
|
|
</PRE>
|
|
<P>The supported operators are:</P>
|
|
<PRE>
|
|
Unary: () ~ ! - + LD LW LH LB, and * (same as LD)
|
|
Binary: + - * / % | & ^ << >> == != < > <= >= && ||
|
|
</PRE>
|
|
<P>Commands that require strings may sometimes require quotes on the strings.
|
|
Within quotes, standard C escape sequences (\b, \t, \n, \r, \\, and \ddd)
|
|
are permitted. There is a 31-character limit on string length.</P>
|
|
<H3><A NAME="PODStatements">Statements</A></H3>
|
|
<P>More than one command may be performed on a command line by using a command
|
|
list in which commands are separated by semicolons; e.g.:</P>
|
|
<PRE>
|
|
sd u:0 1; ld u:0
|
|
</PRE>
|
|
<P>Commands that take other commands as aguments, such as <B>loop</B>, may take a single command or a compound command consisting of a command
|
|
list in curly braces; e.g.:</P>
|
|
<PRE>
|
|
loop ld pi_rt_count
|
|
loop { ld pi_rt_count; sd pi_rt_count 0 }
|
|
</PRE>
|
|
<P>A pound sign (#) begins a comment that lasts to the end of the input line.
|
|
This may be useful when cutting and pasting into a terminal window from
|
|
command files.</P>
|
|
<H3><A NAME="PODAddressModifiers">Address Modifiers</A></H3>
|
|
<P>For convenience in entering constants which represent R10000 and Origin2000
|
|
addresses, a number of modifiers are available. The modifiers should precede
|
|
the constants. Multiple modifiers may be used.</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>Address Modifiers</CAPTION>
|
|
<TR><TH>Modifier</TH><TH>Action</TH><TH>Example</TH><TH>Equivalent To</TH></TR>
|
|
<TR><TD>h:</TD><TD>Set top byte to 0x90 (HSPEC).</TD><TD>h:256m</TD><TD>0x9000000010000000 (LBOOT)</TD></TR>
|
|
<TR><TD>i:</TD><TD>Set top byte to 0x92 (IO).</TD><TD>i:(16m+32)</TD><TD>0x9200000001000020</TD></TR>
|
|
<TR><TD>m:</TD><TD>Set top byte to 0x94 (MSPEC).</TD><TD>m:0</TD><TD>0x9400000000000000</TD></TR>
|
|
<TR><TD>u:</TD><TD>Set top byte to 0x96 (UNCAC).</TD><TD>u:0</TD><TD>0x9600000000000000</TD></TR>
|
|
<TR><TD>c:</TD><TD>Set top byte to 0xa8 (CAC).</TD><TD>c:0</TD><TD>0xa800000000000000</TD></TR>
|
|
<TR><TD>p:</TD><TD>Set top byte to 0x00 (PHYS).</TD><TD>p:c:0x100</TD><TD>0x100</TD></TR>
|
|
<TR><TD>s:</TD><TD>Sign extend word.</TD><TD>s:0xbfc00000</TD><TD>0xffffffffbfc00000</TD></TR>
|
|
<TR><TD>n:#</TD><TD>Add NASID, where # is NASID.<BR>
|
|
May only be used if CrayLink routing is configured.</TD><TD>n:2 c:1</TD><TD>0xa800000200000001</TD></TR>
|
|
<TR><TD>w:#</TD><TD>Set top byte to 0x92. Sets bit 24. Adds Widget, where # is widget. If remote,
|
|
adds bit 23.</TD><TD>w:1 0x200<BR>
|
|
n:1 w:1 0x200</TD><TD>0x9200000001000200<BR>
|
|
0x9200000101800200</TD> </TR>
|
|
<TR><TD>b:#</TD><TD>Adds offset for memory bank (# times 512 MB).</TD><TD>n:3 b:5 u:2k</TD><TD>0x96000003a0000800</TD></TR>
|
|
<TR><TD>L:</TD><TD>Converts address to corresponding directory entry LO in HSPEC.</TD><TD>L:0x2100560</TD><TD>0x90000000c08402a0</TD></TR>
|
|
<TR><TD>H:</TD><TD>Converts address to corresponding directory entry HI in HSPEC.</TD><TD>H:u:0x2100560</TD><TD>0x90000000c08402a8</TD></TR>
|
|
<TR><TD>P:#</TD><TD>Converts address to corresponding protection entry, where # is the region.</TD><TD>P:5 0x2100560</TD><TD>0x90000000c0840028</TD></TR>
|
|
<TR><TD>E:</TD><TD>Converts address to corresponding ECC word address.</TD><TD>E:0x2100560</TD><TD>0x9000000080840158</TD></TR>
|
|
</TABLE> </P>
|
|
</CENTER><H3><A NAME="PODHardwareRegisters">Hardware Registers</A></H3>
|
|
<P>The PROM knows the names and bit field assignments for approximately 500
|
|
hardware registers in the CPU, Hub, Router, and Crossbow, so you do not
|
|
need to manually look up and type their addresses (or values in the case
|
|
of CPU registers). Names of registers may appear in arithmetic expressions
|
|
and are replaced with the registers' addresses.</P>
|
|
<P>The names of R10000 Cop0 registers are recognized, and include Cause, Status,
|
|
etc. The names of the R10000 general purpose registers are recognized (v0,
|
|
a1, ta0, gp, r5, etc). General purpose registers may also be referred to
|
|
as $0, $1, $2, etc. Floating point registers may be referenced as $f0, $f1,
|
|
$f2, etc.</P>
|
|
<P>The names of Hub registers are prefixed according to the five sections of
|
|
the Hub with <I>PI_</I>, <I>MD_</I>, <I>II_</I>, <I>NI_</I>, and <I>CORE_</I>.</P>
|
|
<P>The names of Hub NI and Router registers can be used in place of the vector
|
|
address in some vector commands. Router registers are prefixed with <I>RR_</I>. The names of the Crossbow (XBOW) registers are prefixed with <I>XB_</I>.</P>
|
|
<P>Register names are case-insensitive and may be truncated to the extent that
|
|
they are unambiguous. For example:</P>
|
|
<PRE>
|
|
POD Dex IOC3 000 4A> px (md_refresh_control + 8)
|
|
0x9200000001200028
|
|
POD Dex IOC3 000 4A> pr n:1 md_ref
|
|
Register: MD_REFRESH_CONTROL (0x9200000101a00020)
|
|
Value : 0x0000000000000000 (loaded from remote register)
|
|
<63> RW ENABLE 0x1
|
|
<23:12> RW COUNTER 0x2e0
|
|
<11:00> RW CNT_THRESH 0x504
|
|
</PRE>
|
|
<H4><A NAME="HubPIRegs">Hub PI (Processor Interface) Registers</A></H4>
|
|
<P><TT><FONT SIZE="2">PI_BIST_COUNT_TARGET PI_BIST_ENTER_RUN PI_BIST_RDY PI_BIST_READ_DATA PI_BIST_SHIFT_LOAD
|
|
PI_BIST_SHIFT_UNLOAD PI_BIST_WRITE_DATA PI_CALIAS_SIZE PI_CC_MASK PI_CC_PEND_CLR_A
|
|
PI_CC_PEND_CLR_B PI_CC_PEND_SET_A PI_CC_PEND_SET_B PI_CPU_ENABLE_A PI_CPU_ENABLE_B
|
|
PI_CPU_NUM PI_CPU_PRESENT_A PI_CPU_PRESENT_B PI_CPU_PROTECT PI_CRB_SFACTOR
|
|
PI_CRB_TIMEOUT_A PI_CRB_TIMEOUT_B PI_ERR_INT_MASK_A PI_ERR_INT_MASK_B PI_ERR_INT_PEND
|
|
PI_ERR_STACK_ADDR_A PI_ERR_STACK_ADDR_B PI_ERR_STACK_FORMAT PI_ERR_STACK_SIZE
|
|
PI_ERR_STATUS0_A PI_ERR_STATUS0_A_CLEAR PI_ERR_STATUS0_B PI_ERR_STATUS0_B_CLEAR
|
|
PI_ERR_STATUS1_A PI_ERR_STATUS1_A_CLEAR PI_ERR_STATUS1_B PI_ERR_STATUS1_B_CLEAR
|
|
PI_FORCE_BAD_CHECK_BIT_A PI_FORCE_BAD_CHECK_BIT_B PI_GFX_BIAS_A PI_GFX_BIAS_B
|
|
PI_GFX_CREDIT_CNTR_A PI_GFX_CREDIT_CNTR_B PI_GFX_INT_CMP_A PI_GFX_INT_CMP_B
|
|
PI_GFX_INT_CNTR_A PI_GFX_INT_CNTR_B PI_GFX_PAGE_A PI_GFX_PAGE_B PI_INT_MASK0_A
|
|
PI_INT_MASK0_B PI_INT_MASK1_A PI_INT_MASK1_B PI_INT_PEND0 PI_INT_PEND1 PI_INT_PEND_MOD
|
|
PI_IO_PROTECT PI_MAX_CRB_TIMEOUT PI_NACK_CMP PI_NACK_CNT_A PI_NACK_CNT_B
|
|
PI_NMI_A PI_NMI_B PI_PROFILE_COMPARE PI_PROF_INT_EN_A PI_PROF_INT_EN_B PI_PROF_INT_PEND_A
|
|
PI_PROF_INT_PEND_B PI_PROT_OVRRD PI_REGION_PRESENT PI_REPLY_LEVEL PI_RTC_INT_EN_A
|
|
PI_RTC_INT_EN_B PI_RT_COMPARE_A PI_RT_COMPARE_B PI_RT_COUNTER PI_RT_FILTER_CTRL
|
|
PI_RT_INT_PEND_A PI_RT_INT_PEND_B PI_RT_LOCAL_CTRL PI_SOFTRESET PI_SPOOL_CMP_A
|
|
PI_SPOOL_CMP_B PI_SYSAD_ERRCHK_EN PI_UNUSED </FONT></TT></P>
|
|
<H4><A NAME="HubMDRegs">Hub MD (Memory/Directory) Registers</A></H4>
|
|
<P><TT><FONT SIZE="2">MD_DIR_DIMM_INIT MD_DIR_ERROR MD_DIR_ERROR_CLR MD_FANDOP_CAC_STAT MD_HSPEC_PROTECT
|
|
MD_IO_PROTECT MD_IO_PROT_OVRRD MD_LED0 MD_LED1 MD_MEMORY_CONFIG MD_MEM_DIMM_INIT
|
|
MD_MEM_ERROR MD_MEM_ERROR_CLR MD_MIG_CANDIDATE MD_MIG_CANDIDATE_CLR MD_MIG_DIFF_THRESH
|
|
MD_MIG_VALUE_THRESH MD_MISC_ERROR MD_MISC_ERROR_CLR MD_MLAN_CTL MD_MOQ_SIZE
|
|
MD_PERF_CNT0 MD_PERF_CNT1 MD_PERF_CNT2 MD_PERF_CNT3 MD_PERF_CNT4 MD_PERF_CNT5
|
|
MD_PERF_SEL MD_PROTOCOL_ERROR MD_PROTOCOL_ERROR_CLR MD_REFRESH_CONTROL MD_SLOT_ID_USTATUS
|
|
MD_UREG0_0 MD_UREG0_1 MD_UREG0_2 MD_UREG0_3 MD_UREG0_4 MD_UREG0_5 MD_UREG0_6
|
|
MD_UREG0_7 MD_UREG1_0 MD_UREG1_1 MD_UREG1_10 MD_UREG1_11 MD_UREG1_12 MD_UREG1_13
|
|
MD_UREG1_14 MD_UREG1_15 MD_UREG1_2 MD_UREG1_3 MD_UREG1_4 MD_UREG1_5 MD_UREG1_6
|
|
MD_UREG1_7 MD_UREG1_8 MD_UREG1_9 </FONT></TT></P>
|
|
<H4><A NAME="HubIIRegs">Hub II (I/O) Registers</A></H4>
|
|
<P><TT><FONT SIZE="2">II_IBCT0 II_IBCT1 II_IBDA0 II_IBDA1 II_IBIA0 II_IBIA1 II_IBLS0 II_IBLS1
|
|
II_IBNA0 II_IBNA1 II_IBSA0 II_IBSA1 II_ICCR II_ICDR II_ICMR II_ICRB0_A II_ICRB0_B
|
|
II_ICRB0_C II_ICRB0_D II_ICRB1_A II_ICRB1_B II_ICRB1_C II_ICRB1_D II_ICRB2_A
|
|
II_ICRB2_B II_ICRB2_C II_ICRB2_D II_ICRB3_A II_ICRB3_B II_ICRB3_C II_ICRB3_D
|
|
II_ICRB4_A II_ICRB4_B II_ICRB4_C II_ICRB4_D II_ICRB5_A II_ICRB5_B II_ICRB5_C
|
|
II_ICRB5_D II_ICRB6_A II_ICRB6_B II_ICRB6_C II_ICRB6_D II_ICRB7_A II_ICRB7_B
|
|
II_ICRB7_C II_ICRB7_D II_ICRB8_A II_ICRB8_B II_ICRB8_C II_ICRB8_D II_ICRB9_A
|
|
II_ICRB9_B II_ICRB9_C II_ICRB9_D II_ICRBA_A II_ICRBA_B II_ICRBA_C II_ICRBA_D
|
|
II_ICRBB_A II_ICRBB_B II_ICRBB_C II_ICRBB_D II_ICRBC_A II_ICRBC_B II_ICRBC_C
|
|
II_ICRBC_D II_ICRBD_A II_ICRBD_B II_ICRBD_C II_ICRBD_D II_ICRBE_A II_ICRBE_B
|
|
II_ICRBE_C II_ICRBE_D II_ICTO II_ICTP II_IECLR II_IFDR II_IGFX0 II_IGFX1
|
|
II_IIAP II_IIDEM II_IIDSR II_IIWA II_ILAPO II_ILAPR II_ILCSR II_ILLR II_IMEM
|
|
II_IOWA II_IPCA II_IPCR II_IPDR II_IPPR II_IPRB0 II_IPRB8 II_IPRB9 II_IPRBA
|
|
II_IPRBB II_IPRBC II_IPRBD II_IPRBE II_IPRBF II_IPRTE II_IPRTE0 II_IPRTE1
|
|
II_IPRTE2 II_IPRTE3 II_IPRTE4 II_IPRTE5 II_IPRTE6 II_IPRTE7 II_IPTP0 II_IPTP1
|
|
II_ITTE1 II_ITTE2 II_ITTE3 II_ITTE4 II_ITTE5 II_ITTE6 II_ITTE7 II_IXCC II_IXTT
|
|
II_NOT_DONE II_WCR II_WID II_WSTAT </FONT></TT></P>
|
|
<H4><A NAME="HubNIRegs">Hub NI (Network Interface) Registers</A></H4>
|
|
<P><TT><FONT SIZE="2">NI_AGE_CPU0_MEMORY NI_AGE_CPU0_PIO NI_AGE_CPU1_MEMORY NI_AGE_CPU1_PIO NI_AGE_GBR_MEMORY
|
|
NI_AGE_GBR_PIO NI_AGE_IO_MEMORY NI_AGE_IO_PIO NI_DIAG_PARMS NI_ERROR_CLEAR
|
|
NI_GLOBAL_PARMS NI_IO_PROTECT NI_LOCAL_TABLE<00> NI_META_TABLE<00> NI_PORT_ERROR
|
|
NI_PORT_PARMS NI_PORT_RESET NI_PROTECTION_CONFIG NI_PROT_OVRRD NI_RETURN_VECTOR
|
|
NI_SCRATCH_REG0 NI_SCRATCH_REG1 NI_STATUS_REV_ID NI_VECTOR NI_VECTOR_CLEAR
|
|
NI_VECTOR_DATA NI_VECTOR_PARMS NI_VECTOR_READ_DATA NI_VECTOR_STATUS </FONT></TT></P>
|
|
<H4><A NAME="HubCoreRegs">Hub CORE (Internal crossbar control) Registers</A></H4>
|
|
<P><TT><FONT SIZE="2">CORE_CACR CORE_CDBGSEL CORE_CFDR CORE_CMDAB CORE_CNDAB CORE_CRPQD CORE_CRQQD </FONT></TT></P>
|
|
<H4><A NAME="CrossbowRegs">Crossbow Registers (midplane)</A></H4>
|
|
<P><TT><FONT SIZE="2">XB_ARB_RELOAD XB_CTRL XB_ERR_CMDWORD XB_ERR_LOWER XB_ERR_UPPER XB_ID XB_INT_LOWER
|
|
XB_INT_UPPER XB_LINK_ARB_LOWER_8 XB_LINK_ARB_LOWER_9 XB_LINK_ARB_LOWER_A
|
|
XB_LINK_ARB_LOWER_B XB_LINK_ARB_LOWER_C XB_LINK_ARB_LOWER_D XB_LINK_ARB_LOWER_E
|
|
XB_LINK_ARB_LOWER_F XB_LINK_ARB_UPPER_8 XB_LINK_ARB_UPPER_9 XB_LINK_ARB_UPPER_A
|
|
XB_LINK_ARB_UPPER_B XB_LINK_ARB_UPPER_C XB_LINK_ARB_UPPER_D XB_LINK_ARB_UPPER_E
|
|
XB_LINK_ARB_UPPER_F XB_LINK_AUX_STAT_8 XB_LINK_AUX_STAT_9 XB_LINK_AUX_STAT_A
|
|
XB_LINK_AUX_STAT_B XB_LINK_AUX_STAT_C XB_LINK_AUX_STAT_D XB_LINK_AUX_STAT_E
|
|
XB_LINK_AUX_STAT_F XB_LINK_CTRL_8 XB_LINK_CTRL_9 XB_LINK_CTRL_A XB_LINK_CTRL_B
|
|
XB_LINK_CTRL_C XB_LINK_CTRL_D XB_LINK_CTRL_E XB_LINK_CTRL_F XB_LINK_IBUF_FLUSH_8
|
|
XB_LINK_IBUF_FLUSH_9 XB_LINK_IBUF_FLUSH_A XB_LINK_IBUF_FLUSH_B XB_LINK_IBUF_FLUSH_C
|
|
XB_LINK_IBUF_FLUSH_D XB_LINK_IBUF_FLUSH_E XB_LINK_IBUF_FLUSH_F XB_LINK_RESET_8
|
|
XB_LINK_RESET_9 XB_LINK_RESET_A XB_LINK_RESET_B XB_LINK_RESET_C XB_LINK_RESET_D
|
|
XB_LINK_RESET_E XB_LINK_RESET_F XB_LINK_STAT_8 XB_LINK_STAT_9 XB_LINK_STAT_A
|
|
XB_LINK_STAT_B XB_LINK_STAT_C XB_LINK_STAT_CLR_8 XB_LINK_STAT_CLR_9 XB_LINK_STAT_CLR_A
|
|
XB_LINK_STAT_CLR_B XB_LINK_STAT_CLR_C XB_LINK_STAT_CLR_D XB_LINK_STAT_CLR_E
|
|
XB_LINK_STAT_CLR_F XB_LINK_STAT_D XB_LINK_STAT_E XB_LINK_STAT_F XB_LLP_CTRL
|
|
XB_NIC XB_PERF_CTR_A XB_PERF_CTR_B XB_PKT_TO XB_STAT XB_STAT_CLR </FONT></TT></P>
|
|
<H4><A NAME="RouterRegs">Router Registers</A></H4>
|
|
<P><TT><FONT SIZE="2">RR_BIST_COUNT_TARGET RR_BIST_DATA RR_BIST_ENTER_RUN RR_BIST_READY RR_BIST_SHIFT_LOAD
|
|
RR_BIST_SHIFT_UNLOAD RR_DIAG_PARMS RR_ERROR_CLEAR1 RR_ERROR_CLEAR2 RR_ERROR_CLEAR3
|
|
RR_ERROR_CLEAR4 RR_ERROR_CLEAR5 RR_ERROR_CLEAR6 RR_GLOBAL_PARMS RR_HISTOGRAM1
|
|
RR_HISTOGRAM2 RR_HISTOGRAM3 RR_HISTOGRAM4 RR_HISTOGRAM5 RR_HISTOGRAM6 RR_LOCAL_TABLE<00>
|
|
RR_META_TABLE<00> RR_NIC_ULAN RR_PORT_PARMS1 RR_PORT_PARMS2 RR_PORT_PARMS3
|
|
RR_PORT_PARMS4 RR_PORT_PARMS5 RR_PORT_PARMS6 RR_PORT_RESET RR_PROTECTION_CONFIG
|
|
RR_RESET_MASK1 RR_RESET_MASK2 RR_RESET_MASK3 RR_RESET_MASK4 RR_RESET_MASK5
|
|
RR_RESET_MASK6 RR_SCRATCH_REG0 RR_SCRATCH_REG1 RR_STATUS_ERROR1 RR_STATUS_ERROR2
|
|
RR_STATUS_ERROR3 RR_STATUS_ERROR4 RR_STATUS_ERROR5 RR_STATUS_ERROR6 RR_STATUS_REV_ID </FONT></TT></P>
|
|
<H4><A NAME="Cop0Regs">R10000 Coprocessor 0 Registers</A></H4>
|
|
<P><TT><FONT SIZE="2">C0_23 C0_24 C0_7 C0_BADVADDR C0_BRDIAG C0_CACHEERR C0_CAUSE C0_COMPARE C0_CONFIG
|
|
C0_CONTEXT C0_COUNT C0_ECC C0_ENTRYHI C0_ENTRYLO0 C0_ENTRYLO1 C0_EPC C0_ERROREPC
|
|
C0_FRAMEMASK C0_INDEX C0_LLADDR C0_PAGEMASK C0_PERFCOUNT C0_PRID C0_RANDOM
|
|
C0_STATUS C0_TAGHI C0_TAGLO C0_WATCHHI C0_WATCHLO C0_WIRED C0_XCONTEXT </FONT></TT></P>
|
|
<H3><A NAME="PODSymbols">Symbols</A></H3>
|
|
<P>The PROM knows the names of symbols within the PROM (and within the Kernel
|
|
if one is loaded; see the <B><A HREF="#_wmh4_841959027">kern_sym</B></A> command). Symbols may appear in arithmetic expressions and are replaced
|
|
with their addresses. For example,</P>
|
|
<PRE>
|
|
POD Dex IOC3 000 4A> px main
|
|
0xc00000001fc07784
|
|
POD Dex IOC3 000 4A> dis (main+0x1c) 4
|
|
[main+0x001c, 0x1fc077a0]: 0001083c dsll32 at,at,#0
|
|
[main+0x0020, 0x1fc077a4]: 64420000 daddiu v0,v0,0x0
|
|
[main+0x0024, 0x1fc077a8]: 0039082c dadd at,at,t9
|
|
[main+0x0028, 0x1fc077ac]: 0002103c dsll32 v0,v0,#0
|
|
POD Dex IOC3 000 4A> px "memcpy"
|
|
0xc00000001fc1db14
|
|
</PRE>
|
|
<P>Note that certain symbols, such as <B>memcpy</B>, must be quoted because they are reserved words in the PROM (POD command).</P>
|
|
<HR>
|
|
<H2><A NAME="PODModeCommands">POD Mode Commands</A></H2>
|
|
<H3><A NAME="CommandConventions">Conventions</A></H3>
|
|
<P>Data types shown in all caps are not to be input literally, but indicate
|
|
the type of input expected. Items shown in square brackets ([]) are optional.
|
|
Some of the types are:</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>Data Types</CAPTION>
|
|
<TR><TH ALIGN=LEFT>Type</TH><TH ALIGN=LEFT>Represents</TH></TR>
|
|
<TR><TD>EXPR</TD><TD>Arithmetic expression</TD></TR>
|
|
<TR><TD>GPRNAME</TD><TD>GPR register name (symbolic or $num)</TD></TR>
|
|
<TR><TD>REGNO</TD><TD>Register number, from 0 to 31</TD></TR>
|
|
<TR><TD>BITNO</TD><TD>Bit number, from 0 to 63</TD></TR>
|
|
<TR><TD>ADDR</TD><TD>Address, or arithmetic expression enclosed in parenthesis</TD></TR>
|
|
<TR><TD>START</TD><TD>Start address</TD></TR>
|
|
<TR><TD>LEN</TD><TD>Length in bytes</TD></TR>
|
|
<TR><TD>VAL</TD><TD>Number, or arithmetic expression enclosed in parenthesis</TD></TR>
|
|
<TR><TD>COUNT</TD><TD>Count or length</TD></TR>
|
|
<TR><TD>CMD</TD><TD>Command</TD></TR>
|
|
<TR><TD>NODE</TD><TD><A HREF="#NodeIDsNASIDs">Node ID</A> (also called NASID: Numa Address Space Identifier)</TD></TR>
|
|
<TR><TD>SLICE</TD><TD>CPU, either A or B.</TD></TR>
|
|
<TR><TD>VEC</TD><TD><A HREF="#VectorAddressing">CrayLink Vector</A> path (e.g. 0x15)</TD></TR>
|
|
<TR><TD>VADDR</TD><TD>CrayLink Vector address (offset or NI or RR register name)</TD></TR>
|
|
</TABLE></P>
|
|
</CENTER><P>Parts of a command enclosed in square brackets ([]) are optional.</P>
|
|
<P>Multiple possibilities are separated by vertical bars (|).</P>
|
|
<H3><A NAME="CommandSummary">Command Summary</A></H3>
|
|
<P>The <B>help</B> or <B>?</B> command, used by itself, prints a command summary similar to that shown
|
|
in the table below. The <B>help</B> or <B>?</B> command may also take one command name argument to print the summary for
|
|
a specific command.</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>Command Summary</CAPTION>
|
|
<TR><TH ALIGN=LEFT>Command</TH><TH ALIGN=LEFT>Purpose</TH><TH ALIGN=LEFT>Syntax</TH></TR>
|
|
<TR><TD>px</TD><TD>Print hex</TD><TD>px EXPR</TD></TR>
|
|
<TR><TD>pd</TD><TD>Print decimal</TD><TD>pd EXPR</TD></TR>
|
|
<TR><TD>po</TD><TD>Print octal</TD><TD>po EXPR</TD></TR>
|
|
<TR><TD>pb</TD><TD>Print binary</TD><TD>pb EXPR</TD></TR>
|
|
<TR><TD>pr</TD><TD>Print register</TD><TD>pr [GPRNAME [VAL]]</TD></TR>
|
|
<TR><TD>pf</TD><TD>Print fpreg</TD><TD>pf [REGNO]</TD></TR>
|
|
<TR><TD>pa</TD><TD>Print address</TD><TD>pa ADDR [BITNO]</TD></TR>
|
|
<TR><TD>lb</TD><TD>Load byte</TD><TD>lb ADDR [COUNT]</TD></TR>
|
|
<TR><TD>lh</TD><TD>Load half-word</TD><TD>lh ADDR [COUNT]</TD></TR>
|
|
<TR><TD>lw</TD><TD>Load word</TD><TD>lw ADDR [COUNT]</TD></TR>
|
|
<TR><TD>ld</TD><TD>Load double-word</TD><TD>ld ADDR [COUNT]</TD></TR>
|
|
<TR><TD>sb</TD><TD>Store byte</TD><TD>sb ADDR [VAL [COUNT]]</TD></TR>
|
|
<TR><TD>sh</TD><TD>Store half-word</TD><TD>sh ADDR [VAL [COUNT]]</TD></TR>
|
|
<TR><TD>sw</TD><TD>Store word</TD><TD>sw ADDR [VAL [COUNT]]</TD></TR>
|
|
<TR><TD>sd</TD><TD>Store double-word</TD><TD>sd ADDR [VAL [COUNT]]</TD></TR>
|
|
<TR><TD>sdv</TD><TD>sd with verify</TD><TD>sdv ADDR COUNT</TD></TR>
|
|
<TR><TD>sr</TD><TD>Store register</TD><TD>sr REG VAL</TD></TR>
|
|
<TR><TD>sf</TD><TD>Store fpreg</TD><TD>sf REGNO VAL</TD></TR>
|
|
<TR><TD>vr</TD><TD>Vector read</TD><TD>vr VEC VADDR</TD></TR>
|
|
<TR><TD>vw</TD><TD>Vector write</TD><TD>vw VEC VADDR VAL</TD></TR>
|
|
<TR><TD>vx</TD><TD>Vector exchange</TD><TD>vx VEC VADDR VAL</TD></TR>
|
|
<TR><TD>repeat</TD><TD>Repeat count</TD><TD>repeat COUNT CMD</TD></TR>
|
|
<TR><TD>loop</TD><TD>Repeat forever</TD><TD>loop CMD</TD></TR>
|
|
<TR><TD>while</TD><TD>While loop</TD><TD>while (EXPR) CMD</TD></TR>
|
|
<TR><TD>for</TD><TD>For loop</TD><TD>for (CMD;EXPR;CMD) CMD</TD></TR>
|
|
<TR><TD>if</TD><TD>If statement</TD><TD>if (EXPR) CMD</TD></TR>
|
|
<TR><TD>delay</TD><TD>Delay</TD><TD>delay MICROSEC</TD></TR>
|
|
<TR><TD>sleep</TD><TD>Sleep</TD><TD>sleep SEC</TD></TR>
|
|
<TR><TD>time</TD><TD>Benchmark timing</TD><TD>time CMD</TD></TR>
|
|
<TR><TD>echo</TD><TD>Echo a string</TD><TD>echo "STRING"</TD></TR>
|
|
<TR><TD>jump</TD><TD>Inv. cache & jump</TD><TD>jump ADDR [A0 [A1]]</TD></TR>
|
|
<TR><TD>call</TD><TD>Call subroutine</TD><TD>call ADDR [A0 [A1]]</TD></TR>
|
|
<TR><TD>reset</TD><TD>Reset the system</TD><TD>reset</TD></TR>
|
|
<TR><TD>softreset</TD><TD>Softreset a node</TD><TD>softreset n:NODE</TD></TR>
|
|
<TR><TD>nmi</TD><TD>Send NMI to node</TD><TD>nmi n:NODE [a|b]</TD></TR>
|
|
<TR><TD>help</TD><TD>Display help</TD><TD>help [CMDNAME]</TD></TR>
|
|
<TR><TD>inval</TD><TD>Inv. cache(s)</TD><TD>inval [i][d][s]</TD></TR>
|
|
<TR><TD>flush</TD><TD>Flush+inv caches</TD><TD>flush</TD></TR>
|
|
<TR><TD>tlbc</TD><TD>Clear TLB</TD><TD>tlbc [INDEX]</TD></TR>
|
|
<TR><TD>tlbr</TD><TD>Read TLB</TD><TD>tlbr [INDEX]</TD></TR>
|
|
<TR><TD>dtag</TD><TD>Dump dcache tag</TD><TD>dtag line</TD></TR>
|
|
<TR><TD>itag</TD><TD>Dump icache tag</TD><TD>dtag line</TD></TR>
|
|
<TR><TD>stag</TD><TD>Dump scache tag</TD><TD>stag line</TD></TR>
|
|
<TR><TD>dline</TD><TD>Dump dcache line</TD><TD>dline line</TD></TR>
|
|
<TR><TD>iline</TD><TD>Dump icache line</TD><TD>iline line</TD></TR>
|
|
<TR><TD>sline</TD><TD>Dump scache line</TD><TD>sline line</TD></TR>
|
|
<TR><TD>adtag</TD><TD>Dump dcache tag</TD><TD>adtag line</TD></TR>
|
|
<TR><TD>aitag</TD><TD>Dump icache tag</TD><TD>aitag line</TD></TR>
|
|
<TR><TD>astag</TD><TD>Dump scache tag</TD><TD>astag line</TD></TR>
|
|
<TR><TD>adline</TD><TD>Dump dcache line</TD><TD>adline line</TD></TR>
|
|
<TR><TD>ailine</TD><TD>Dump icache line</TD><TD>ailine line</TD></TR>
|
|
<TR><TD>asline</TD><TD>Dump scache line</TD><TD>asline line</TD></TR>
|
|
<TR><TD>go</TD><TD>Set memory mode</TD><TD>go dex|unc|cac</TD></TR>
|
|
<TR><TD>bist</TD><TD>Self-test Hub</TD><TD>bist le|ae|lr|ar [n:NODE]</TD></TR>
|
|
<TR><TD>rbist</TD><TD>Self-test Router</TD><TD>rbist le|ae|lr|ar VEC</TD></TR>
|
|
<TR><TD>disable</TD><TD>Disable unit</TD><TD>disable n:NODE [SLICE]</TD></TR>
|
|
<TR><TD>enable</TD><TD>Enable unit</TD><TD>enable n:NODE [SLICE]</TD></TR>
|
|
<TR><TD>tdisable</TD><TD>Temp. disable</TD><TD>tdisable n:NODE [SLICE]</TD></TR>
|
|
<TR><TD>dirinit</TD><TD>Dir/prot init</TD><TD>dirinit START LEN</TD></TR>
|
|
<TR><TD>meminit</TD><TD>Memory clear</TD><TD>meminit START LEN</TD></TR>
|
|
<TR><TD>dirtest</TD><TD>Dir. test/init</TD><TD>dirtest START LEN</TD></TR>
|
|
<TR><TD>memtest</TD><TD>Memory test/init</TD><TD>memtest START LEN</TD></TR>
|
|
<TR><TD>santest</TD><TD>Mem. sanity test</TD><TD>santest ADDR</TD></TR>
|
|
<TR><TD>slave</TD><TD>Goto slave mode</TD><TD>slave</TD></TR>
|
|
<TR><TD>segs</TD><TD>List segments</TD><TD>segs [FLAG]</TD></TR>
|
|
<TR><TD>exec</TD><TD>Load/exec segment</TD><TD>exec [SEGNAME [FLAG]]</TD></TR>
|
|
<TR><TD>why</TD><TD>Why are we here?</TD><TD>why</TD></TR>
|
|
<TR><TD>fru</TD><TD>Run FRU Analyzer</TD><TD>fru [1 | 2]</TD></TR>
|
|
<TR><TD>clear</TD><TD>Clear errors</TD><TD>clear</TD></TR>
|
|
<TR><TD>error</TD><TD>Display errors</TD><TD>error</TD></TR>
|
|
<TR><TD>ioc3</TD><TD>Use IOC3 UART</TD><TD>ioc3</TD></TR>
|
|
<TR><TD>junk</TD><TD>Use JunkBus UART</TD><TD>junk</TD></TR>
|
|
<TR><TD>elsc</TD><TD>Use MSC (SysCtlr UART)</TD><TD>elsc</TD></TR>
|
|
<TR><TD>talk</TD><TD>Use Net UART</TD><TD>talk [n:NODE a|b]</TD></TR>
|
|
<TR><TD>nm</TD><TD>Look up PROM addr</TD><TD>nm ADDR</TD></TR>
|
|
<TR><TD>disc</TD><TD>Discover CrayLink Interconnect</TD><TD>disc</TD></TR>
|
|
<TR><TD>pcfg</TD><TD>Dump pcfg struct</TD><TD>pcfg [n:NODE] [v]</TD></TR>
|
|
<TR><TD>node</TD><TD>Get/set node ID</TD><TD>node [[VEC] ID]</TD></TR>
|
|
<TR><TD>crb</TD><TD>Dump II CRBs</TD><TD>crb [n:NODE]</TD></TR>
|
|
<TR><TD>crbx</TD><TD>137-col wide crb</TD><TD>crbx [n:NODE]</TD></TR>
|
|
<TR><TD>route</TD><TD>Set up route</TD><TD>route [VEC NODE]</TD></TR>
|
|
<TR><TD>flash</TD><TD>Prgm remote PROM</TD><TD>flash NODE [...]</TD></TR>
|
|
<TR><TD>nic</TD><TD>Read Hub NIC</TD><TD>nic [n:NODE]</TD></TR>
|
|
<TR><TD>rnic</TD><TD>Read Router NIC</TD><TD>rnic [VEC]</TD></TR>
|
|
<TR><TD>sc</TD><TD>System ctlr cmd</TD><TD>sc ["STRING"]</TD></TR>
|
|
<TR><TD>scw</TD><TD>Wr sysctlr nvram</TD><TD>scw ADDR [VAL [COUNT]]</TD></TR>
|
|
<TR><TD>scr</TD><TD>Rd sysctlr nvram</TD><TD>scr ADDR [COUNT]</TD></TR>
|
|
<TR><TD>dips</TD><TD>Rd hardware debug switches</TD><TD>dips</TD></TR>
|
|
<TR><TD>dbg</TD><TD>Set/Rd debug switches</TD><TD>dbg [VIRT_VAL PHYS_VAL]</TD></TR>
|
|
<TR><TD>pas</TD><TD>Set/Rd MSC password</TD><TD>pas ["PASW"]</TD></TR>
|
|
<TR><TD>module</TD><TD>Set/Rd module number</TD><TD>module [VAL]</TD></TR>
|
|
<TR><TD>modnic</TD><TD>Get module NIC</TD><TD>modnic</TD></TR>
|
|
<TR><TD>qual</TD><TD>Quality mode</TD><TD>qual [1|0]</TD></TR>
|
|
<TR><TD>ecc</TD><TD>ECC mode</TD><TD>ecc [1|0]</TD></TR>
|
|
<TR><TD>cpu</TD><TD>Switch to cpu</TD><TD>cpu [[n:NODE] a|b]</TD></TR>
|
|
<TR><TD>dis</TD><TD>Disassemble</TD><TD>dis ADDR [COUNT]</TD></TR>
|
|
<TR><TD>im</TD><TD>Set R10k int mask</TD><TD>im [BYTE]</TD></TR>
|
|
<TR><TD>dumpspool</TD><TD>Dump PI err spool</TD><TD>dumpspool [n:NODE SLICE]</TD></TR>
|
|
<TR><TD>error_dump</TD><TD>Dump Hub error info</TD><TD>error_dump</TD></TR>
|
|
<TR><TD>edump_bri</TD><TD>Dump Bridge error info</TD><TD>edump_bri [n:NODE]</TD></TR>
|
|
<TR><TD>maxerr</TD><TD>Test error limit</TD><TD>maxerr COUNT</TD></TR>
|
|
<TR><TD>rtab</TD><TD>Dump route table</TD><TD>rtab [VEC]</TD></TR>
|
|
<TR><TD>rstat</TD><TD>Dmp/clr rtr stat</TD><TD>rstat VEC</TD></TR>
|
|
<TR><TD>version</TD><TD>Show PROM version</TD><TD>version</TD></TR>
|
|
<TR><TD>memset</TD><TD>Fill mem w/ byte</TD><TD>memset DST BYTE LEN</TD></TR>
|
|
<TR><TD>memcpy</TD><TD>Copy memory bytes</TD><TD>memcpy DST SRC LEN</TD></TR>
|
|
<TR><TD>memcmp</TD><TD>Cmp memory bytes</TD><TD>memcmp DST SRC LEN</TD></TR>
|
|
<TR><TD>memsum</TD><TD>Add memory bytes</TD><TD>memsum SRC LEN</TD></TR>
|
|
<TR><TD>scandir</TD><TD>Scan dir states</TD><TD>scandir ADDR [LEN]</TD></TR>
|
|
<TR><TD>dirstate</TD><TD>Directory state</TD><TD>dirstate [STATE [BASE [LEN]]]</TD></TR>
|
|
<TR><TD>altregs</TD><TD>Use alt. regs</TD><TD>altregs NUM</TD></TR>
|
|
<TR><TD>traplog</TD><TD>Trap log</TD><TD>traplog ADDR</TD></TR>
|
|
<TR><TD>kern_sym</TD><TD>Use kernel symtab</TD><TD>kern_sym</TD></TR>
|
|
<TR><TD>kdebug</TD><TD>Enable kernel debug functions</TD><TD>kdebug [STACKADDR]</TD></TR>
|
|
<TR><TD>initlog</TD><TD>Init. PROM log</TD><TD>initlog [n:NODE]</TD></TR>
|
|
<TR><TD>initalllogs</TD><TD>Init. all PROM logs</TD><TD>initalllogs</TD></TR>
|
|
<TR><TD>setenv</TD><TD>Set variable</TD><TD>setenv [n:NODE] VAR ["STRING"]</TD></TR>
|
|
<TR><TD>unsetenv</TD><TD>Remove variable</TD><TD>unsetenv [n:NODE] VAR</TD></TR>
|
|
<TR><TD>printenv</TD><TD>Print variables</TD><TD>printenv [n:NODE] [VAR]</TD></TR>
|
|
<TR><TD>log</TD><TD>Print PROM log entries</TD><TD>log [n:NODE] [SKIP [COUNT]]</TD></TR>
|
|
<TR><TD>rlog</TD><TD>Print PROM log entries in reverse</TD><TD>rlog [n:NODE] [SKIP [COUNT]]</TD></TR>
|
|
<TR><TD>setpart</TD><TD>Set up partition</TD><TD>setpart RTR_LIST</TD></TR>
|
|
<TR><TD>hubsde</TD><TD>Send Hub data error</TD><TD>hubsde</TD></TR>
|
|
<TR><TD>rtrsde</TD><TD>Send Router data error</TD><TD>rtrsde</TD></TR>
|
|
<TR><TD>chklink</TD><TD>Check local link</TD><TD>chklink</TD></TR>
|
|
<TR><TD>dgxbow</TD><TD>Run Crossbow diagnostic</TD><TD>dgxbow [m<n|h|m> [n<NODE>]</TD></TR>
|
|
<TR><TD>dgbrdg</TD><TD>Run Bridge diagnostic</TD><TD>dgbrdg [m<n|h|m>] [n<NODE>] [s<SLOT>]</TD></TR>
|
|
<TR><TD>dgconf</TD><TD>Run BaseIO configuration space diagnostic</TD><TD>dgconf [m<n|h|m>] [n<NODE>] [s<SLOT>]</TD></TR>
|
|
<TR><TD>dgpci</TD><TD>Run PCI bus diagnostic</TD><TD>dgpci [m<n|h|m>] [n<NODE>] [s<SLOT>] [p<PCI#>]</TD></TR>
|
|
<TR><TD>dgspio</TD><TD>Run serial PIO diagnostic</TD><TD>dgspio [m<n|h|m|x>] [n<NODE>] [s<SLOT>] [p<PCI#]</TD></TR>
|
|
<TR><TD>dgsdma</TD><TD>Run serial DMA diagnostic</TD><TD>dgsdma [m<n|h|m|x>] [n<NODE>] [s<SLOT>] [p<PCI#]</TD></TR>
|
|
</TABLE></P>
|
|
</CENTER><H3><A NAME="CommandDescriptions">Command Descriptions</A></H3>
|
|
<H4>Evaluate Expressions</H4>
|
|
<UL>
|
|
<LI>Print Expression (Calculator)
|
|
<P>px EXPR<BR>
|
|
pd EXPR<BR>
|
|
po EXPR<BR>
|
|
pb EXPR</P>
|
|
<P>Prints the value of an arithmetic expression in hexadecimal, decimal, octal,
|
|
or binary.</P>
|
|
<PRE>
|
|
Example 1: px n:1 md_memory_config
|
|
Example 2: pd 0x3ea
|
|
Example 3: pd (0x12000 + 768) / 4
|
|
</PRE>
|
|
<LI>Print Address
|
|
<P>pa ADDR [BITNO]</P>
|
|
<P>Decodes an individual memory address and bit to print the name of the physical
|
|
DIMM slot where the bit resides and the data line number of the bit. If
|
|
only an address is specified, bit 0 is assumed. This works for both regular
|
|
memory addresses and back door directory (HSPEC) addresses. For example,</P>
|
|
<PRE>
|
|
POD Dex IOC3 000 4A> pa 0x40000 21
|
|
Memory address 0x0000000000040000 bit 21: MMXL0 DIMML line 39
|
|
</PRE>
|
|
<LI>nm ADDR
|
|
<P>Given an address, attempts to look up the function containing the address
|
|
in the PROM symbol table (or Kernel table if using kernel symbols; see <A HREF="#_wmh4_841959027">kern_sym</A>), and if found, displays the function name and offset into the function.</P>
|
|
<PRE>
|
|
Example:
|
|
POD Dex Hub 000 1A> nm 0xc00000001fc07c04
|
|
main+0x488
|
|
</PRE>
|
|
</UL>
|
|
<H4>Display Registers</H4>
|
|
<UL>
|
|
<LI>Print Register
|
|
<P>pr [GPRNAME [VAL | ~]</P>
|
|
<P>Prints the value of R10000 register(s) or a Hub register. Without arguments,
|
|
prints out the R10000 GPRs. With a register name argument, loads a value
|
|
from the register and decodes it into bit fields. With a register name and
|
|
value, decodes the specified value into bit fields. With a register name
|
|
and tilde (~), decodes the register's reset default value into bit fields.
|
|
If a value or tilde (~) is specified, the command may also be used with
|
|
router registers (<I>RR_*</I>).</P>
|
|
<P>A register name may be truncated to its smallest unambiguous form. If the
|
|
truncated name is ambiguous, all of the possible choices are listed.</P>
|
|
<PRE>
|
|
Example 1: pr
|
|
Prints all 32 R10000 GPRs with their number and symbolic names
|
|
Example 2: pr 2; pr $2; pr r2; pr r02; pr v0
|
|
All of these print the value of GPR 2
|
|
Example 3: pr cause
|
|
Prints the value of the R10000 COP0 CAUSE register
|
|
Example 4: pr pi
|
|
This register name is ambiguous and causes all of the
|
|
Hub PI registers to be printed.
|
|
Example 5: pr md_memory_config
|
|
Prints the address, contents, and individually decoded
|
|
bit fields for the specified Hub register
|
|
Example 6: pr n:1 md_memory_config
|
|
Prints the address, contents, and individually decoded
|
|
bit fields for the specified Hub register loaded
|
|
from the remote node with NASID 1.
|
|
Example 7: pr md_memory_config 0x001010004fffffff
|
|
Decodes the specified constant into individual bit
|
|
fields for the specified Hub register
|
|
Example 8: pr md_memory_config ~
|
|
Decodes the reset default value of the specified Hub
|
|
register into individual bit fields for the register.
|
|
Example 9: pr rr_status_rev_id ~
|
|
Decodes the reset default value of the specified Router
|
|
register into individual bit fields for the register.
|
|
</PRE>
|
|
<LI>Print Floating Point Register
|
|
<P>pf [REGNO]</P>
|
|
<P>Prints the value of R10000 COP1 (floating point) register(s)</P>
|
|
<PRE>
|
|
Example 1: pf
|
|
Prints all 32 R10000 FPRs
|
|
Example 2: pf 3
|
|
Prints $f3.
|
|
Example 3: px $f3
|
|
Also prints $f3 (floating point register names can be
|
|
used in expressions).
|
|
</PRE>
|
|
</UL>
|
|
<H4>Load From and Store To Memory</H4>
|
|
<UL>
|
|
<LI>lb ADDR [COUNT]<BR>
|
|
lh ADDR [COUNT]<BR>
|
|
lw ADDR [COUNT]<BR>
|
|
ld ADDR [COUNT]
|
|
<P>Loads a byte, half-word, word, or double-word from a specified address,
|
|
and displays the result in hexadecimal. If COUNT is specified, COUNT items
|
|
are loaded and displayed in columns. If the specified address is not properly
|
|
aligned, an exception may result. Note that cached addresses should not
|
|
be accessed while running in Dex mode.</P>
|
|
<LI>la ADDR [COUNT]
|
|
<P>Loads bytes similar to the <B>lb</B> command, except the output is displayed as ASCII characters instead of
|
|
hexadecimal. Bytes outside the range 0x20 (space) through 0x7e (tilde) are
|
|
displayed as octal byte codes. Note that cached addresses should not be
|
|
accessed while running in Dex mode. </P>
|
|
<LI>sb ADDR [VAL [COUNT]]<BR>
|
|
sh ADDR [VAL [COUNT]]<BR>
|
|
sw ADDR [VAL [COUNT]]<BR>
|
|
sd ADDR [VAL [COUNT]]
|
|
<P>Stores a byte(s), half-word(s), word(s), or double-word(s) to a specified
|
|
address. Note that cached addresses should not be accessed while running
|
|
in Dex mode.</P>
|
|
<P>If neither VAL or COUNT is specified, the commands enter editing mode in
|
|
which the current contents of each address is displayed and the user is
|
|
allowed to modify it by typing in a hexadecimal value (without the 0x).
|
|
Entering nothing goes on to the next address without modifying the location.
|
|
Entering a period exits editing mode.</P>
|
|
<P>If VAL is specified, the value is stored at the specified address. If COUNT
|
|
is also specified, the value is stored COUNT times starting at the specified
|
|
address.</P>
|
|
<LI>sdv ADDR COUNT
|
|
<P>Stores a double-word at a specified address, loads it back, and verifies
|
|
the result. If what was read back was not what was written, it prints an
|
|
error message. Note that cached addresses should not be accessed while running
|
|
in Dex mode.</P>
|
|
</UL>
|
|
<H4>Set Registers</H4>
|
|
<UL>
|
|
<LI>Set General Purpose Register
|
|
<P>sr GPRNAME VAL<BR>
|
|
GPRNAME = VAL</P>
|
|
<P>Assigns a R10000 GPR with the requested value. The modification is done
|
|
in the register storage area where the registers are saved in the event
|
|
of an exception or NMI.</P>
|
|
<LI>Set Floating Point Register
|
|
<P>sf REGNO VAL<BR>
|
|
$f REGNO = VAL</P>
|
|
<P>Assigns a R10000 FPR with the requested value. The modification is done
|
|
in the actual R10000 FPRs.</P>
|
|
<LI>Set Coprocessor 0 Register
|
|
<P>COP0REG = VAL</P>
|
|
<P>Assigns the value of a specified R10000 Coprocessor 0 register to a requested
|
|
value. The actual R10000 register is modified, except in the case of the
|
|
following registers, where the value is written into the register storage
|
|
area where the registers are saved in the event of an exception or NMI:
|
|
Status, Cause, EPC, BadVAddr, and ErrorEPC. The names of all the registers
|
|
are:</P>
|
|
<PRE>
|
|
Index, Random, EntryLo0, EntryLo1, Context, PageMask,
|
|
Wired, Cop0_7, BadVAddr, Count, EntryHi, Compare,
|
|
Status, Cause, EPC, PRId, Config, LLAddr, WatchLo,
|
|
WatchHi, XContext, FrameMask, BrDiag, Cop0_23, Cop0_24,
|
|
PerfCount, ECC, CacheErr, TagLo, TagHi, ErrorEPC.
|
|
</PRE>
|
|
</UL>
|
|
<H4>Vector Operation</H4>
|
|
<UL>
|
|
<LI>vr VEC VADDR<BR>
|
|
vw VEC VADDR VAL<BR>
|
|
vx VEC VADDR VAL
|
|
<P>Performs a CrayLink vector read, write, or exchange. VEC is the CrayLink
|
|
vector of the destination Hub or Router (see section Vector Addressing),
|
|
VADDR is the address of which register to access in the Hub or Router, and
|
|
VAL is the value to be written or exchanged.</P>
|
|
<P>VADDR, in addition to being a numeric offset, when talking to a Hub may
|
|
be a symbolic Hub register name from the subset of registers that begin
|
|
with <I>NI_</I>, or when talking to a Router may be a symbolic Router register name from
|
|
the subset of registers that begin with <I>RR_</I>.</P>
|
|
<LI>route [VEC NODE]
|
|
<P>Given a vector route VEC from the local Hub to a remote Hub, and a <A HREF="#NodeIDsNASIDs">Node ID</A> (or NASID) to be assigned to the remote Hub, this command programs a minimum
|
|
subset of the router tables in the local Hub, remote Hub, and all of the
|
|
intervening routers, as well as sets the remote node's NASID. This will
|
|
cause the remote node to crash. However, it renders the entire memory and
|
|
I/O space of the remote node accessible to the local node.</P>
|
|
<PRE>
|
|
Example:
|
|
POD Cac Hub 000 1A> vr 0x53 ni_status_rev_id
|
|
POD Cac Hub 000 1A> route 0x53 1
|
|
POD Cac Hub 000 1A> pr n:1 ni_status_rev_id
|
|
POD Cac Hub 000 1A> ld n:1 u:0 10
|
|
POD Cac Hub 000 1A> flash 1
|
|
</PRE>
|
|
<P>If no vector and node are given, the PROM consults the internal pcfg structure
|
|
(see <B><A HREF="#_wmh4_841959430">disc</B> and <B>pcfg</B> commands</A>), calculates the NASIDs and routing tables, and programs the NASIDs and
|
|
routing tables for all Hubs and Routers in the system, using the same calculations
|
|
that the normal boot sequence uses.</P>
|
|
</UL>
|
|
<H4>Control</H4>
|
|
<UL>
|
|
<LI>repeat COUNT CMD
|
|
<P>Executes any POD command(s) a specified number of times. Repeat loops may
|
|
be nested and may be broken by typing Control-C.</P>
|
|
<PRE>
|
|
Example 1: repeat 20 vr 0 0
|
|
Example 2: repeat 4 { repeat 3 px 3; repeat 2 px 2 }
|
|
</PRE>
|
|
<LI>loop CMD
|
|
<P>Executes any POD command(s) indefinitely or until the loop is broken by
|
|
typing Control-C.</P>
|
|
<PRE>
|
|
Example 1: loop pr pi_rt_count
|
|
Example 2: loop { sd md_led0 0x55; sleep 1; sd md_led0 0xaa; sleep 1 }
|
|
</PRE>
|
|
<LI>while (EXPR) CMD
|
|
<P>Executes a command as long as expression is true.</P>
|
|
<PRE>
|
|
Example: while ((ld md_ureg8 & 0x40) != 0) {}
|
|
</PRE>
|
|
<LI>for (CMD;EXPR;CMD) CMD
|
|
<P>Executes a "for" statement similar to the C "for" statement. The first command
|
|
is executed, then the last command and the second command are executed as
|
|
long as the expression is true.</P>
|
|
<PRE>
|
|
Example: for (v0=0;v0<5;v0=v0+1) {px v0}
|
|
</PRE>
|
|
<LI>if (EXPR) CMD
|
|
<P>Executes the command if the expression is true.</P>
|
|
<PRE>
|
|
Example: loop { if (ld n:1 u:32m) { px 1 }; sleep 1 }
|
|
</PRE>
|
|
<LI>delay MICROSEC
|
|
<P>Pauses for a specified number of microseconds. May not be interrupted by
|
|
Control-C.</P>
|
|
<PRE>
|
|
Example: loop { sd md_led0 v0; v0=v0+1; delay 25000 }
|
|
</PRE>
|
|
<LI>sleep SEC
|
|
<P>Pauses for a specified number of seconds. May not be interrupted by Control-C.</P>
|
|
<LI>time CMD
|
|
<P>Benchmarks a specified command and displays the total execution time.</P>
|
|
<PRE>
|
|
Example: time memtest u:32m 32m; time memtest c:32m 32m
|
|
</PRE>
|
|
<LI>echo "STRING"
|
|
<P>Echos a specified string.</P>
|
|
<LI>jump ADDR [A0 [A1]]
|
|
<P>Loads the real R10000 a0 and a1 registers with values if specified, and
|
|
sets the program counter to the specified address.<BR>
|
|
</P>
|
|
<LI>call ADDR [A0 [A1 [A2 [A3]]]]
|
|
<P>Loads the real R10000 a0, a1, a2, and a3 registers with values if specified,
|
|
does a subroutine call to the specified address, and returns to POD prompt.
|
|
The return value of the subroutine is stored in the register area as v0
|
|
and can be seen using <B>pr v0</B>.</P>
|
|
<PRE>
|
|
Example: call hub_slot_get; pr v0
|
|
</PRE>
|
|
<LI>reset
|
|
<P>Causes the local node to reset. The reset signal propagates over CrayLinks
|
|
to other nodes in the system, causing them to also reset, except the reset
|
|
does not propagate past partition boundaries where the reset signal has
|
|
been explicitly blocked by the operating system in the routers.</P>
|
|
</UL>
|
|
<H4>Non-Maskable Interrupts</H4>
|
|
<UL>
|
|
<LI>nmi NODE [a|b]
|
|
<P>Sends a <A HREF="#DebugNMI">non-maskable interrupt</A> to a specific CPU on a specific node. If the slice is not specified, sends
|
|
an NMI is sent to both CPUs on the node.</P>
|
|
<LI>why
|
|
<P>Displays the current exception and NMI status. If an NMI is issued or an
|
|
exception occurs while the node is executing in the PROM, the node will
|
|
save the exception/NMI status information, including all of the GPRs, program
|
|
counter, some COP0 registers, and the exception vector address, and return
|
|
to a POD prompt in Dex mode.</P>
|
|
<PRE>
|
|
Example:
|
|
|
|
POD Dex Hub 000 1A> ld u:1 # (Misaligned memory address)
|
|
9600000000000001:
|
|
8A: *** General Exception on node 0
|
|
8A: *** EPC: 0xffffffffbfc2a9cc (load+0x48)
|
|
8A: *** Press ENTER to continue.
|
|
POD Dex Hub 000 1A> why
|
|
EPC : 0xffffffffbfc2a394 (load+0x48)
|
|
ERREPC : 0x0000000000000000 (0x0)
|
|
CACERR : 0x0000000000000000
|
|
Status : 0x0000000024407c80
|
|
BadVA : 0x0000000000000001 (0x1)
|
|
RA : 0xffffffffbfc2a500 (exec_load+0x114)
|
|
SP : 0xa800000000103660
|
|
A0 : 0x0000000000000001
|
|
Cause : 0xffffffff80000010 (BDSLOT INT:-------- <Load Addr Err>)
|
|
BusAdr : 0x0000000000000001
|
|
Reason : 242 (Unexpected General Exception.)
|
|
POD mode was called from: 0xc00000001fc01910 (bevPanic+0xe0)
|
|
</PRE>
|
|
<LI>fru [1 | 2]
|
|
<P>Runs the FRU Analyzer, which reviews the current state of the error registers
|
|
(see <B>error_dump</B> command) and attempts to determine which Field Replaceable Unit is the
|
|
culprit. This may be a node card, memory SIMM, processor HIMM, router card,
|
|
etc. If the argument 1 is given, the FRU Analyzer is run locally only. This
|
|
should be used if it is believed the CrayLink network connection is unreliable
|
|
or unconfigured. If the argument 2 is given, the FRU Analyzer takes into
|
|
account the error data for all nodes.</P>
|
|
</UL>
|
|
<H4>Help</H4>
|
|
<UL>
|
|
<LI>help [CMDNAME]<BR>
|
|
? [CMDNAME]
|
|
<P>If no argument is supplied, displays a summary of usage for all POD commands.
|
|
If a command name is given as an argument, displays a summary of usage for
|
|
that command only.</P>
|
|
<LI>version
|
|
<P>Displays version string of the PROM that is running. For example:</P>
|
|
<PRE>
|
|
POD Dex Hub 000 1A> version
|
|
IP27 PROM
|
|
SGI Version 1.4 Bring-up built 05:08:35 PM Jul 25, 1996
|
|
</PRE>
|
|
</UL>
|
|
<H4>Cache</H4>
|
|
<UL>
|
|
<LI>inval [i][d][s]
|
|
<P>Invalidates the instruction, data, and or secondary caches. Any combination
|
|
of the three letters may be supplied. The contents of the caches is not
|
|
written back to memory.</P>
|
|
<LI>flush
|
|
<P>Causes the contents of the primary and secondary data caches to be flushed
|
|
to memory.</P>
|
|
<LI>Cache Line Operations
|
|
<P>dtag line<BR>
|
|
dtag line<BR>
|
|
stag line<BR>
|
|
dline line<BR>
|
|
iline line<BR>
|
|
sline line<BR>
|
|
adtag line<BR>
|
|
aitag line<BR>
|
|
astag line<BR>
|
|
adline line<BR>
|
|
ailine line<BR>
|
|
asline line</P>
|
|
<P>These functions display instruction, data, and secondary cache lines, addresses,
|
|
or tags.</P>
|
|
</UL>
|
|
<H4>TLB</H4>
|
|
<UL>
|
|
<LI>tlbc [INDEX]
|
|
<P>Clear TLB entry, or entire TLB if no index is specified.</P>
|
|
<LI>tlbr [INDEX]
|
|
<P>Read TLB entry, or entire TLB if no index is specified.</P>
|
|
</UL>
|
|
<H4>Operating Mode</H4>
|
|
<UL>
|
|
<LI><A NAME="GoCommand">go dex|unc|cac</A>
|
|
<P><B>go dex</B> flushes the data cache, invalidates all of the caches, initializes the
|
|
primary data cache as a stack and data area, then returns to the POD prompt
|
|
in memoryless (dirty exclusive) mode.</P>
|
|
<P><B>go unc</B> returns to the POD prompt with all POD code, data structures, and stack
|
|
in uncached memory. The area of memory to be used by the PROM is first tested,
|
|
then the contents of the PROM are copied into it and verified before jumping
|
|
to it.</P>
|
|
<P><B>go cac</B> returns to the POD prompt with all POD code, data structures, and stack
|
|
in cached memory. The area of memory to be used by the PROM is first tested,
|
|
then the contents of the PROM are copied into it and verified before jumping
|
|
to it.</P>
|
|
<P>See <A HREF="#PODMode">POD Mode (PROM Command Interpreter)</A> for more information on operating modes.</P>
|
|
</UL>
|
|
<H4>Built-in Self Test (BIST)</H4>
|
|
<UL>
|
|
<LI>bist le|ae|lr|ar [NODE]
|
|
<P>Performs a Hub built-in self test. If a NODE is specified, BIST is run on
|
|
a remote Hub instead of the local Hub. One of four possible arguments must
|
|
be specified:</P>
|
|
<PRE>
|
|
le Logic BIST Execute
|
|
ae Address BIST Execute
|
|
lr Logic BIST Results
|
|
ar Address BIST Results
|
|
</PRE>
|
|
<P>Executing a Hub BIST using the <B>le</B> or <B>ae</B> arguments will cause the Hub to perform the self-test, then automatically
|
|
reset the node since all state in the Hub is randomized. When the node eventually
|
|
returns to the POD prompt, the results can be obtained using the <B>lr</B> or <B>ar</B> arguments.</P>
|
|
<LI>rbist le|ae|lr|ar VEC
|
|
<P>Performs a Router built-in self test on a Router specified by a CrayLink
|
|
vector (see section Vector Addressing). One of four possible arguments must
|
|
be specified:</P>
|
|
<PRE>
|
|
le Logic BIST Execute
|
|
ae Address BIST Execute
|
|
lr Logic BIST Results
|
|
ar Address BIST Results
|
|
</PRE>
|
|
<P>The Router BIST should be executed using the <B>le</B> or <B>ae</B> arguments. Following the test, the Router will resets itself. Then the <B>lr</B> or <B>ar</B> arguments should be used to retrieve the results of the BIST.</P>
|
|
</UL>
|
|
<H4><A NAME="EnableAndDisableHardware">Enable and Disable Hardware</A></H4>
|
|
<UL>
|
|
<LI>disable NODE [SLICE]
|
|
<P>Sets the environment variable DisableA or DisableB in the specified node's <A HREF="#PROMLogOverview">PROM</A> log. If no slice is specified, both DisableA and DisableB are set. Once
|
|
disabled, a CPU will not participate in the boot process and will completely
|
|
prevent itself from making any Hub requests by storing a 1 into its PI_CPU_ENABLE
|
|
register as soon as possible.</P>
|
|
<LI>enable NODE [SLICE]
|
|
<P>Removes the environment variable DisableA or DisableB from the specified
|
|
node's <A HREF="#PROMLogOverview">PROM log</A>. If no slice is specified, both DisableA and DisableB are removed.</P>
|
|
<LI>tdisable NODE [SLICE]
|
|
<P>Temporarily disables a specified CPU until the next system reset. If no
|
|
slice is specified, both slice A and B are temporarily disabled. CPUs are
|
|
disabled by storing 1 into their PI_CPU_ENABLE register, which completely
|
|
prevents them from making any Hub requests. When the node is reset, the
|
|
CPU(s) will be re-enabled.</P>
|
|
</UL>
|
|
<H4><A NAME="_wmh4_841960997">Memory Test</A></H4>
|
|
<UL>
|
|
<LI>dirinit START LEN
|
|
<P>Initializes a range directory memory to the Unowned state. START is an ordinary
|
|
memory address that will be masked for the lower 40 bits and translated
|
|
to the corresponding directory address (see <B>L:</B> modifier), and LEN is the length in bytes of the area to initialize. Both
|
|
START and LEN must be multiples of 4096 (0x1000).</P>
|
|
<LI>meminit START LEN
|
|
<P>Initializes a range of memory to zeroes. START specifies the address, which
|
|
may be cached or uncached, and LEN specifies the length of the region in
|
|
bytes. Both START and LEN must be multiples of 4096 (0x1000).</P>
|
|
<LI>dirtest START LEN
|
|
<P>Tests a range of directory memory. START is an ordinary memory address that
|
|
will be masked for the lower 40 bits and translated to the corresponding
|
|
directory address (see <B>L:</B> modifier), and LEN is the length in bytes of the area to test. Both START
|
|
and LEN must be multiples of 4096 (0x1000).</P>
|
|
<P>See <A HREF="#DebugMemoryTests">Memory Tests</A> for a description of the tests performed. Following the tests, the directory
|
|
memory will be in an invalid state and must be re-initialized via the <B>dirinit</B> command before the corresponding real memory can be used.</P>
|
|
<LI>memtest START LEN
|
|
<P>Tests a range of memory. START specifies the address, which may be cached
|
|
or uncached, and LEN specifies the length of the region in bytes. Both START
|
|
and LEN must be multiples of 4096 (0x1000).</P>
|
|
<P>See <A HREF="#DebugMemoryTests">Memory Tests</A> for a description of the tests performed.</P>
|
|
<LI>santest ADDR
|
|
<P>Performs a sanity test of a memory address. ADDR specifies the address to
|
|
be tested, which must be double-word aligned. The address is checked for
|
|
readability and writability, with full error register monitoring and exception
|
|
catching.</P>
|
|
<P>See <A HREF="#DebugMemoryTests">Memory Tests</A> for a description of the sanity test.</P>
|
|
<LI>maxerr COUNT
|
|
<P>Sets the maximum number of errors that a memory test may print before it
|
|
gives up and goes onto the next phase of the test. The default is 32.</P>
|
|
<LI>qual [1|0]
|
|
<P>Turns the data quality checking features of the R10000 on or off in the
|
|
PI_SYSAD_ERRCHK_EN register. This may be useful during memory testing. See
|
|
section Memory Tests for more information.</P>
|
|
<LI>ecc [1|0]
|
|
<P><B>ecc 1</B> turns the IGNORE_ECC bit off and thereby enables ECC checking. When checking
|
|
is enabled, exceptions will occur when the ECC for directory memory or regular
|
|
memory do not match the data stored in directory memory or regular memory.</P>
|
|
<P><B>ecc 0</B> turns the IGNORE_ECC bit on and thereby disables ECC checking. When ECC
|
|
checking is disabled, exceptions will not occur due to ECC bad being. However,
|
|
the Hub cannot be made to stop error correcting.</P>
|
|
<LI>error
|
|
<P>Checks for any error bits turned on in the Hub MD section, and decodes and
|
|
displays them. You might want to run this whenever the prompt contain the
|
|
string <I>MDerr</I>, indicating there are memory/directory errors pending in the Hub.</P>
|
|
<LI>clear
|
|
<P>Clears any pending error bits in the Hub MD section.</P>
|
|
<LI>im [BYTE]
|
|
<P>Sets the R10000 interrupt mask field in the Status COP0 register. This affects
|
|
whether certain errors cause an interrupt to be taken, especially when running
|
|
memory test.</P>
|
|
</UL>
|
|
<H4>Memory Region</H4>
|
|
<UL>
|
|
<LI>memset DST BYTE LEN
|
|
<P>Fills a range of memory with a byte value. The fill uses double-word stores
|
|
where possible to speed the operation. DST is the start byte address, BYTE
|
|
is the byte value to use, and LEN is the length in bytes.</P>
|
|
<LI>memcpy DST SRC LEN
|
|
<P>Copies a range of memory. The copy uses double-word loads and stores where
|
|
possible to speed the operation. DST is the destination byte address, SRC
|
|
is the source byte address, and LEN is the length in bytes.</P>
|
|
<LI>memcmp DST SRC LEN
|
|
<P>Compares two ranges of memory and prints whether or not they are the same.
|
|
DST and SRC are the byte address of the two ranges, and LEN is the length
|
|
in bytes.</P>
|
|
<LI>memsum SRC LEN
|
|
<P>Adds up the bytes in a range of memory and prints the result. Uses double-word
|
|
loads where possible to speed up the operation. This may be used to compare
|
|
ranges of memory on different machines by comparing their byte sums. SRC
|
|
is the starting byte address, and LEN is the length in bytes.</P>
|
|
</UL>
|
|
<H4>Directory Region</H4>
|
|
<UL>
|
|
<LI>scandir ADDR [LEN]
|
|
<P>Scans a range of memory, showing the directory states of each location.
|
|
To reduce the amount of output, only the start of each region where the
|
|
directory state changes is printed. ADDR is an ordinary cache-line aligned
|
|
memory address that will be masked for the lower 40 bits and translated
|
|
to the corresponding directory address (see <B>L:</B> modifier), and LEN is the length in bytes of the area to test, defaulting
|
|
to one cache line.</P>
|
|
<LI>dirstate [STATE [BASE [LEN]]]
|
|
<P>Scans a range of addresses for a particular directory state.</P>
|
|
</UL>
|
|
<H4>Slave (Launch) Loop</H4>
|
|
<UL>
|
|
<LI>slave
|
|
<P>Causes a CPU to jump to the IP27prom Slave Launch Loop where it waits to
|
|
be assigned a task and awoken by an interrupt sent from another CPU.</P>
|
|
<LI>cpu [[NODE] a|b]
|
|
<P>Launches a specified CPU that is in the slave loop into <A HREF="#PODMode">POD Mode</A>, and puts the launcher into the Slave Launch Loop, thereby exchanging the
|
|
active CPU.</P>
|
|
</UL>
|
|
<H4>IO6prom</H4>
|
|
<UL>
|
|
<LI>segs [FLAG]
|
|
<P>Reads the IO6prom and prints information about the segments it contains,
|
|
their sizes, checksums, etc. If no flag is specified, a default flag of
|
|
1 is used. The possible flags are:</P>
|
|
<PRE>
|
|
0 Use the copy of the IO6prom internal to the IP27prom
|
|
instead of going out to the real IO6prom.
|
|
1 Use the real IO6prom.
|
|
</PRE>
|
|
<LI>exec [SEGNAME [FLAG]]
|
|
<P>Reads the IO6prom and jumps to a specified named segment. If no SEGNAME
|
|
is specified, the default <EM>io6prom</EM> is used. If no flag is specified, a default flag of 1 is used. The possible
|
|
flags are:</P>
|
|
<PRE>
|
|
0 Use the copy of the IO6prom internal to the IP27prom
|
|
instead of going out to the real IO6prom.
|
|
1 Use the real IO6prom.
|
|
2 Load the internal IO6prom, but don't jump to it.
|
|
Displays the entry point address and returns to POD mode.
|
|
3 Load the real IO6prom, but don't jump to it.
|
|
|
|
Example: exec io6prom
|
|
</PRE>
|
|
</UL>
|
|
<H4>Console Selection</H4>
|
|
<UL>
|
|
<LI>ioc3<BR>
|
|
junk<BR>
|
|
elsc<BR>
|
|
<A NAME="TalkCommand">talk</A> [NODE a|b]
|
|
<P>These commands switch the POD prompt to alternate consoles. Before switching,
|
|
they probe to make sure the selected console is accessible. See <A HREF="#PODConsoles">POD Consoles</A> for information on the types of consoles available. Note that <B>elsc</B> refers to the MSC.</P>
|
|
<P>The <B>talk</B> command, used with no arguments, switches over to the virtual <A HREF="Netuart">netuart</A>. With arguments, the <B>talk</B> command attempts to act as a terminal emulator and contact another node
|
|
that is using the virtual <A HREF="Netuart">netuart</A>.</P>
|
|
</UL>
|
|
<H4><A NAME="_wmh4_841959430">CrayLink Interconnect</A></H4>
|
|
<UL>
|
|
<LI>disc
|
|
<P>Runs the CrayLink Interconnect discovery algorithm. This may only be run
|
|
in <A HREF="#GoCommand">Cac mode</A> where memory is initialized. The internal <EM>promcfg</EM> data structure is built. This structure is a connectivity graph of all
|
|
Hubs and Routers in the system. The <B>pcfg</B> command can be used to view the results. See also: <B>route</B> command (below).</P>
|
|
<LI>pcfg [n:NODE] [v]
|
|
<P>Displays the contents of the <EM>promcfg</EM> data structure. This structure is a connectivity graph of all Hubs and
|
|
Routers in the system. This command should only be used in <A HREF="#GoCommand">Cac mode</A> after discovery has been performed. If the <B>v</B> argument is supplied, only abbreviated hub information will be displayed.
|
|
See also: <B>route</B> command (below).</P>
|
|
<LI>node [[VEC] ID]
|
|
<P>Sets a node ID (or NASID). If VEC is specified, it uses a CrayLink vector
|
|
write to set a remote node's NASID. This will crash the remote node, but
|
|
may be useful for accessing the remote node's memory and I/O space. If VEC
|
|
is not specified, the local Hub's NASID is set. This will crash the local
|
|
node, but it will return to POD mode.</P>
|
|
<LI>rtab [VEC]
|
|
<P>Displays the router tables in the local Hub if a vector VEC is not supplied.
|
|
Otherwise, displays the router tables in the device addressed by vector
|
|
VEC, whether it is a Hub or Router. See <A HREF="#VectorAddressing">Vector Addressing</A> for more information on vectors.</P>
|
|
<P>The routing table information in a Hub consists of 16 local table entries
|
|
and 32 meta table entries, each containing a single 4-bit direction. The
|
|
routing table information in a Router consists of 16 local table entries
|
|
and 32 meta table entries, each containing 24 bits of routing information
|
|
organized as 6 4-bit directions each.</P>
|
|
<P>See the Origin2000 Hub2 Programming Manual and the Origin2000 Router Manual
|
|
for a detailed description of hardware registers.</P>
|
|
<LI>rstat VEC
|
|
<P>Displays the link error and packet histogram information for a Router addressed
|
|
by a specified vector VEC. See <A HREF="#VectorAddressing">Vector Addressing</A> for more information about vectors. See the Origin2000 Router Manual for
|
|
a detailed description of hardware registers.</P>
|
|
<LI>hubsde
|
|
<P>Sends a Hub data error for diagnostic testing purposes.</P>
|
|
<LI>rtrsde
|
|
<P>Sends a Router data error for diagnostic testing purposes.</P>
|
|
<LI>chklink
|
|
<P>Reports on the status of the local Hub's CrayLink.</P>
|
|
</UL>
|
|
<H4>I/O Debug</H4>
|
|
<UL>
|
|
<LI>crb [NODE]
|
|
<P>Dumps the CRB registers from the IO section of the Hub chip, as raw hex
|
|
values.</P>
|
|
<LI>crbx [NODE]
|
|
<P>Dumps the CRB registers from the IO section of the Hub chip in a decoded
|
|
wide format that requires 132 columns to display.</P>
|
|
</UL>
|
|
<H4>PROM Flash</H4>
|
|
<UL>
|
|
<LI>flash NODE [...]
|
|
<P>Flashes a remote node's IP27 Flash PROM with a copy of the local node's
|
|
IP27 Flash PROM, over the CrayLink Interconnect. See section on <A HREF="#FlashingPROMs">Flashing PROMs</A> for more details.</P>
|
|
<P>The flash command must access the remote node through memory space, and
|
|
as such can be used only if the CrayLink routing tables are programmed and
|
|
the remote <A HREF="#NodeIDsNASIDs">Node ID</A> is assigned. The <B><A HREF="#_wmh4_841959430">route</B> command</A> is often useful for achieving this.</P>
|
|
<P>In emergencies, the <B>flash</B> command can be used from Dex mode, but it's extremely slow. If are running
|
|
in Dex mode (for example, by means of an NMI), you may want to try running
|
|
from cached memory (<B><A HREF="#GoCommand">go cac</B></A>) before flashing remote PROM(s). </P>
|
|
<PRE>
|
|
Example:
|
|
POD Dex Hub 000 1A> go cac
|
|
POD Cac Hub 000 1A> route 0x53 1
|
|
POD Cac Hub 000 1A> flash 1
|
|
</PRE>
|
|
</UL>
|
|
<H4>NIC (Number In a Can)</H4>
|
|
<UL>
|
|
<LI>nic [NODE]
|
|
<P>Reads the unique laser tag from the <A HREF="#NumberInACan">NIC</A> (Number In a Can) of the local node if no <A HREF="#NodeIDsNASIDs">Node ID</A> is specified; otherwise reads the NIC of a remote node by accessing its
|
|
memory space.</P>
|
|
<PRE>
|
|
Example:
|
|
POD Dex Hub 000 1A> nic
|
|
0x000000000001fcba
|
|
</PRE>
|
|
<LI>rnic [VEC]
|
|
<P>Reads the unique laser tag from the <A HREF="#NumberInACan">NIC</A> (Number In a Can) of a router, given a CrayLink vector to the router (default
|
|
0). See <A HREF="#VectorAddressing">Vector Addressing</A> for information about vectors.</P>
|
|
<PRE>
|
|
Example:
|
|
POD Dex Hub 000 1A> rnic 1
|
|
0x0000000000020300
|
|
</PRE>
|
|
</UL>
|
|
<H4>System Controller</H4>
|
|
<UL>
|
|
<LI>scw ADDR [VAL [COUNT]]
|
|
<P>Stores byte(s) to the Origin2000 Module System Controller non-volatile RAM.
|
|
The NVRAM address must be between 0 and 2047, inclusive. Addresses 1792
|
|
through 2047 are reserved for MSC use.</P>
|
|
<P>If neither VAL or COUNT is specified, scw enters editing mode in which the
|
|
current contents of each address is displayed and the user is allowed to
|
|
modify it by typing in a hexadecimal value (without the 0x). Entering nothing
|
|
goes on to the next address without modifying the location. Entering a period
|
|
exits editing mode.</P>
|
|
<P>If VAL is specified, the value is stored at the specified address. If COUNT
|
|
is also specified, the value is stored COUNT times starting at the specified
|
|
address.</P>
|
|
<LI>scr ADDR [COUNT]
|
|
<P>Reads byte(s) from the Origin2000 Module System Controller non-volatile
|
|
RAM. The NVRAM address must be between 0 and 2047, inclusive. Addresses
|
|
1792 through 2047 are reserved for MSC use.</P>
|
|
<P>If COUNT is specified, COUNT bytes are loaded and displayed in columns.</P>
|
|
<LI>sc ["command"]
|
|
<P>Sends an arbitrary command string to the system controller for execution.
|
|
The result returned by the command is displayed. See <A HREF="#MSCCommands">Module System Controller Commands</A> for a description of commands that might be sent. The <B>dbg</B> and <B>pas</B> commands cannot be executed in this manner since they access the I2C bus
|
|
during operation. Instead, corresponding POD commands are provided. </P>
|
|
<PRE>
|
|
Example: sc "dsp HiWorld"
|
|
</PRE>
|
|
<LI>dips
|
|
<P>Displays the settings of the Hardware <A HREF="#DebugSwitchUse">Debug Switches</A>, exactly as they are set on the MSC front panel.</P>
|
|
<LI>dbg [VIRT_VAL PHYS_VAL]
|
|
<P>If no arguments are specified, the values of the Physical and Virtual <A HREF="#DebugSwitchUse">Debug Switches</A> are displayed.</P>
|
|
<P>If values are specified, then the Virtual and Physical Debug switches are
|
|
set to the values specified.</P>
|
|
<PRE>
|
|
Example: dbg 0 0x18
|
|
</PRE>
|
|
<P>This command is very similar to the MSC <B>dbg</B> command, except allows the MSC Physical and Virtual Debug Switches to be
|
|
set or viewed from IP27prom POD mode. Care should be taken because the arguments
|
|
are decimal by default, rather than hex as in the MSC <B>dbg</B> command. Use the <I>0x</I> prefix to set values in hex.</P>
|
|
<P>The above example turns off all of the Virtual Debug Switches, and turns
|
|
on Physical Debug Switches 4 and 5 (since 0x18 has the fourth and fifth
|
|
bits set, numbering from 1). Note that the system XORs the Physical and
|
|
Hardware Debug Switches to determine the actual Physical Debug Switches,
|
|
so this feature can be used to override remotely the Hardware Debug Switches.</P>
|
|
<LI>pas ["PASW"]
|
|
<P>This command is very similar to the MSC <B>pas</B> command, except allows the MSC password to be set or viewed from IP27prom
|
|
POD mode.</P>
|
|
<P>If no arguments are specified, the current four-character system controller
|
|
password is displayed.</P>
|
|
<P>If a password is specified, the MSC password is replaced by the specified
|
|
string, which must be four characters in length. The default MSC password
|
|
is <B>none</B>.</P>
|
|
<LI>module [VAL]
|
|
<P>This command is very similar to the MSC <B>mod</B> command, except allows the <A HREF="#ModuleNumbers">module number</A> of the module containing the current IP27 card to be set or viewed from
|
|
IP27prom POD mode. Care should be taken because the argument is decimal
|
|
by default, rather than hex as in the MSC <B>mod</B> command. Use the <I>0x</I> prefix to set values in hex.</P>
|
|
<P>If no arguments are specified, the current module number is displayed.</P>
|
|
<P>If a module number from 0 to 255 is specified, the module number is changed.
|
|
See section Module Numbering for important information about module numbers.
|
|
The <B>module</B> command does not verify the consistency of module numbers; however, the
|
|
IO6prom will repair inconsistent module numbers before allowing the system
|
|
to boot.</P>
|
|
<LI>modnic
|
|
<P>Displays the value of the mid-plane NIC of the module containing the current
|
|
node.</P>
|
|
</UL>
|
|
<H4><A NAME="_wmh4_841959027">Disassembler</A></H4>
|
|
<UL>
|
|
<LI>dis ADDR [COUNT]
|
|
<P>Disassembles a region of memory into R10000 instructions beginning at the
|
|
specified start address. If COUNT is specified, then COUNT instructions
|
|
will be disassembled (not counting branch delay slots). If COUNT is not
|
|
specified, then the disassembly will stop at the end of the function containing
|
|
the start address, if applicable. Otherwise, 12 instructions will be disassembled.</P>
|
|
<LI>kern_sym
|
|
<P>Toggles the set of symbols the PROM uses when translating addresses to symbols
|
|
and vice-versa. The two sets of symbols available are the IP27prom symbols
|
|
and the Kernel symbols (which are not available unless a Kernel has been
|
|
loaded since system boot).</P>
|
|
<LI>kdebug [STACKADDR]
|
|
<P>Turns on kernel debugging functions (see <A HREF="#KernelDebugging">Kernel Debugging</A>) and returns to POD in a modified <B>Dex</B> mode in which the cache is flushed and the stack pointer is moved into
|
|
memory, but the CPU continues to execute out of the PROM.</P>
|
|
<LI>altregs NUM
|
|
<P>If NUM is 1, causes the PROM to stop using the set of R10000 registers that
|
|
were saved on PROM entry, and instead use the set of registers saved by
|
|
the Kernel debugger Symmon. If NUM is 0, causes the PROM to switch back
|
|
to its regular saved registers. See <A HREF="#KernelDebugging">Kernel Debugging</A>.</P>
|
|
<LI>traplog ADDR
|
|
<P>Displays entries from the Kernel trap log.</P>
|
|
</UL>
|
|
<H4>Error Dump</H4>
|
|
<UL>
|
|
<LI>dumpspool [NODE SLICE]
|
|
<P>Dumps the PI error spool on the local Hub if NODE and SLICE are not specified.
|
|
Dumps the PI error spool(s) on a remote Hub if a NODE and SLICE are specified.
|
|
SLICE indicates the CPU(s), and may be A, B, or AB.</P>
|
|
<LI>error_dump
|
|
<P>Dumps the error state of the local Hub. All of the error bits in the various
|
|
sections of the Hub are decoded and displayed in detail.</P>
|
|
<LI>edump_bri [n:NODE]
|
|
<P>Dumps the error state of a local or remote Bridge. All of the error bits
|
|
in the various sections of the Bridge are decoded and displayed in detail.</P>
|
|
</UL>
|
|
<H4><A NAME="EnvironmentCommands">PROM Log and Environment Variables</A></H4>
|
|
<UL>
|
|
<LI>initlog [n:NODE]
|
|
<P>Initializes the <A HREF="#PROMLogOverview">PROM Log</A> in a new or corrupt PROM. Clears all variable entries and error log entries.
|
|
If a node is specified, the operation is done on a remote node's PROM instead
|
|
of the local PROM. This command may not be used on the local PROM in <A HREF="#GoCommand">Dex mode</A> since the PROM cannot be programmed while running from it.</P>
|
|
<P><I>WARNING</I>: Executing <B>initlog</B> on a remote PROM will crash the remote node if it is running in Dex mode
|
|
(out of the PROM).</P>
|
|
<LI>initalllogs
|
|
<P>Initializes the <A HREF="#PROMLogOverview">PROM Log</A> on every node in the system. This command may only be run when the system
|
|
is in Cac mode and the CrayLink network has already been fully and properly
|
|
configured.</P>
|
|
<P><I>WARNING</I>: Executing <B>initalllogs</B> will crash any remote node that is running in Dex mode (out of the PROM).</P>
|
|
<LI>setenv [n:NODE] VAR [STRING]
|
|
<P>Sets an environment variable in the PROM Log. If a node is specified, the
|
|
operation is done on a remote node's PROM instead of the local PROM. VAR
|
|
is the name of the variable and must be from 1 to 15 ASCII characters. STRING
|
|
is the value, which must be from 0 to 127 ASCII characters, and usually
|
|
must be enclosed in quotes. If STRING is omitted, the PROM will prompt for
|
|
a string (this is useful because the PROM parser may only handle strings
|
|
up to 31 characters in length). Certain variable names that are reserved
|
|
words in the PROM, such as "ld" or "v0," may also have to be enclosed in
|
|
quotes. Numeric values must also be enclosed in quotes. This command may
|
|
not be used on the local PROM in Dex mode since the PROM cannot be programmed
|
|
while running from it.</P>
|
|
<P><I>WARNING</I>: Executing <B>setenv</B> on a remote PROM will crash the remote node if it is running in Dex mode
|
|
(out of the PROM).</P>
|
|
<PRE>
|
|
Example: setenv SwapBank "1"
|
|
</PRE>
|
|
<P>See <A HREF="#ReservedPROMLogVariables">Reserved PROM Log Variables</A> for information on specific environment variables.</P>
|
|
<LI>unsetenv [n:NODE] VAR
|
|
<P>Removes an environment variable from the <A HREF="#PROMLogOverview">PROM Log</A>. If a node is specified, the operation is done on a remote node's PROM
|
|
instead of the local PROM. VAR is the name of the variable and must be from
|
|
1 to 15 ASCII characters. Certain variable names that are reserved words
|
|
in the PROM, such as <B>ld</B> or <B>v0</B>, must be enclosed in quotes. This command may not be used on the local
|
|
PROM in Dex mode since the PROM cannot be programmed while running from
|
|
it.</P>
|
|
<P><I>WARNING</I>: Executing <I>unsetenv</I> on a remote PROM will crash the remote node if it is running in Dex mode
|
|
(out of the PROM).</P>
|
|
<LI>printenv [n:NODE] [VAR]
|
|
<P>Displays environment variable(s) in the <A HREF="#PROMLogOverview">PROM Log</A>. If a node is specified, the operation is done on a remote node's PROM
|
|
instead of the local PROM. If VAR is not specified, all environment variables
|
|
are printed. If VAR is specified, it is the name of the variable and must
|
|
be from 1 to 15 ASCII characters. Certain variable names that are reserved
|
|
words in the PROM, such as <B>ld</B> or <B>v0</B>, must be enclosed in quotes.</P>
|
|
<LI>log [n:NODE] [SKIP [COUNT]]
|
|
<P>Displays log entries from the <A HREF="#PROMLogOverview">PROM Log</A>. If a node is specified, the operation is done on a remote node's PROM
|
|
instead of the local PROM. If SKIP is specified, the first SKIP entries
|
|
are not displayed. If COUNT is specified, COUNT entries are displayed (otherwise,
|
|
24 entries are displayed). The output is paged to prevent it from scrolling
|
|
away.</P>
|
|
<LI>rlog [n:NODE] [SKIP [COUNT]]
|
|
<P>Displays log entries from the <A HREF="#PROMLogOverview">PROM Log</A> in reverse order. If a node is specified, the operation is done on a remote
|
|
node's PROM instead of the local PROM. If SKIP is specified, the first SKIP
|
|
entries are not displayed. If COUNT is specified, COUNT entries are displayed
|
|
(otherwise, 24 entries are displayed). The output is paged to prevent it
|
|
from scrolling away.</P>
|
|
</UL>
|
|
<H4><A NAME="PartitionCommands">Partitioning</A></H4>
|
|
<UL>
|
|
<LI>setpart RTR_LIST
|
|
<P>Sets reset partitions for partition (<I>testing only</I>).</P>
|
|
</UL>
|
|
<H4>I/O Diagnostics</H4>
|
|
<UL>
|
|
<LI>dgxbow [m<n|h|m> [n<NODE>]
|
|
<P>Runs Crossbow diagnostic. The first optional two-character argument specifies
|
|
the test mode as Normal, Heavy, or Manufacturing. The second optional argument
|
|
specifies a remote NASID on which to run the test.</P>
|
|
<LI>dgbrdg [m<n|h|m>] [n<NODE>] [s<SLOT>]
|
|
<P>Runs Bridge diagnostic. The first optional two-character argument specifies the test mode as Normal,
|
|
Heavy, or Manufacturing. The second optional argument specifies a remote
|
|
NASID on which to run the test. The third optional argument specifies a
|
|
slot on which to run the test.</P>
|
|
<LI>dgconf [m<n|h|m>] [n<NODE>] [s<SLOT>]
|
|
<P>Runs BaseIO configuration space diagnostic. The first optional two-character argument specifies the test mode as Normal,
|
|
Heavy, or Manufacturing. The second optional argument specifies a remote
|
|
NASID on which to run the test. The third optional argument specifies a
|
|
slot on which to run the test.</P>
|
|
<LI>dgpci [m<n|h|m>] [n<NODE>] [s<SLOT>] [p<PCI#>]
|
|
<P>Runs PCI bus diagnostic. The first optional two-character argument specifies the test mode as Normal,
|
|
Heavy, or Manufacturing. The second optional argument specifies a remote
|
|
NASID on which to run the test. The third optional argument specifies a
|
|
slot on which to run the test.</P>
|
|
<LI>dgspio [m<n|h|m|x>] [n<NODE>] [s<SLOT>] [p<PCI#]
|
|
<P>Runs serial PIO diagnostic. The first optional two-character argument specifies the test mode as Normal,
|
|
Heavy, or Manufacturing. If x is present, external loopback is used. The
|
|
second optional argument specifies a remote NASID on which to run the test.
|
|
The third optional argument specifies a slot on which to run the test.</P>
|
|
<LI>dgsdma [m<n|h|m|x>] [n<NODE>] [s<SLOT>] [p<PCI#]
|
|
<P>Runs serial DMA diagnostic. The first optional two-character argument specifies the test mode as Normal,
|
|
Heavy, or Manufacturing. If x is present, external loopback is used. The
|
|
second optional argument specifies a remote NASID on which to run the test.
|
|
The third optional argument specifies a slot on which to run the test.</P>
|
|
</UL>
|
|
<H2><A NAME="Debugging">Debugging with the IP27prom</A> <IMG SRC="debug.gif" ALIGN="RIGHT" WIDTH="60" HEIGHT="60" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/debug.gif"></H2>
|
|
<H3><A NAME="DebugReset">Reset</A></H3>
|
|
<P>The hardware reset signal is generated by pressing the left button on the <A HREF="#ModuleSystemController">front panel</A> of the Origin2000 Module System Controller, or by using the MSC <B>rst</B> command. All CPUs and other hardware in the module are reset. Reset may
|
|
also be sent by means of software, such as when the <B>reset</B> command is used in POD mode.</P>
|
|
<P>The reset signal is propagated by hardware over the CrayLinks into other
|
|
modules in the same partition. On system power-up, there are no partitions
|
|
and the reset propagates throughout the entire CrayLink network. Subsequently, <EM>reset barriers</EM> are put in place to separate the system into separately resettable <EM>partitions</EM>.</P>
|
|
<H3><A NAME="DebugNMI">Non-Maskable Interrupt (NMI)</A></H3>
|
|
<P>NMIs are used for debugging a system that is hung, usually because of a
|
|
software (PROM or Kernel) bug. An NMI to a CPU causes the CPU to stop what
|
|
it's doing and jump to a fixed address in the PROM. The code at that address,
|
|
called the NMI handler, attempts to bring the system to a PROM or Kernel
|
|
monitor where the state of the system can be examined to determine the cause
|
|
of the crash. The NMI handler is written carefully to avoid making assumptions
|
|
about the state of the system and to avoid using system resources unnecessarily.</P>
|
|
<P>NMIs can be sent by means of software or by hardware. Software can send
|
|
an NMI over the CrayLink Interconnect to any individual CPU. Pressing the
|
|
right button on the front panel of the Origin2000 Module System Controller,
|
|
or using the MSC <B>nmi</B> command, sends a hardware NMI to all of the CPUs plugged into the same
|
|
module -- these CPUs will attempt to propagate the NMI to other modules
|
|
in the same partition by means of a software NMI.</P>
|
|
<P>The NMI handler determines if the system was running in the Kernel or in
|
|
the PROM at the time of the NMI by examining the NMI program counter. If
|
|
the system was running in the PROM, the CPU immediately enters POD mode.
|
|
Otherwise, the handler checks if a Kernel debugging facility (such as symmon)
|
|
is available, and if so, transfers control to it. Sometimes the Kernel debugging
|
|
facility may subsequently hang due to data corruption. For this reason,
|
|
if another NMI is received (called a <EM>second NMI</EM>), the PROM will ignore the Kernel debugging facility and enter POD mode.</P>
|
|
<P>Occasionally, a hung Node may not respond to an NMI if the Hub or R10000
|
|
is completely hung. When a Node does respond to an NMI, a four-stage pattern
|
|
flashes along the Node LEDs.</P>
|
|
<H3><A NAME="KernelDebugging">Kernel Debugging</A></H3>
|
|
<P><I>Courtesy of Uday Hegde</I></P>
|
|
<P>There is support in the IP27prom to dump kernel data structures info via <I>idbg</I>. This is especially useful if <I>symmon</I> does not respond to the first NMI and you use the second NMI to drop into
|
|
the IP27prom.</P>
|
|
<P>On NMI, all the kernel registers are saved and you enter prom <B>Dex</B> mode. To switch to kernel debug mode, you just type <B>kdebug</B>. This will enable kernel symbols in the PROM, switch the stack to memory
|
|
so that we can do cached references, and switch your register set to the
|
|
one that was saved on NMI. The stack is automatically placed somewhere near
|
|
64 MB on each node, but this can be overridden with an optional address
|
|
to <B>kdebug</B>.</P>
|
|
<P>If any exceptions are taken while printing/inspecting kernel data structures,
|
|
the PROM will re-enter <B>Dex</B> mode. However, the kernel register state is still intact so just typing <B>kdebug</B> will get you back in business.</P>
|
|
<P>You can use <B>call idbg_func <I>args</I></B> to dump kernel data structures. Some of these may take TLB exceptions,
|
|
since TLB misses will not be processed normally. Any <I>idbg</I> function that does not use qprintf (and uses printf or other printing routines)
|
|
to dump the information will fail. </P>
|
|
<P>Here are some useful commands:</P>
|
|
<UL>
|
|
<LI><B>kdebug</B> [optional stack address] - switch to kdebug mode.
|
|
<LI><B>altregs <num></B> or <B><Address></B> - Switch to an alternate register set. A number is interpreted as (nasid
|
|
<< 1 | slice). An address is used as an address to the register set.
|
|
<LI><B>call idbg_xxxxx [arg1 [arg2 [arg3 [arg4]]]]</B>
|
|
</UL>
|
|
<P>Here are some examples:</P>
|
|
<OL>
|
|
<LI>kdebug (or kdebug 0xa800000001000000 to force sp to an address)
|
|
<PRE>
|
|
1A 000: POD MSC Dex>kdebug
|
|
1A 000:
|
|
1A 000: *** Turning on kernel symbol table lookup
|
|
1A 000: Using Alternate register set at 0x9600000000011400
|
|
1A 000:
|
|
1A 000: *** Entering POD mode with new stack pointer on node 0
|
|
1A 000: POD MSC Dex AltRegs 0x9600000000011400> why
|
|
1A 000: EPC : 0xc000000000534378 (wait_for_interrupt+0x28)
|
|
1A 000: ERREPC : 0xc0000000004b44f4 (local_idle+0x8)
|
|
1A 000: CACERR : 0x00000000dfffffff
|
|
1A 000: Status : 0x0000000024400080
|
|
1A 000: BadVA : 0x0000000010008848 (0x10008848)
|
|
1A 000: RA : 0xc000000000534378 (wait_for_interrupt+0x28)
|
|
1A 000: SP : 0xa800000000deff88
|
|
1A 000: A0 : 0x0000000000000000
|
|
1A 000: Cause : 0x0000000000009000 (INT:8--5----)
|
|
1A 000: Reason : 253 (POD mode switch set or POD key pressed.)
|
|
1A 000: POD mode was called from: 0x0000000000000000 (0x0)
|
|
</PRE>
|
|
<LI>altregs (this example switches the register set to nasid 1, cpu 1's register
|
|
state at NMI)
|
|
<PRE>
|
|
1A 000: POD MSC Dex AltRegs 0x9600000000011400> altregs 3
|
|
1A 000: Using Alternate register set at 0x9600000100011800
|
|
1A 000: POD MSC Dex AltRegs 0x9600000100011800> why
|
|
1A 000: EPC : 0xc0000000004b44fc (local_idle+0x10)
|
|
1A 000: ERREPC : 0xc000000000534378 (wait_for_interrupt+0x28)
|
|
1A 000: CACERR : 0x00000000dfffffff
|
|
1A 000: Status : 0x0000000024400080
|
|
1A 000: BadVA : 0x000000001013fff0 (0x1013fff0)
|
|
1A 000: RA : 0xc000000000534378 (wait_for_interrupt+0x28)
|
|
1A 000: SP : 0xa800000100e03f88
|
|
1A 000: A0 : 0x0000000000000000
|
|
1A 000: Cause : 0x0000000000009000 (INT:8--5----)
|
|
</PRE>
|
|
<LI>Something that <I>symmon</I> cannot do
|
|
<PRE>
|
|
1A 000: POD MSC Dex AltRegs 0x9600000000011400> a0=0x400; while(a0<0x800) {call idbg_pfn a0; a0=a0+1}
|
|
1A 000: pfdat: addr 0xa800000001ff0000 [1024 0x400] flags 0x2800 <dump cstale >
|
|
1A 000: pageno 0x0 tag 0x0 use 1 rawcnt 1069
|
|
1A 000: next 0x0 [-1] prev 0x0 [-1] hchain 0x0 [-1]
|
|
1A 000: Bitmap base (pure) a800000001ffff00 (tainted) a800000001fffe00
|
|
1A 000: pdep1: 0x0 pdep2: 0x0
|
|
1A 000: PFMS: 0x0
|
|
1A 000:
|
|
1A 000: pfdat: addr 0xa800000001ff0040 [1025 0x401] flags 0x2800 <dump cstale >
|
|
1A 000: pageno 0x0 tag 0x0 use 1 rawcnt 1031
|
|
1A 000: next 0x0 [-1] prev 0x0 [-1] hchain 0x0 [-1]
|
|
1A 000: Bitmap base (pure) a800000001ffff00 (tainted) a800000001fffe00
|
|
1A 000: pdep1: 0x0 pdep2: 0x0
|
|
1A 000: PFMS: 0x0
|
|
1A 000:
|
|
1A 000: pfdat: addr 0xa800000001ff0080 [1026 0x402] flags 0x2800 <dump cstale >
|
|
1A 000: pageno 0x0 tag 0x0 use 1 rawcnt 1031
|
|
1A 000: next 0x0 [-1] prev 0x0 [-1] hchain 0x0 [-1]
|
|
1A 000: Bitmap base (pure) a800000001ffff00 (tainted) a800000001fffe00
|
|
1A 000: pdep1: 0x0 pdep2: 0x0
|
|
1A 000: PFMS: 0x0
|
|
1A 000:
|
|
1A 000: pfdat: addr 0xa800000001ff00c0 [1027 0x403] flags 0x2800 <dump cstale >
|
|
1A 000: pageno 0x0 tag 0x0 use 1 rawcnt 1031
|
|
1A 000: next 0x0 [-1] prev 0x0 [-1] hchain 0x0 [-1]
|
|
1A 000: Bitmap base (pure) a800000001ffff00 (tainted) a800000001fffe00
|
|
1A 000: pdep1: 0x0 pdep2: 0x0
|
|
1A 000: PFMS: 0x0
|
|
1A 000:
|
|
1A 000: pfdat: addr 0xa800000001ff0100 [1028 0x404] flags 0x2800 <dump cstale >
|
|
1A 000: pageno 0x0 tag 0x0 use 1 rawcnt 1031
|
|
1A 000: next 0x0 [-1] prev 0x0 [-1] hchain 0x0 [-1]
|
|
1A 000: Bitmap base (pure) a800000001ffff00 (tainted) a800000001fffe00
|
|
1A 000: pdep1: 0x0 pdep2: 0x0
|
|
</PRE>
|
|
<LI>idbg_runq
|
|
<PRE>
|
|
1A 000: POD MSC Dex AltRegs 0x9600000000011400> call idbg_runq 1
|
|
1A 000: Runq(0xc000000001cfb7f8): active(0xf)
|
|
1A 000:
|
|
1A 000: CPU 0:
|
|
1A 000: CPU 1:
|
|
1A 000: CPU 2:
|
|
1A 000: CPU 3:
|
|
1A 000:
|
|
1A 000: vmp 0 at 0xa800000000f34000
|
|
1A 000: vmp 1 at 0xa800000000f34080
|
|
1A 000: vmp 2 at 0xa800000000f34100
|
|
1A 000: vmp 3 at 0xa800000000f34180
|
|
1A 000:
|
|
</PRE>
|
|
<LI>pb
|
|
<PRE>
|
|
1A 000: POD MSC Dex AltRegs 0x9600000000011400> call idbg_print putbuf 0xfffffff
|
|
fffffffff
|
|
1A 000: Memfit Initialized...
|
|
1A 000: <5>NOTICE: [memsched_init]: There are 2 <= 2^1 memory nodes.
|
|
1A 000: b.0.210
|
|
1A 000: <4>WARNING: Nasid 0 interrupt bit 31 set in INT_PEND1
|
|
1A 000: <4>WARNING: Nasid 0 interrupt bit 63 set in INT_PEND1
|
|
1A 000: <4>WARNING: Nasid 1 interrupt bit 31 set in INT_PEND1
|
|
1A 000: <4>WARNING: Nasid 1 interrupt bit 63 set in INT_PEND1
|
|
1A 000: <4>WARNING: CPU 0 (/hw/module/1/slot/n1/node/cpu/0) is downrev (925)
|
|
1A 000: <4>WARNING: CPU 1 (/hw/module/1/slot/n1/node/cpu/1) is downrev (925)
|
|
1A 000: <4>WARNING: CPU 2 (/hw/module/1/slot/n2/node/cpu/0) is downrev (925)
|
|
1A 000: <4>WARNING: CPU 3 (/hw/module/1/slot/n2/node/cpu/1) is downrev 000: Realtime overflow q:
|
|
</PRE>
|
|
<LI>nodenuma (and it ultimately fails since it uses <I>printf</I>)
|
|
<PRE>
|
|
1A 000: POD MSC Dex AltRegs 0x9600000000011400> call idbg_nodepda_numa 1
|
|
1A 000: Dumping node numa parameters at 0xa800000100c0c000
|
|
1A 000: memoryd semaphore @ 0xa800000100c0c008 ((noname)) count -1 flags:
|
|
1A 000: wq: 0xa800000001aa0000; no meter info
|
|
1A 000: Migration Control Parameters, (mcd)@: 0xa800000100c108b0
|
|
1A 000: Migration Per Address Space Default Kernel Parameters:
|
|
1A 000: migration_base_enabled: 0x1
|
|
1A 000: migr_base_threshold: 0x3c
|
|
.......
|
|
1A 000: migr_unpegger_npages: 27
|
|
1A 000: migr_unpegger_lastnpages: 0
|
|
1A 000:
|
|
1A 000: *** General Exception on node 0
|
|
1A 000: *** EPC: 0xc000000000532664 (0xc000000000532664)
|
|
1A 000: *** Press ENTER to continue.
|
|
1A 000: POD MSC Dex> kdebug
|
|
1A 000:
|
|
1A 000: POD MSC Dex AltRegs 0x9600000000011400
|
|
</PRE>
|
|
</OL>
|
|
<H3><A NAME="DebugMSC">Use of the MSC</A></H3>
|
|
<P>The MSC alternate console port is shared between CPUs. Upon taking an NMI
|
|
or exception, each CPU prints a brief three-line message on the MSC indicating
|
|
what happened, and waits for the user to press <TT>ENTER</TT>.</P>
|
|
<P>The user can then use the MSC <B>sel</B> command to select a particular CPU, press <TT>ENTER</TT> to get a POD prompt on that CPU, and use the <B>why</B> and <B>pr</B> commands to obtain detailed information on where the system was executing,
|
|
why it stopped, and what state the CPU registers and memory were in.</P>
|
|
<H3><A NAME="DebugFastLoops">Fast loops</A></H3>
|
|
<P>Since PROM command lines are precompiled, then executed by a fast stack-based
|
|
engine, a loop of register stores or loads (such as for testing I/O devices)
|
|
can be executed at relatively high speed. For example:</P>
|
|
<PRE>
|
|
loop { sd ADDR1 value1; sd ADDR2 value2 }
|
|
loop v0 = ld ADDR
|
|
</PRE>
|
|
<H3><A NAME="DebugMemoryTests">Memory Tests</A></H3>
|
|
<H4><A NAME="BankOrganization">Bank Organization</A></H4>
|
|
<P>Memory is organized in up to 8 banks of up to 512 MB each. The base address
|
|
of each bank is separated by 512 MB <I>regardless</I> of the the actual size of the bank. Thus, there is a <EM>hole</EM> in the memory address space wherever one bank follows another that's less
|
|
than 512 MB. Care should be taken to avoid testing a region of memory that
|
|
crosses a hole.</P>
|
|
<P>For example, if there are four banks of 64 MB in the system, there would
|
|
be memory in the following address ranges (assuming cached space):</P>
|
|
<PRE>
|
|
c:0 through c:(64m-1) <EM>or</EM> c:b:0 0 through c:b:0 (64m-1)
|
|
c:512m through c:(576m-1) <EM>or</EM> c:b:1 0 through c:b:1 (64m-1)
|
|
c:1024m through c:(1088m-1) <EM>or</EM> c:b:2 0 through c:b:2 (64m-1)
|
|
c:1536m through c:(1600m-1) <EM>or</EM> c:b:3 0 through c:b:3 (64m-1)
|
|
</PRE>
|
|
<H4><A NAME="RunningTheTests">Running the Tests</A></H4>
|
|
<P>Memory tests clear the error registers before they start. During the test,
|
|
if a data miscompare occurs, the contents of the error registers are decoded
|
|
and displayed along with the test address and data.</P>
|
|
<P>If the <B>qual on</B> command is used, the data quality checking features of the R10000 will
|
|
be enabled (PI_SYSAD_ERRCHK_EN). If data quality mode is on, then events
|
|
such as ECC errors and SysAD parity errors will cause the R10000 to take
|
|
exceptions during a memory test. On any exception during a memory test,
|
|
the contents of the error registers are decoded and displayed along with
|
|
the test address and data.</P>
|
|
<P>The <B>ecc off</B> command must be used prior to testing directory memory, or when testing
|
|
regular memory but the directory memory is uninitialized, to prevent false
|
|
ECC errors from occurring during the test.</P>
|
|
<P>Note that even when ECC checking is turned off, ECC correcting remains enabled.
|
|
It is not possible to turn off error correcting in the Hub. For this reason,
|
|
memory tests must be performed in the following order: test directory memory;
|
|
initialize directories; test regular memory.</P>
|
|
<P>The standard memory test performs multiple phases:</P>
|
|
<OL>
|
|
<LI>Store/load
|
|
<P>For each double-word address in the memory range, do a store of all 5's,
|
|
and immediately load it back and compare, then do a store of all A's, and
|
|
immediately load it back and compare. This test may find problems with RAM
|
|
cells that take too long to change state.<BR>
|
|
</P>
|
|
<LI>A5 fill/verify
|
|
<P>The memory range is filled with alternating double-word patterns of all
|
|
5's and all A's, then the range is read back and verified.<BR>
|
|
</P>
|
|
<LI>5A fill/verify
|
|
<P>The memory range is filled with alternating double-word patterns of all
|
|
A's and all 5's, then the range is read back and verified.<BR>
|
|
</P>
|
|
<LI>C3 fill/verify
|
|
<P>The memory range is filled with alternating double-word patterns of 0xc3c3c3c3c3c3c3c3
|
|
and 0x3c3c3c3c3c3c3c3c, then the range is read back and verified.<BR>
|
|
</P>
|
|
<LI>3C fill/verify
|
|
<P>The memory range is filled with alternating double-word patterns of 0x3c3c3c3c3c3c3c3c
|
|
and 0xc3c3c3c3c3c3c3c3, then the range is read back and verified.<BR>
|
|
</P>
|
|
<LI>Random fill/verify
|
|
<P>The memory range is filled with pseudo-random double-words (same pattern
|
|
every time), then read back and verified. This is an address test that verifies
|
|
that all memory addresses are unique.<BR>
|
|
</P>
|
|
<LI>Address fill/verify
|
|
<P>The memory range is filled with double-words corresponding to the address
|
|
being written, then read back and verified. This is an address test that
|
|
verifies that all memory addresses are unique. Since this is the last test,
|
|
memory is left filled with incrementing double-words.</P>
|
|
</OL>
|
|
<P>The <A HREF="#_wmh4_841960997">commands</A> for performing memory initialization and tests are:</P>
|
|
<PRE>
|
|
dirinit
|
|
dirtest
|
|
meminit
|
|
memtest
|
|
</PRE>
|
|
<P>It's not recommended to run memory tests in <A HREF="#GoCommand">Dex mode</A> since they so slow; they take very long and don't stress the memory. Also,
|
|
tests cannot be run to cached memory while in Dex mode since the cache is
|
|
already being used for POD memory.</P>
|
|
<P>Examples</P>
|
|
<OL>
|
|
<LI><TT>memtest u:32m 1m</TT><BR>
|
|
<TT>memtest 0x9600000002000000 0x100000</TT>
|
|
<P>These are equivalent and test one megabyte of uncached memory space starting
|
|
at an offset of 32 megabytes. The first argument is the start address, uncached
|
|
32 megabytes, and the second is the length.</P>
|
|
<LI><TT>memtest c:32m 32m</TT>
|
|
<P>Tests the second 32 megabytes of cached memory. Tests on cached memory are
|
|
very fast. However, it doesn't make sense to test a very small region of
|
|
memory since you would only be testing out of the cache.</P>
|
|
<LI><TT>memtest u:b:3 0 64m</TT>
|
|
<P>Tests 64 megabytes of uncached memory in bank 3. The <B>b:</B> is a shorthand way to add multiples of the bank size, 512 megabytes, to
|
|
the address.</P>
|
|
<LI><TT>memtest n:7 b:3 c: 1m 63m</TT><BR>
|
|
<TT>memtest (n:7 b:3 c: 1m) 63m</TT><BR>
|
|
<TT>memtest 0xa800000760100000 0x3f00000</TT>
|
|
<P>These are equivalent and test 63 megabytes of cached memory on node (NASID)
|
|
7, beginning at the the one megabyte point of bank 3.</P>
|
|
</OL>
|
|
<P>When testing directory/protection memory, as opposed to regular memory,
|
|
the dirtest command is used. It doesn't matter whether one uses a physical,
|
|
cached, or uncached address. ECC checking should be turned off when testing
|
|
directory memory.</P>
|
|
<P>The <B>maxerr</B> command controls the number of errors the memory test prints before it
|
|
gives up and goes on to the next phase of the memory test. The default is
|
|
to print 32 errors.</P>
|
|
<P>A final memory test available is the sanity test (<B>santest</B>) which tests a single address according to the following scheme:</P>
|
|
<OL>
|
|
<LI>Clear the error registers and verify that they clear
|
|
<LI>Test that no bits in the corresponding directory memory entry LO/HI are
|
|
stuck at 1 or 0, with error register checking.
|
|
<LI>Initialize the corresponding directory memory entry LO/HI to the Unowned
|
|
state.
|
|
<LI>Test that no bits in the memory location are stuck at 1 or 0, with error
|
|
register checking.
|
|
</OL>
|
|
<H3><A NAME="DebugProblemReporting">Problem Reporting</A></H3>
|
|
<P>There are four general types of problems that may occur in the PROM:</P>
|
|
<OL>
|
|
<LI>The PROM takes an unexpected exception and enters POD mode.
|
|
<LI>The PROM hangs, but can be made to enter POD mode by sending an NMI.
|
|
<LI>The PROM hangs, but does not respond to NMI.
|
|
<LI>The PROM waits for something to happen that never occurs.
|
|
</OL>
|
|
<P>If either of the first two cases occur, useful debugging information can
|
|
be dumped that may aid a PROM developer in quickly pin-pointing the problem.
|
|
At a minimum, the output of the following POD mode commands should be captured:</P>
|
|
<PRE>
|
|
why <-- Prints the exception type and status registers
|
|
pr <-- Prints all R10000 general purpose registers
|
|
error_dump <-- Displays detailed Hub error register dump
|
|
crbx <-- If it appears to be I/O-related
|
|
edump_bri <-- If it appears to be Bridge-related
|
|
fru 1 <-- Runs the FRU Analyzer on the error dump data
|
|
</PRE>
|
|
<P>The third case usually indicates the Hub chip has been hung, typically because
|
|
of I/O problems, and is very difficult to debug. The only available information
|
|
is the last thing the PROM printed (or the last progress LED value).</P>
|
|
<P>The fourth case usually indicates a CrayLink communications problem. One
|
|
node may be waiting on another, but never hear from it due to link errors.
|
|
Multiple nodes may believe they are the global master. It is very useful
|
|
to check for extinguished Router card LEDs to see if any of the CrayLink
|
|
connections have gone down, effectively isolating a CPU while the system
|
|
was running (see <A HREF="#ReadingTheRouterLEDs">Reading the Router LEDs</A>).</P>
|
|
<H3><A NAME="FlashingPROMs">Flashing PROMs</A></H3>
|
|
<P>The flashing method described here should not be necessary except in case
|
|
of blank systems or special emergencies. Ordinarily, the IO6prom and Irix <B>flashcpu</B>, <B>flashio</B>, and <B>flash</B> commands are all that is needed for flashing, but if a system can't come
|
|
up to the IO6prom or Irix due to a PROM problem, this may come in handy.</P>
|
|
<P>It is possible to use one node to flash another node's PROM using the IP27prom <B>flash</B> command. The contents of the PROM of the node doing the flash is copied
|
|
into the remote node.</P>
|
|
<P><B><I>Warning</I></B>: The remote node must perfectly match the node doing the flashing. <I>Never</I> copy a PROM to another node if the other node has a different secondary
|
|
cache size or clock speed. The IP27prom <B>flash</B> command does not automatically reconfigure PROMs as the IO6prom and Irix <B>flash</B> commands do.</P>
|
|
<OL>
|
|
<LI>Get to a POD prompt on the node from which the flash will be done. Try setting
|
|
Hardware Debug Switches 4 and 5 to enter memoryless POD mode. Alternately,
|
|
use <B>^Tnmi</B> from the MSC alternate console port part way through system initialization.
|
|
Either way will result in Dex POD mode.
|
|
<LI>Enter cached mode using the <B>go cac</B> command. Flashing should be done from cached mode if possible because it's
|
|
deathly slow in Dex mode, plus the route command sometimes has trouble changing
|
|
remote nodes' NASIDs when in Dex mode.
|
|
<LI>Establish NASIDs and routes for the node(s) to be flashed. If the system
|
|
was previously booted past global arbitration, NASIDs may already be assigned.
|
|
Check the NASIDs that appear in the POD prompts coming out on the MSC ports
|
|
to see if they may have already been assigned; if they are non-zero, route
|
|
command(s) may be unnecessary and it may become self-evident which nodes
|
|
have which NASIDs assigned.
|
|
<P>To establish routes manually, use the <B>route</B> command, which takes a CrayLink vector and a NASID to assign. Any NASID
|
|
less than 32 will do. Multiple nodes may be routed at the same time for
|
|
convenience. For example, if you're talking to node N1 and wish to flash
|
|
N2, N3, and N4 within the same module, the following commands may suffice:</P>
|
|
<UL>
|
|
<LI>route 0x4 1
|
|
<LI>route 0x56 2
|
|
<LI>route 0x46 3
|
|
</UL>
|
|
<P>The <B>route</B> command may sometimes be used without arguments to automatically determine
|
|
all nodes present in the system, and assign routes and NASIDs automatically
|
|
in one step.</P>
|
|
<P>The <B>route</B> command will most likely cause the remote nodes to crash since their NASIDs
|
|
are changed out from under them, but this is okay.</P>
|
|
<LI>Execute the <B>flash</B> command, specifying the NASID of the node to be flashed. More than one
|
|
NASID may be flashed in parallel to save time; for example,
|
|
<UL>
|
|
<LI>flash 1 2 3
|
|
</UL>
|
|
<P>After flashing, the system may be rebooted, or additional <B>route</B> and <B>flash</B> commands may be executed.</P>
|
|
</OL>
|
|
<HR>
|
|
<H2><A NAME="PROMLogOverview">PROM Log Overview</A></H2>
|
|
<P>The IP27 Flash PROM is an AMD29F080 containing 1 MB of data, organized as
|
|
16 pages of 64 KB. The first 14 pages are used for storing the IP27prom
|
|
code, and the last 2 pages are used for storing the PROM log. Sectors can
|
|
be flashed (erased) independently, so when new code is flashed into the
|
|
IP27prom, the last two sectors are left intact, and when the PROM log is
|
|
initialized, only the last two sectors are affected.</P>
|
|
<P>The PROM Log is used to store three types of data:</P>
|
|
<OL>
|
|
<LI>PROM environment variables, which consist of a key/value pair of strings.
|
|
<LI>PROM environment lists, which consist of multiple value strings stored under
|
|
the same key string.
|
|
<LI>Error log messages, which can be dumped and viewed from the PROM and get
|
|
copied into <I>/var/adm/SYSLOG</I> each time Irix boots.
|
|
</OL>
|
|
<P>Variables can be set and cleared, and log entries can be added to the first
|
|
(primary) sector. Space is used up each time anything is done to the PROM
|
|
Log (since data can't be erased except by flashing). When the primary sector
|
|
becomes full, the second (alternate) sector is flashed clean and all persistent
|
|
data (variables and lists) is compacted and copied into it. The new sector
|
|
then becomes the primary sector, and the old sector becomes the alternate
|
|
sector. Swapping back and forth in this manner minimizes the chance that
|
|
all data will be lost in case of a problem.</P>
|
|
<P>The <B>setenv</B>, <B>unsetenv</B>, and <B>printenv</B> POD commands are used to view and modify environment variables stored in
|
|
the PROM Log. Variable keys may be up to 15 ASCII characters in length,
|
|
and variable values may be up to 127 ASCII characters.</P>
|
|
<H3><A NAME="ReservedPROMLogVariables">Reserved PROM Log Variables</A></H3>
|
|
<P>Where the value field is numeric, it is generally stored as a decimal number,
|
|
or a hex number if prefixed by <I>0x</I>. The word # appears where the data is numeric.</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>Reserved PROM Log Variables</CAPTION>
|
|
<TR><TH ALIGN=LEFT>Key</TH><TH ALIGN=LEFT>Value</TH><TH ALIGN=LEFT>Purpose</TH></TR>
|
|
<TR><TD>DisableA</TD><TD>reason</TD><TD>CPU A disabled if variable defined. The value is generally a description
|
|
of the reason the CPU is disabled.</TD></TR>
|
|
<TR><TD>DisableB</TD><TD>reason</TD><TD>CPU B disabled if variable defined. The value is generally a description
|
|
of the reason the CPU is disabled.</TD></TR>
|
|
<TR><TD>DisableMem</TD><TD>#...</TD><TD>List of memory banks (in the range 0 to 7) to disable.</TD></TR>
|
|
<TR><TD>DisableMemSz</TD><TD>########</TD><TD>Positional list of the sizes of all disabled banks, generated automatically
|
|
when memory is disabled by POD command.</TD></TR>
|
|
<TR><TD>DisableMemMask</TD><TD>#...</TD><TD>List of disabled banks, generated automatically when memory is disabled
|
|
by POD command.</TD></TR>
|
|
<TR><TD>MemDisReason</TD><TD>reason</TD><TD>String indicating why memory bank(s) were disabled.</TD></TR>
|
|
<TR><TD>DisableIO</TD><TD>reason</TD><TD>I/O probing disabled if present. Hub I/O section will not be initialized.</TD></TR>
|
|
<TR><TD>SwapBank</TD><TD>#</TD><TD>Alternate bank swapped with bank 0 if bank 0 is bad. Automatically incremented
|
|
if bank 0 is found to be bad.</TD></TR>
|
|
<TR><TD>OverrideNIC</TD><TD>#</TD><TD>Override Hub NIC, useful if NIC broken (this NIC is not the one used for
|
|
software licensing).</TD></TR>
|
|
<TR><TD>GlobalMaster</TD><TD>reason</TD><TD>If so, node wants to be global master (if multiple have this, lowest NIC).</TD></TR>
|
|
<TR><TD>LastModule</TD><TD>#</TD><TD>Number of the module this node card was last plugged into, updated automatically
|
|
(Origin2000 only).</TD></TR>
|
|
<TR><TD>Origin200Module</TD><TD>#</TD><TD>Module number for master/slave configuration (Origin200 only).</TD></TR>
|
|
<TR><TD>ForceConsole</TD><TD>-</TD><TD>Temporary variable automatically set if no console is found. After automatic
|
|
reboot, a default console will be selected.</TD></TR>
|
|
<TR><TD>DisableExpress</TD><TD>reason</TD><TD>If this variable is set, express links are disabled on subsequent reboots.
|
|
This is mostly useful for benchmarking the effects of express links.</TD></TR>
|
|
<TR><TD>NASIDOffset</TD><TD>#</TD><TD>Adds a value to the calculated NASID. May prevent successful booting --
|
|
for developer use only.</TD></TR>
|
|
<TR><TD>NASID</TD><TD>#</TD><TD>Variable automatically assigned during partitioning. Used to reassign NASID
|
|
if one partition is rebooted.</TD></TR>
|
|
<TR><TD>FencePorts</TD><TD>#...</TD><TD>List of router ports to fence off. Automatically assigned and used during
|
|
partitioning.</TD></TR>
|
|
</TABLE></P>
|
|
</CENTER><P>By convention, in Log entries the first part of the value should consist
|
|
of the date in local time, formatted in ASCII as follows: <I>YY/MM/DD hh:mm:ss</I>. This applies only if the date is available when the entry is made. The
|
|
PROM may not have a real-time clock, but the kernel may.</P>
|
|
<H3><A NAME="ErrorLogKeys">Error Log Keys</A></H3>
|
|
<P>Log entries are to be used very sparingly to avoid filling up the log. Any
|
|
given message should generally not be logged more than once per reboot.
|
|
Additional message types may be added later.</P>
|
|
<P>When the Irix kernel boots, it dumps the contents of the error log since
|
|
the last reboot into the <I>/var/adm/SYSLOG</I> file, and sets a marker entry in the log for the next reboot.</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>Error Log Keys</CAPTION>
|
|
<TR><TH ALIGN=LEFT>Key</TH><TH ALIGN=LEFT>Value</TH><TH ALIGN=LEFT>Meaning</TH></TR>
|
|
<TR><TD>Fatal</TD><TD>string</TD><TD>Fatal error</TD></TR>
|
|
<TR><TD>Error</TD><TD>string</TD><TD>Non-fatal error</TD></TR>
|
|
<TR><TD>Info</TD><TD>string</TD><TD>Important info message</TD></TR>
|
|
</TABLE></P>
|
|
</CENTER><H3><A NAME="ListKeys">List Keys</A></H3>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>List Keys</CAPTION>
|
|
<TR><TH ALIGN=LEFT>Key</TH><TH ALIGN=LEFT>Value</TH><TH ALIGN=LEFT>Meaning</TH></TR>
|
|
<TR><TD>-</TD><TD>-</TD><TD>There are currently no list keys in use.</TD></TR>
|
|
</TABLE></P>
|
|
</CENTER><HR>
|
|
<H2><A NAME="Origin2000Routers">Origin2000 Routers</A></H2>
|
|
<H3><A NAME="ReadingTheRouterLEDs">Reading the Router LEDs</A></H3>
|
|
<P><IMG SRC="router_leds.gif" ALIGN="RIGHT" WIDTH="53" HEIGHT="142" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/router_leds.gif">Each router card has two side-by-side columns of 6 discreet LEDs.</P>
|
|
<P>The left side (green) LEDs indicate the connection status of router ports
|
|
1 through 6. They light up if a port has successfully negotiated and maintained
|
|
a connection with another device, and turn off if the port is disconnected
|
|
(physically or due to severe connection errors). These lights are very useful
|
|
for pinpointing a cable or router Field Replaceable Unit (FRU) and should
|
|
be one of the first things inspected if link(s) appear to be down. Note that although ports 4 through 6 connections are on the Origin2000 module
|
|
midplane, the connection lights are still useful because an improperly seated
|
|
card may not connect to the router properly.</P>
|
|
<P>The right side (yellow) LEDs are controlled by system software and typically
|
|
light up when there is traffic across the corresponding link.<BR CLEAR=ALL>
|
|
</P>
|
|
<H3><A NAME="VectorAddressing">Vector Addressing</A></H3>
|
|
<P>Early in the system boot, before the PROM has configured the CrayLink Interconnect,
|
|
Node IDs are not yet assigned (they're all zero) and Router tables are not
|
|
yet programmed. In this state, it is not yet valid to access the memory
|
|
and I/O spaces of remote nodes using regular remote memory accesses (where
|
|
the <A HREF="#NodeIDsNASIDs">Node ID</A> has been placed into physical address bits 40:32, such as by using the <B>n:</B> <A HREF="#PODAddressModifiers">modifier</A>).</P>
|
|
<P>The Origin2000 Hub and Routers have a feature called vector addressing which
|
|
allows access to the any remote Hub's <A HREF="#HubNIRegs">Network Interface (<I>NI_</I>) register subset</A>, and to all <A HREF="#RouterRegs">Router (<I>RR_</I>) registers</A>. To read or write a remote Hub or Router register requires specifying a
|
|
path called a vector. A vector contains a string of output port numbers
|
|
from 1 to 6 (corresponding directly to the hardware labeling A through F),
|
|
one per nybble, appearing in <EM>reverse</EM> order. For example, the vector 0x512 indicates the request should leave
|
|
the current Hub into a Router, leave port 2 of that Router into another
|
|
Router, leave port 1 of that Router into another Router, and finally leave
|
|
port 5 of that Router into either a Hub or Router, depending on which appears
|
|
on that last port. The response automatically follows the reverse path and
|
|
arrives back at the local Hub. The vector 0x0 accesses the device immediately
|
|
connected to the local Hub, which is usually a Router but may be a Hub if
|
|
a Null Router is being used.</P>
|
|
<P>POD contains several commands for performing vector operations, among them
|
|
vector read (<B>vr</B>) and vector write (<B>vw</B>). Here are several examples:</P>
|
|
<OL>
|
|
<LI><TT>vr 0 0</TT>
|
|
<P>Reads address 0 from the device immediately connected to the local Hub.
|
|
Address 0 is the NI_STATUS_REV_ID on a Hub, and RR_STATUS_REV_ID on a Router.
|
|
The status register was deliberately placed at address 0 on both Hubs and
|
|
Routers, and contains a bit field that can be used to tell which type is
|
|
connected.</P>
|
|
<LI><TT>vr 1 rr_scratch_reg0</TT>
|
|
<P>Goes out the Hub into the connected Router, out port 1 of that Router to
|
|
another Router, and reads one of that Router's scratch registers.</P>
|
|
<LI><TT>vw 0x512 ni_port_reset 0x80</TT>
|
|
<P>Goes through a string of 3 Routers to reach a Hub and writes 0x80 (warm
|
|
reset code) into that hub's NI_PORT_RESET register.</P>
|
|
<LI><TT>loop vr 0 0</TT>
|
|
<P>Loops repeatedly reading the status register of the immediately connected
|
|
device. May be useful for getting a rough idea of the link quality since
|
|
the number of polling iterations for each read is printed (if this number
|
|
is not constant or is very high, the link may be performing excessive retries).</P>
|
|
</OL>
|
|
<H3><A NAME="SystemConfigurations">System Configurations</A></H3>
|
|
<H4><A NAME="FullRouterConfiguration">Full Router Configuration</A></H4>
|
|
<CENTER><P ALIGN="CENTER"><IMG SRC="full_router.gif" WIDTH="525" HEIGHT="264" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/full_router.gif"></P>
|
|
</CENTER><CENTER><H5 ALIGN="CENTER">Fully-Populated Origin2000 Module Connectivity</H5>
|
|
</CENTER><P>Consider the example CrayLink Interconnect configuration shown in the figure
|
|
above, which is a typical fully-populated single-module system having two
|
|
Routers (slots R1-R2) and four node cards (slots N1-N4). The five links
|
|
shown are permanent and internal to the system mid-plane, and nothing is
|
|
connected to either Router's external cable ports (1, 2, and 3). Any source
|
|
node can talk to any destination node or router using vectors shown in the
|
|
following table.</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>Vector Routes</CAPTION>
|
|
<TR><TH></TH><TH COLSPAN=6> Destination </TH></TR>
|
|
<TR><TH> Source </TH><TH> N1 </TH><TH> N2 </TH><TH> N3 </TH><TH> N4 </TH><TH> R1 </TH><TH> R2 </TH></TR>
|
|
<TR><TH> N1 </TH><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 0x56 </TD><TD ALIGN=CENTER> 0x46 </TD><TD ALIGN=CENTER> 0 </TD><TD ALIGN=CENTER> 6 </TD></TR>
|
|
<TR><TH> N2 </TH><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 0x56 </TD><TD ALIGN=CENTER> 0x46 </TD><TD ALIGN=CENTER> 0 </TD><TD ALIGN=CENTER> 6 </TD></TR>
|
|
<TR><TH> N3 </TH><TD ALIGN=CENTER> 0x56 </TD><TD ALIGN=CENTER> 0x46 </TD><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
<TR><TH> N4 </TH><TD ALIGN=CENTER> 0x56 </TD><TD ALIGN=CENTER> 0x46 </TD><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
</TABLE></P>
|
|
</CENTER><H4><A NAME="FirstStarRouterConfiguration">Star Router Configuration (First Possibility)</A></H4>
|
|
<CENTER><P ALIGN="CENTER"><IMG SRC="star_router1.gif" WIDTH="523" HEIGHT="289" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/star_router1.gif"></P>
|
|
</CENTER><CENTER><H5 ALIGN="CENTER">Fully-Populated Star Router Connectivity (First Possibility)</H5>
|
|
</CENTER><P>A Star Router configurations is another way of populating an Origin2000
|
|
module. The figure above shows the connectivity of a fully populated Star
|
|
Router configuration with the Router in slot 1 and the Star Router in slot
|
|
2. It is also possible to place the Star Router in slot 1 and the Router
|
|
in slot 2 (see next configuration).</P>
|
|
<P>The midplane connection from R1 port 6 is internal to the system and connects
|
|
directly to N3. The connection from R1 port 3 is provided by an external
|
|
jumper (or cable) connecting to SR2, and is converted from differential
|
|
to single-ended by the XC chip in the Star Router. The remaining ports on
|
|
R1 (1 and 2) may be connected externally.</P>
|
|
<P>This configuration offers two advantages:</P>
|
|
<UL>
|
|
<LI>One of the router cards is replaced by a slightly less expensive Star Router
|
|
card.
|
|
<LI>Interconnect latency is at most one hop for all messages within the module.
|
|
</UL>
|
|
<P>The disadvantage is limited scalability.</P>
|
|
<P>Any source node can talk to any destination node (or R1) using vectors shown
|
|
in the table below.</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>Vector Routes</CAPTION>
|
|
<TR><TH></TH><TH COLSPAN=5> Destination </TH></TR>
|
|
<TR><TH> Source </TH><TH> N1 </TH><TH> N2 </TH><TH> N3 </TH><TH> N4 </TH><TH> R1 </TH></TR>
|
|
<TR><TH> N1 </TH><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 3 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
<TR><TH> N2 </TH><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 3 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
<TR><TH> N3 </TH><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 3 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
<TR><TH> N4 </TH><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 3 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
</TABLE></P>
|
|
</CENTER><H4><A NAME="SecondStarRouterConfiguration">Star Router Configuration (Second Possibility)</A></H4>
|
|
<CENTER><P ALIGN="CENTER"><IMG SRC="star_router2.gif" WIDTH="525" HEIGHT="291" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/star_router2.gif"></P>
|
|
</CENTER><CENTER><H5 ALIGN="CENTER">Fully-Populated Star Router Connectivity (Second Possibility)</H5>
|
|
</CENTER><P>The second Star Router configuration has the Router in slot 2 and the Star
|
|
Router in slot 1. See the previous configuration for more details on the
|
|
Star Router configurations.</P>
|
|
<P>Any source node can talk to any destination node (or R2) using vectors shown
|
|
in the table below.</P>
|
|
<CENTER><P ALIGN="CENTER"><TABLE BORDER=1>
|
|
<CAPTION>Vector Routes</CAPTION>
|
|
<TR><TH></TH><TH COLSPAN=5> Destination </TH></TR>
|
|
<TR><TH> Source </TH><TH> N1 </TH><TH> N2 </TH><TH> N3 </TH><TH> N4 </TH><TH> R2 </TH></TR>
|
|
<TR><TH> N1 </TH><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 3 </TD><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
<TR><TH> N2 </TH><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 3 </TD><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
<TR><TH> N3 </TH><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 3 </TD><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
<TR><TH> N4 </TH><TD ALIGN=CENTER> 6 </TD><TD ALIGN=CENTER> 3 </TD><TD ALIGN=CENTER> 5 </TD><TD ALIGN=CENTER> 4 </TD><TD ALIGN=CENTER> 0 </TD></TR>
|
|
</TABLE></P>
|
|
</CENTER><H4><A NAME="NullRouterConfiguration">Null Router Configuration</A></H4>
|
|
<CENTER><P ALIGN="CENTER"><IMG SRC="null_router.gif" WIDTH="525" HEIGHT="246" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/null_router.gif"></P>
|
|
</CENTER><CENTER><H4 ALIGN="CENTER">Null Router Connectivity (Two Possibilities)</H4>
|
|
</CENTER><P>The Null Router configuration is the simplest way to create a 4-CPU system.
|
|
The figure above shows the two possible connectivities of a module using
|
|
the Null Router configuration.</P>
|
|
<P>In this configuration, only one inexpensive Null Router card is needed.
|
|
Null Routers contain very little componentry and simply connect two Hub
|
|
slots together. The system is not at all scalable, and may be only half-populated
|
|
(populating both halves as two separate systems is not supported).</P>
|
|
<P>Either node may talk to the other using the vector 0. No other vector routes
|
|
are possible.</P>
|
|
<HR>
|
|
<CENTER><P ALIGN="CENTER"><IMG SRC="cheeser.gif" ALIGN="MIDDLE" WIDTH="100" HEIGHT="100" SGI_SETWIDTH SGI_SETHEIGHT SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/cheeser.gif"><BLINK>*</BLINK><IMG SRC="cheeser.gif" ALIGN="MIDDLE" WIDTH="100" HEIGHT="100" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/cheeser.gif"><BLINK>*</BLINK><IMG SRC="cheeser.gif" ALIGN="MIDDLE" WIDTH="100" HEIGHT="100" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/cheeser.gif"><BLINK>*</BLINK><IMG SRC="cheeser.gif" ALIGN="MIDDLE" WIDTH="100" HEIGHT="100" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/cheeser.gif"><BLINK>*</BLINK><IMG SRC="cheeser.gif" ALIGN="MIDDLE" WIDTH="100" HEIGHT="100" SGI_FULLPATH="/tmp_mnt/hosts/ddt/b/csm/ficus/stand/arcs/IP27prom/doc/html/cheeser.gif"></P>
|
|
</CENTER><CENTER><P ALIGN="CENTER">"I give this document 5 cheeses, my highest rating."-Cheeser, <I>The Dairy News.</I></P>
|
|
</CENTER><HR>
|
|
</BODY>
|
|
</HTML>
|