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 Wiklanderstatic 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 Wiklanderstatic 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