xref: /optee_os/lib/libutee/include/pta_stm32mp_bsec.h (revision df9b559a8c8bf04bdff0c913a0faa0fd1e0249ae)
14583de06SGatien Chevallier /* SPDX-License-Identifier: BSD-2-Clause */
24583de06SGatien Chevallier /*
34583de06SGatien Chevallier  * Copyright (C) 2022, STMicroelectronics - All Rights Reserved
44583de06SGatien Chevallier  */
54583de06SGatien Chevallier 
64583de06SGatien Chevallier #ifndef __PTA_STM32MP_BSEC_H
74583de06SGatien Chevallier #define __PTA_STM32MP_BSEC_H
84583de06SGatien Chevallier 
94583de06SGatien Chevallier #define PTA_BSEC_UUID { 0x94cf71ad, 0x80e6, 0x40b5, \
104583de06SGatien Chevallier 	{ 0xa7, 0xc6, 0x3d, 0xc5, 0x01, 0xeb, 0x28, 0x03 } }
114583de06SGatien Chevallier 
124583de06SGatien Chevallier /**
134583de06SGatien Chevallier  * Read OTP memory
144583de06SGatien Chevallier  *
154583de06SGatien Chevallier  * [in]		value[0].a		OTP start offset in byte
164583de06SGatien Chevallier  * [in]		value[0].b		Access type, see PTA_BSEC_TYPE_*
174583de06SGatien Chevallier  * [out]	memref[1].buffer	Output buffer to store read values
184583de06SGatien Chevallier  * [out]	memref[1].size		Size of OTP to be read
194583de06SGatien Chevallier  *
204583de06SGatien Chevallier  * Return codes:
214583de06SGatien Chevallier  * TEE_SUCCESS - Invoke command success
224583de06SGatien Chevallier  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
23*df9b559aSEtienne Carriere  * TEE_ERROR_ACCESS_DENIED - OTP not accessible by caller
244583de06SGatien Chevallier  */
254583de06SGatien Chevallier #define PTA_BSEC_CMD_READ_OTP		0x0
264583de06SGatien Chevallier 
274583de06SGatien Chevallier /**
284583de06SGatien Chevallier  * Write OTP memory
294583de06SGatien Chevallier  *
304583de06SGatien Chevallier  * [in]		value[0].a		OTP start offset in byte
314583de06SGatien Chevallier  * [in]		value[0].b		Access type (0 : shadow,
324583de06SGatien Chevallier  *					1 : fuse, 2 : lock)
334583de06SGatien Chevallier  * [in]		memref[1].buffer	Input buffer to read values
344583de06SGatien Chevallier  * [in]		memref[1].size		Size of OTP to be written
354583de06SGatien Chevallier  *
364583de06SGatien Chevallier  * Return codes:
374583de06SGatien Chevallier  * TEE_SUCCESS - Invoke command success
384583de06SGatien Chevallier  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
394583de06SGatien Chevallier  * TEE_ERROR_ACCESS_DENIED - OTP not accessible by caller
404583de06SGatien Chevallier  */
414583de06SGatien Chevallier #define PTA_BSEC_CMD_WRITE_OTP		0x1
424583de06SGatien Chevallier 
434583de06SGatien Chevallier /**
444583de06SGatien Chevallier  * Get BSEC state
454583de06SGatien Chevallier  * Return the chip security level by reading the BSEC state
464583de06SGatien Chevallier  *
474583de06SGatien Chevallier  * [out]	value[0].a		One of PTA_BSEC_STATE_*
484583de06SGatien Chevallier  * Return codes:
494583de06SGatien Chevallier  * TEE_SUCCESS - Invoke command success
504583de06SGatien Chevallier  * TEE_ERROR_BAD_PARAMETERS - Incorrect input param
514583de06SGatien Chevallier  */
524583de06SGatien Chevallier #define PTA_BSEC_CMD_GET_STATE		0x3
534583de06SGatien Chevallier 
544583de06SGatien Chevallier enum stm32_bsec_pta_sec_state {
554583de06SGatien Chevallier 	PTA_BSEC_STATE_SEC_OPEN = 0,
564583de06SGatien Chevallier 	PTA_BSEC_STATE_SEC_CLOSE = 1,
574583de06SGatien Chevallier 	PTA_BSEC_STATE_INVALID = 3
584583de06SGatien Chevallier };
594583de06SGatien Chevallier 
604583de06SGatien Chevallier /*
614583de06SGatien Chevallier  * Access types identifiers for PTA_BSEC_CMD_READ_OTP and
624583de06SGatien Chevallier  * PTA_BSEC_CMD_WRITE_OTP = value[in].b.
634583de06SGatien Chevallier  *
644583de06SGatien Chevallier  * PTA_BSEC_SHADOW_ACCESS	Access OTP shadow memory
654583de06SGatien Chevallier  * PTA_BSEC_FUSE_ACCESS	Access	OTP fuse memory
664583de06SGatien Chevallier  * PTA_BSEC_LOCKS_ACCESS	Access OTP locks. The locks value read/written
674583de06SGatien Chevallier  *				in memref[1] 32bit words are related to bit flag
684583de06SGatien Chevallier  *				masks PTA_BSEC_LOCK_*.
694583de06SGatien Chevallier  */
704583de06SGatien Chevallier #define PTA_BSEC_SHADOW_ACCESS		0
714583de06SGatien Chevallier #define PTA_BSEC_FUSE_ACCESS		1
724583de06SGatien Chevallier #define PTA_BSEC_LOCKS_ACCESS		2
734583de06SGatien Chevallier 
744583de06SGatien Chevallier /*
754583de06SGatien Chevallier  * PTA_BSEC_LOCK_* - Bit mask of OTP locks in memref[1]
764583de06SGatien Chevallier  *
774583de06SGatien Chevallier  * PTA_BSEC_LOCK_PERM		Fuse programming permanent lock
784583de06SGatien Chevallier  * PTA_BSEC_LOCK_SHADOW_R	Shadow programming (from fuse) lock
794583de06SGatien Chevallier  * PTA_BSEC_LOCK_SHADOW_W	Shadow memory write lock
804583de06SGatien Chevallier  * PTA_BSEC_LOCK_SHADOW_P	Fuse programming sticky lock
814583de06SGatien Chevallier  * PTA_BSEC_LOCK_ERROR		Flag indicating an error in lock access
824583de06SGatien Chevallier  */
834583de06SGatien Chevallier #define PTA_BSEC_LOCK_PERM			BIT(30)
844583de06SGatien Chevallier #define PTA_BSEC_LOCK_SHADOW_R			BIT(29)
854583de06SGatien Chevallier #define PTA_BSEC_LOCK_SHADOW_W			BIT(28)
864583de06SGatien Chevallier #define PTA_BSEC_LOCK_SHADOW_P			BIT(27)
874583de06SGatien Chevallier #define PTA_BSEC_LOCK_ERROR			BIT(26)
884583de06SGatien Chevallier 
894583de06SGatien Chevallier #endif /* __PTA_STM32MP_BSEC_H */
90