xref: /rk3399_ARM-atf/include/drivers/st/bsec.h (revision c7061045072424dc47cc0a12d53bf0fa8a49f1c0)
188ef0425SYann Gautier /*
2*c7061045SPatrick Delaunay  * Copyright (c) 2017-2024, STMicroelectronics - All Rights Reserved
388ef0425SYann Gautier  *
488ef0425SYann Gautier  * SPDX-License-Identifier: BSD-3-Clause
588ef0425SYann Gautier  */
688ef0425SYann Gautier 
788ef0425SYann Gautier #ifndef BSEC_H
888ef0425SYann Gautier #define BSEC_H
988ef0425SYann Gautier 
1088ef0425SYann Gautier #include <stdbool.h>
1188ef0425SYann Gautier #include <stdint.h>
1288ef0425SYann Gautier 
1388ef0425SYann Gautier #include <lib/utils_def.h>
1488ef0425SYann Gautier 
1588ef0425SYann Gautier /*
1688ef0425SYann Gautier  * Return status
1788ef0425SYann Gautier  */
1888ef0425SYann Gautier #define BSEC_OK				0U
1988ef0425SYann Gautier #define BSEC_ERROR			0xFFFFFFFFU
2088ef0425SYann Gautier #define BSEC_DISTURBED			0xFFFFFFFEU
2188ef0425SYann Gautier #define BSEC_INVALID_PARAM		0xFFFFFFFCU
2288ef0425SYann Gautier #define BSEC_PROG_FAIL			0xFFFFFFFBU
2388ef0425SYann Gautier #define BSEC_LOCK_FAIL			0xFFFFFFFAU
24072d7532SNicolas Le Bayon #define BSEC_TIMEOUT			0xFFFFFFF9U
25072d7532SNicolas Le Bayon #define BSEC_RETRY			0xFFFFFFF8U
26072d7532SNicolas Le Bayon #define BSEC_NOT_SUPPORTED		0xFFFFFFF7U
27072d7532SNicolas Le Bayon #define BSEC_WRITE_LOCKED		0xFFFFFFF6U
2888ef0425SYann Gautier 
2988ef0425SYann Gautier /*
30*c7061045SPatrick Delaunay  * get BSEC global state: result for bsec_get_secure_state()
31*c7061045SPatrick Delaunay  * @state: global state
32*c7061045SPatrick Delaunay  *           [1:0] BSEC state
33*c7061045SPatrick Delaunay  *             00b: Sec Open
34*c7061045SPatrick Delaunay  *             01b: Sec Closed
35*c7061045SPatrick Delaunay  *             11b: Invalid
36*c7061045SPatrick Delaunay  *           [8]: Hardware Key set = 1b
3788ef0425SYann Gautier  */
38*c7061045SPatrick Delaunay #define BSEC_STATE_SEC_OPEN		U(0x0)
39*c7061045SPatrick Delaunay #define BSEC_STATE_SEC_CLOSED		U(0x1)
40*c7061045SPatrick Delaunay #define BSEC_STATE_INVALID		U(0x3)
41*c7061045SPatrick Delaunay #define BSEC_STATE_MASK			GENMASK_32(1, 0)
4288ef0425SYann Gautier 
4388ef0425SYann Gautier uint32_t bsec_probe(void);
4488ef0425SYann Gautier 
4588ef0425SYann Gautier uint32_t bsec_read_otp(uint32_t *val, uint32_t otp);
46*c7061045SPatrick Delaunay uint32_t bsec_shadow_read_otp(uint32_t *val, uint32_t otp);
4788ef0425SYann Gautier uint32_t bsec_write_otp(uint32_t val, uint32_t otp);
4888ef0425SYann Gautier uint32_t bsec_program_otp(uint32_t val, uint32_t otp);
4988ef0425SYann Gautier 
5088ef0425SYann Gautier uint32_t bsec_read_debug_conf(void);
51072d7532SNicolas Le Bayon 
52072d7532SNicolas Le Bayon void bsec_write_scratch(uint32_t val);
5388ef0425SYann Gautier 
54*c7061045SPatrick Delaunay /* Sticky lock support */
55072d7532SNicolas Le Bayon uint32_t bsec_set_sr_lock(uint32_t otp);
56072d7532SNicolas Le Bayon uint32_t bsec_read_sr_lock(uint32_t otp, bool *value);
57072d7532SNicolas Le Bayon uint32_t bsec_set_sw_lock(uint32_t otp);
58072d7532SNicolas Le Bayon uint32_t bsec_read_sw_lock(uint32_t otp, bool *value);
59072d7532SNicolas Le Bayon uint32_t bsec_set_sp_lock(uint32_t otp);
60072d7532SNicolas Le Bayon uint32_t bsec_read_sp_lock(uint32_t otp, bool *value);
6188ef0425SYann Gautier 
62*c7061045SPatrick Delaunay uint32_t bsec_get_secure_state(void);
63*c7061045SPatrick Delaunay static inline bool bsec_mode_is_closed_device(void)
64*c7061045SPatrick Delaunay {
65*c7061045SPatrick Delaunay 	return (bsec_get_secure_state() & BSEC_STATE_MASK) == BSEC_STATE_SEC_CLOSED;
66*c7061045SPatrick Delaunay }
67*c7061045SPatrick Delaunay 
68*c7061045SPatrick Delaunay #if defined(IMAGE_BL32)
69*c7061045SPatrick Delaunay uint32_t bsec_permanent_lock_otp(uint32_t otp);
7088ef0425SYann Gautier uint32_t bsec_check_nsec_access_rights(uint32_t otp);
71*c7061045SPatrick Delaunay #endif
7288ef0425SYann Gautier 
7388ef0425SYann Gautier #endif /* BSEC_H */
74