1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /*
3 * Copyright (c) 2017-2020, STMicroelectronics
4 */
5
6 #ifndef __STM32_BSEC_H
7 #define __STM32_BSEC_H
8
9 #include <compiler.h>
10 #include <stdint.h>
11 #include <tee_api.h>
12
13 /*
14 * Load OTP from SAFMEM and provide its value
15 * @value: Output read value
16 * @otp_id: OTP number
17 * Return a TEE_Result compliant return value
18 */
19 TEE_Result stm32_bsec_shadow_read_otp(uint32_t *value, uint32_t otp_id);
20
21 /*
22 * Copy SAFMEM OTP to BSEC data.
23 * @otp_id: OTP number.
24 * Return a TEE_Result compliant return value
25 */
26 TEE_Result stm32_bsec_shadow_register(uint32_t otp_id);
27
28 /*
29 * Read an OTP data value
30 * @value: Output read value
31 * @otp_id: OTP number
32 * Return a TEE_Result compliant return value
33 */
34 TEE_Result stm32_bsec_read_otp(uint32_t *value, uint32_t otp_id);
35
36 /*
37 * Write value in BSEC data register
38 * @value: Value to write
39 * @otp_id: OTP number
40 * Return a TEE_Result compliant return value
41 */
42 TEE_Result stm32_bsec_write_otp(uint32_t value, uint32_t otp_id);
43
44 /*
45 * Program a bit in SAFMEM without BSEC data refresh
46 * @value: Value to program.
47 * @otp_id: OTP number.
48 * Return a TEE_Result compliant return value
49 */
50 #ifdef CFG_STM32_BSEC_WRITE
51 TEE_Result stm32_bsec_program_otp(uint32_t value, uint32_t otp_id);
52 #else
stm32_bsec_program_otp(uint32_t value __unused,uint32_t otp_id __unused)53 static inline TEE_Result stm32_bsec_program_otp(uint32_t value __unused,
54 uint32_t otp_id __unused)
55 {
56 return TEE_ERROR_NOT_SUPPORTED;
57 }
58 #endif
59
60 /*
61 * Permanent lock of OTP in SAFMEM
62 * @otp_id: OTP number
63 * Return a TEE_Result compliant return value
64 */
65 TEE_Result stm32_bsec_permanent_lock_otp(uint32_t otp_id);
66
67 /*
68 * Enable/disable debug service
69 * @value: Value to write
70 * Return a TEE_Result compliant return value
71 */
72 #ifdef CFG_STM32_BSEC_WRITE
73 TEE_Result stm32_bsec_write_debug_conf(uint32_t value);
74 #else
stm32_bsec_write_debug_conf(uint32_t value __unused)75 static inline TEE_Result stm32_bsec_write_debug_conf(uint32_t value __unused)
76 {
77 return TEE_ERROR_NOT_SUPPORTED;
78 }
79 #endif
80
81 /* Return debug configuration read from BSEC */
82 uint32_t stm32_bsec_read_debug_conf(void);
83
84 /*
85 * Write shadow-read lock
86 * @otp_id: OTP number
87 * Return a TEE_Result compliant return value
88 */
89 TEE_Result stm32_bsec_set_sr_lock(uint32_t otp_id);
90
91 /*
92 * Read shadow-read lock
93 * @otp_id: OTP number
94 * @locked: (out) true if shadow-read is locked, false if not locked.
95 * Return a TEE_Result compliant return value
96 */
97 TEE_Result stm32_bsec_read_sr_lock(uint32_t otp_id, bool *locked);
98
99 /*
100 * Write shadow-write lock
101 * @otp_id: OTP number
102 * Return a TEE_Result compliant return value
103 */
104 TEE_Result stm32_bsec_set_sw_lock(uint32_t otp_id);
105
106 /*
107 * Read shadow-write lock
108 * @otp_id: OTP number
109 * @locked: (out) true if shadow-write is locked, false if not locked.
110 * Return a TEE_Result compliant return value
111 */
112 TEE_Result stm32_bsec_read_sw_lock(uint32_t otp_id, bool *locked);
113
114 /*
115 * Write shadow-program lock
116 * @otp_id: OTP number
117 * Return a TEE_Result compliant return value
118 */
119 TEE_Result stm32_bsec_set_sp_lock(uint32_t otp_id);
120
121 /*
122 * Read shadow-program lock
123 * @otp_id: OTP number
124 * @locked: (out) true if shadow-program is locked, false if not locked.
125 * Return a TEE_Result compliant return value
126 */
127 TEE_Result stm32_bsec_read_sp_lock(uint32_t otp_id, bool *locked);
128
129 /*
130 * Read permanent lock status
131 * @otp_id: OTP number
132 * @locked: (out) true if permanent lock is locked, false if not locked.
133 * Return a TEE_Result compliant return value
134 */
135 TEE_Result stm32_bsec_read_permanent_lock(uint32_t otp_id, bool *locked);
136
137 /*
138 * Lock Upper OTP or Global programming or debug enable
139 * @service: Service to lock, see header file
140 * Return a TEE_Result compliant return value
141 */
142 TEE_Result stm32_bsec_otp_lock(uint32_t service);
143
144 /*
145 * Return true if non-secure world is allowed to read the target OTP
146 * @otp_id: OTP number
147 */
148 bool stm32_bsec_nsec_can_access_otp(uint32_t otp_id);
149
150 #endif /*__STM32_BSEC_H*/
151