Boot header is used by PMC BootROM. Based on the attributes set in the boot header, PMC BootROM validates the Platform Loader and Manager (PLM) and loads it to the PPU RAM. The first 16 bytes are intended for SelectMAP Bus detection. PMC BootROM and PLM ignore this data so Bootgen does not include this data in any of its operations like checksum/SHA/RSA/Encryption and so on. The following code snippet is an example of SelectMAP Bus width detection pattern bits. Bootgen places the following data in first 16-bytes as per the width selected.
- X8
- [LSB] 00 00 00 DD 11 22 33 44 55 66 77 88 99 AA BB CC [MSB]
- X16
- [LSB] 00 00 DD 00 22 11 44 33 66 55 88 77 AA 99 CC BB [MSB]
- X32
- [LSB] DD 00 00 00 44 33 22 11 88 77 66 55 CC BB AA 99 [MSB]
The following table shows the boot header format for an AMD Versalâ„¢ adaptive SoC.
Offset (Hex) | Size (Bytes) | Description | Details |
---|---|---|---|
0x00
|
16 | SelectMAP bus width | Used to determine if the SelectMAP bus width is x8, x16, or x32 |
0x10
|
4 | QSPI bus width | QSPI bus width description. This is required to identify the QSPI flash in single/dual stacked or dual parallel mode. 0xAA995566 in the little endian format. |
0x14
|
4 | Image identification | Boot image identification string. Contains 4 bytes X, N, L, X in byte order, which is 0x584c4e58 in the little endian format. |
0x18
|
4 | Encryption key source | This field is used to identify the AES key source:
|
0x1C
|
4 | PLM source offset | PLM source start address in PDI |
0x20
|
4 | PMC data load address | PMC CDO address to load |
0x24
|
4 | PMC data length | PMC CDO length |
0x28
|
4 | Total PMC data length | PMC CDO length including authentication and encryption overhead |
0x2C
|
4 | PLM length | PLM original image size |
0x30
|
4 | Total PLM length | PLM image size including the authentication and encryption overhead |
0x34
|
4 | Boot header attributes | Versal Adaptive SoC Boot Header Attributes |
0x38
|
32 | Black key | 256-bit key, only valid when encryption status is set to black key in boot header |
0x58
|
12 | Black IV | Initialization vector used when decrypting the black key |
0x64
|
12 | Secure header IV | Secure header initialization vector |
0x70
|
4 | PUF shutter value | Length of the time the PUF samples before it closes
the shutter Note: This shutter value must match the
shutter value that was used during PUF registration.
|
0x74
|
12 |
Secure Header IV for PMC Data |
The IV used to decrypt secure header of PMC data. |
0x80
|
68 | Reserved | Populate with zeroes. |
0xC4
|
4 | Meta Header Offset | Offset to the start of meta header. |
0xC8-0x124
|
96 | Reserved | |
0x128
|
2048 | Register init | Stores register write pairs for system register initialization |
0x928
|
1544 | PUF helper data | PUF helper data |
0xF30
|
4 | Checksum | Header checksum |
0xF34
|
76 | SHA3 padding | SHA3 standard padding |