1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /*
3  * Copyright (c) 2021-2022, STMicroelectronics
4  */
5 
6 #ifndef __DRIVERS_STM32_TAMP_H__
7 #define __DRIVERS_STM32_TAMP_H__
8 
9 #include <compiler.h>
10 #include <stdint.h>
11 #include <tee_api_types.h>
12 
13 /*
14  * struct stm32_bkpregs_conf - Interface for stm32_tamp_set_secure_bkpregs()
15  * @nb_zone1_regs - Number of backup registers in zone 1
16  * @nb_zone2_regs - Number of backup registers in zone 2
17  *
18  * TAMP backup registers access permissions
19  *
20  * Zone 1: read/write in secure state, no access in non-secure state
21  * Zone 2: read/write in secure state, read-only in non-secure state
22  * Zone 3: read/write in secure state, read/write in non-secure state
23  *
24  * Protection zone 1
25  * If nb_zone1_regs == 0 no backup register are in zone 1.
26  * Otherwise backup registers from TAMP_BKP0R to TAMP_BKP<x>R are in zone 1,
27  * with <x> = (@nb_zone1_regs - 1).
28  *
29  * Protection zone 2
30  * If nb_zone2_regs == 0 no backup register are in zone 2.
31  * Otherwise backup registers from TAMP_BKP<y>R ro TAMP_BKP<z>R are in zone 2,
32  * with <y> = @nb_zone1_regs and <z> = (@nb_zone1_regs1 + @nb_zone2_regs - 1).
33  *
34  * Protection zone 3
35  * Backup registers from TAMP_BKP<t>R to last backup register are in zone 3,
36  * with <t> = (@nb_zone1_regs1 + @nb_zone2_regs).
37  */
38 struct stm32_bkpregs_conf {
39 	uint32_t nb_zone1_regs;
40 	uint32_t nb_zone2_regs;
41 };
42 
43 #ifdef CFG_STM32_TAMP
44 /*
45  * stm32_tamp_set_secure_bkprwregs() - Configure backup registers zone.
46  * @conf - Configuration to be programmed
47  */
48 TEE_Result stm32_tamp_set_secure_bkpregs(struct stm32_bkpregs_conf *conf);
49 #else
50 static inline
stm32_tamp_set_secure_bkpregs(struct stm32_bkpregs_conf * c __unused)51 TEE_Result stm32_tamp_set_secure_bkpregs(struct stm32_bkpregs_conf *c __unused)
52 {
53 	return TEE_ERROR_NOT_SUPPORTED;
54 }
55 #endif
56 #endif /* __DRIVERS_STM32_TAMP_H__ */
57