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