1 /* 2 * Arm SCP/MCP Software 3 * Copyright (c) 2019-2022, Arm Limited and Contributors. All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 * 7 * Description: 8 * SoC-level System Control register definitions 9 */ 10 11 /* The use of "subordinate" may not be in sync with platform documentation */ 12 13 #ifndef SCP_CONFIG_H 14 #define SCP_CONFIG_H 15 16 #include "system_mmap.h" 17 18 #include <fwk_macros.h> 19 20 #include <stdint.h> 21 22 struct scp_config_reset_reg { 23 FWK_RW uint32_t STATUS; 24 FWK_W uint32_t SET; 25 FWK_W uint32_t CLEAR; 26 }; 27 28 struct scp_config_reg { 29 FWK_RW uint32_t BIG_STATIC_CONFIG; 30 FWK_RW uint32_t LITTLE_STATIC_CONFIG; 31 FWK_RW uint32_t GPU_CONFIG; 32 FWK_RW uint32_t SYS_PROFILER_CONFIG; 33 FWK_RW uint32_t SYS_PROFILER_DISABLE; 34 FWK_RW uint32_t RESET_VEC_BASE_ADDR; 35 uint8_t RESERVED1[0x100 - 0x18]; 36 FWK_RW uint32_t BIGCLK_CONTROL; 37 FWK_RW uint32_t LITTLECLK_CONTROL; 38 FWK_RW uint32_t GPUCLK_CONTROL; 39 FWK_RW uint32_t DMCCLK_CONTROL; 40 uint8_t RESERVED2[0x200 - 0x110]; 41 FWK_RW uint32_t ATCLK_CONTROL; 42 FWK_RW uint32_t CCICLK_CONTROL; 43 FWK_RW uint32_t NICSCPCLK_CONTROL; 44 FWK_RW uint32_t NICPERCLK_CONTROL; 45 FWK_RW uint32_t SPCLK_CONTROL; 46 FWK_RW uint32_t GICCLK_CONTROL; 47 FWK_RW uint32_t RESERVED3; 48 FWK_RW uint32_t TRACECLKIN_CONTROL; 49 FWK_RW uint32_t PCLKDBG_CONTROL; 50 uint8_t RESERVED4[0x300 - 0x224]; 51 FWK_R uint32_t CLOCK_ENABLE_STATUS; 52 FWK_W uint32_t CLOCK_ENABLE_SET; 53 FWK_W uint32_t CLOCK_ENABLE_CLEAR; 54 FWK_R uint32_t CLOCK_FORCE_STATUS; 55 FWK_W uint32_t CLOCK_FORCE_SET; 56 FWK_W uint32_t CLOCK_FORCE_CLEAR; 57 FWK_R uint32_t CLOCK_STOPPED_STATUS; 58 FWK_W uint32_t CLOCK_STOPPED_SET; 59 FWK_W uint32_t CLOCK_STOPPED_CLEAR; 60 uint8_t RESERVED5[0x400 - 0x324]; 61 FWK_RW uint32_t SCP_CONTROL; 62 FWK_RW uint32_t SCP_STATUS; 63 FWK_RW uint32_t SUBORDINATE_EXT_CONTROL; 64 FWK_RW uint32_t BIG_SNOOP_CONTROL; 65 FWK_RW uint32_t LITTLE_SNOOP_CONTROL; 66 uint8_t RESERVED6[0x500 - 0x414]; 67 FWK_R uint32_t RESET_SYNDROME; 68 struct scp_config_reset_reg SYS_MANUAL_RESET; 69 struct scp_config_reset_reg BIG_MANUAL_RESET; 70 struct scp_config_reset_reg LITTLE_MANUAL_RESET; 71 uint8_t RESERVED7[0x600 - 0x528]; 72 FWK_RW uint32_t DEBUG_CONTROL; 73 FWK_R uint32_t DEBUG_STATUS; 74 FWK_R uint32_t AP_DAP_TARGET_ID; 75 FWK_R uint32_t SCP_DAP_TARGET_ID; 76 FWK_R uint32_t DEBUG_PORT_ID; 77 uint8_t RESERVED8[0xFD0 - 0x614]; 78 FWK_R uint32_t PID_4; 79 FWK_R uint32_t PID_0; 80 FWK_R uint32_t PID_1; 81 FWK_R uint32_t PID_2; 82 FWK_R uint32_t PID_3; 83 FWK_R uint32_t COMPID_0; 84 FWK_R uint32_t COMPID_1; 85 FWK_R uint32_t COMPID_2; 86 FWK_R uint32_t COMPID_3; 87 }; 88 89 #define SCP_CONFIG ((struct scp_config_reg *) CONFIG_BASE) 90 91 #define SCP_CONFIG_BIG_STATIC_CONFIG_CLUSTERID UINT32_C(0x0000000F) 92 #define SCP_CONFIG_BIG_STATIC_CONFIG_CFGEND UINT32_C(0x00000030) 93 #define SCP_CONFIG_BIG_STATIC_CONFIG_CFGTE UINT32_C(0x00000300) 94 #define SCP_CONFIG_BIG_STATIC_CONFIG_CRYPTODISABLE UINT32_C(0x00002000) 95 #define SCP_CONFIG_BIG_STATIC_CONFIG_BARRIERDISABLE UINT32_C(0x00040000) 96 97 #define SCP_CONFIG_LITTLE_STATIC_CONFIG_CLUSTERID UINT32_C(0x0000000F) 98 #define SCP_CONFIG_LITTLE_STATIC_CONFIG_CFGEND UINT32_C(0x000000F0) 99 #define SCP_CONFIG_LITTLE_STATIC_CONFIG_CFGTE UINT32_C(0x00000F00) 100 #define SCP_CONFIG_LITTLE_STATIC_CONFIG_CRYPTODISABLE UINT32_C(0x00002000) 101 #define SCP_CONFIG_LITTLE_STATIC_CONFIG_BARRIERDISABLE UINT32_C(0x00040000) 102 103 #define SCP_CONFIG_GPU_CONFIG_BARRIERDISABLE UINT32_C(0x00000001) 104 #define SCP_CONFIG_GPU_CONFIG_BARRIERDISABLE_FALSE UINT32_C(0x00000000) 105 #define SCP_CONFIG_GPU_CONFIG_BARRIERDISABLE_TRUE UINT32_C(0x00000001) 106 107 #define SCP_CONFIG_SYS_PROFILER_CONFIG_SPSNOOPEND UINT32_C(0x00000001) 108 #define SCP_CONFIG_SYS_PROFILER_CONFIG_SPSNOOPSTART UINT32_C(0x00000002) 109 #define SCP_CONFIG_SYS_PROFILER_CONFIG_SPWRITEEND UINT32_C(0x00000004) 110 #define SCP_CONFIG_SYS_PROFILER_CONFIG_SPWRITESTART UINT32_C(0x00000008) 111 #define SCP_CONFIG_SYS_PROFILER_CONFIG_SPREADEND UINT32_C(0x00000010) 112 #define SCP_CONFIG_SYS_PROFILER_CONFIG_SPREADSTART UINT32_C(0x00000020) 113 #define SCP_CONFIG_SYS_PROFILER_DISABLE_POMSTRDIS UINT32_C(0x00000001) 114 #define SCP_CONFIG_SYS_PROFILER_DISABLE_SOFTMSTRDIS UINT32_C(0x00000002) 115 116 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKSEL_MASK UINT32_C(0x0000000F) 117 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKSEL_POS UINT32_C(0x00000000) 118 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKSEL_GATED UINT32_C(0x00000000) 119 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKSEL_SYSREFCLK UINT32_C(0x00000001) 120 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKSEL_SYSINCLK UINT32_C(0x00000002) 121 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKSEL_PRIVCLK UINT32_C(0x00000004) 122 123 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKDIVSYS_MASK UINT32_C(0x000000F0) 124 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKDIVSYS_POS UINT32_C(0x00000004) 125 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKDIVEXT_MASK UINT32_C(0x00000F00) 126 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CLKDIVEXT_POS UINT32_C(0x00000008) 127 128 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLK_MASK UINT32_C(0x0000F000) 129 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLK_POS UINT32_C(0x0000000C) 130 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLK_GATED UINT32_C(0x00000000) 131 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLK_SYSREFCLK UINT32_C(0x00001000) 132 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLK_SYSINCLK UINT32_C(0x00002000) 133 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLK_PRIVCLK UINT32_C(0x00004000) 134 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLKDIVSYS_MASK UINT32_C(0x000F0000) 135 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLKDIVSYS_POS UINT32_C(0x00000010) 136 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLKDIVEXT_MASK UINT32_C(0x00F00000) 137 #define SCP_CONFIG_CLUSTERCLK_CONTROL_CRNTCLKDIVEXT_POS UINT32_C(0x00000014) 138 139 #define SCP_CONFIG_DMCCLK_CONTROL_CLKSEL UINT32_C(0x0000000F) 140 #define SCP_CONFIG_DMCCLK_CONTROL_CLKSEL_GATED UINT32_C(0x00000000) 141 #define SCP_CONFIG_DMCCLK_CONTROL_CLKSEL_REFCLK UINT32_C(0x00000001) 142 #define SCP_CONFIG_DMCCLK_CONTROL_CLKSEL_SYSINCLK UINT32_C(0x00000002) 143 #define SCP_CONFIG_DMCCLK_CONTROL_CLKDIV UINT32_C(0x000000F0) 144 #define SCP_CONFIG_DMCCLK_CONTROL_DMCAUXCLKEN UINT32_C(0x00000100) 145 #define SCP_CONFIG_DMCCLK_CONTROL_DMCCLKRATIO UINT32_C(0x00000100) 146 #define SCP_CONFIG_DMCCLK_CONTROL_DMCCLKRATIO_1_1 UINT32_C(0x00000000) 147 #define SCP_CONFIG_DMCCLK_CONTROL_DMCCLKRATIO_1_2 UINT32_C(0x00000100) 148 #define SCP_CONFIG_DMCCLK_CONTROL_CRNTCLK UINT32_C(0x0000F000) 149 #define SCP_CONFIG_DMCCLK_CONTROL_CRNTCLK_GATED UINT32_C(0x00000000) 150 #define SCP_CONFIG_DMCCLK_CONTROL_CRNTCLK_REFCLK UINT32_C(0x00001000) 151 #define SCP_CONFIG_DMCCLK_CONTROL_CRNTCLK_SYSINCLK UINT32_C(0x00002000) 152 #define SCP_CONFIG_DMCCLK_CONTROL_CRNTCLKDIV UINT32_C(0x000F0000) 153 154 #define SCP_CONFIG_STDCLK_CONTROL_CLKSEL_MASK UINT32_C(0x0000000F) 155 #define SCP_CONFIG_STDCLK_CONTROL_CLKSEL_POS UINT32_C(0x00000000) 156 #define SCP_CONFIG_STDCLK_CONTROL_CLKSEL_GATED UINT32_C(0x00000000) 157 #define SCP_CONFIG_STDCLK_CONTROL_CLKSEL_REFCLK UINT32_C(0x00000001) 158 #define SCP_CONFIG_STDCLK_CONTROL_CLKSEL_SYSINCLK UINT32_C(0x00000002) 159 #define SCP_CONFIG_STDCLK_CONTROL_CLKDIV_MASK UINT32_C(0x000000F0) 160 #define SCP_CONFIG_STDCLK_CONTROL_CLKDIV_POS UINT32_C(0x00000004) 161 #define SCP_CONFIG_STDCLK_CONTROL_CRNTCLK_MASK UINT32_C(0x00000F00) 162 #define SCP_CONFIG_STDCLK_CONTROL_CRNTCLK_POS UINT32_C(0x00000008) 163 #define SCP_CONFIG_STDCLK_CONTROL_CRNTCLK_GATED UINT32_C(0x00000000) 164 #define SCP_CONFIG_STDCLK_CONTROL_CRNTCLK_REFCLK UINT32_C(0x00000100) 165 #define SCP_CONFIG_STDCLK_CONTROL_CRNTCLK_SYSINCLK UINT32_C(0x00000200) 166 #define SCP_CONFIG_STDCLK_CONTROL_CRNTCLKDIV_MASK UINT32_C(0x0000F000) 167 #define SCP_CONFIG_STDCLK_CONTROL_CRNTCLKDIV_POS UINT32_C(0x0000000C) 168 169 /* Only supported for CCICLK, NICSCPCLK, NICPERCLK and SPCLK */ 170 171 #define SCP_CONFIG_STDCLK_CONTROL_LPIDELAY UINT32_C(0x00FF0000) 172 173 #define SCP_CONFIG_CLOCK_ENABLE_PCLKDBGEN UINT32_C(0x00000001) 174 #define SCP_CONFIG_CLOCK_ENABLE_TRACECLKINEN UINT32_C(0x00000002) 175 #define SCP_CONFIG_CLOCK_ENABLE_GICCLKEN UINT32_C(0x00000008) 176 #define SCP_CONFIG_CLOCK_ENABLE_DMCCLKEN UINT32_C(0x00000020) 177 #define SCP_CONFIG_CLOCK_ENABLE_NICPERCLKEN UINT32_C(0x00000040) 178 #define SCP_CONFIG_CLOCK_ENABLE_NICSCPCLKEN UINT32_C(0x00000080) 179 #define SCP_CONFIG_CLOCK_ENABLE_CCICLKEN UINT32_C(0x00000100) 180 #define SCP_CONFIG_CLOCK_ENABLE_ATCLKEN UINT32_C(0x00000200) 181 #define SCP_CONFIG_CLOCK_ENABLE_GPUCLKEN UINT32_C(0x00000400) 182 #define SCP_CONFIG_CLOCK_ENABLE_LITTLECLKEN UINT32_C(0x00000800) 183 #define SCP_CONFIG_CLOCK_ENABLE_BIGCLKEN UINT32_C(0x00001000) 184 185 #define SCP_CONFIG_CLOCK_ENABLE_ALL \ 186 (SCP_CONFIG_CLOCK_ENABLE_PCLKDBGEN | \ 187 SCP_CONFIG_CLOCK_ENABLE_TRACECLKINEN | SCP_CONFIG_CLOCK_ENABLE_GICCLKEN | \ 188 SCP_CONFIG_CLOCK_ENABLE_DMCCLKEN | SCP_CONFIG_CLOCK_ENABLE_NICPERCLKEN | \ 189 SCP_CONFIG_CLOCK_ENABLE_NICSCPCLKEN | SCP_CONFIG_CLOCK_ENABLE_CCICLKEN | \ 190 SCP_CONFIG_CLOCK_ENABLE_ATCLKEN | SCP_CONFIG_CLOCK_ENABLE_GPUCLKEN | \ 191 SCP_CONFIG_CLOCK_ENABLE_LITTLECLKEN | SCP_CONFIG_CLOCK_ENABLE_BIGCLKEN) 192 193 #define SCP_CONFIG_CLOCK_FORCE_SPCLKFORCE UINT32_C(0x00000010) 194 #define SCP_CONFIG_CLOCK_FORCE_NICPERCLKFORCE UINT32_C(0x00000040) 195 #define SCP_CONFIG_CLOCK_FORCE_NICSCPCLKFORCE UINT32_C(0x00000080) 196 #define SCP_CONFIG_CLOCK_FORCE_CCICLKFORCE UINT32_C(0x00000100) 197 198 #define SCP_CONFIG_CLOCK_STOPPED_SYSINCLKSTOPPED UINT32_C(0x00000001) 199 #define SCP_CONFIG_CLOCK_STOPPED_GPUINCLKSTOPPED UINT32_C(0x00000002) 200 #define SCP_CONFIG_CLOCK_STOPPED_LITTLEINCLKSTOPPED UINT32_C(0x00000004) 201 #define SCP_CONFIG_CLOCK_STOPPED_BIGINCLKSTOPPED UINT32_C(0x00000008) 202 203 #define SCP_CONFIG_SCP_CONTROL_REFCLKREQFORCE UINT32_C(0x00000001) 204 #define SCP_CONFIG_SCP_CONTROL_SCPSYSREMAPEN UINT32_C(0x00000002) 205 #define SCP_CONFIG_SCP_CONTROL_M3HCLKFORCE UINT32_C(0x00000020) 206 207 #define SCP_CONFIG_SCP_STATUS_REFCLKACK UINT32_C(0x00000001) 208 #define SCP_CONFIG_SCP_STATUS_SYSINPLLLOCK UINT32_C(0x00000002) 209 #define SCP_CONFIG_SCP_STATUS_GPUINPLLLOCK UINT32_C(0x00000004) 210 #define SCP_CONFIG_SCP_STATUS_LITTLEINPLLLOCK UINT32_C(0x00000008) 211 #define SCP_CONFIG_SCP_STATUS_BIGINPLLLOCK UINT32_C(0x00000010) 212 213 #define SCP_CONFIG_SUBORDINATE_EXT_CONTROL_PACCSYSREQ_SC UINT32_C(0x00000001) 214 #define SCP_CONFIG_SUBORDINATE_EXT_CONTROL_PACCSYSACK_SC UINT32_C(0x00000002) 215 #define SCP_CONFIG_SUBORDINATE_EXT_CONTROL_PACCSYSREQ_SM0 UINT32_C(0x00000004) 216 #define SCP_CONFIG_SUBORDINATE_EXT_CONTROL_PACCSYSACK_SM0 UINT32_C(0x00000008) 217 #define SCP_CONFIG_SUBORDINATE_EXT_CONTROL_PACCSYSREQ_SM1 UINT32_C(0x00000010) 218 #define SCP_CONFIG_SUBORDINATE_EXT_CONTROL_PACCSYSACK_SM1 UINT32_C(0x00000020) 219 #define SCP_CONFIG_SUBORDINATE_EXT_CONTROL_EXTIFSERVICE UINT32_C(0x00000040) 220 #define SCP_CONFIG_SUBORDINATE_EXT_CONTROL_EXTIFSNOOP UINT32_C(0x00000080) 221 222 #define SCP_CONFIG_SNOOP_CONTROL_L2ACCREQ UINT32_C(0x00000001) 223 #define SCP_CONFIG_SNOOP_CONTROL_L2ACCACK UINT32_C(0x00000002) 224 #define SCP_CONFIG_SNOOP_CONTROL_STANDBYWFIL2 UINT32_C(0x00000004) 225 226 #define SCP_CONFIG_RESET_SYNDROME_PORESET UINT32_C(0x00000001) 227 #define SCP_CONFIG_RESET_SYNDROME_WDOGRESET UINT32_C(0x00000006) 228 #define SCP_CONFIG_RESET_SYNDROME_WDOGRESET_SCP UINT32_C(0x00000002) 229 #define SCP_CONFIG_RESET_SYNDROME_WDOGRESET_SYS UINT32_C(0x00000004) 230 #define SCP_CONFIG_RESET_SYNDROME_SYSRESETREQ UINT32_C(0x00000008) 231 #define SCP_CONFIG_RESET_SYNDROME_SCPM3LOCKUP UINT32_C(0x00000010) 232 233 #define SCP_CONFIG_SYS_MANUAL_RESET_DBGSYSRESET UINT32_C(0x00000002) 234 235 #define SCP_CONFIG_CLUSTER_MANUAL_RESET_NPRESETDEBUG UINT32_C(0x00001000) 236 #define SCP_CONFIG_CLUSTER_MANUAL_RESET_NL2RESET UINT32_C(0x00002000) 237 238 #define SCP_CONFIG_DEBUG_CONTROL_CDBGRSTACK UINT32_C(0x00000001) 239 #define SCP_CONFIG_DEBUG_CONTROL_CDBGPWRUPACK UINT32_C(0x00000002) 240 #define SCP_CONFIG_DEBUG_CONTROL_CSYSPWRUPACK UINT32_C(0x00000004) 241 242 #define SCP_CONFIG_DEBUG_STATUS_CDBGRSTREQ UINT32_C(0x00000001) 243 #define SCP_CONFIG_DEBUG_STATUS_CDBGPWRUPREQ UINT32_C(0x00000002) 244 #define SCP_CONFIG_DEBUG_STATUS_CSYSPWRUPREQ UINT32_C(0x00000004) 245 #define SCP_CONFIG_DEBUG_STATUS_LITTLECPUDBGPWRUPREQ UINT32_C(0x000000F0) 246 #define SCP_CONFIG_DEBUG_STATUS_LITTLECPU0DBGPWRUPREQ UINT32_C(0x00000010) 247 #define SCP_CONFIG_DEBUG_STATUS_LITTLECPU1DBGPWRUPREQ UINT32_C(0x00000020) 248 #define SCP_CONFIG_DEBUG_STATUS_LITTLECPU2DBGPWRUPREQ UINT32_C(0x00000040) 249 #define SCP_CONFIG_DEBUG_STATUS_LITTLECPU3DBGPWRUPREQ UINT32_C(0x00000080) 250 #define SCP_CONFIG_DEBUG_STATUS_BIGCPUDBGPWRUPREQ UINT32_C(0x00000F00) 251 #define SCP_CONFIG_DEBUG_STATUS_BIGCPU0DBGPWRUPREQ UINT32_C(0x00000100) 252 #define SCP_CONFIG_DEBUG_STATUS_BIGCPU1DBGPWRUPREQ UINT32_C(0x00000200) 253 #define SCP_CONFIG_DEBUG_STATUS_BIGCPU2DBGPWRUPREQ UINT32_C(0x00000400) 254 #define SCP_CONFIG_DEBUG_STATUS_BIGCPU3DBGPWRUPREQ UINT32_C(0x00000800) 255 256 #define SCP_CONFIG_AP_DAP_TARGET_ID UINT32_C(0x07270477) 257 258 #define SCP_CONFIG_SCP_DAP_TARGET_ID UINT32_C(0x07280477) 259 260 #define SCP_CONFIG_DEBUG_PORT_ID_INSTANCEID UINT32_C(0x0000000F) 261 262 #endif /* SCP_CONFIG_H */ 263