xref: /rk3399_ARM-atf/plat/renesas/common/bl2_cpg_init.c (revision 899108601a0c3b08ead5e686d92ea0794700ff35)
1499c2713SBiju Das /*
2ec3e2f67SLad Prabhakar  * Copyright (c) 2015-2021, Renesas Electronics Corporation. All rights reserved.
3499c2713SBiju Das  *
4499c2713SBiju Das  * SPDX-License-Identifier: BSD-3-Clause
5499c2713SBiju Das  */
6499c2713SBiju Das 
7499c2713SBiju Das #include <common/debug.h>
8499c2713SBiju Das #include <lib/mmio.h>
9499c2713SBiju Das 
10499c2713SBiju Das #include "cpg_registers.h"
11499c2713SBiju Das #include "rcar_def.h"
12499c2713SBiju Das #include "rcar_private.h"
13499c2713SBiju Das 
14499c2713SBiju Das static void bl2_secure_cpg_init(void);
15499c2713SBiju Das 
16ec3e2f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3) || \
17ec3e2f67SLad Prabhakar 	(RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H)
18499c2713SBiju Das static void bl2_realtime_cpg_init_h3(void);
19499c2713SBiju Das static void bl2_system_cpg_init_h3(void);
20499c2713SBiju Das #endif
21499c2713SBiju Das 
22db10bad9SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M)
23499c2713SBiju Das static void bl2_realtime_cpg_init_m3(void);
24499c2713SBiju Das static void bl2_system_cpg_init_m3(void);
25499c2713SBiju Das #endif
26499c2713SBiju Das 
27a4d86f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N) || (RCAR_LSI == RZ_G2N)
28499c2713SBiju Das static void bl2_realtime_cpg_init_m3n(void);
29499c2713SBiju Das static void bl2_system_cpg_init_m3n(void);
30499c2713SBiju Das #endif
31499c2713SBiju Das 
32499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3M)
33499c2713SBiju Das static void bl2_realtime_cpg_init_v3m(void);
34499c2713SBiju Das static void bl2_system_cpg_init_v3m(void);
35499c2713SBiju Das #endif
36499c2713SBiju Das 
37bcf43f04SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RZ_G2E)
38499c2713SBiju Das static void bl2_realtime_cpg_init_e3(void);
39499c2713SBiju Das static void bl2_system_cpg_init_e3(void);
40499c2713SBiju Das #endif
41499c2713SBiju Das 
42499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_D3)
43499c2713SBiju Das static void bl2_system_cpg_init_d3(void);
44499c2713SBiju Das #endif
45499c2713SBiju Das 
46499c2713SBiju Das typedef struct {
47499c2713SBiju Das 	uintptr_t adr;
48499c2713SBiju Das 	uint32_t val;
49499c2713SBiju Das } reg_setting_t;
50499c2713SBiju Das 
51499c2713SBiju Das static void bl2_secure_cpg_init(void)
52499c2713SBiju Das {
53499c2713SBiju Das 	uint32_t stop_cr2, reset_cr2;
54499c2713SBiju Das 	uint32_t stop_cr4, reset_cr4;
55499c2713SBiju Das 	uint32_t stop_cr5, reset_cr5;
56499c2713SBiju Das 
57499c2713SBiju Das #if (RCAR_LSI == RCAR_D3)
58499c2713SBiju Das 	reset_cr2 = 0x00000000U;
59499c2713SBiju Das 	stop_cr2 = 0xFFFFFFFFU;
60bcf43f04SLad Prabhakar #elif (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RZ_G2E)
61499c2713SBiju Das 	reset_cr2 = 0x10000000U;
62499c2713SBiju Das 	stop_cr2 = 0xEFFFFFFFU;
63499c2713SBiju Das #else
64499c2713SBiju Das 	reset_cr2 = 0x14000000U;
65499c2713SBiju Das 	stop_cr2 = 0xEBFFFFFFU;
66499c2713SBiju Das #endif
67499c2713SBiju Das 
68499c2713SBiju Das #if (RCAR_LSI == RCAR_D3)
69499c2713SBiju Das 	reset_cr4 = 0x00000000U;
70499c2713SBiju Das 	stop_cr4 = 0xFFFFFFFFU;
71499c2713SBiju Das 	reset_cr5 = 0x00000000U;
72499c2713SBiju Das 	stop_cr5 = 0xFFFFFFFFU;
73499c2713SBiju Das #else
74499c2713SBiju Das 	reset_cr4 = 0x80000003U;
75499c2713SBiju Das 	stop_cr4 = 0x7FFFFFFFU;
76499c2713SBiju Das 	reset_cr5 = 0x40000000U;
77499c2713SBiju Das 	stop_cr5 = 0xBFFFFFFFU;
78499c2713SBiju Das #endif
79499c2713SBiju Das 
80499c2713SBiju Das 	/* Secure Module Stop Control Registers */
81499c2713SBiju Das 	cpg_write(SCMSTPCR0, 0xFFFFFFFFU);
82499c2713SBiju Das 	cpg_write(SCMSTPCR1, 0xFFFFFFFFU);
83499c2713SBiju Das 	cpg_write(SCMSTPCR2, stop_cr2);
84499c2713SBiju Das 	cpg_write(SCMSTPCR3, 0xFFFFFFFFU);
85499c2713SBiju Das 	cpg_write(SCMSTPCR4, stop_cr4);
86499c2713SBiju Das 	cpg_write(SCMSTPCR5, stop_cr5);
87499c2713SBiju Das 	cpg_write(SCMSTPCR6, 0xFFFFFFFFU);
88499c2713SBiju Das 	cpg_write(SCMSTPCR7, 0xFFFFFFFFU);
89499c2713SBiju Das 	cpg_write(SCMSTPCR8, 0xFFFFFFFFU);
90499c2713SBiju Das 	cpg_write(SCMSTPCR9, 0xFFFDFFFFU);
91499c2713SBiju Das 	cpg_write(SCMSTPCR10, 0xFFFFFFFFU);
92499c2713SBiju Das 	cpg_write(SCMSTPCR11, 0xFFFFFFFFU);
93499c2713SBiju Das 
94499c2713SBiju Das 	/* Secure Software Reset Access Enable Control Registers */
95499c2713SBiju Das 	cpg_write(SCSRSTECR0, 0x00000000U);
96499c2713SBiju Das 	cpg_write(SCSRSTECR1, 0x00000000U);
97499c2713SBiju Das 	cpg_write(SCSRSTECR2, reset_cr2);
98499c2713SBiju Das 	cpg_write(SCSRSTECR3, 0x00000000U);
99499c2713SBiju Das 	cpg_write(SCSRSTECR4, reset_cr4);
100499c2713SBiju Das 	cpg_write(SCSRSTECR5, reset_cr5);
101499c2713SBiju Das 	cpg_write(SCSRSTECR6, 0x00000000U);
102499c2713SBiju Das 	cpg_write(SCSRSTECR7, 0x00000000U);
103499c2713SBiju Das 	cpg_write(SCSRSTECR8, 0x00000000U);
104499c2713SBiju Das 	cpg_write(SCSRSTECR9, 0x00020000U);
105499c2713SBiju Das 	cpg_write(SCSRSTECR10, 0x00000000U);
106499c2713SBiju Das 	cpg_write(SCSRSTECR11, 0x00000000U);
107499c2713SBiju Das }
108499c2713SBiju Das 
109ec3e2f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3) || \
110ec3e2f67SLad Prabhakar 	(RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H)
111499c2713SBiju Das static void bl2_realtime_cpg_init_h3(void)
112499c2713SBiju Das {
113499c2713SBiju Das 	uint32_t cut = mmio_read_32(RCAR_PRR) & PRR_CUT_MASK;
114499c2713SBiju Das 	uint32_t cr0, cr8;
115499c2713SBiju Das 
116499c2713SBiju Das 	cr0 = (cut == PRR_PRODUCT_10 || cut == PRR_PRODUCT_11) ?
117499c2713SBiju Das 	    0x00200000U : 0x00210000U;
118499c2713SBiju Das 	cr8 = (cut == PRR_PRODUCT_10 || cut == PRR_PRODUCT_11) ?
119499c2713SBiju Das 	    0x01F1FFF4U : 0x01F1FFF7U;
120499c2713SBiju Das 
121499c2713SBiju Das 	cpg_write(RMSTPCR0, cr0);
122499c2713SBiju Das 	cpg_write(RMSTPCR1, 0xFFFFFFFFU);
123499c2713SBiju Das 	cpg_write(RMSTPCR2, 0x040E0FDCU);
124499c2713SBiju Das 	cpg_write(RMSTPCR3, 0xFFFFFFDFU);
125499c2713SBiju Das 	cpg_write(RMSTPCR4, 0x80000004U);
126499c2713SBiju Das 	cpg_write(RMSTPCR5, 0xC3FFFFFFU);
127499c2713SBiju Das 	cpg_write(RMSTPCR6, 0xFFFFFFFFU);
128499c2713SBiju Das 	cpg_write(RMSTPCR7, 0xFFFFFFFFU);
129499c2713SBiju Das 	cpg_write(RMSTPCR8, cr8);
130499c2713SBiju Das 	cpg_write(RMSTPCR9, 0xFFFFFFFEU);
131499c2713SBiju Das 	cpg_write(RMSTPCR10, 0xFFFEFFE0U);
132499c2713SBiju Das 	cpg_write(RMSTPCR11, 0x000000B7U);
133499c2713SBiju Das }
134499c2713SBiju Das 
135499c2713SBiju Das static void bl2_system_cpg_init_h3(void)
136499c2713SBiju Das {
137499c2713SBiju Das 	/** System Module Stop Control Registers */
138499c2713SBiju Das 	cpg_write(SMSTPCR0, 0x00210000U);
139499c2713SBiju Das 	cpg_write(SMSTPCR1, 0xFFFFFFFFU);
140499c2713SBiju Das 	cpg_write(SMSTPCR2, 0x040E2FDCU);
141499c2713SBiju Das 	cpg_write(SMSTPCR3, 0xFFFFFBDFU);
142*89910860SMarek Vasut 	cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4));
143499c2713SBiju Das 	cpg_write(SMSTPCR5, 0xC3FFFFFFU);
144499c2713SBiju Das 	cpg_write(SMSTPCR6, 0xFFFFFFFFU);
145499c2713SBiju Das 	cpg_write(SMSTPCR7, 0xFFFFFFFFU);
146499c2713SBiju Das 	cpg_write(SMSTPCR8, 0x01F1FFF5U);
147499c2713SBiju Das 	cpg_write(SMSTPCR9, 0xFFFFFFFFU);
148499c2713SBiju Das 	cpg_write(SMSTPCR10, 0xFFFEFFE0U);
149499c2713SBiju Das 	cpg_write(SMSTPCR11, 0x000000B7U);
150499c2713SBiju Das }
151499c2713SBiju Das #endif
152499c2713SBiju Das 
153db10bad9SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M)
154499c2713SBiju Das static void bl2_realtime_cpg_init_m3(void)
155499c2713SBiju Das {
156499c2713SBiju Das 	/* Realtime Module Stop Control Registers */
157499c2713SBiju Das 	cpg_write(RMSTPCR0, 0x00200000U);
158499c2713SBiju Das 	cpg_write(RMSTPCR1, 0xFFFFFFFFU);
159499c2713SBiju Das 	cpg_write(RMSTPCR2, 0x040E0FDCU);
160499c2713SBiju Das 	cpg_write(RMSTPCR3, 0xFFFFFFDFU);
161499c2713SBiju Das 	cpg_write(RMSTPCR4, 0x80000004U);
162499c2713SBiju Das 	cpg_write(RMSTPCR5, 0xC3FFFFFFU);
163499c2713SBiju Das 	cpg_write(RMSTPCR6, 0xFFFFFFFFU);
164499c2713SBiju Das 	cpg_write(RMSTPCR7, 0xFFFFFFFFU);
165499c2713SBiju Das 	cpg_write(RMSTPCR8, 0x01F1FFF7U);
166499c2713SBiju Das 	cpg_write(RMSTPCR9, 0xFFFFFFFEU);
167499c2713SBiju Das 	cpg_write(RMSTPCR10, 0xFFFEFFE0U);
168499c2713SBiju Das 	cpg_write(RMSTPCR11, 0x000000B7U);
169499c2713SBiju Das }
170499c2713SBiju Das 
171499c2713SBiju Das static void bl2_system_cpg_init_m3(void)
172499c2713SBiju Das {
173499c2713SBiju Das 	/* System Module Stop Control Registers */
174499c2713SBiju Das 	cpg_write(SMSTPCR0, 0x00200000U);
175499c2713SBiju Das 	cpg_write(SMSTPCR1, 0xFFFFFFFFU);
176499c2713SBiju Das 	cpg_write(SMSTPCR2, 0x040E2FDCU);
177499c2713SBiju Das 	cpg_write(SMSTPCR3, 0xFFFFFBDFU);
178*89910860SMarek Vasut 	cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4));
179499c2713SBiju Das 	cpg_write(SMSTPCR5, 0xC3FFFFFFU);
180499c2713SBiju Das 	cpg_write(SMSTPCR6, 0xFFFFFFFFU);
181499c2713SBiju Das 	cpg_write(SMSTPCR7, 0xFFFFFFFFU);
182499c2713SBiju Das 	cpg_write(SMSTPCR8, 0x01F1FFF7U);
183499c2713SBiju Das 	cpg_write(SMSTPCR9, 0xFFFFFFFFU);
184499c2713SBiju Das 	cpg_write(SMSTPCR10, 0xFFFEFFE0U);
185499c2713SBiju Das 	cpg_write(SMSTPCR11, 0x000000B7U);
186499c2713SBiju Das }
187499c2713SBiju Das #endif
188499c2713SBiju Das 
189a4d86f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N)  || (RCAR_LSI == RZ_G2N)
190499c2713SBiju Das static void bl2_realtime_cpg_init_m3n(void)
191499c2713SBiju Das {
192499c2713SBiju Das 	/* Realtime Module Stop Control Registers */
193499c2713SBiju Das 	cpg_write(RMSTPCR0, 0x00210000U);
194499c2713SBiju Das 	cpg_write(RMSTPCR1, 0xFFFFFFFFU);
195499c2713SBiju Das 	cpg_write(RMSTPCR2, 0x040E0FDCU);
196499c2713SBiju Das 	cpg_write(RMSTPCR3, 0xFFFFFFDFU);
197499c2713SBiju Das 	cpg_write(RMSTPCR4, 0x80000004U);
198499c2713SBiju Das 	cpg_write(RMSTPCR5, 0xC3FFFFFFU);
199499c2713SBiju Das 	cpg_write(RMSTPCR6, 0xFFFFFFFFU);
200499c2713SBiju Das 	cpg_write(RMSTPCR7, 0xFFFFFFFFU);
201499c2713SBiju Das 	cpg_write(RMSTPCR8, 0x00F1FFF7U);
202499c2713SBiju Das 	cpg_write(RMSTPCR9, 0xFFFFFFFFU);
203499c2713SBiju Das 	cpg_write(RMSTPCR10, 0xFFFFFFE0U);
204499c2713SBiju Das 	cpg_write(RMSTPCR11, 0x000000B7U);
205499c2713SBiju Das }
206499c2713SBiju Das 
207499c2713SBiju Das static void bl2_system_cpg_init_m3n(void)
208499c2713SBiju Das {
209499c2713SBiju Das 	/* System Module Stop Control Registers */
210499c2713SBiju Das 	cpg_write(SMSTPCR0, 0x00210000U);
211499c2713SBiju Das 	cpg_write(SMSTPCR1, 0xFFFFFFFFU);
212499c2713SBiju Das 	cpg_write(SMSTPCR2, 0x040E2FDCU);
213499c2713SBiju Das 	cpg_write(SMSTPCR3, 0xFFFFFBDFU);
214*89910860SMarek Vasut 	cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4));
215499c2713SBiju Das 	cpg_write(SMSTPCR5, 0xC3FFFFFFU);
216499c2713SBiju Das 	cpg_write(SMSTPCR6, 0xFFFFFFFFU);
217499c2713SBiju Das 	cpg_write(SMSTPCR7, 0xFFFFFFFFU);
218499c2713SBiju Das 	cpg_write(SMSTPCR8, 0x00F1FFF7U);
219499c2713SBiju Das 	cpg_write(SMSTPCR9, 0xFFFFFFFFU);
220499c2713SBiju Das 	cpg_write(SMSTPCR10, 0xFFFFFFE0U);
221499c2713SBiju Das 	cpg_write(SMSTPCR11, 0x000000B7U);
222499c2713SBiju Das }
223499c2713SBiju Das #endif
224499c2713SBiju Das 
225499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3M)
226499c2713SBiju Das static void bl2_realtime_cpg_init_v3m(void)
227499c2713SBiju Das {
228499c2713SBiju Das 	/* Realtime Module Stop Control Registers */
229499c2713SBiju Das 	cpg_write(RMSTPCR0, 0x00230000U);
230499c2713SBiju Das 	cpg_write(RMSTPCR1, 0xFFFFFFFFU);
231499c2713SBiju Das 	cpg_write(RMSTPCR2, 0x14062FD8U);
232499c2713SBiju Das 	cpg_write(RMSTPCR3, 0xFFFFFFDFU);
233499c2713SBiju Das 	cpg_write(RMSTPCR4, 0x80000184U);
234499c2713SBiju Das 	cpg_write(RMSTPCR5, 0x83FFFFFFU);
235499c2713SBiju Das 	cpg_write(RMSTPCR6, 0xFFFFFFFFU);
236499c2713SBiju Das 	cpg_write(RMSTPCR7, 0xFFFFFFFFU);
237499c2713SBiju Das 	cpg_write(RMSTPCR8, 0x7FF3FFF4U);
238499c2713SBiju Das 	cpg_write(RMSTPCR9, 0xFFFFFFFEU);
239499c2713SBiju Das }
240499c2713SBiju Das 
241499c2713SBiju Das static void bl2_system_cpg_init_v3m(void)
242499c2713SBiju Das {
243499c2713SBiju Das 	/* System Module Stop Control Registers */
244499c2713SBiju Das 	cpg_write(SMSTPCR0, 0x00210000U);
245499c2713SBiju Das 	cpg_write(SMSTPCR1, 0xFFFFFFFFU);
246499c2713SBiju Das 	cpg_write(SMSTPCR2, 0x340E2FDCU);
247499c2713SBiju Das 	cpg_write(SMSTPCR3, 0xFFFFFBDFU);
248*89910860SMarek Vasut 	cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4));
249499c2713SBiju Das 	cpg_write(SMSTPCR5, 0xC3FFFFFFU);
250499c2713SBiju Das 	cpg_write(SMSTPCR6, 0xFFFFFFFFU);
251499c2713SBiju Das 	cpg_write(SMSTPCR7, 0xFFFFFFFFU);
252499c2713SBiju Das 	cpg_write(SMSTPCR8, 0x01F1FFF5U);
253499c2713SBiju Das 	cpg_write(SMSTPCR9, 0xFFFFFFFEU);
254499c2713SBiju Das }
255499c2713SBiju Das #endif
256499c2713SBiju Das 
257bcf43f04SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RZ_G2E)
258499c2713SBiju Das static void bl2_realtime_cpg_init_e3(void)
259499c2713SBiju Das {
260499c2713SBiju Das 	/* Realtime Module Stop Control Registers */
261499c2713SBiju Das 	cpg_write(RMSTPCR0, 0x00210000U);
262499c2713SBiju Das 	cpg_write(RMSTPCR1, 0xFFFFFFFFU);
263499c2713SBiju Das 	cpg_write(RMSTPCR2, 0x000E0FDCU);
264499c2713SBiju Das 	cpg_write(RMSTPCR3, 0xFFFFFFDFU);
265499c2713SBiju Das 	cpg_write(RMSTPCR4, 0x80000004U);
266499c2713SBiju Das 	cpg_write(RMSTPCR5, 0xC3FFFFFFU);
267499c2713SBiju Das 	cpg_write(RMSTPCR6, 0xFFFFFFFFU);
268499c2713SBiju Das 	cpg_write(RMSTPCR7, 0xFFFFFFFFU);
269499c2713SBiju Das 	cpg_write(RMSTPCR8, 0x00F1FFF7U);
270499c2713SBiju Das 	cpg_write(RMSTPCR9, 0xFFFFFFDFU);
271499c2713SBiju Das 	cpg_write(RMSTPCR10, 0xFFFFFFE8U);
272499c2713SBiju Das 	cpg_write(RMSTPCR11, 0x000000B7U);
273499c2713SBiju Das }
274499c2713SBiju Das 
275499c2713SBiju Das static void bl2_system_cpg_init_e3(void)
276499c2713SBiju Das {
277499c2713SBiju Das 	/* System Module Stop Control Registers */
278499c2713SBiju Das 	cpg_write(SMSTPCR0, 0x00210000U);
279499c2713SBiju Das 	cpg_write(SMSTPCR1, 0xFFFFFFFFU);
280499c2713SBiju Das 	cpg_write(SMSTPCR2, 0x000E2FDCU);
281499c2713SBiju Das 	cpg_write(SMSTPCR3, 0xFFFFFBDFU);
282*89910860SMarek Vasut 	cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4));
283499c2713SBiju Das 	cpg_write(SMSTPCR5, 0xC3FFFFFFU);
284499c2713SBiju Das 	cpg_write(SMSTPCR6, 0xFFFFFFFFU);
285499c2713SBiju Das 	cpg_write(SMSTPCR7, 0xFFFFFFFFU);
286499c2713SBiju Das 	cpg_write(SMSTPCR8, 0x00F1FFF7U);
287499c2713SBiju Das 	cpg_write(SMSTPCR9, 0xFFFFFFDFU);
288499c2713SBiju Das 	cpg_write(SMSTPCR10, 0xFFFFFFE8U);
289499c2713SBiju Das 	cpg_write(SMSTPCR11, 0x000000B7U);
290499c2713SBiju Das }
291499c2713SBiju Das #endif
292499c2713SBiju Das 
293499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_D3)
294499c2713SBiju Das static void bl2_system_cpg_init_d3(void)
295499c2713SBiju Das {
296499c2713SBiju Das 	/* System Module Stop Control Registers */
297499c2713SBiju Das 	cpg_write(SMSTPCR0, 0x00010000U);
298499c2713SBiju Das 	cpg_write(SMSTPCR1, 0xFFFFFFFFU);
299499c2713SBiju Das 	cpg_write(SMSTPCR2, 0x00060FDCU);
300499c2713SBiju Das 	cpg_write(SMSTPCR3, 0xFFFFFBDFU);
301*89910860SMarek Vasut 	cpg_write(SMSTPCR4, 0x00000080U | (mmio_read_32(SMSTPCR4) & 0x4));
302499c2713SBiju Das 	cpg_write(SMSTPCR5, 0x83FFFFFFU);
303499c2713SBiju Das 	cpg_write(SMSTPCR6, 0xFFFFFFFFU);
304499c2713SBiju Das 	cpg_write(SMSTPCR7, 0xFFFFFFFFU);
305499c2713SBiju Das 	cpg_write(SMSTPCR8, 0x00F1FFF7U);
306499c2713SBiju Das 	cpg_write(SMSTPCR9, 0xF3F5E016U);
307499c2713SBiju Das 	cpg_write(SMSTPCR10, 0xFFFEFFE0U);
308499c2713SBiju Das 	cpg_write(SMSTPCR11, 0x000000B7U);
309499c2713SBiju Das }
310499c2713SBiju Das #endif
311499c2713SBiju Das 
312499c2713SBiju Das void bl2_cpg_init(void)
313499c2713SBiju Das {
314499c2713SBiju Das 	uint32_t boot_cpu = mmio_read_32(RCAR_MODEMR) & MODEMR_BOOT_CPU_MASK;
315499c2713SBiju Das #if RCAR_LSI == RCAR_AUTO
316499c2713SBiju Das 	uint32_t product = mmio_read_32(RCAR_PRR) & PRR_PRODUCT_MASK;
317499c2713SBiju Das #endif
318499c2713SBiju Das 	bl2_secure_cpg_init();
319499c2713SBiju Das 
320499c2713SBiju Das 	if (boot_cpu == MODEMR_BOOT_CPU_CA57 ||
321499c2713SBiju Das 	    boot_cpu == MODEMR_BOOT_CPU_CA53) {
322499c2713SBiju Das #if RCAR_LSI == RCAR_AUTO
323499c2713SBiju Das 
324499c2713SBiju Das 		switch (product) {
325499c2713SBiju Das 		case PRR_PRODUCT_H3:
326499c2713SBiju Das 			bl2_realtime_cpg_init_h3();
327499c2713SBiju Das 			break;
328499c2713SBiju Das 		case PRR_PRODUCT_M3:
329499c2713SBiju Das 			bl2_realtime_cpg_init_m3();
330499c2713SBiju Das 			break;
331499c2713SBiju Das 		case PRR_PRODUCT_M3N:
332499c2713SBiju Das 			bl2_realtime_cpg_init_m3n();
333499c2713SBiju Das 			break;
334499c2713SBiju Das 		case PRR_PRODUCT_V3M:
335499c2713SBiju Das 			bl2_realtime_cpg_init_v3m();
336499c2713SBiju Das 			break;
337499c2713SBiju Das 		case PRR_PRODUCT_E3:
338499c2713SBiju Das 			bl2_realtime_cpg_init_e3();
339499c2713SBiju Das 			break;
340499c2713SBiju Das 		case PRR_PRODUCT_D3:
34171f2239fSToshiyuki Ogasahara 			/* no need */
342499c2713SBiju Das 			break;
343499c2713SBiju Das 		default:
344499c2713SBiju Das 			panic();
345499c2713SBiju Das 			break;
346499c2713SBiju Das 		}
347ec3e2f67SLad Prabhakar #elif (RCAR_LSI == RCAR_H3) || (RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H)
348499c2713SBiju Das 		bl2_realtime_cpg_init_h3();
349db10bad9SBiju Das #elif (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M)
350499c2713SBiju Das 		bl2_realtime_cpg_init_m3();
351a4d86f67SLad Prabhakar #elif RCAR_LSI == RCAR_M3N || (RCAR_LSI == RZ_G2N)
352499c2713SBiju Das 		bl2_realtime_cpg_init_m3n();
353499c2713SBiju Das #elif RCAR_LSI == RCAR_V3M
354499c2713SBiju Das 		bl2_realtime_cpg_init_v3m();
355bcf43f04SLad Prabhakar #elif RCAR_LSI == RCAR_E3 || RCAR_LSI == RZ_G2E
356499c2713SBiju Das 		bl2_realtime_cpg_init_e3();
357499c2713SBiju Das #elif RCAR_LSI == RCAR_D3
35871f2239fSToshiyuki Ogasahara 		/* no need */
359499c2713SBiju Das #else
360499c2713SBiju Das #error "Don't have CPG initialize routine(unknown)."
361499c2713SBiju Das #endif
362499c2713SBiju Das 	}
363499c2713SBiju Das }
364499c2713SBiju Das 
365499c2713SBiju Das void bl2_system_cpg_init(void)
366499c2713SBiju Das {
367499c2713SBiju Das #if RCAR_LSI == RCAR_AUTO
368499c2713SBiju Das 	uint32_t product = mmio_read_32(RCAR_PRR) & PRR_PRODUCT_MASK;
369499c2713SBiju Das 
370499c2713SBiju Das 	switch (product) {
371499c2713SBiju Das 	case PRR_PRODUCT_H3:
372499c2713SBiju Das 		bl2_system_cpg_init_h3();
373499c2713SBiju Das 		break;
374499c2713SBiju Das 	case PRR_PRODUCT_M3:
375499c2713SBiju Das 		bl2_system_cpg_init_m3();
376499c2713SBiju Das 		break;
377499c2713SBiju Das 	case PRR_PRODUCT_M3N:
378499c2713SBiju Das 		bl2_system_cpg_init_m3n();
379499c2713SBiju Das 		break;
380499c2713SBiju Das 	case PRR_PRODUCT_V3M:
381499c2713SBiju Das 		bl2_system_cpg_init_v3m();
382499c2713SBiju Das 		break;
383499c2713SBiju Das 	case PRR_PRODUCT_E3:
384499c2713SBiju Das 		bl2_system_cpg_init_e3();
385499c2713SBiju Das 		break;
386499c2713SBiju Das 	case PRR_PRODUCT_D3:
387499c2713SBiju Das 		bl2_system_cpg_init_d3();
388499c2713SBiju Das 		break;
389499c2713SBiju Das 	default:
390499c2713SBiju Das 		panic();
391499c2713SBiju Das 		break;
392499c2713SBiju Das 	}
393ec3e2f67SLad Prabhakar #elif (RCAR_LSI == RCAR_H3) || (RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H)
394499c2713SBiju Das 	bl2_system_cpg_init_h3();
395db10bad9SBiju Das #elif (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M)
396499c2713SBiju Das 	bl2_system_cpg_init_m3();
397a4d86f67SLad Prabhakar #elif RCAR_LSI == RCAR_M3N  || (RCAR_LSI == RZ_G2N)
398499c2713SBiju Das 	bl2_system_cpg_init_m3n();
399499c2713SBiju Das #elif RCAR_LSI == RCAR_V3M
400499c2713SBiju Das 	bl2_system_cpg_init_v3m();
401bcf43f04SLad Prabhakar #elif RCAR_LSI == RCAR_E3 || RCAR_LSI == RZ_G2E
402499c2713SBiju Das 	bl2_system_cpg_init_e3();
403499c2713SBiju Das #elif RCAR_LSI == RCAR_D3
404499c2713SBiju Das 	bl2_system_cpg_init_d3();
405499c2713SBiju Das #else
406499c2713SBiju Das #error "Don't have CPG initialize routine(unknown)."
407499c2713SBiju Das #endif
408499c2713SBiju Das }
409