1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2020, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef DEVAPC_H 8*91f16700Schasinglulu #define DEVAPC_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <stdint.h> 11*91f16700Schasinglulu #include <platform_def.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu /****************************************************************************** 14*91f16700Schasinglulu * FUNCTION DEFINITION 15*91f16700Schasinglulu ******************************************************************************/ 16*91f16700Schasinglulu void devapc_init(void); 17*91f16700Schasinglulu 18*91f16700Schasinglulu /****************************************************************************** 19*91f16700Schasinglulu * STRUCTURE DEFINITION 20*91f16700Schasinglulu ******************************************************************************/ 21*91f16700Schasinglulu enum DEVAPC_PERM_TYPE { 22*91f16700Schasinglulu NO_PROTECTION = 0, 23*91f16700Schasinglulu SEC_RW_ONLY, 24*91f16700Schasinglulu SEC_RW_NS_R, 25*91f16700Schasinglulu FORBIDDEN, 26*91f16700Schasinglulu PERM_NUM, 27*91f16700Schasinglulu }; 28*91f16700Schasinglulu 29*91f16700Schasinglulu enum DOMAIN_ID { 30*91f16700Schasinglulu DOMAIN_0 = 0, 31*91f16700Schasinglulu DOMAIN_1, 32*91f16700Schasinglulu DOMAIN_2, 33*91f16700Schasinglulu DOMAIN_3, 34*91f16700Schasinglulu DOMAIN_4, 35*91f16700Schasinglulu DOMAIN_5, 36*91f16700Schasinglulu DOMAIN_6, 37*91f16700Schasinglulu DOMAIN_7, 38*91f16700Schasinglulu DOMAIN_8, 39*91f16700Schasinglulu DOMAIN_9, 40*91f16700Schasinglulu DOMAIN_10, 41*91f16700Schasinglulu DOMAIN_11, 42*91f16700Schasinglulu DOMAIN_12, 43*91f16700Schasinglulu DOMAIN_13, 44*91f16700Schasinglulu DOMAIN_14, 45*91f16700Schasinglulu DOMAIN_15, 46*91f16700Schasinglulu }; 47*91f16700Schasinglulu 48*91f16700Schasinglulu /* Slave Type */ 49*91f16700Schasinglulu enum DEVAPC_SLAVE_TYPE_SIMPLE { 50*91f16700Schasinglulu SLAVE_TYPE_INFRA = 0, 51*91f16700Schasinglulu SLAVE_TYPE_PERI, 52*91f16700Schasinglulu SLAVE_TYPE_PERI2, 53*91f16700Schasinglulu SLAVE_TYPE_PERI_PAR, 54*91f16700Schasinglulu }; 55*91f16700Schasinglulu 56*91f16700Schasinglulu enum DEVAPC_SYS_INDEX { 57*91f16700Schasinglulu DEVAPC_SYS0 = 0, 58*91f16700Schasinglulu DEVAPC_SYS1, 59*91f16700Schasinglulu DEVAPC_SYS2, 60*91f16700Schasinglulu }; 61*91f16700Schasinglulu 62*91f16700Schasinglulu enum DEVAPC_SLAVE_TYPE { 63*91f16700Schasinglulu SLAVE_TYPE_INFRA_AO_SYS0 = 0, 64*91f16700Schasinglulu SLAVE_TYPE_INFRA_AO_SYS1, 65*91f16700Schasinglulu SLAVE_TYPE_INFRA_AO_SYS2, 66*91f16700Schasinglulu SLAVE_TYPE_PERI_AO_SYS0, 67*91f16700Schasinglulu SLAVE_TYPE_PERI_AO_SYS1, 68*91f16700Schasinglulu SLAVE_TYPE_PERI_AO_SYS2, 69*91f16700Schasinglulu SLAVE_TYPE_PERI_AO2_SYS0, 70*91f16700Schasinglulu SLAVE_TYPE_PERI_PAR_AO_SYS0, 71*91f16700Schasinglulu }; 72*91f16700Schasinglulu 73*91f16700Schasinglulu /* Slave Num */ 74*91f16700Schasinglulu enum DEVAPC_SLAVE_NUM { 75*91f16700Schasinglulu SLAVE_NUM_INFRA_AO_SYS0 = 23, 76*91f16700Schasinglulu SLAVE_NUM_INFRA_AO_SYS1 = 256, 77*91f16700Schasinglulu SLAVE_NUM_INFRA_AO_SYS2 = 70, 78*91f16700Schasinglulu SLAVE_NUM_PERI_AO_SYS0 = 105, 79*91f16700Schasinglulu SLAVE_NUM_PERI_AO_SYS1 = 66, 80*91f16700Schasinglulu SLAVE_NUM_PERI_AO_SYS2 = 1, 81*91f16700Schasinglulu SLAVE_NUM_PERI_AO2_SYS0 = 115, 82*91f16700Schasinglulu SLAVE_NUM_PERI_PAR_AO_SYS0 = 27, 83*91f16700Schasinglulu }; 84*91f16700Schasinglulu 85*91f16700Schasinglulu enum DEVAPC_SYS_DOM_NUM { 86*91f16700Schasinglulu DOM_NUM_INFRA_AO_SYS0 = 16, 87*91f16700Schasinglulu DOM_NUM_INFRA_AO_SYS1 = 4, 88*91f16700Schasinglulu DOM_NUM_INFRA_AO_SYS2 = 4, 89*91f16700Schasinglulu DOM_NUM_PERI_AO_SYS0 = 16, 90*91f16700Schasinglulu DOM_NUM_PERI_AO_SYS1 = 8, 91*91f16700Schasinglulu DOM_NUM_PERI_AO_SYS2 = 4, 92*91f16700Schasinglulu DOM_NUM_PERI_AO2_SYS0 = 16, 93*91f16700Schasinglulu DOM_NUM_PERI_PAR_AO_SYS0 = 16, 94*91f16700Schasinglulu }; 95*91f16700Schasinglulu 96*91f16700Schasinglulu enum DEVAPC_CFG_INDEX { 97*91f16700Schasinglulu DEVAPC_DEBUGSYS_INDEX = 57, 98*91f16700Schasinglulu }; 99*91f16700Schasinglulu 100*91f16700Schasinglulu struct APC_INFRA_PERI_DOM_16 { 101*91f16700Schasinglulu unsigned char d0_permission; 102*91f16700Schasinglulu unsigned char d1_permission; 103*91f16700Schasinglulu unsigned char d2_permission; 104*91f16700Schasinglulu unsigned char d3_permission; 105*91f16700Schasinglulu unsigned char d4_permission; 106*91f16700Schasinglulu unsigned char d5_permission; 107*91f16700Schasinglulu unsigned char d6_permission; 108*91f16700Schasinglulu unsigned char d7_permission; 109*91f16700Schasinglulu unsigned char d8_permission; 110*91f16700Schasinglulu unsigned char d9_permission; 111*91f16700Schasinglulu unsigned char d10_permission; 112*91f16700Schasinglulu unsigned char d11_permission; 113*91f16700Schasinglulu unsigned char d12_permission; 114*91f16700Schasinglulu unsigned char d13_permission; 115*91f16700Schasinglulu unsigned char d14_permission; 116*91f16700Schasinglulu unsigned char d15_permission; 117*91f16700Schasinglulu }; 118*91f16700Schasinglulu 119*91f16700Schasinglulu struct APC_INFRA_PERI_DOM_8 { 120*91f16700Schasinglulu unsigned char d0_permission; 121*91f16700Schasinglulu unsigned char d1_permission; 122*91f16700Schasinglulu unsigned char d2_permission; 123*91f16700Schasinglulu unsigned char d3_permission; 124*91f16700Schasinglulu unsigned char d4_permission; 125*91f16700Schasinglulu unsigned char d5_permission; 126*91f16700Schasinglulu unsigned char d6_permission; 127*91f16700Schasinglulu unsigned char d7_permission; 128*91f16700Schasinglulu }; 129*91f16700Schasinglulu 130*91f16700Schasinglulu struct APC_INFRA_PERI_DOM_4 { 131*91f16700Schasinglulu unsigned char d0_permission; 132*91f16700Schasinglulu unsigned char d1_permission; 133*91f16700Schasinglulu unsigned char d2_permission; 134*91f16700Schasinglulu unsigned char d3_permission; 135*91f16700Schasinglulu }; 136*91f16700Schasinglulu 137*91f16700Schasinglulu #define DAPC_INFRA_AO_SYS0_ATTR(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \ 138*91f16700Schasinglulu PERM_ATTR2, PERM_ATTR3, PERM_ATTR4, PERM_ATTR5, \ 139*91f16700Schasinglulu PERM_ATTR6, PERM_ATTR7, PERM_ATTR8, PERM_ATTR9, \ 140*91f16700Schasinglulu PERM_ATTR10, PERM_ATTR11, PERM_ATTR12, PERM_ATTR13, \ 141*91f16700Schasinglulu PERM_ATTR14, PERM_ATTR15) \ 142*91f16700Schasinglulu {(unsigned char)PERM_ATTR0, (unsigned char)PERM_ATTR1, \ 143*91f16700Schasinglulu (unsigned char)PERM_ATTR2, (unsigned char)PERM_ATTR3, \ 144*91f16700Schasinglulu (unsigned char)PERM_ATTR4, (unsigned char)PERM_ATTR5, \ 145*91f16700Schasinglulu (unsigned char)PERM_ATTR6, (unsigned char)PERM_ATTR7, \ 146*91f16700Schasinglulu (unsigned char)PERM_ATTR8, (unsigned char)PERM_ATTR9, \ 147*91f16700Schasinglulu (unsigned char)PERM_ATTR10, (unsigned char)PERM_ATTR11, \ 148*91f16700Schasinglulu (unsigned char)PERM_ATTR12, (unsigned char)PERM_ATTR13, \ 149*91f16700Schasinglulu (unsigned char)PERM_ATTR14, (unsigned char)PERM_ATTR15} 150*91f16700Schasinglulu 151*91f16700Schasinglulu #define DAPC_INFRA_AO_SYS1_ATTR(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \ 152*91f16700Schasinglulu PERM_ATTR2, PERM_ATTR3) \ 153*91f16700Schasinglulu {(unsigned char)PERM_ATTR0, (unsigned char)PERM_ATTR1, \ 154*91f16700Schasinglulu (unsigned char)PERM_ATTR2, (unsigned char)PERM_ATTR3} 155*91f16700Schasinglulu 156*91f16700Schasinglulu #define DAPC_PERI_AO_SYS1_ATTR(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \ 157*91f16700Schasinglulu PERM_ATTR2, PERM_ATTR3, PERM_ATTR4, PERM_ATTR5, \ 158*91f16700Schasinglulu PERM_ATTR6, PERM_ATTR7) \ 159*91f16700Schasinglulu {(unsigned char)PERM_ATTR0, (unsigned char)PERM_ATTR1, \ 160*91f16700Schasinglulu (unsigned char)PERM_ATTR2, (unsigned char)PERM_ATTR3, \ 161*91f16700Schasinglulu (unsigned char)PERM_ATTR4, (unsigned char)PERM_ATTR5, \ 162*91f16700Schasinglulu (unsigned char)PERM_ATTR6, (unsigned char)PERM_ATTR7} 163*91f16700Schasinglulu 164*91f16700Schasinglulu #define DAPC_INFRA_AO_SYS2_ATTR(...) DAPC_INFRA_AO_SYS1_ATTR(__VA_ARGS__) 165*91f16700Schasinglulu #define DAPC_PERI_AO_SYS0_ATTR(...) DAPC_INFRA_AO_SYS0_ATTR(__VA_ARGS__) 166*91f16700Schasinglulu #define DAPC_PERI_AO_SYS2_ATTR(...) DAPC_INFRA_AO_SYS1_ATTR(__VA_ARGS__) 167*91f16700Schasinglulu #define DAPC_PERI_AO2_SYS0_ATTR(...) DAPC_INFRA_AO_SYS0_ATTR(__VA_ARGS__) 168*91f16700Schasinglulu #define DAPC_PERI_PAR_AO_SYS0_ATTR(...) DAPC_INFRA_AO_SYS0_ATTR(__VA_ARGS__) 169*91f16700Schasinglulu 170*91f16700Schasinglulu /****************************************************************************** 171*91f16700Schasinglulu * UTILITY DEFINITION 172*91f16700Schasinglulu ******************************************************************************/ 173*91f16700Schasinglulu #define devapc_writel(VAL, REG) mmio_write_32((uintptr_t)REG, VAL) 174*91f16700Schasinglulu #define devapc_readl(REG) mmio_read_32((uintptr_t)REG) 175*91f16700Schasinglulu 176*91f16700Schasinglulu /******************************************************************************/ 177*91f16700Schasinglulu /* Device APC AO for INFRA AO */ 178*91f16700Schasinglulu #define DEVAPC_INFRA_AO_SYS0_D0_APC_0 (DEVAPC_INFRA_AO_BASE + 0x0000) 179*91f16700Schasinglulu #define DEVAPC_INFRA_AO_SYS1_D0_APC_0 (DEVAPC_INFRA_AO_BASE + 0x1000) 180*91f16700Schasinglulu #define DEVAPC_INFRA_AO_SYS2_D0_APC_0 (DEVAPC_INFRA_AO_BASE + 0x2000) 181*91f16700Schasinglulu 182*91f16700Schasinglulu #define DEVAPC_INFRA_AO_MAS_SEC_0 (DEVAPC_INFRA_AO_BASE + 0x0A00) 183*91f16700Schasinglulu 184*91f16700Schasinglulu /******************************************************************************/ 185*91f16700Schasinglulu /* Device APC AO for PERI AO */ 186*91f16700Schasinglulu #define DEVAPC_PERI_AO_SYS0_D0_APC_0 (DEVAPC_PERI_AO_BASE + 0x0000) 187*91f16700Schasinglulu #define DEVAPC_PERI_AO_SYS1_D0_APC_0 (DEVAPC_PERI_AO_BASE + 0x1000) 188*91f16700Schasinglulu #define DEVAPC_PERI_AO_SYS2_D0_APC_0 (DEVAPC_PERI_AO_BASE + 0x2000) 189*91f16700Schasinglulu 190*91f16700Schasinglulu #define DEVAPC_PERI_AO_MAS_SEC_0 (DEVAPC_PERI_AO_BASE + 0x0A00) 191*91f16700Schasinglulu 192*91f16700Schasinglulu /******************************************************************************/ 193*91f16700Schasinglulu /* Device APC AO for PERI AO2 */ 194*91f16700Schasinglulu #define DEVAPC_PERI_AO2_SYS0_D0_APC_0 (DEVAPC_PERI_AO2_BASE + 0x0000) 195*91f16700Schasinglulu 196*91f16700Schasinglulu /******************************************************************************/ 197*91f16700Schasinglulu /* Device APC AO for PERI PAR AO */ 198*91f16700Schasinglulu #define DEVAPC_PERI_PAR_AO_SYS0_D0_APC_0 (DEVAPC_PERI_PAR_AO_BASE + 0x0000) 199*91f16700Schasinglulu 200*91f16700Schasinglulu #define DEVAPC_PERI_PAR_AO_MAS_SEC_0 (DEVAPC_PERI_PAR_AO_BASE + 0x0A00) 201*91f16700Schasinglulu 202*91f16700Schasinglulu /******************************************************************************/ 203*91f16700Schasinglulu 204*91f16700Schasinglulu 205*91f16700Schasinglulu /****************************************************************************** 206*91f16700Schasinglulu * Variable DEFINITION 207*91f16700Schasinglulu ******************************************************************************/ 208*91f16700Schasinglulu #define MOD_NO_IN_1_DEVAPC 16 209*91f16700Schasinglulu 210*91f16700Schasinglulu #endif /* DEVAPC_H */ 211*91f16700Schasinglulu 212