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