xref: /aosp_15_r20/external/coreboot/src/soc/mediatek/common/include/soc/devapc_common.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef SOC_MEDIATEK_COMMON_DEVAPC_H
4 #define SOC_MEDIATEK_COMMON_DEVAPC_H
5 
6 /* Permission Setting */
7 struct apc_infra_peri_dom_16 {
8 	unsigned char d_permission[16];
9 };
10 
11 struct apc_infra_peri_dom_8 {
12 	unsigned char d_permission[8];
13 };
14 
15 struct apc_infra_peri_dom_4 {
16 	unsigned char d_permission[4];
17 };
18 
19 #define DAPC_PERM_ATTR_4(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \
20 			 PERM_ATTR2, PERM_ATTR3) \
21 	(unsigned char)PERM_ATTR0, (unsigned char)PERM_ATTR1, \
22 	(unsigned char)PERM_ATTR2, (unsigned char)PERM_ATTR3,
23 
24 #define DAPC_PERM_ATTR_8(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \
25 			 PERM_ATTR2, PERM_ATTR3, PERM_ATTR4, PERM_ATTR5, \
26 			 PERM_ATTR6, PERM_ATTR7) \
27 	DAPC_PERM_ATTR_4(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \
28 			 PERM_ATTR2, PERM_ATTR3) \
29 	DAPC_PERM_ATTR_4(DEV_NAME, PERM_ATTR4, PERM_ATTR5, \
30 			 PERM_ATTR6, PERM_ATTR7)
31 
32 #define DAPC_PERM_ATTR_16(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \
33 			  PERM_ATTR2, PERM_ATTR3, PERM_ATTR4, PERM_ATTR5, \
34 			  PERM_ATTR6, PERM_ATTR7, PERM_ATTR8, PERM_ATTR9, \
35 			  PERM_ATTR10, PERM_ATTR11, PERM_ATTR12, PERM_ATTR13, \
36 			  PERM_ATTR14, PERM_ATTR15) \
37 	DAPC_PERM_ATTR_8(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \
38 			 PERM_ATTR2, PERM_ATTR3, \
39 			 PERM_ATTR4, PERM_ATTR5, \
40 			 PERM_ATTR6, PERM_ATTR7) \
41 	DAPC_PERM_ATTR_8(DEV_NAME, PERM_ATTR8, PERM_ATTR9, \
42 			 PERM_ATTR10, PERM_ATTR11, \
43 			 PERM_ATTR12, PERM_ATTR13, \
44 			 PERM_ATTR14, PERM_ATTR15)
45 
46 #define FORBIDDEN2 FORBIDDEN, FORBIDDEN
47 #define FORBIDDEN3 FORBIDDEN2, FORBIDDEN
48 #define FORBIDDEN4 FORBIDDEN3, FORBIDDEN
49 #define FORBIDDEN5 FORBIDDEN4, FORBIDDEN
50 #define FORBIDDEN6 FORBIDDEN5, FORBIDDEN
51 #define FORBIDDEN7 FORBIDDEN6, FORBIDDEN
52 #define FORBIDDEN8 FORBIDDEN7, FORBIDDEN
53 #define FORBIDDEN9 FORBIDDEN8, FORBIDDEN
54 #define FORBIDDEN10 FORBIDDEN9, FORBIDDEN
55 #define FORBIDDEN11 FORBIDDEN10, FORBIDDEN
56 #define FORBIDDEN12 FORBIDDEN11, FORBIDDEN
57 #define FORBIDDEN13 FORBIDDEN12, FORBIDDEN
58 #define FORBIDDEN14 FORBIDDEN13, FORBIDDEN
59 #define FORBIDDEN15 FORBIDDEN14, FORBIDDEN
60 
61 #define NO_PROTECTION2 NO_PROTECTION, NO_PROTECTION
62 #define NO_PROTECTION3 NO_PROTECTION2, NO_PROTECTION
63 #define NO_PROTECTION4 NO_PROTECTION3, NO_PROTECTION
64 
65 /* Domain Remap */
66 DEFINE_BITFIELD(FOUR_BIT_DOM_REMAP_0,  3,  0)
67 DEFINE_BITFIELD(FOUR_BIT_DOM_REMAP_1,  7,  4)
68 DEFINE_BITFIELD(FOUR_BIT_DOM_REMAP_2, 11,  8)
69 DEFINE_BITFIELD(FOUR_BIT_DOM_REMAP_3, 15, 12)
70 DEFINE_BITFIELD(FOUR_BIT_DOM_REMAP_4, 19, 16)
71 DEFINE_BITFIELD(FOUR_BIT_DOM_REMAP_5, 23, 20)
72 DEFINE_BITFIELD(FOUR_BIT_DOM_REMAP_6, 27, 24)
73 DEFINE_BITFIELD(FOUR_BIT_DOM_REMAP_7, 31, 28)
74 
75 DEFINE_BITFIELD(THREE_BIT_DOM_REMAP_0,  2,  0)
76 DEFINE_BITFIELD(THREE_BIT_DOM_REMAP_1,  5,  3)
77 DEFINE_BITFIELD(THREE_BIT_DOM_REMAP_2,  8,  6)
78 DEFINE_BITFIELD(THREE_BIT_DOM_REMAP_3, 11,  9)
79 DEFINE_BITFIELD(THREE_BIT_DOM_REMAP_4, 14, 12)
80 DEFINE_BITFIELD(THREE_BIT_DOM_REMAP_5, 17, 15)
81 
82 DEFINE_BITFIELD(TWO_BIT_DOM_REMAP_0, 1, 0)
83 DEFINE_BITFIELD(TWO_BIT_DOM_REMAP_1, 3, 2)
84 DEFINE_BITFIELD(TWO_BIT_DOM_REMAP_2, 5, 4)
85 DEFINE_BITFIELD(TWO_BIT_DOM_REMAP_3, 7, 6)
86 DEFINE_BITFIELD(TWO_BIT_DOM_REMAP_4, 9, 8)
87 DEFINE_BITFIELD(TWO_BIT_DOM_REMAP_5, 11, 10)
88 DEFINE_BITFIELD(TWO_BIT_DOM_REMAP_6, 13, 12)
89 DEFINE_BITFIELD(TWO_BIT_DOM_REMAP_7, 15, 14)
90 DEFINE_BITFIELD(TWO_BIT_DOM_REMAP_8, 17, 16)
91 
92 /* Attribute  */
93 enum trans_type {
94 	NON_SECURE_TRANS = 0,
95 	SECURE_TRANS,
96 };
97 
98 enum devapc_perm_type {
99 	NO_PROTECTION = 0,
100 	SEC_RW_ONLY,
101 	SEC_RW_NS_R,
102 	FORBIDDEN,
103 	PERM_NUM,
104 };
105 
106 enum domain_id {
107 	DOMAIN_0 = 0,
108 	DOMAIN_1,
109 	DOMAIN_2,
110 	DOMAIN_3,
111 	DOMAIN_4,
112 	DOMAIN_5,
113 	DOMAIN_6,
114 	DOMAIN_7,
115 	DOMAIN_8,
116 	DOMAIN_9,
117 	DOMAIN_10,
118 	DOMAIN_11,
119 	DOMAIN_12,
120 	DOMAIN_13,
121 	DOMAIN_14,
122 	DOMAIN_15,
123 };
124 
125 struct devapc_init_ops {
126 	uintptr_t base;
127 	void (*init)(uintptr_t base);
128 	void (*dump)(uintptr_t base);
129 };
130 
131 extern const struct devapc_init_ops devapc_init[];
132 extern const size_t devapc_init_cnt;
133 
134 void *getreg_domain(uintptr_t base, unsigned int offset,
135 		    enum domain_id domain_id, unsigned int index);
136 void *getreg(uintptr_t base, unsigned int offset);
137 void set_module_apc(uintptr_t base, uint32_t module, enum domain_id domain_id,
138 		    enum devapc_perm_type perm);
139 void dapc_init(void);
140 
141 #endif
142