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