204 lines
6.3 KiB
ReStructuredText
204 lines
6.3 KiB
ReStructuredText
.. 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.
|