arm-trusted-firmware/plat/st/stm32mp1/services/bsec_svc.c
Yann Gautier c7ba52da72 stm322mp1: add BSEC service
This service, called with SMC from Non secure world, allows access to
some configurations saved in OTP fuses.

Change-Id: I92ba5614b2cb4a03260119e2cf74f2cd626a3431
Signed-off-by: Yann Gautier <yann.gautier@st.com>
Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
Signed-off-by: Lionel Debieve <lionel.debieve@st.com>
Signed-off-by: Mathieu Belou <mathieu.belou@st.com>
Signed-off-by: Nicolas Le Bayon <nicolas.le.bayon@st.com>
2019-01-18 15:45:08 +01:00

61 lines
1.1 KiB
C

/*
* Copyright (c) 2016-2019, 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 = 0;
result = bsec_write_otp(x3, x2);
break;
case STM32_SMC_READ_OTP:
*ret_otp_value = 0;
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:
result = BSEC_ERROR;
break;
}
return result;
}