1 /* 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 ******************************************************************************/ 15 enum apusys_apc_err_status { 16 APUSYS_APC_OK = 0x0, 17 APUSYS_APC_ERR_GENERIC = 0x1, 18 }; 19 20 enum 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 28 enum 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 47 struct 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 80 typedef 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 102 enum apusys_apc_err_status set_apusys_dapc_v1(const struct apc_dom_16 *dapc, 103 uint32_t size, dapc_cfg_func cfg); 104 105 void 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 ******************************************************************************/ 110 #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 117 #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) 158 #endif /* APUSYS_DAPC_V1_H */ 159