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