/* SPDX-License-Identifier: BSD-3-Clause */ /* * Copyright (c) 2017-2019, STMicroelectronics */ #ifndef __STM32_BSEC_H #define __STM32_BSEC_H #include #include /* * Load OTP from SAFMEM and provide its value * @value: Output read value * @otp_id: OTP number * Return a TEE_Result compliant return value */ TEE_Result stm32_bsec_shadow_read_otp(uint32_t *value, uint32_t otp_id); /* * Copy SAFMEM OTP to BSEC data. * @otp_id: OTP number. * Return a TEE_Result compliant return value */ TEE_Result stm32_bsec_shadow_register(uint32_t otp_id); /* * Read an OTP data value * @value: Output read value * @otp_id: OTP number * Return a TEE_Result compliant return value */ TEE_Result stm32_bsec_read_otp(uint32_t *value, uint32_t otp_id); /* * Write value in BSEC data register * @value: Value to write * @otp_id: OTP number * Return a TEE_Result compliant return value */ TEE_Result stm32_bsec_write_otp(uint32_t value, uint32_t otp_id); /* * Program a bit in SAFMEM without BSEC data refresh * @value: Value to program. * @otp_id: OTP number. * Return a TEE_Result compliant return value */ TEE_Result stm32_bsec_program_otp(uint32_t value, uint32_t otp_id); /* * Permanent lock of OTP in SAFMEM * @otp_id: OTP number * Return a TEE_Result compliant return value */ TEE_Result stm32_bsec_permanent_lock_otp(uint32_t otp_id); /* * Enable/disable debug service * @value: Value to write * Return a TEE_Result compliant return value */ TEE_Result stm32_bsec_write_debug_conf(uint32_t value); /* Return debug configuration read from BSEC */ uint32_t stm32_bsec_read_debug_conf(void); /* * Write shadow-read lock * @otp_id: OTP number * @value: Value to write in the register, must be non null * Return true if OTP is locked, else false */ bool stm32_bsec_write_sr_lock(uint32_t otp_id, uint32_t value); /* * Read shadow-read lock * @otp_id: OTP number * Return true if OTP is locked, else false */ bool stm32_bsec_read_sr_lock(uint32_t otp_id); /* * Write shadow-write lock * @otp_id: OTP number * @value: Value to write in the register, must be non null * Return true if OTP is locked, else false */ bool stm32_bsec_write_sw_lock(uint32_t otp_id, uint32_t value); /* * Read shadow-write lock * @otp_id: OTP number * Return true if OTP is locked, else false */ bool stm32_bsec_read_sw_lock(uint32_t otp_id); /* * Write shadow-program lock * @otp_id: OTP number * @value: Value to write in the register, must be non null * Return true if OTP is locked, else false */ bool stm32_bsec_write_sp_lock(uint32_t otp_id, uint32_t value); /* * Read shadow-program lock * @otp_id: OTP number * Return true if OTP is locked, else false */ bool stm32_bsec_read_sp_lock(uint32_t otp_id); /* * Read permanent lock status * @otp_id: OTP number * Return true if OTP is locked, else false */ bool stm32_bsec_wr_lock(uint32_t otp_id); /* * Lock Upper OTP or Global programming or debug enable * @service: Service to lock, see header file * @value: Value to write must always set to 1 (only use for debug purpose) * Return a TEE_Result compliant return value */ TEE_Result stm32_bsec_otp_lock(uint32_t service, uint32_t value); /* * Return true if non-secure world is allowed to read the target OTP * @otp_id: OTP number */ bool stm32_bsec_nsec_can_access_otp(uint32_t otp_id); #endif /*__STM32_BSEC_H*/