Networking NVIDIA Firmware Tools (MFT) Documentation

pldm_pkg_gen

pldm_pkg_gen is a tool for generating PLDM packages (.fwpkg), enabling Out-of-Band (OOB) firmware and configurations updates across supported devices.                                                                                                                   
                                                         
The tool operates in a two-stage workflow:

  • In the first stage, the user provides a cookbook definition — a JSON file that declares the target device records, component types, and required descriptors. The tool consumes this definition and emits an empty cookbook template, pre-structured with all relevant fields.

  • In the second stage, the user populates the cookbook with the actual firmware sources, version strings, and device-specific identifiers (e.g., PCI IDs, PSID), then invokes the tool to produce the final binary  PLDM package.

To generate a PLDM fwpkg:

  1. Create a Cookbook Definition

Begin by generating a cookbook definition from a JSON file. The "cookbook definition" specifies the descriptors and components that will be included in each device record of the generated cookbook.

For example, the cookbook definition may resemble the following:

{
    "Device Records":[
        {
            "Components":[
                "MLNX_NVCONFIG"
            ],
            "Descriptors":[
                "IANA Enterprise ID",
                "PCI Vendor ID",
                "PSID",
                "UUID",
                "APSKU",
                "PCI Device ID",
                "PCI Subsystem Vendor ID",
                "PCI Subsystem ID"
            ]
        }
        // You can add here more device records if needed
    ]
}


This example creates a device record with one component ("MLNX_NVCONFIG") and eight descriptors: 

    • "IANA Enterprise ID"

    • "PCI Vendor ID"

    •  "PSID"

    •  "UUID"

    • "APSKU"

    • "PCI Device ID",

    • "PCI Subsystem Vendor ID"

    • "PCI Subsystem ID"


Here are all supported Components and Descriptors:

Components:

    • "FW" (general fw)

    • "NIC_FW"

    •  "ARM_Capsule"

    • "BF3BMC_PLDM"

    • "BFB"

    • "BF3BMC_CEC_PLDM"

    • "OEM_NVCONFIG"

    • "MLNX_NVCONFIG"

    • "DIGITAL_CACERT_REMOVAL"

    • "DIGITAL_CACERT_CHAIN_REMOVAL"


Descriptors:

    • "IANA Enterprise ID"

    • "PCI Vendor ID"

    • "APSKU"

    • "PSID"

    • "UUID"

    • "PCI Revision ID"

    • "PCI Device ID"

    • "PCI Subsystem ID"

    • "PCI Subsystem Vendor ID"

    • "recovery"


Component order may be important; confirm priorities with the architecture team. If present, "IANA Enterprise ID" and "PCI Vendor ID" should come first.


  1. Creating an Empty Cookbook from a Cookbook Definition

To generate an empty cookbook, execute the following command:

pldm_pkg_gen --cookbook_def/-cd <cookbook_definition> --output_file/-o <empty cookbook> gen_empty_cookbook

This will result in the creation of an empty cookbook, as illustrated below:

{
   "Components" : {
      "Component 0" : {

"Comparison Stamp" : "",
         "Identifier" : "MLNX_NVCONFIG",
         "Options" : "",
         "Requested Activation Method" : "",
         "Source" : "",
         "Version" : ""
      }
   },
   "Device Records" : [
      {
         "Components" : [ "Component 0" ],
         "Descriptors" : [
            {
               "IANA Enterprise ID" : "DEFAULT_VALUE"
            },
            {
               "PCI Vendor ID" : "DEFAULT_VALUE"
            },
            {
               "PSID" : ""
            },
            {
               "UUID" : ""
           },
            {
               "APSKU" : ""
            },
            {
               "PCI Device ID" : ""
            },
            {
               "PCI Subsystem Vendor ID" : ""
            },
            {
               "PCI Subsystem ID" : ""
            }
         ],
         "Options" : "",
         "Set Version" : ""
      }
],

   "Package Header Format Revision" : "",
"Package Version" : "",
"Release Date Time" : ""

}


Complete the fields in the cookbook as necessary.

    • The Source field is mandatory

    • If the Package Header Format revision exists, its value should be set to 1 or 3. If it stays empty, the value will be set to 1

    • The Release Date Time will be generated automatically

    • DEFAULT_VALUES" indicates that a default value other than 0 is provided

    • All other fields should be set to 0x0 if left blank

For example:

{
   "Components" : {
      "Component 0" : {

"Comparison Stamp" : "0x12345678",
         "Identifier" : "MLNX_NVCONFIG",
         "Options" : "",
         "Requested Activation Method" : "",
         "Source" : "/tmp/cx8.bin",
         "Version" : "222.222.222"
      }
   },
   "Device Records" : [
      {
         "Components" : [ "Component 0" ],
         "Descriptors" : [
            {
               "IANA Enterprise ID" : "DEFAULT_VALUE"
            },
            {
               "PCI Vendor ID" : "DEFAULT_VALUE"
            },
            {
               "PSID" : "MT_0000000893"
            },
            {
               "UUID" : "c896bd88c4954118a13b7cdcb5ecc35c"
            },
            {
               "APSKU" : "0x00000893"
            },
            {
               "PCI Device ID" : "0x1023"
            },
            {
               "PCI Subsystem Vendor ID" : "0x153b"
            },
            {
               "PCI Subsystem ID" : "0x153b"
            }
         ],
         "Options" : "",
         "Set Version" : "222.222.222"
      }
   ],
   "Package Header Format Revision" : "1",
   "Package Version" : "1.2.0",
   "Release Date Time" : “2026-04-12 14:30:00“ /* Format : YYYY-MM-DD HH:MM:SS */
}


  1. Create PLDM fwpkg from Cookbook

Use:

pldm_pkg_gen --input_file/-i <cookbook> --output_file/-o <fwpkg> gen_pldm_package


Disable Custom PSID

To disable Custom PSID from a PLDM fwpkg, run the following command:

pldm_pkg_gen --input_file/-i <input.fwpkg> --output_file/-o <output.fwpkg> disable_custom_psid


Users can add [--minor_version <XX>] to replace the minor to the given value:

pldm_pkg_gen -i <input.fwpkg> -o <output.fwpkg> [--minor_version <XX>] disable_custom_psid


When the PSID is changed, the APSKU descriptor is also changed to be aligned to the PSID.

Last updated: