This document gathers known information about partition layout in the original PNOR image from the Talos II platform.
PNOR contains partition table at offset 0. It is constructed out of header and multiple entries. Refer to the ffs source code for more detailed information.
struct ffs_hdr {
uint32_t magic; // @magic: Eye catcher/corruption detector
// should always contain 0x50415254 or text PART
uint32_t version; // @version: Version of the structure
uint32_t size; // @size: Size of partition table (in block_size)
uint32_t entry_size; // @entry_size: Size of struct ffs_entry element (in bytes)
uint32_t entry_count; // @entry_count: Number of struct ffs_entry elements in @entries array
uint32_t block_size; // @block_size: Size of block on device (in bytes)
uint32_t block_count; // @block_count: Number of blocks on device
uint32_t resvd[4]; // @resvd: Reserved words for future use
uint32_t checksum; // @checksum: Header checksum
struct ffs_entry entries[]; // @entries: Pointer to array of partition entries
} __attribute__ ((packed));
struct ffs_entry {
char name[16]; // @name: Opaque null terminated string
uint32_t base; // @base: Starting offset of partition in flash (in hdr.block_size)
uint32_t size; // @size: Partition size (in hdr.block_size)
uint32_t pid; // @pid: Parent partition entry (0xFFFFFFFF for toplevel)
uint32_t id; // @id: Partition entry ID [1..65536]
uint32_t type; // @type: Describe type of partition
uint32_t flags; // @flags: Partition attributes (optional)
uint32_t actual; // @actual: Actual partition size (in bytes)
uint32_t resvd[4]; // @resvd: Reserved words for future use
struct {
uint32_t data[16]; // @user: User data (optional)
} user;
uint32_t checksum; // @checksum: Partition entry checksum (includes all above)
} __attribute__ ((packed));
Each partiton can contain image of following types:
- FFS_TYPE_DATA
- FFS_TYPE_LOGICAL
- FFS_TYPE_PARTITION
Data presented below was extracted using ./fcp -L file:flash.pnor -o 0
and
enchanced with additional data extracted directly from flash.pnor
.
More on how to use this tool can be found in porting.md#ffs-tools.
Partition Table Version: 1 Size: 2 * 0x1000 (block size) Block Count: 0x4000 Entry Size: 0x80 Number of entries: 0x21
Name | ID | Offset:End | Size (bytes) | Type | Flags | Actual size | coreboot usage |
---|---|---|---|---|---|---|---|
part | 0x01 | 0x00000000:0x00001FFF | 0x2000 | p | p | same as size | Partition table |
HBEL | 0x02 | 0x00008000:0x0002BFFF | 0x24000 | d | - | same as size | None |
GUARD | 0x03 | 0x0002C000:0x00030FFF | 0x5000 | d | - | same as size | None |
NVRAM | 0x04 | 0x00031000:0x000C0FFF | 0x90000 | d | - | same as size | Required |
SECBOOT | 0x05 | 0x000C1000:0x000E4FFF | 0x24000 | d | - | same as size | None |
DJVPD | 0x06 | 0x000E5000:0x0012CFFF | 0x48000 | d | - | same as size | None |
MVPD | 0x07 | 0x0012D000:0x001BCFFF | 0x90000 | d | - | same as size | None |
CVPD | 0x08 | 0x001BD000:0x00204FFF | 0x48000 | d | - | same as size | None |
HBB | 0x09 | 0x00205000:0x00304FFF | 0x100000 | d | - | same as size | bootblock |
HBD | 0x0A | 0x00305000:0x00424FFF | 0x120000 | d | - | same as size | None |
HBI | 0x0B | 0x00425000:0x019C4FFF | 0x15A0000 | d | - | same as size | romstage, ramstage, payload (skiboot) |
SBE | 0x0C | 0x019C5000:0x01A80FFF | 0xBC000 | d | - | same as size | None |
HCODE | 0x0D | 0x01A81000:0x01BA0FFF | 0x120000 | d | - | same as size | None |
HBRT | 0x0E | 0x01BA1000:0x021A0FFF | 0x600000 | d | - | same as size | None |
PAYLOAD | 0x0F | 0x021A1000:0x022A0FFF | 0x100000 | d | - | same as size | None |
BOOTKERNEL | 0x10 | 0x022A1000:0x03820FFF | 0x1580000 | d | - | same as size | skiroot |
OCC | 0x11 | 0x03821000:0x03940FFF | 0x120000 | d | - | same as size | None |
FIRDATA | 0x12 | 0x03941000:0x03943FFF | 0x3000 | d | - | same as size | None |
VERSION | 0x13 | 0x03944000:0x03945FFF | 0x2000 | d | - | same as size | skiboot verifies this, but just warns about mismatch |
BMC_INV | 0x14 | 0x03968000:0x03970FFF | 0x9000 | d | - | same as size | None |
HBBL | 0x15 | 0x03971000:0x03977FFF | 0x7000 | d | - | same as size | None |
ATTR_TMP | 0x16 | 0x03978000:0x0397FFFF | 0x8000 | d | - | same as size | None |
ATTR_PERM | 0x17 | 0x03980000:0x03987FFF | 0x8000 | d | - | same as size | None |
IMA_CATALOG | 0x18 | 0x03989000:0x039C8FFF | 0x40000 | d | - | same as size | None |
RINGOVD | 0x19 | 0x039C9000:0x039E8FFF | 0x20000 | d | - | same as size | None |
WOFDATA | 0x1A | 0x039E9000:0x03CE8FFF | 0x300000 | d | - | same as size | None |
HB_VOLATILE | 0x1B | 0x03CE9000:0x03CEDFFF | 0x5000 | d | - | same as size | None |
MEMD | 0x1C | 0x03cee000:0x03CFBFFF | 0xE000 | d | - | same as size | Memory configuration data |
SBKT | 0x1D | 0x03d02000:0x03D05FFF | 0x4000 | d | - | same as size | None |
HDAT | 0x1E | 0x03d06000:0x03D0DFFF | 0x8000 | d | - | same as size | None |
UVISOR | 0x1F | 0x03d10000:0x03E0FFFF | 0x100000 | d | - | same as size | None |
BOOTKERNFW | 0x20 | 0x03e10000:0x03FEFFFF | 0x1E0000 | d | - | same as size | None |
BACKUP_PART | 0x21 | 0x03ff7000:0x03FFEFFF | 0x8000 | d | - | 0 | Required |
Note: If partition has no coreboot usage means that erasing this partition didn't prevent the platform from starting skiroot. Partition may still be used in some case or in the later stages of the booting process.
Type:
- l = FFS_TYPE_LOGICAL
- d = FFS_TYPE_DATA
- p = FFS_TYPE_PARTITION
Flags:
- b = FFS_FLAGS_U_BOOT_ENV
- p = FFS_FLAGS_PROTECTED
Reproducibility of partition content can be found at the wiki page.
This partition contains partition table.
This partition is used by hostboot
to to save crash information for later
debug.
More information can be found at the
wiki page.
This partition is responsible for holding information about components that are detected as broken. More information about it can be found at the wiki page.
Non volatile memory required for OPAL systems. More information can be fouind on the wiki page.
This partition is used to hold secure variables across renppts in
tamper-resistant manner. Because writes to PNOR can't be prevented, hash of
this partition is stored in the TPM NV
, and verified at the boot time.
More information can be found at the
wiki page.
Bootloader code for hostboot
Hostboot data
Main hostboot
application
Self Boot Engine, stored in module EEPROM
FW for PPE
This partition contains skiboot
.
This partition contains skiroot
: Linux kernel bundled
with initrd
(Linux userspace and petitboot
binaries).
Most likely contains FW for OCC (On Chip Controller). Source code for this FW is available here.
Probably just an information about versions of a binaries in the PNOR image.
This partition is used by hostboot during update operation.
This partition holds a list of events supported by OCC microcode.
Holds memory configuration data.
Holds inforamtions from hostboot similar to device-tree, but in hostboot-data format.
Proprietary AMD GPU FW was added here at Talos II System Package 2.00 release.
Because Actual Size
of this partition is 0, it doesn't take any space in PNOR
image.