blob: 1fb44b4879378c7d7c6783e01e39d17374169e56 [file] [log] [blame]
Yann Gautier52448ab2019-01-17 14:53:24 +01001/*
Nicolas Le Bayon97287cd2019-05-20 18:35:02 +02002 * Copyright (c) 2016-2022, STMicroelectronics - All Rights Reserved
Yann Gautier52448ab2019-01-17 14:53:24 +01003 *
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>
Nicolas Le Bayon97287cd2019-05-20 18:35:02 +020011#include <drivers/st/bsec2_reg.h>
Yann Gautier52448ab2019-01-17 14:53:24 +010012
13#include <stm32mp1_smc.h>
14
15#include "bsec_svc.h"
16
17uint32_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:
Nicolas Le Bayon152897d2020-01-14 14:03:39 +010032 *ret_otp_value = 0U;
Yann Gautier52448ab2019-01-17 14:53:24 +010033 result = bsec_write_otp(x3, x2);
34 break;
35 case STM32_SMC_READ_OTP:
Nicolas Le Bayon152897d2020-01-14 14:03:39 +010036 *ret_otp_value = 0U;
Yann Gautier52448ab2019-01-17 14:53:24 +010037 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:
Nicolas Le Bayon152897d2020-01-14 14:03:39 +010056 return STM32_SMC_INVALID_PARAMS;
Yann Gautier52448ab2019-01-17 14:53:24 +010057 }
58
Nicolas Le Bayon152897d2020-01-14 14:03:39 +010059 return (result == BSEC_OK) ? STM32_SMC_OK : STM32_SMC_FAILED;
Yann Gautier52448ab2019-01-17 14:53:24 +010060}