Skip to content

11. Firmware Inventory and Update Service

Redfish UpdateService provides a standard interface for managing firmware updates across the system. Our implementation supports uploading firmware images via the SimpleUpdate action but does not support using ImageURI to fetch images from remote sources.

Additionally, the platform exposes firmware components through the FirmwareInventory, which shows metadata (e.g., version) but does not support per-component update actions. All firmware updates must go through the system-level UpdateService interface.

11.1 API Endpoints

Get Update Service Information

Returns the status and capabilities of the UpdateService, including available actions and firmware inventory.

URI: /redfish/v1/UpdateService

Method: GET

Response Example:

{
  "Id": "UpdateService",
  "Name": "Update Service",
  "FirmwareInventory": {
    "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory"
  },
  "ServiceEnabled":true,
  "Actions": {
    "#UpdateService.SimpleUpdate": {
      "target": "/redfish/v1/UpdateService/upload"
    },
    "#UpdateService.StartUpdate": {
      "target": "/redfish/v1/UpdateService/Actions/UpdateService.StartUpdate"
    }
  }
}

Difference Between UpdateService.SimpleUpdate and UpdateService.StartUpdate

The platform uses a two-stage firmware update process as defined by Redfish. Below is the difference between the two actions:

Action Purpose Required Supported
SimpleUpdate Uploads firmware to the staging area ✅ Yes ✅ Yes (multipart only)
StartUpdate Triggers actual update process ✅ Yes ✅ Yes

Upload Firmware

This API uploads the firmware file to the device. The file is stored in a staging area and is not applied immediately.

URI: /redfish/v1/UpdateService/upload

Method: POST

Usage Example

curl –k -X POST -H 'X-Auth-Token: $SESSION' -F file=@$FILE https://$HOST/redfish/v1/UpdateService/upload

Start Update Firmware

This API initiates the actual firmware update process using the file uploaded via SimpleUpdate. After the update is completed, the system will reboot.

URI: /redfish/v1/UpdateService/Actions/UpdateService.StartUpdate

Method: POST

Usage Example

curl -k -X POST -H "X-Auth-Token: $SESSION" https://$HOST/redfish/v1/UpdateService/Actions/UpdateService.StartUpdate

Firmware Inventory

Returns a list of available firmware components on the system.

URI: /redfish/v1/UpdateService/FirmwareInventory

Method: GET

Response Example:

{
    "@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
    "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
    "Id": "UpdateService",
    "Name": "Firmware Inventory Collection",
    "Members@odata.count": 1,
    "Members": [
        {
        "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/BMC"
        }
    ]
}

Get Firmware BMC Component Information

Returns detailed information about the BMC firmware, including version and board information.

URI: /redfish/v1/UpdateService/FirmwareInventory/BMC

Method: GET

Response Example:

{
    "@odata.type": "#SoftwareInventory.v1_2_2.SoftwareInventory",
    "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/BMC",
    "Id": "BMC",
    "Name": "OOB Firmware",
    "Version": "1.0.0.0",
    "Manufacturer": "AVerMedia",
    "Status": {
        "State": "Enabled",
        "Health": "OK"
    },
    "Updateable": false
}

11.2 Updating BMC Firmware Workflow

Step1: Check UpdateService Status

API Endpoint:

GET /redfish/v1/UpdateService

Purpose:

Verify that the UpdateService is available and get the supported actions.

Sample Response Snippet:

"Actions": {
  "#UpdateService.SimpleUpdate": {
    "target": "/redfish/v1/UpdateService/Actions/upload"
  },
  "#UpdateService.StartUpdate": {
    "target": "/redfish/v1/UpdateService/Actions/UpdateService.StartUpdate"
  }
}

Step 2. Upload the Firmware using SimpleUpdate

API Endpoint:

POST /redfish/v1/UpdateService/Actions/upload

This step stores the firmware in the device’s staging area but does not apply it yet.

Step 3. Start the Update Process using StartUpdate

API Endpoint:

POST /redfish/v1/UpdateService/Actions/UpdateService.StartUpdate

This triggers the actual update process.

Step 4. Wait for System Reboot

After the firmware is applied, the system will automatically reboot to complete the update process. The duration may vary depending on the firmware size and type.

Step 5. Verification (Optional)

After reboot, you can verify the update by checking the version using:

API Endpoint:

GET /redfish/v1/UpdateService/FirmwareInventory/BMC

Look for the Version fields:

{
    "@odata.type": "#SoftwareInventory.v1_2_2.SoftwareInventory",
    "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/BMC",
    "Id": "BMC",
    "Name": "OOB Firmware",
    "Version": "1.0.0.0",
    "Manufacturer": "AVerMedia",
    "Status": {
        "State": "Enabled",
        "Health": "OK"
    },
    "Updateable": false
}

Next section