beautypg.com

Intel IA-32 User Manual

Page 424

background image

9-50 Vol. 3A

PROCESSOR MANAGEMENT AND INITIALIZATION

update blocks for each microcode update. In a MP system, a common
microcode update may be sufficient for each socket in the system.

For IA-32 processors earlier than family 0FH and model 03H, the microcode
update is 2 KBytes. An MP-capable BIOS that supports multiple steppings
must allocate a block for each socket in the system.

A single-processor BIOS that supports variable-sized microcode update and
fixed-sized microcode update must allocate one 16-KByte region and a
second region of at least 2 KBytes.

The following algorithm (Example 9-11) describes the steps performed during BIOS initializa-
tion used to load the updates into the processor(s). The algorithm assumes:

The BIOS ensures that no update contained within NVRAM has a header version or loader
version that does not match one currently supported by the BIOS.

The update contains a correct checksum.

The BIOS ensures that (at most) one update exists for each processor stepping.

Older update revisions are not allowed to overwrite more recent ones.

These requirements are checked by the BIOS during the execution of the write update function
of this interface. The BIOS sequentially scans through all of the update blocks in NVRAM
starting with index 0. The BIOS scans until it finds an update where the processor fields in the
header match the processor signature (extended family, extended model, type, family, model,
and stepping) as well as the platform bits of the current processor.

Example 9-11. Pseudo Code, Checks Required Prior to Loading an Update

For each processor in the system

{

Determine the Processor Signature via CPUID function 1;

Determine the Platform Bits

← 1 << IA32_PLATFORM_ID[52:50];

For (I

← UpdateBlock 0, I < NumOfBlocks; I++)

{

If (Update.Header_Version == 0x00000001)

{

If ((Update.ProcessorSignature == Processor Signature) &&

(Update.ProcessorFlags & Platform Bits))

{

Load Update.UpdateData into the Processor;

Verify update was correctly loaded into the processor

Go on to next processor

Break;

}

Else If (Update.TotalSize > (Update.DataSize + 48))

{

N

← 0

While (N < Update.ExtendedSignatureCount)