188ef0425SYann Gautier /* 2*c7061045SPatrick Delaunay * Copyright (c) 2017-2024, STMicroelectronics - All Rights Reserved 388ef0425SYann Gautier * 488ef0425SYann Gautier * SPDX-License-Identifier: BSD-3-Clause 588ef0425SYann Gautier */ 688ef0425SYann Gautier 788ef0425SYann Gautier #ifndef BSEC_H 888ef0425SYann Gautier #define BSEC_H 988ef0425SYann Gautier 1088ef0425SYann Gautier #include <stdbool.h> 1188ef0425SYann Gautier #include <stdint.h> 1288ef0425SYann Gautier 1388ef0425SYann Gautier #include <lib/utils_def.h> 1488ef0425SYann Gautier 1588ef0425SYann Gautier /* 1688ef0425SYann Gautier * Return status 1788ef0425SYann Gautier */ 1888ef0425SYann Gautier #define BSEC_OK 0U 1988ef0425SYann Gautier #define BSEC_ERROR 0xFFFFFFFFU 2088ef0425SYann Gautier #define BSEC_DISTURBED 0xFFFFFFFEU 2188ef0425SYann Gautier #define BSEC_INVALID_PARAM 0xFFFFFFFCU 2288ef0425SYann Gautier #define BSEC_PROG_FAIL 0xFFFFFFFBU 2388ef0425SYann Gautier #define BSEC_LOCK_FAIL 0xFFFFFFFAU 24072d7532SNicolas Le Bayon #define BSEC_TIMEOUT 0xFFFFFFF9U 25072d7532SNicolas Le Bayon #define BSEC_RETRY 0xFFFFFFF8U 26072d7532SNicolas Le Bayon #define BSEC_NOT_SUPPORTED 0xFFFFFFF7U 27072d7532SNicolas Le Bayon #define BSEC_WRITE_LOCKED 0xFFFFFFF6U 2888ef0425SYann Gautier 2988ef0425SYann Gautier /* 30*c7061045SPatrick Delaunay * get BSEC global state: result for bsec_get_secure_state() 31*c7061045SPatrick Delaunay * @state: global state 32*c7061045SPatrick Delaunay * [1:0] BSEC state 33*c7061045SPatrick Delaunay * 00b: Sec Open 34*c7061045SPatrick Delaunay * 01b: Sec Closed 35*c7061045SPatrick Delaunay * 11b: Invalid 36*c7061045SPatrick Delaunay * [8]: Hardware Key set = 1b 3788ef0425SYann Gautier */ 38*c7061045SPatrick Delaunay #define BSEC_STATE_SEC_OPEN U(0x0) 39*c7061045SPatrick Delaunay #define BSEC_STATE_SEC_CLOSED U(0x1) 40*c7061045SPatrick Delaunay #define BSEC_STATE_INVALID U(0x3) 41*c7061045SPatrick Delaunay #define BSEC_STATE_MASK GENMASK_32(1, 0) 4288ef0425SYann Gautier 4388ef0425SYann Gautier uint32_t bsec_probe(void); 4488ef0425SYann Gautier 4588ef0425SYann Gautier uint32_t bsec_read_otp(uint32_t *val, uint32_t otp); 46*c7061045SPatrick Delaunay uint32_t bsec_shadow_read_otp(uint32_t *val, uint32_t otp); 4788ef0425SYann Gautier uint32_t bsec_write_otp(uint32_t val, uint32_t otp); 4888ef0425SYann Gautier uint32_t bsec_program_otp(uint32_t val, uint32_t otp); 4988ef0425SYann Gautier 5088ef0425SYann Gautier uint32_t bsec_read_debug_conf(void); 51072d7532SNicolas Le Bayon 52072d7532SNicolas Le Bayon void bsec_write_scratch(uint32_t val); 5388ef0425SYann Gautier 54*c7061045SPatrick Delaunay /* Sticky lock support */ 55072d7532SNicolas Le Bayon uint32_t bsec_set_sr_lock(uint32_t otp); 56072d7532SNicolas Le Bayon uint32_t bsec_read_sr_lock(uint32_t otp, bool *value); 57072d7532SNicolas Le Bayon uint32_t bsec_set_sw_lock(uint32_t otp); 58072d7532SNicolas Le Bayon uint32_t bsec_read_sw_lock(uint32_t otp, bool *value); 59072d7532SNicolas Le Bayon uint32_t bsec_set_sp_lock(uint32_t otp); 60072d7532SNicolas Le Bayon uint32_t bsec_read_sp_lock(uint32_t otp, bool *value); 6188ef0425SYann Gautier 62*c7061045SPatrick Delaunay uint32_t bsec_get_secure_state(void); 63*c7061045SPatrick Delaunay static inline bool bsec_mode_is_closed_device(void) 64*c7061045SPatrick Delaunay { 65*c7061045SPatrick Delaunay return (bsec_get_secure_state() & BSEC_STATE_MASK) == BSEC_STATE_SEC_CLOSED; 66*c7061045SPatrick Delaunay } 67*c7061045SPatrick Delaunay 68*c7061045SPatrick Delaunay #if defined(IMAGE_BL32) 69*c7061045SPatrick Delaunay uint32_t bsec_permanent_lock_otp(uint32_t otp); 7088ef0425SYann Gautier uint32_t bsec_check_nsec_access_rights(uint32_t otp); 71*c7061045SPatrick Delaunay #endif 7288ef0425SYann Gautier 7388ef0425SYann Gautier #endif /* BSEC_H */ 74