1 /*
2 * Copyright (c) 2016-2022, STMicroelectronics - All Rights Reserved
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <platform_def.h>
8
9 #include <common/debug.h>
10 #include <drivers/st/bsec.h>
11 #include <drivers/st/bsec2_reg.h>
12
13 #include <stm32mp1_smc.h>
14
15 #include "bsec_svc.h"
16
bsec_main(uint32_t x1,uint32_t x2,uint32_t x3,uint32_t * ret_otp_value)17 uint32_t bsec_main(uint32_t x1, uint32_t x2, uint32_t x3,
18 uint32_t *ret_otp_value)
19 {
20 uint32_t result;
21 uint32_t tmp_data = 0U;
22
23 switch (x1) {
24 case STM32_SMC_READ_SHADOW:
25 result = bsec_read_otp(ret_otp_value, x2);
26 break;
27 case STM32_SMC_PROG_OTP:
28 *ret_otp_value = 0U;
29 result = bsec_program_otp(x3, x2);
30 break;
31 case STM32_SMC_WRITE_SHADOW:
32 *ret_otp_value = 0U;
33 result = bsec_write_otp(x3, x2);
34 break;
35 case STM32_SMC_READ_OTP:
36 *ret_otp_value = 0U;
37 result = bsec_read_otp(&tmp_data, x2);
38 if (result != BSEC_OK) {
39 break;
40 }
41
42 result = bsec_shadow_register(x2);
43 if (result != BSEC_OK) {
44 break;
45 }
46
47 result = bsec_read_otp(ret_otp_value, x2);
48 if (result != BSEC_OK) {
49 break;
50 }
51
52 result = bsec_write_otp(tmp_data, x2);
53 break;
54
55 default:
56 return STM32_SMC_INVALID_PARAMS;
57 }
58
59 return (result == BSEC_OK) ? STM32_SMC_OK : STM32_SMC_FAILED;
60 }
61