| .. SPDX-License-Identifier: GPL-2.0-only |
| |
| ================================== |
| PLDM Firmware file format overview |
| ================================== |
| |
| A PLDM firmware package is a binary file which contains a header that |
| describes the contents of the firmware package. This includes an initial |
| package header, one or more firmware records, and one or more components |
| describing the actual flash contents to program. |
| |
| This diagram provides an overview of the file format:: |
| |
| overall file layout |
| +----------------------+ |
| | | |
| | Package Header | |
| | | |
| +----------------------+ |
| | | |
| | Device Records | |
| | | |
| +----------------------+ |
| | | |
| | Component Info | |
| | | |
| +----------------------+ |
| | | |
| | Package Header CRC | |
| | | |
| +----------------------+ |
| | | |
| | Component Image 1 | |
| | | |
| +----------------------+ |
| | | |
| | Component Image 2 | |
| | | |
| +----------------------+ |
| | | |
| | ... | |
| | | |
| +----------------------+ |
| | | |
| | Component Image N | |
| | | |
| +----------------------+ |
| |
| Package Header |
| ============== |
| |
| The package header begins with the UUID of the PLDM file format, and |
| contains information about the version of the format that the file uses. It |
| also includes the total header size, a release date, the size of the |
| component bitmap, and an overall package version. |
| |
| The following diagram provides an overview of the package header:: |
| |
| header layout |
| +-------------------------+ |
| | PLDM UUID | |
| +-------------------------+ |
| | Format Revision | |
| +-------------------------+ |
| | Header Size | |
| +-------------------------+ |
| | Release Date | |
| +-------------------------+ |
| | Component Bitmap Length | |
| +-------------------------+ |
| | Package Version Info | |
| +-------------------------+ |
| |
| Device Records |
| ============== |
| |
| The device firmware records area starts with a count indicating the total |
| number of records in the file, followed by each record. A single device |
| record describes what device matches this record. All valid PLDM firmware |
| files must contain at least one record, but optionally may contain more than |
| one record if they support multiple devices. |
| |
| Each record will identify the device it supports via TLVs that describe the |
| device, such as the PCI device and vendor information. It will also indicate |
| which set of components that are used by this device. It is possible that |
| only subset of provided components will be used by a given record. A record |
| may also optionally contain device-specific package data that will be used |
| by the device firmware during the update process. |
| |
| The following diagram provides an overview of the device record area:: |
| |
| area layout |
| +---------------+ |
| | | |
| | Record Count | |
| | | |
| +---------------+ |
| | | |
| | Record 1 | |
| | | |
| +---------------+ |
| | | |
| | Record 2 | |
| | | |
| +---------------+ |
| | | |
| | ... | |
| | | |
| +---------------+ |
| | | |
| | Record N | |
| | | |
| +---------------+ |
| |
| record layout |
| +-----------------------+ |
| | Record Length | |
| +-----------------------+ |
| | Descriptor Count | |
| +-----------------------+ |
| | Option Flags | |
| +-----------------------+ |
| | Version Settings | |
| +-----------------------+ |
| | Package Data Length | |
| +-----------------------+ |
| | Applicable Components | |
| +-----------------------+ |
| | Version String | |
| +-----------------------+ |
| | Descriptor TLVs | |
| +-----------------------+ |
| | Package Data | |
| +-----------------------+ |
| |
| Component Info |
| ============== |
| |
| The component information area begins with a count of the number of |
| components. Following this count is a description for each component. The |
| component information points to the location in the file where the component |
| data is stored, and includes version data used to identify the version of |
| the component. |
| |
| The following diagram provides an overview of the component area:: |
| |
| area layout |
| +-----------------+ |
| | | |
| | Component Count | |
| | | |
| +-----------------+ |
| | | |
| | Component 1 | |
| | | |
| +-----------------+ |
| | | |
| | Component 2 | |
| | | |
| +-----------------+ |
| | | |
| | ... | |
| | | |
| +-----------------+ |
| | | |
| | Component N | |
| | | |
| +-----------------+ |
| |
| component layout |
| +------------------------+ |
| | Classification | |
| +------------------------+ |
| | Component Identifier | |
| +------------------------+ |
| | Comparison Stamp | |
| +------------------------+ |
| | Component Options | |
| +------------------------+ |
| | Activation Method | |
| +------------------------+ |
| | Location Offset | |
| +------------------------+ |
| | Component Size | |
| +------------------------+ |
| | Component Version Info | |
| +------------------------+ |
| | Package Data | |
| +------------------------+ |
| |
| |
| Package Header CRC |
| ================== |
| |
| Following the component information is a short 4-byte CRC calculated over |
| the contents of all of the header information. |
| |
| Component Images |
| ================ |
| |
| The component images follow the package header information in the PLDM |
| firmware file. Each of these is simply a binary chunk with its start and |
| size defined by the matching component structure in the component info area. |