background image

Vol. 3A 8-19

MULTIPLE-PROCESSOR MANAGEMENT

Following a power-up or reset, the APs complete a minimal self-configuration, then wait for a startup signal (a SIPI 
message) from the BSP processor. Upon receiving a SIPI message, an AP executes the BIOS AP configuration code, 
which ends with the AP being placed in halt state.
For Intel 64 and IA-32 processors supporting Intel Hyper-Threading Technology, the MP initialization protocol treats 
each of the logical processors on the system bus or coherent link domain as a separate processor (with a unique 
APIC ID). During boot-up, one of the logical processors is selected as the BSP and the remainder of the logical 
processors are designated as APs.

8.4.2 

MP Initialization Protocol Requirements and Restrictions

The MP initialization protocol imposes the following requirements and restrictions on the system:

The MP protocol is executed only after a power-up or RESET. If the MP protocol has completed and a BSP is 
chosen, subsequent INITs (either to a specific processor or system wide) do not cause the MP protocol to be 
repeated. Instead, each logical processor examines its BSP flag (in the IA32_APIC_BASE MSR) to determine 
whether it should execute the BIOS boot-strap code (if it is the BSP) or enter a wait-for-SIPI state (if it is an 
AP).

All devices in the system that are capable of delivering interrupts to the processors must be inhibited from 
doing so for the duration of the MP initialization protocol. The time during which interrupts must be inhibited 
includes the window between when the BSP issues an INIT-SIPI-SIPI sequence to an AP and when the AP 
responds to the last SIPI in the sequence.

8.4.3 

MP Initialization Protocol Algorithm for MP Systems

Following a power-up or RESET of an MP system, the processors in the system execute the MP initialization protocol 
algorithm to initialize each of the logical processors on the system bus or coherent link domain. In the course of 
executing this algorithm, the following boot-up and initialization operations are carried out:
1. Each logical processor is assigned a unique APIC ID, based on system topology. The unique ID is a 32-bit value 

if the processor supports CPUID leaf 0BH, otherwise the unique ID is an 8-bit value. (see Section 8.4.5, “Identi-
fying Logical Processors in an MP System”). 

2. Each logical processor is assigned a unique arbitration priority based on its APIC ID.
3. Each logical processor executes its internal BIST simultaneously with the other logical processors in the 

system. 

4. Upon completion of the BIST, the logical processors use a hardware-defined selection mechanism to select the 

BSP and the APs from the available logical processors on the system bus. The BSP selection mechanism differs 
depending on the family, model, and stepping IDs of the processors, as follows: 
— Later generations of IA processors within family 0FH (see Section 8.4), IA processors with system bus 

(family=06H, extended_model=0, model>=0EH), or all other modern Intel processors (family=06H, 
extended_model>0):

The logical processors begin monitoring the BNR# signal, which is toggling. When the BNR# pin stops 

toggling, each processor attempts to issue a NOP special cycle on the system bus. 

The logical processor with the highest arbitration priority succeeds in issuing a NOP special cycle and is 

nominated the BSP. This processor sets the BSP flag in its IA32_APIC_BASE MSR, then fetches and 
begins executing BIOS boot-strap code, beginning at the reset vector (physical address FFFF FFF0H).

The remaining logical processors (that failed in issuing a NOP special cycle) are designated as APs. They 

leave their BSP flags in the clear state and enter a “wait-for-SIPI state.”

— Early generations of IA processors within family 0FH (family=0FH, model=0H, stepping<=09H), P6 family 

or older processors supporting MP operations (family=06H, extended_model=0, model<=0DH; or family 
<06H):

Each processor broadcasts a BIPI to “all including self.” The first processor that broadcasts a BIPI (and 

thus receives its own BIPI vector), selects itself as the BSP and sets the BSP flag in its IA32_APIC_BASE