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