blob: 1b77942f21ef11f419148777f828843f0284da61 [file] [log] [blame]
Karl Li130536e2023-04-21 11:43:24 +08001/*
2 * Copyright (c) 2023, MediaTek Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef APUSYS_DAPC_V1_H
8#define APUSYS_DAPC_V1_H
9
10#include <lib/mmio.h>
11
12/******************************************************************************
13 * STRUCTURE DEFINITION
14 ******************************************************************************/
15enum apusys_apc_err_status {
16 APUSYS_APC_OK = 0x0,
17 APUSYS_APC_ERR_GENERIC = 0x1,
18};
19
20enum apusys_apc_perm_type {
21 NO_PROTECTION = 0,
22 SEC_RW_ONLY = 1,
23 SEC_RW_NS_R = 2,
24 FORBIDDEN = 3,
25 PERM_NUM = 4,
26};
27
28enum apusys_apc_domain_id {
29 DOMAIN_0 = 0,
30 DOMAIN_1 = 1,
31 DOMAIN_2 = 2,
32 DOMAIN_3 = 3,
33 DOMAIN_4 = 4,
34 DOMAIN_5 = 5,
35 DOMAIN_6 = 6,
36 DOMAIN_7 = 7,
37 DOMAIN_8 = 8,
38 DOMAIN_9 = 9,
39 DOMAIN_10 = 10,
40 DOMAIN_11 = 11,
41 DOMAIN_12 = 12,
42 DOMAIN_13 = 13,
43 DOMAIN_14 = 14,
44 DOMAIN_15 = 15,
45};
46
47struct apc_dom_16 {
48 unsigned char d0_permission;
49 unsigned char d1_permission;
50 unsigned char d2_permission;
51 unsigned char d3_permission;
52 unsigned char d4_permission;
53 unsigned char d5_permission;
54 unsigned char d6_permission;
55 unsigned char d7_permission;
56 unsigned char d8_permission;
57 unsigned char d9_permission;
58 unsigned char d10_permission;
59 unsigned char d11_permission;
60 unsigned char d12_permission;
61 unsigned char d13_permission;
62 unsigned char d14_permission;
63 unsigned char d15_permission;
64};
65
66#define APUSYS_APC_AO_ATTR(DEV_NAME, \
67 PERM_ATTR0, PERM_ATTR1, PERM_ATTR2, PERM_ATTR3, \
68 PERM_ATTR4, PERM_ATTR5, PERM_ATTR6, PERM_ATTR7, \
69 PERM_ATTR8, PERM_ATTR9, PERM_ATTR10, PERM_ATTR11, \
70 PERM_ATTR12, PERM_ATTR13, PERM_ATTR14, PERM_ATTR15) \
71 {(unsigned char)PERM_ATTR0, (unsigned char)PERM_ATTR1, \
72 (unsigned char)PERM_ATTR2, (unsigned char)PERM_ATTR3, \
73 (unsigned char)PERM_ATTR4, (unsigned char)PERM_ATTR5, \
74 (unsigned char)PERM_ATTR6, (unsigned char)PERM_ATTR7, \
75 (unsigned char)PERM_ATTR8, (unsigned char)PERM_ATTR9, \
76 (unsigned char)PERM_ATTR10, (unsigned char)PERM_ATTR11, \
77 (unsigned char)PERM_ATTR12, (unsigned char)PERM_ATTR13, \
78 (unsigned char)PERM_ATTR14, (unsigned char)PERM_ATTR15}
79
80typedef enum apusys_apc_err_status (*dapc_cfg_func)(uint32_t slave,
81 enum apusys_apc_domain_id domain_id,
82 enum apusys_apc_perm_type perm);
83
84/* Register */
85#define DEVAPC_DOM_SIZE (0x40)
86#define DEVAPC_REG_SIZE (4)
87
88/* APUSYS APC offsets */
89#define APUSYS_DAPC_CON_VIO_MASK (0x80000000)
90#define APUSYS_DAPC_CON(base) ((base) + 0x00f00)
91
92/******************************************************************************
93 * DAPC Common Function
94 ******************************************************************************/
95#define SET_APUSYS_DAPC_V1(dapc, cfg) \
96 set_apusys_dapc_v1(dapc, ARRAY_SIZE(dapc), cfg)
97
98#define DUMP_APUSYS_DAPC_V1(apc) \
99 dump_apusys_dapc_v1(#apc, apc##_BASE, \
100 (apc##_SLAVE_NUM / apc##_SLAVE_NUM_IN_1_DOM), apc##_DOM_NUM)
101
102enum apusys_apc_err_status set_apusys_dapc_v1(const struct apc_dom_16 *dapc,
103 uint32_t size, dapc_cfg_func cfg);
104
105void dump_apusys_dapc_v1(const char *name, uintptr_t base, uint32_t reg_num, uint32_t dom_num);
106
107/******************************************************************************
108 * DAPC Permission Policy
109 ******************************************************************************/
Karl Li03facb02023-04-24 16:45:49 +0800110#define SLAVE_FORBID_EXCEPT_D0_SEC_RW(domain) \
111 APUSYS_APC_AO_ATTR(domain, \
112 SEC_RW_ONLY, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
113 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
114 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
115 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
116
Karl Li130536e2023-04-21 11:43:24 +0800117#define SLAVE_FORBID_EXCEPT_D0_SEC_RW_D5_NO_PROTECT(domain) \
118 APUSYS_APC_AO_ATTR(domain, \
119 SEC_RW_ONLY, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
120 FORBIDDEN, NO_PROTECTION, FORBIDDEN, FORBIDDEN, \
121 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
122 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
123
124#define SLAVE_FORBID_EXCEPT_D5_NO_PROTECT(domain) \
125 APUSYS_APC_AO_ATTR(domain, \
126 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
127 FORBIDDEN, NO_PROTECTION, FORBIDDEN, FORBIDDEN, \
128 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
129 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
130
131#define SLAVE_FORBID_EXCEPT_D0_SEC_RW_NS_R_D5_NO_PROTECT(domain) \
132 APUSYS_APC_AO_ATTR(domain, \
133 SEC_RW_NS_R, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
134 FORBIDDEN, NO_PROTECTION, FORBIDDEN, FORBIDDEN, \
135 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
136 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
137
138#define SLAVE_FORBID_EXCEPT_D7_NO_PROTECT(domain) \
139 APUSYS_APC_AO_ATTR(domain, \
140 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
141 FORBIDDEN, FORBIDDEN, FORBIDDEN, NO_PROTECTION, \
142 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
143 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
144
145#define SLAVE_FORBID_EXCEPT_D5_D7_NO_PROTECT(domain) \
146 APUSYS_APC_AO_ATTR(domain, \
147 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
148 FORBIDDEN, NO_PROTECTION, FORBIDDEN, NO_PROTECTION, \
149 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
150 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
151
152#define SLAVE_FORBID_EXCEPT_D0_D5_NO_PROTECT(domain) \
153 APUSYS_APC_AO_ATTR(domain, \
154 NO_PROTECTION, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
155 FORBIDDEN, NO_PROTECTION, FORBIDDEN, FORBIDDEN, \
156 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
157 FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
Karl Li130536e2023-04-21 11:43:24 +0800158#endif /* APUSYS_DAPC_V1_H */