Unformatted text preview: mber of the microcode update loader. Number of update blocks the system can record in NVRAM. Carry Set - Failure - AH Contains Status. Carry Clear - All return values are valid. Function Code Sub-function 0D042h 00h - Presence Test Return Codes: (See Table 8-8 for code definitions) SUCCESS NOT_IMPLEMENTED Function completed successfully. Function not implemented. In order to assure that the BIOS function is present, the caller must verify the Carry Flag, the Return Code, and the 64-bit signature. Each update block is exactly 2048 bytes in length. The update count reflects the number of update blocks available for storage within non-volatile RAM. The update count must return with a value greater than or equal to the number of unique processor steppings currently installed within the system. The loader version number refers to the revision of the update loader program that is included in the system BIOS image. 8-44 PROCESSOR MANAGEMENT AND INITIALIZATION Function 01h - Write Microcode Update Data This function integrates a new microcode update into the BIOS storage device. Table 8-4 lists the parameters and return codes for the function.
Table 8-10. Parameters for the Write Update Data Function
Input: AX BL ED:DI CX DX SI SS:SP Output: CF AH AL Carry Flag Return Code OEM Error Carry Set - Failure - AH Contains Status. Carry Clear - All return values are valid. Status of the Call Additional OEM Information. Function Code Sub-function Update Address Scratch Pad1 Scratch Pad2 Scratch Pad3 Stack pointer 0D042h 01h - Write Update Real Mode pointer to the Intel Update structure. This buffer is 2048 bytes in length Real Mode Segment address of 64 kilobytes of RAM Block. Real Mode Segment address of 64 kilobytes of RAM Block. Real Mode Segment address of 64 kilobytes of RAM Block. 32 kilobytes of Stack Minimum. Return Codes: (See Table 8-8 for code definitions) SUCCESS WRITE_FAILURE ERASE_FAILURE READ_FAILURE STORAGE_FULL Function completed successfully. A failure because of the inability to write the storage device. A failure because of the inability to erase the storage device. A failure because of the inability to read the storage device. The BIOS non-volatile storage area is unable to accommodate the update because all available update blocks are filled with updates that are needed for processors in the system. The processor stepping does not currently exist in the system. The update header contains a header or loader version that is not recognized by the BIOS. The update does not checksum correctly. The processor rejected the update. The same or more recent revision of the update exists in the storage device. CPU_NOT_PRESENT INVALID_HEADER INVALID_HEADER_CS SECURITY_FAILURE INVALID_REVISION The BIOS is responsible for selecting an appropriate update block in the non-volatile storage for storing the new update. This BIOS is also responsible for ensuring the integrity of the information provided by the caller, including authenticating the proposed update before incorporating it into storage. 8-45 PROCESSOR MANAGEMENT AND INITIALIZATION Before writing the update block into NVRAM, the BIOS should ensure that the update structure meets the following criteria in the following order: 1. The update header version should be equal to an update header version recognized by the BIOS. 2. The update loader version in the update header should be equal to the update loader version contained within the BIOS image. 3. The update block should checksum to zero. This checksum is computed as a 32-bit summation of all 512 double words in the structure, including the header. The BIOS selects an update block in non-volatile storage for storing the candidate update. The BIOS can select any available update block as long as it guarantees that only a single update exists for any given processor stepping in non-volatile storage. If the update block selected already contains an update, the following additional criteria apply to overwrite it: • • The processor signature in the proposed update should be equal to the processor signature in the header of the current update in NVRAM (CPUID + platform ID bits). The update revision in the proposed update should be greater than the update revision in the header of the current update in NVRAM. If no unused update blocks are available and the above criteria are not met, the BIOS can overwrite an update block for a processor stepping that is no longer present in the system. This can be done by scanning the update blocks and comparing the processor steppings, identified in the MP Specification table, to the processor steppings that currently exist in the system. Finally, before storing the proposed update into NVRAM, the BIOS should verify the authenticity of the update via the mechanism described in Section 8.10.2., “Microcode Update Loader”. This includes loading the update into the current processor, executing the CPUID instruction, reading MSR 08Bh, and comparing a calculated value with the update revi...
View Full Document
- Spring '10