1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Simple API for configuring TrustZone memory regions
4  *
5  * The premise is that the desired TZC layout is known beforehand, and it can
6  * be configured in one step. tzc_configure() provides this functionality.
7  */
8 #ifndef MACH_TZC_H
9 #define MACH_TZC_H
10 
11 #include <linux/types.h>
12 
13 enum tzc_sec_mode {
14 	TZC_ATTR_SEC_NONE = 0,
15 	TZC_ATTR_SEC_R = 1,
16 	TZC_ATTR_SEC_W = 2,
17 	TZC_ATTR_SEC_RW	 = 3
18 };
19 
20 struct tzc_region {
21 	uintptr_t base;
22 	uintptr_t top;
23 	enum tzc_sec_mode sec_mode;
24 	uint16_t nsec_id;
25 	uint16_t filters_mask;
26 };
27 
28 int tzc_configure(uintptr_t tzc, const struct tzc_region *cfg);
29 int tzc_disable_filters(uintptr_t tzc, uint16_t filters_mask);
30 int tzc_enable_filters(uintptr_t tzc, uint16_t filters_mask);
31 void tzc_dump_config(uintptr_t tzc);
32 
33 #endif /* MACH_TZC_H */
34