diff options
author | Mario Limonciello <mario.limonciello@amd.com> | 2023-09-07 13:48:43 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2023-09-15 18:29:45 +0800 |
commit | 6e17375c47a325f79e1f80028344bd4b0bdd985b (patch) | |
tree | 508186d24ee311b010cf5d626c8b4a7ef0b9a0be /drivers/crypto/ccp/psp-dev.c | |
parent | 949a0c8dd3c257730ef7205be759e4bc6cf49cea (diff) | |
download | linux-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.c | 24 |
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, ®); + 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; |