Intel® 500 Series Chipset Family On-Package PCH Datasheet Volume 1

Datasheet

ID 631119
Date 13/07/2021 00:00:00
Public Content
Document Table of Contents

Boot Block Update Scheme

The PCH supports a “Top-Block Swap” mode that has the PCH swap the top block in the FWH or SPI flash (the boot block) with another location. This allows for safe update of the Boot Block (even if a power failure occurs). When the “top-swap” enable bit is set, the PCH will invert A16 for cycles going to the upper two 64-KB blocks in the FWH or appropriate address lines as selected in Boot Block Size (BOOT_​BLOCK_​SIZE) soft strap for SPI.

For FHW when top swap is enabled, accesses to FFFF_​0000h-FFFF_​FFFFh are directed to FFFE_​0000h-FFFE_​FFFFh and vice versa. When the Top Swap Enable bit is 0, the PCH will not invert A16.

For SPI when top swap is enabled, the behavior is as described below. When the Top Swap Enable bit is 0, the PCH will not invert any address bit.

Boot Block Update Scheme

BOOT_​BLOCK_​SIZE Value

Accesses to

Being Directed to

000 (64 KB)

FFFF_​0000h - FFFF_​FFFFh

FFFE_​0000h - FFFE_​FFFFh and vice versa

001 (128 KB)

FFFE_​0000h - FFFF_​FFFFh

FFFC_​0000h - FFFD_​FFFFh and vice versa

010 (256 KB)

FFFC_​0000h - FFFF_​FFFFh

FFF8_​0000h - FFFB_​FFFFh and vice versa

011 (512 KB)

FFF8_​0000h - FFFF_​FFFFh

FFF0_​0000h - FFF7_​FFFFh and vice versa

100 (1 MB)

FFF0_​0000h - FFFF_​FFFFh

FFE0_​0000h - FFEF_​FFFFh and vice versa

101 (2 MB)

FFE0_​0000h - FFFF_​FFFFh

FFC0_​0000h - FFDF_​FFFFh and vice versa

110 (4 MB)

FFC0_​0000h - FFFF_​FFFFh

FF80_​0000h - FFBF_​FFFFh and vice versa

111 (8 MB)

FF80_​0000h - FFFF_​FFFFh

FF00_​0000h - FF7F_​FFFFh and vice versa

Note:This bit is automatically set to 0 by RTCRST#, but not by PLTRST#.

The scheme is based on the concept that the top block is reserved as the “boot” block, and the block immediately below the top block is reserved for doing boot-block updates.

The algorithm is:

  1. Software copies the top block to the block immediately below the top
  2. Software checks that the copied block is correct. This could be done by performing a checksum calculation.
  3. Software sets the “Top-Block Swap” bit. This will invert the appropriate address bits for the cycles going to the FWH or the SPI.
  4. Software erases the top block
  5. Software writes the new top block
  6. Software checks the new top block
  7. Software clears the Top-Block Swap bit
  8. Software sets the Top_​Swap Lock-Down bit

If a power failure occurs at any point after step 3, the system will be able to boot from the copy of the boot block that is stored in the block below the top. This is because the top-swap bit is backed in the RTC well.

There is one remaining unusual case that could occur if the RTC battery is not sufficiently high to maintain the RTC well. To avoid the potentially fatal case (where the Top-Swap bit is NOT set, but the top block is not valid), a pin strap will allow forcing the top-swap bit to be set. This would be a last resort to allow the user to get the system to boot (and avoid having to de-solder the system flash).

When the top-swap strap is used, the top-swap bit will be forced to 1 (cannot be cleared by software).

The BIOS algorithm should be as follows:

  1. If an RTC well power failure is experienced during a boot block update, the system will probably not be able to boot at that point.
  2. The user can set the Top-Swap pin strap and force the system to boot from the 2nd block. The code in the 2nd block should read the valid BIOS image from disk and put it into the top-swap.
  3. The BIOS will not be able to clear the Top-Swap bit (because the jumper is in place). The user should then remove the jumper and reboot.