Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A, System Programming Guide, Part 1
Vol. 3A 9-51
PROCESSOR MANAGEMENT AND INITIALIZATION
may be implemented as a setup option to clear all NVRAM slots or as BIOS code that
searches and eliminates unused entries during boot.
NOTES
For IA-32 processors starting with family 0FH and model 03H and
Intel 64 processors, the microcode update may be as large as 16
KBytes. Thus, BIOS must allocate 8 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
initialization 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))