Caliptra Common Commands

Overview

This document defines the common Caliptra device management commands. These commands are transport-agnostic and common across all vendors integrating the Caliptra subsystem. They are accessed via the following transport mechanisms:

For the unified software architecture that handles both paths, see Unified Caliptra Command Handling.

Transport-specific command codes are defined by the transport documents. This document defines the common command names, transport assignment, and payload semantics.

Transport Selection

Commands are assigned to MCTP VDM IANA when they do not require SPDM authorization, SPDM-defined semantics, or SPDM streaming/chunking. Commands are assigned to SPDM VDM IANA when they require those properties. The MCI mailbox provides the in-band path for the same common command semantics where implemented.

Command List

The following table describes the commands defined under this specification. There are two categories: (1) Required commands (R) that are mandatory for all implementations, (2) Optional commands (O) that may be utilized if the specific implementation requires it.

Message NameR/OTransport(s)Description
Firmware VersionRMCTP VDM, MCI MailboxRetrieve firmware version information.
Device CapabilitiesRMCTP VDM, MCI MailboxRetrieve device capabilities.
Get Debug LogRMCTP VDM, MCI MailboxRetrieve debug log.
Clear Debug LogRMCTP VDM, MCI MailboxClear debug log.
Get AttestationOSPDM VDMRetrieve attestation evidence. MCI Mailbox support is TBD.
Request Debug UnlockOSPDM VDM, MCI MailboxRequest debug unlock in production environment.
Authorize Debug Unlock TokenOSPDM VDM, MCI MailboxSend debug unlock token to device for authorization.
Export Attested CSROSPDM VDM, MCI MailboxExport attested CSR for a Caliptra device identity key (LDevID, FMC Alias, or RT Alias).
Authorization-Gated SubcommandsOSPDM VDM, MCI MailboxSecurity-sensitive provisioning and fuse subcommands. Authorization requirements and transport-specific authorization flows are TBD.

Authorization-Gated Subcommands

The following subcommands are assigned to the SPDM VDM IANA authorization-gated path and are also available through the MCI mailbox path where implemented. The concrete SPDM authorization mechanism and message flow are still under design and will be specified separately. For the MCI mailbox path, access control is governed by the mailbox security boundary and platform policy.

Subcommand NameTransport(s)Description
Get Auth ChallengeSPDM VDM IANA, MCI MailboxChallenge acquisition for authorization-gated use.
Provision Vendor PK HashSPDM VDM IANA, MCI MailboxProvision vendor public key hash.
Fuse Increase Caliptra Min SVNSPDM VDM IANA, MCI MailboxIncrease Caliptra minimum SVN.
Program Field EntropySPDM VDM IANA, MCI MailboxProgram field entropy.
Fuse Revoke Vendor Public KeySPDM VDM IANA, MCI MailboxRevoke vendor public key.
Fuse Revoke Vendor PK HashSPDM VDM IANA, MCI MailboxRevoke vendor public key hash.
Fuse Lock PartitionSPDM VDM IANA, MCI MailboxLock fuse partition.

Command Definitions

This section defines the request and response payloads for each command.

Common response payload tables describe command-specific response data only. They exclude transport-specific status and framing fields such as SPDM VDM completion codes, MCTP VDM completion codes, MCI mailbox chksum, MCI mailbox fips_status, and MCI mailbox variable-length data_len headers.

Firmware Version

Retrieves the version of the target firmware.

Request Payload:

Byte(s)NameTypeDescription
0:3area_indexu32Area Index:
- 00h = Caliptra core firmware
- 01h = MCU runtime firmware
- 02h = SoC firmware
Additional indexes are firmware-specific

Response Payload:

Byte(s)NameTypeDescription
0:31versionu8[32]Firmware Version Number in ASCII format

Device Capabilities

Request Payload: Empty

Response Payload:

Byte(s)NameTypeDescription
0:31capsu8[32]Device Capabilities:
- Bytes [0:7]: Reserved for Caliptra RT
- Bytes [8:11]: Reserved for Caliptra FMC
- Bytes [12:15]: Reserved for Caliptra ROM
- Bytes [16:23]: Reserved for MCU RT
- Bytes [24:27]: Reserved for MCU ROM
- Bytes [28:31]: Reserved

Get Debug Log

Retrieves the debug log for the MCU Runtime.

Request Payload: Empty

Response Payload:

Byte(s)NameTypeDescription
0:3more_datau321 if more log data remains
4:7data_sizeu32Size of the valid log data in bytes
8:Ndatau8[data_size]Debug log contents

For defmt-based debug logs, the device exposes a sequential drain interface rather than random access to individual log entries. Callers drain the debug log by repeating this command until more_data is 0. Each response contains zero or more complete defmt frames. The host concatenates the returned data and decodes the resulting frame stream using the matching firmware ELF.

Debug Log Format:

The debug log payload is an opaque byte stream. For the MCU Runtime debug log, the current implementation uses the defmt crate. Each defmt log macro emits one complete rzCOBS-encoded frame, and the MCU runtime logging backend appends that complete frame as one flash log entry. Get Debug Log returns the concatenated raw frame bytes.

The device does not store human-readable log strings in the debug log. A host tool decodes the returned byte stream with defmt-decoder or defmt-print using the exact app's ELF that produced the log; the ELF .defmt section contains the interned format strings and metadata required to render readable messages.

Clear Debug Log

Clears the debug log in the MCU Runtime. No authorization is required.

Request Payload: Empty

Response Payload: Empty. Command completion status is carried by the transport-specific response framing.

Get Attestation

Retrieves attestation evidence. This command is assigned to SPDM VDM IANA. MCI Mailbox support and the payload format are TBD.

Request Payload: TBD

Response Payload: TBD

Request Debug Unlock

Requests debug unlock in production environment.

Request Payload:

Byte(s)NameTypeDescription
0:3lengthu32Length of the message in DWORDs
4unlock_levelu8Debug unlock level (1-8)
5:7reservedu8[3]Reserved field

Response Payload:

Byte(s)NameTypeDescription
0:3lengthu32Length of the message in DWORDs
4:35unique_device_identifieru8[32]Device identifier of the Caliptra device
36:83challengeu8[48]Random number challenge

Authorize Debug Unlock Token

Authorizes the debug unlock token. The request body is identical for MCI mailbox and SPDM VDM transports. The requester computes the leading checksum field as the Caliptra RT mailbox request checksum so the unified command handler can relay the complete request unchanged.

Request Payload:

Byte(s)NameTypeDescription
0:3checksumu32Requester-computed Caliptra RT mailbox request checksum (MailboxReqHeader.checksum)
4:7lengthu32Length of the message in DWORDs
8:39unique_device_identifieru8[32]Device identifier of the Caliptra device
40unlock_levelu8Debug unlock level (1-8)
41:43reservedu8[3]Reserved field
44:91challengeu8[48]Random number challenge
92:187ecc_public_keyu32[24]ECC public key in hardware format (little endian)
188:2639mldsa_public_keyu32[648]MLDSA public key in hardware format (little endian)
2640:2735ecc_signatureu32[24]ECC P-384 signature of the message hashed using SHA2-384 (R and S coordinates)
2736:6199mldsa_signatureu32[1157]MLDSA signature of the message hashed using SHA2-512 (4627 bytes + 1 reserved byte)

Response Payload: Empty. Command completion status is carried by the transport-specific response framing.

Export Attested CSR

Exports an attested Certificate Signing Request (CSR) for a specified device key.

Request Payload:

Byte(s)NameTypeDescription
0:3device_key_idu32Device Key Identifier:
- 0x0001 = LDevID
- 0x0002 = FMC Alias
- 0x0003 = RT Alias
4:7algorithmu32Asymmetric Algorithm:
- 0x0001 = ECC P-384
- 0x0002 = ML-DSA-87
8:39nonceu8[32]32-byte nonce for freshness

Response Payload:

Byte(s)NameTypeDescription
0:3data_sizeu32Length in bytes of the attested CSR data
4:Ndatau8[data_size]Attested CSR data blob

Authorization-Gated Subcommand Wrapper

Security-sensitive provisioning and fuse subcommands are assigned to the SPDM VDM IANA authorization-gated path and the MCI mailbox path. Authorization requirements and transport-specific authorization flows are TBD. The SPDM VDM transport uses an Authorized Command wrapper to carry subcommands, but the wrapper does not define the authorization mechanism by itself.

Request Payload

Byte(s)NameTypeDescription
0:3sub_cmd_idu32Subcommand identifier defined by the SPDM VDM spec.
4:Nsub_payloadu8[N]Subcommand-specific payload.

Response Payload

Byte(s)NameTypeDescription
0completion_codeu8OCP completion code (0x00 = Success, 0x0C = Access Denied).
1:Nsub_responseu8[N]Subcommand-specific response data, absent if completion_code != 0x00.

The subcommands covered by this wrapper are listed in Authorization-Gated Subcommands.

Subcommand-specific payloads are defined by the corresponding command specifications. Any additional SPDM authorization wrapper fields are TBD.

Get Auth Challenge

Requests a challenge for authorization-gated commands.

Request Payload: TBD

Response Payload: TBD

Provision Vendor PK Hash

Provisions the vendor public key hash.

Request Payload: TBD

Response Payload: TBD

Fuse Increase Caliptra Min SVN

Increases the Caliptra minimum SVN.

Request Payload: TBD

Response Payload: TBD

Program Field Entropy

Programs field entropy.

Request Payload: TBD

Response Payload: TBD

Fuse Revoke Vendor Public Key

Revokes a vendor public key.

Request Payload: TBD

Response Payload: TBD

Fuse Revoke Vendor PK Hash

Revokes a vendor public key hash.

Request Payload: TBD

Response Payload: TBD

Fuse Lock Partition

Locks a fuse partition.

Request Payload: TBD

Response Payload: TBD

Completion Codes

Command responses include a completion code indicating the result of the operation. Standard codes (0x00-0x0F) follow the OCP command registry. Codes 0xC0-0xFF are reserved for Caliptra project-specific errors.

OCP Standard Codes

CodeNameDescription
0x00SuccessCommand completed successfully
0x01General ErrorUnspecified error
0x02Invalid ParameterOne or more parameters are invalid
0x03Invalid LengthRequest/response length mismatch
0x04Invalid IdentifierUnknown or invalid identifier
0x05Operation FailedOperation could not be completed
0x06Insufficient ResourcesNot enough resources to complete command
0x07Unsupported OperationCommand is not supported
0x08Device Not ReadyDevice is not ready to process command
0x09Invalid Command VersionCommand version not supported
0x0AInvalid Payload SizePayload size does not match expected
0x0BTimeoutOperation timed out
0x0CAccess DeniedAuthorization required
0x0DResource UnavailableRequested resource is not available
0x0EPolicy ViolationOperation violates configured policy
0x0FInvalid StateDevice is not in the correct state

Caliptra Project-Specific Codes (0xC0-0xFF)

CodeNameDescription
0xC0Caliptra Mailbox BusyCaliptra mailbox is not ready
0xC1Caliptra Buffer Too SmallResponse buffer too small