Intel Agilex® 7 Hard Processor System Remote System Update User Guide

ID 683184
Date 2/23/2024
Public
Document Table of Contents

6.3. Configuration Pointer Block

The configuration pointer block contains the list of application images to be tried, in priority order.

The decision firmware uses the configuration pointer block to determine which image to load on power up, nCONFIG or if the previous image has failed.

The decision firmware never writes to the CPB, except to remove a factory update image, or a decision firmware update image after they have successfully completed, by clearing the value. The decision firmware never erases a CPB.

The HPS software (both U-Boot and LibRSU) use the CPB to add or remove application images, and to change their priorities. Typically this is done by writing new entries in unused locations (all bits set to '1') after erasing flash or canceling images by writing zero to the corresponding locations. Occasionally HPS software needs to erase CPBs as they become full of canceled entries, a process called "CPB compression".

There are two copies of the configuration pointer block. Whenever one CPB is erased in order to write new content to it, the other CPB is left untouched so that if a power failure happens before the first CPB is fully written to flash, the second one remains valid. There is a magic field in the CPB header, which is written last, after a CPB is erased and re-populated. An incorrect magic filed indicates that a power failure has occurred and that CPB copy is invalid.

If the decision firmware detects that CPB0 is invalid, it tries to use CPB1 instead. If both CPBs are invalid, the decision firmware loads the factory image. The decision firmware reports to the user whether CPB0 or both CPB0 and CPB1 are corrupted.

When only one CPB is corrupted, the HPS software automatically detects the corruption and recovers the corrupt CPB from the other good copy. This happens at initialization time, both in U-Boot and LibRSU.

In addition to the magic field, the HPS software checks CPB integrity by validating that all entries correspond to valid SPT partitions. It also compares the two CPBs and if not identical it considers both corrupted.

When both CPBs are corrupted, you are notified by both U-Boot and LibRSU, and you have reduced functionality available. You can recover the CPBs by either restoring a saved copy, or creating an empty CPB, then adding images to it, from both U-Boot and Linux.