[RFC v1 3/6] crypto/ccp: Add DOWNLOAD_FIRMWARE_EX message struct

From: Tycho Andersen

Date: Thu Apr 30 2026 - 12:16:24 EST


From: "Tycho Andersen (AMD)" <tycho@xxxxxxxxxx>

...and appropriate sizeof() in sev_cmd_buffer_len() for use in
do_sev_cmd(). The message is documented in SEV-SNP firmware document id
56860.

Signed-off-by: Tycho Andersen (AMD) <tycho@xxxxxxxxxx>
---
drivers/crypto/ccp/sev-dev.c | 1 +
include/linux/psp-sev.h | 20 ++++++++++++++++++++
2 files changed, 21 insertions(+)

diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c
index 7ca29ccda0e7..defdc1bc226e 100644
--- a/drivers/crypto/ccp/sev-dev.c
+++ b/drivers/crypto/ccp/sev-dev.c
@@ -252,6 +252,7 @@ static int sev_cmd_buffer_len(int cmd)
case SEV_CMD_SNP_PLATFORM_STATUS: return sizeof(struct sev_data_snp_addr);
case SEV_CMD_SNP_GUEST_REQUEST: return sizeof(struct sev_data_snp_guest_request);
case SEV_CMD_SNP_CONFIG: return sizeof(struct sev_user_data_snp_config);
+ case SEV_CMD_SNP_DOWNLOAD_FIRMWARE_EX: return sizeof(struct sev_data_download_firmware_ex);
case SEV_CMD_SNP_COMMIT: return sizeof(struct sev_data_snp_commit);
case SEV_CMD_SNP_FEATURE_INFO: return sizeof(struct sev_data_snp_feature_info);
case SEV_CMD_SNP_VLEK_LOAD: return sizeof(struct sev_user_data_snp_vlek_load);
diff --git a/include/linux/psp-sev.h b/include/linux/psp-sev.h
index d5099a2baca5..5227e901bff2 100644
--- a/include/linux/psp-sev.h
+++ b/include/linux/psp-sev.h
@@ -855,6 +855,26 @@ struct sev_platform_init_args {
unsigned int max_snp_asid;
};

+/**
+ * struct sev_data_download_firmware_ex
+ *
+ * @len: length of the command buffer read by the PSP
+ * @rsvd0: reserved
+ * @fw_paddr: physical address of the start of the firmware blob
+ * @fw_len: length of the firmware blob
+ * @commit: whether to immediately commit the firmware update. If set, this
+ * operation behaves like DOWNLOAD_FIRMWARE.
+ * @rsvd1: reserved
+ */
+struct sev_data_download_firmware_ex {
+ u32 len; /* In */
+ u32 rsvd0;
+ u64 fw_paddr; /* In */
+ u32 fw_len; /* In */
+ u32 commit:1; /* In */
+ u32 rsvd1:31;
+} __packed;
+
/**
* struct sev_data_snp_commit - SNP_COMMIT structure
*
--
2.54.0