When the system is powered on, after the CPU-level selftests
complete, the processor-dependent code (PDC) selects a monarch processor.
As sovereign, the monarch is responsible for all the initial
system loader activity; it is the only processor allowed to launch
(boot) and enter into the operating system.
The selection of the monarch processor is based on the physical
slot location and boot ID. Typically, the processor with the lowest
hardware path address (hpa)
becomes monarch, although each system has its own arbitration scheme.
Later in the initialization process, only the monarch processor
walks the bus to determine what other processors are configured
and then launches them one at a time to create a multi-processor
system.
Figure 1-2 “PDC code selects monarch
processor” shows the module
layout of a system with four processors, all attached to a central
bus. The processor with the highest BOOT_ID
value is selected; however as shown, processor BOOT_ID
is set to a default value of two by the factory. If more than one
processor has the same high BOOT_ID,
the processor with the lowest slot number on the bus is selected
to be Monarch. In this case, the PDC code is likely to select the
processor in slot 0 as the monarch.
Monarch selection can be altered by several criteria:
The PDC routine PDC_CONFIG can
configure and deconfigure a given processor based on self-test results.
If the processor does not complete self-test, PDC_CONFIG
removes it from consideration as potential monarch.
A user can select a monarch processor using the
Boot Console Handler (BCH)
code's user interface.
The Monarch processor takes charge and initializes
the bus by sending a CMD.RESET.ST
call to each module, thereby excluding the remaining processors.
Once the controlling processor is selected, it invokes its
own processor dependent code (PDC) to perform the following:
Initialize all other I/O modules.
Set up and initialize physical memory for Page 0
of physical memory.
Load the contents from the PDC ROM to Page 0.
Use the Boot Console Handler (BCH)
to select and initialize the console and boot device.
When the monarch processor is selected, the remaining ("serf")
processors go into the "rendezvous code" where
all interrupts are cleared. The serf processors wait for a rendezvous
interrupt, which happens after the monarch is done with its boot
time initialization. If the monarch fails, the serfs can usurp its
power (deconfigure the monarch) and force a system reboot, whereupon
the arbitration process is repeated and a new monarch selected.