-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
crypto: ccp - provide in-kernel API to submit TEE commands
Extend the functionality of AMD Secure Processor (SP) driver by providing an in-kernel API to submit commands to TEE ring buffer for processing by Trusted OS running on AMD Secure Processor. Following TEE commands are supported by Trusted OS: * TEE_CMD_ID_LOAD_TA : Load Trusted Application (TA) binary into TEE environment * TEE_CMD_ID_UNLOAD_TA : Unload TA binary from TEE environment * TEE_CMD_ID_OPEN_SESSION : Open session with loaded TA * TEE_CMD_ID_CLOSE_SESSION : Close session with loaded TA * TEE_CMD_ID_INVOKE_CMD : Invoke a command with loaded TA * TEE_CMD_ID_MAP_SHARED_MEM : Map shared memory * TEE_CMD_ID_UNMAP_SHARED_MEM : Unmap shared memory Linux AMD-TEE driver will use this API to submit command buffers for processing in Trusted Execution Environment. The AMD-TEE driver shall be introduced in a separate patch. Cc: Jens Wiklander <jens.wiklander@linaro.org> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Co-developed-by: Devaraj Rangasamy <Devaraj.Rangasamy@amd.com> Signed-off-by: Devaraj Rangasamy <Devaraj.Rangasamy@amd.com> Signed-off-by: Rijo Thomas <Rijo-john.Thomas@amd.com> Acked-by: Gary R Hook <gary.hook@amd.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
- Loading branch information
Rijo Thomas
authored and
Herbert Xu
committed
Dec 20, 2019
1 parent
33960ac
commit 632b0b5
Showing
3 changed files
with
200 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* SPDX-License-Identifier: MIT */ | ||
/* | ||
* AMD Trusted Execution Environment (TEE) interface | ||
* | ||
* Author: Rijo Thomas <Rijo-john.Thomas@amd.com> | ||
* | ||
* Copyright 2019 Advanced Micro Devices, Inc. | ||
* | ||
*/ | ||
|
||
#ifndef __PSP_TEE_H_ | ||
#define __PSP_TEE_H_ | ||
|
||
#include <linux/types.h> | ||
#include <linux/errno.h> | ||
|
||
/* This file defines the Trusted Execution Environment (TEE) interface commands | ||
* and the API exported by AMD Secure Processor driver to communicate with | ||
* AMD-TEE Trusted OS. | ||
*/ | ||
|
||
/** | ||
* enum tee_cmd_id - TEE Interface Command IDs | ||
* @TEE_CMD_ID_LOAD_TA: Load Trusted Application (TA) binary into | ||
* TEE environment | ||
* @TEE_CMD_ID_UNLOAD_TA: Unload TA binary from TEE environment | ||
* @TEE_CMD_ID_OPEN_SESSION: Open session with loaded TA | ||
* @TEE_CMD_ID_CLOSE_SESSION: Close session with loaded TA | ||
* @TEE_CMD_ID_INVOKE_CMD: Invoke a command with loaded TA | ||
* @TEE_CMD_ID_MAP_SHARED_MEM: Map shared memory | ||
* @TEE_CMD_ID_UNMAP_SHARED_MEM: Unmap shared memory | ||
*/ | ||
enum tee_cmd_id { | ||
TEE_CMD_ID_LOAD_TA = 1, | ||
TEE_CMD_ID_UNLOAD_TA, | ||
TEE_CMD_ID_OPEN_SESSION, | ||
TEE_CMD_ID_CLOSE_SESSION, | ||
TEE_CMD_ID_INVOKE_CMD, | ||
TEE_CMD_ID_MAP_SHARED_MEM, | ||
TEE_CMD_ID_UNMAP_SHARED_MEM, | ||
}; | ||
|
||
#ifdef CONFIG_CRYPTO_DEV_SP_PSP | ||
/** | ||
* psp_tee_process_cmd() - Process command in Trusted Execution Environment | ||
* @cmd_id: TEE command ID (&enum tee_cmd_id) | ||
* @buf: Command buffer for TEE processing. On success, is updated | ||
* with the response | ||
* @len: Length of command buffer in bytes | ||
* @status: On success, holds the TEE command execution status | ||
* | ||
* This function submits a command to the Trusted OS for processing in the | ||
* TEE environment and waits for a response or until the command times out. | ||
* | ||
* Returns: | ||
* 0 if TEE successfully processed the command | ||
* -%ENODEV if PSP device not available | ||
* -%EINVAL if invalid input | ||
* -%ETIMEDOUT if TEE command timed out | ||
* -%EBUSY if PSP device is not responsive | ||
*/ | ||
int psp_tee_process_cmd(enum tee_cmd_id cmd_id, void *buf, size_t len, | ||
u32 *status); | ||
|
||
#else /* !CONFIG_CRYPTO_DEV_SP_PSP */ | ||
|
||
static inline int psp_tee_process_cmd(enum tee_cmd_id cmd_id, void *buf, | ||
size_t len, u32 *status) | ||
{ | ||
return -ENODEV; | ||
} | ||
#endif /* CONFIG_CRYPTO_DEV_SP_PSP */ | ||
#endif /* __PSP_TEE_H_ */ |