xref: /openbmc/u-boot/drivers/tee/optee/optee_private.h (revision 232cfd6d9152fd2a4e7113faec51db2a9ab8c6bd)
1d4bd3d25SJens Wiklander /* SPDX-License-Identifier: GPL-2.0+ */
2d4bd3d25SJens Wiklander /*
3d4bd3d25SJens Wiklander  * Copyright (c) 2018 Linaro Limited
4d4bd3d25SJens Wiklander  */
5d4bd3d25SJens Wiklander 
6d4bd3d25SJens Wiklander #ifndef __OPTEE_PRIVATE_H
7d4bd3d25SJens Wiklander #define __OPTEE_PRIVATE_H
8d4bd3d25SJens Wiklander 
9*232cfd6dSJens Wiklander #include <tee.h>
10*232cfd6dSJens Wiklander #include <log.h>
11*232cfd6dSJens Wiklander 
12*232cfd6dSJens Wiklander /**
13*232cfd6dSJens Wiklander  * struct optee_private - OP-TEE driver private data
14*232cfd6dSJens Wiklander  * @rpmb_mmc:		mmc device for the RPMB partition
15*232cfd6dSJens Wiklander  * @rpmb_dev_id:	mmc device id matching @rpmb_mmc
16*232cfd6dSJens Wiklander  * @rpmb_original_part:	the previosly active partition on the mmc device,
17*232cfd6dSJens Wiklander  *			used to restore active the partition when the RPMB
18*232cfd6dSJens Wiklander  *			accesses are finished
19*232cfd6dSJens Wiklander  */
20*232cfd6dSJens Wiklander struct optee_private {
21*232cfd6dSJens Wiklander 	struct mmc *rpmb_mmc;
22*232cfd6dSJens Wiklander 	int rpmb_dev_id;
23*232cfd6dSJens Wiklander 	int rpmb_original_part;
24*232cfd6dSJens Wiklander };
25*232cfd6dSJens Wiklander 
26*232cfd6dSJens Wiklander struct optee_msg_arg;
27*232cfd6dSJens Wiklander 
28*232cfd6dSJens Wiklander void optee_suppl_cmd(struct udevice *dev, struct tee_shm *shm_arg,
29*232cfd6dSJens Wiklander 		     void **page_list);
30*232cfd6dSJens Wiklander 
31*232cfd6dSJens Wiklander #ifdef CONFIG_SUPPORT_EMMC_RPMB
32*232cfd6dSJens Wiklander /**
33*232cfd6dSJens Wiklander  * optee_suppl_cmd_rpmb() - route RPMB frames to mmc
34*232cfd6dSJens Wiklander  * @dev:	device with the selected RPMB partition
35*232cfd6dSJens Wiklander  * @arg:	OP-TEE message holding the frames to transmit to the mmc
36*232cfd6dSJens Wiklander  *		and space for the response frames.
37*232cfd6dSJens Wiklander  *
38*232cfd6dSJens Wiklander  * Routes signed (MACed) RPMB frames from OP-TEE Secure OS to MMC and vice
39*232cfd6dSJens Wiklander  * versa to manipulate the RPMB partition.
40*232cfd6dSJens Wiklander  */
41*232cfd6dSJens Wiklander void optee_suppl_cmd_rpmb(struct udevice *dev, struct optee_msg_arg *arg);
42*232cfd6dSJens Wiklander 
43*232cfd6dSJens Wiklander /**
44*232cfd6dSJens Wiklander  * optee_suppl_rpmb_release() - release mmc device
45*232cfd6dSJens Wiklander  * @dev:	mmc device
46*232cfd6dSJens Wiklander  *
47*232cfd6dSJens Wiklander  * Releases the mmc device and restores the previously selected partition.
48*232cfd6dSJens Wiklander  */
49*232cfd6dSJens Wiklander void optee_suppl_rpmb_release(struct udevice *dev);
50*232cfd6dSJens Wiklander #else
optee_suppl_cmd_rpmb(struct udevice * dev,struct optee_msg_arg * arg)51*232cfd6dSJens Wiklander static inline void optee_suppl_cmd_rpmb(struct udevice *dev,
52*232cfd6dSJens Wiklander 					struct optee_msg_arg *arg)
53*232cfd6dSJens Wiklander {
54*232cfd6dSJens Wiklander 	debug("OPTEE_MSG_RPC_CMD_RPMB not implemented\n");
55*232cfd6dSJens Wiklander 	arg->ret = TEE_ERROR_NOT_IMPLEMENTED;
56*232cfd6dSJens Wiklander }
57*232cfd6dSJens Wiklander 
optee_suppl_rpmb_release(struct udevice * dev)58*232cfd6dSJens Wiklander static inline void optee_suppl_rpmb_release(struct udevice *dev)
59*232cfd6dSJens Wiklander {
60*232cfd6dSJens Wiklander }
61*232cfd6dSJens Wiklander #endif
62*232cfd6dSJens Wiklander 
63d4bd3d25SJens Wiklander void *optee_alloc_and_init_page_list(void *buf, ulong len, u64 *phys_buf_ptr);
64d4bd3d25SJens Wiklander 
65d4bd3d25SJens Wiklander #endif /* __OPTEE_PRIVATE_H */
66