summaryrefslogtreecommitdiff
path: root/drivers/crypto/ccp/psp-dev.c
diff options
context:
space:
mode:
authorMario Limonciello <mario.limonciello@amd.com>2023-09-07 13:48:43 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2023-09-15 18:29:45 +0800
commit6e17375c47a325f79e1f80028344bd4b0bdd985b (patch)
tree508186d24ee311b010cf5d626c8b4a7ef0b9a0be /drivers/crypto/ccp/psp-dev.c
parent949a0c8dd3c257730ef7205be759e4bc6cf49cea (diff)
downloadlinux-6e17375c47a325f79e1f80028344bd4b0bdd985b.tar.gz
linux-6e17375c47a325f79e1f80028344bd4b0bdd985b.tar.bz2
linux-6e17375c47a325f79e1f80028344bd4b0bdd985b.zip
crypto: ccp - Add support for extended PSP mailbox commands
The PSP mailbox supports a number of extended sub-commands. These subcommands are placed in the header of the buffer sent to the mailbox. Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/ccp/psp-dev.c')
-rw-r--r--drivers/crypto/ccp/psp-dev.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/crypto/ccp/psp-dev.c b/drivers/crypto/ccp/psp-dev.c
index 3258c4612e14..f9f3b3404f87 100644
--- a/drivers/crypto/ccp/psp-dev.c
+++ b/drivers/crypto/ccp/psp-dev.c
@@ -78,6 +78,30 @@ unlock:
return ret;
}
+int psp_extended_mailbox_cmd(struct psp_device *psp, unsigned int timeout_msecs,
+ struct psp_ext_request *req)
+{
+ unsigned int reg;
+ int ret;
+
+ print_hex_dump_debug("->psp ", DUMP_PREFIX_OFFSET, 16, 2, req,
+ req->header.payload_size, false);
+
+ ret = psp_mailbox_command(psp, PSP_CMD_TEE_EXTENDED_CMD, (void *)req,
+ timeout_msecs, &reg);
+ if (ret) {
+ return ret;
+ } else if (FIELD_GET(PSP_CMDRESP_STS, reg)) {
+ req->header.status = FIELD_GET(PSP_CMDRESP_STS, reg);
+ return -EIO;
+ }
+
+ print_hex_dump_debug("<-psp ", DUMP_PREFIX_OFFSET, 16, 2, req,
+ req->header.payload_size, false);
+
+ return 0;
+}
+
static struct psp_device *psp_alloc_struct(struct sp_device *sp)
{
struct device *dev = sp->dev;