mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 09:34:18 +00:00

BSEC services should return SMC error codes as other IDs (defined in stm32mp1_smc.h) and not BSEC driver ones. So that non-secure caller is able to treat them correctly. In global SMC handler, unknown ID should also return a value from this definition list, and not the generic one, which seems not well adapted for our needs. Two unsigned values initializations are also changed from 0 to 0U. Change-Id: Ib6fd3866a748cefad1d13d48f7be38241621023e Signed-off-by: Yann Gautier <yann.gautier@st.com> Signed-off-by: Nicolas Le Bayon <nicolas.le.bayon@st.com>
59 lines
1.1 KiB
C
59 lines
1.1 KiB
C
/*
|
|
* Copyright (c) 2016-2021, STMicroelectronics - All Rights Reserved
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <platform_def.h>
|
|
|
|
#include <common/debug.h>
|
|
#include <drivers/st/bsec.h>
|
|
|
|
#include <stm32mp1_smc.h>
|
|
|
|
#include "bsec_svc.h"
|
|
|
|
uint32_t bsec_main(uint32_t x1, uint32_t x2, uint32_t x3,
|
|
uint32_t *ret_otp_value)
|
|
{
|
|
uint32_t result;
|
|
uint32_t tmp_data = 0U;
|
|
|
|
switch (x1) {
|
|
case STM32_SMC_READ_SHADOW:
|
|
result = bsec_read_otp(ret_otp_value, x2);
|
|
break;
|
|
case STM32_SMC_PROG_OTP:
|
|
*ret_otp_value = 0U;
|
|
result = bsec_program_otp(x3, x2);
|
|
break;
|
|
case STM32_SMC_WRITE_SHADOW:
|
|
*ret_otp_value = 0U;
|
|
result = bsec_write_otp(x3, x2);
|
|
break;
|
|
case STM32_SMC_READ_OTP:
|
|
*ret_otp_value = 0U;
|
|
result = bsec_read_otp(&tmp_data, x2);
|
|
if (result != BSEC_OK) {
|
|
break;
|
|
}
|
|
|
|
result = bsec_shadow_register(x2);
|
|
if (result != BSEC_OK) {
|
|
break;
|
|
}
|
|
|
|
result = bsec_read_otp(ret_otp_value, x2);
|
|
if (result != BSEC_OK) {
|
|
break;
|
|
}
|
|
|
|
result = bsec_write_otp(tmp_data, x2);
|
|
break;
|
|
|
|
default:
|
|
return STM32_SMC_INVALID_PARAMS;
|
|
}
|
|
|
|
return (result == BSEC_OK) ? STM32_SMC_OK : STM32_SMC_FAILED;
|
|
}
|