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.
 |