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