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 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