blob: 98636cede8673835bbe19a0debb9479fbb9c3b03 [file] [log] [blame]
Googler695f9d92023-09-11 15:38:29 +08001/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
2/*
3 * arch/arm/cpu/armv8/gxb/gate_init.c
4 *
5 * Copyright (C) 2020 Amlogic, Inc. All rights reserved.
6 *
7 */
8
9#include "power_gate.h"
10
11#define SECUREBOOT_FLAG_ADDR 0xc8100228
12
13#ifdef CONFIG_AML_CVBS
14extern unsigned int cvbs_mode;
15#endif
16void ee_gate_off(void)
17{
18 printf("ee_gate_off ...\n");
19
20/* int secureboot = readl(SECUREBOOT_FLAG_ADDR)&(1<<5);*/
21
22#ifdef CONFIG_AML_CVBS
23 unsigned int cvbs_opened = 0;
24#endif
25
26#ifdef CONFIG_AML_CVBS
27 if ((cvbs_mode == 0) || (cvbs_mode == 1))
28 cvbs_opened = 1;
29#endif
30
31 /*
32 //if close , audio maybe have noise
33 CLK_GATE_OFF(AUD);
34 CLK_GATE_OFF(AUD2);
35 CLK_GATE_OFF(AUD_CLK_2);
36 CLK_GATE_OFF(AUD_CLK_3);
37 */
38 CLK_GATE_OFF(AUD_IN);
39 CLK_GATE_OFF(AIU_AUD_MIXER);
40 CLK_GATE_OFF(SANA);
41
42 /*kernel will reopen */
43 CLK_GATE_OFF(CTS_ENCL);
44 /* CLK_GATE_OFF(CTS_ENCT); */
45#if 0 /* HDMITX 480i60hz/576i50hz need this gate */
46#ifdef CONFIG_AML_CVBS
47 if (cvbs_opened == 0)
48 CLK_GATE_OFF(CTS_ENCI);
49#else
50 CLK_GATE_OFF(CTS_ENCI);
51#endif
52#endif
53 /* CLK_GATE_OFF(CTS_ENCP); */
54
55 /*close cvbs clock*/
56#ifdef CONFIG_AML_CVBS
57 if (cvbs_opened == 0) {
58 CLK_GATE_OFF(DAC_CLK);
59 CLK_GATE_OFF(CTS_VDAC);
60 }
61#else
62 CLK_GATE_OFF(DAC_CLK);
63 CLK_GATE_OFF(CTS_VDAC);
64#endif
65
66 /* usb clock close */
67 CLK_GATE_OFF(USB0);
68 CLK_GATE_OFF(USB1);
69 CLK_GATE_OFF(USB_CLK);
70 CLK_GATE_OFF(MISC_USB0_TO_DDR);
71 CLK_GATE_OFF(MISC_USB1_TO_DDR);
72
73 /* uarts close */
74 CLK_GATE_OFF(UART0);
75 CLK_GATE_OFF(UART1);
76 CLK_GATE_OFF(UART2);
77 CLK_GATE_OFF(UART3);
78
79 CLK_GATE_OFF(VCLK2_VENCP);
80 CLK_GATE_OFF(VCLK2_VENCT);
81 CLK_GATE_OFF(VCLK2_VENCT1);
82 CLK_GATE_OFF(VCLK2_OTHER);
83#if 0 /* HDMITX 480i60hz/576i50hz need HHI_GCLK_OTHER[8][2] */
84#ifdef CONFIG_AML_CVBS
85 if (cvbs_opened == 0) {
86 CLK_GATE_OFF(VCLK2_VENCI);
87 CLK_GATE_OFF(VCLK2_VENCI1);
88 }
89#else
90 CLK_GATE_OFF(VCLK2_VENCI);
91 CLK_GATE_OFF(VCLK2_VENCI1);
92#endif
93#endif
94 CLK_GATE_OFF(VCLK2_VENCL);
95 CLK_GATE_OFF(VCLK2_OTHER1);
96#if 0 /* HDMITX 480i60hz/576i50hz need HHI_GCLK_OTHER[8][2] */
97#ifdef CONFIG_AML_CVBS
98 if (cvbs_opened == 0)
99 CLK_GATE_OFF(VCLK2_ENCI);
100#else
101 CLK_GATE_OFF(VCLK2_ENCI);
102#endif
103#endif
104 CLK_GATE_OFF(VCLK2_ENCL);
105 CLK_GATE_OFF(VCLK2_ENCT);
106
107 CLK_GATE_OFF(VDEC_CLK_1);
108 CLK_GATE_OFF(VDEC_CLK_2);
109 CLK_GATE_OFF(VDEC2_CLK_1);
110 CLK_GATE_OFF(VDEC2_CLK_2);
111 CLK_GATE_OFF(HCODEC_CLK_1);
112 CLK_GATE_OFF(HCODEC_CLK_2);
113 /* CLK_GATE_OFF(HEVC_CLK_1 ); */
114 /* CLK_GATE_OFF(HEVC_CLK_2 ); */
115
116 CLK_GATE_OFF(MMC_A_PCLK);
117 CLK_GATE_OFF(MMC_B_PCLK);
118 CLK_GATE_OFF(MMC_C_PCLK);
119
120 CLK_GATE_OFF(LCD_AN_PHY2);
121 CLK_GATE_OFF(LCD_AN_PHY3);
122
123 CLK_GATE_OFF(ETHERNET);
124 CLK_GATE_OFF(ETH_CLK);
125
126 CLK_GATE_OFF(GE2D);
127 CLK_GATE_OFF(GEN_CLK);
128 CLK_GATE_OFF(PCM_MCLK);
129 CLK_GATE_OFF(PCM_SCLK);
130
131
132 CLK_GATE_OFF(HIU_PARSER_TOP);
133
134
135 /* can not off nand_clk */
136 /* CLK_GATE_OFF(NAND_CLK); */
137 /*
138 //HDMI no output
139 CLK_GATE_OFF(VCLK2_VENCP1);
140 CLK_GATE_OFF(VCLK2_ENCP);
141 */
142
143 /*
144 //if OFF, HDMI will report error!
145 CLK_GATE_OFF(HDMI_PCLK);
146 CLK_GATE_OFF(HDMI_PLL_CNTL);
147 CLK_GATE_OFF(HDMITX_CLK);
148 */
149
150 /*
151 //PWM B used for VCCK,PWM D used for VDDEE,ignoring
152 CLK_GATE_OFF(PWM_A_CLK);
153 CLK_GATE_OFF(PWM_B_CLK);
154 CLK_GATE_OFF(PWM_C_CLK);
155 CLK_GATE_OFF(PWM_D_CLK);
156 CLK_GATE_OFF(PWM_E_CLK);
157 CLK_GATE_OFF(PWM_F_CLK);
158 */
159
160
161 /* can not close
162 CLK_GATE_OFF(VPU_CLK_1);
163 CLK_GATE_OFF(VPU_CLK_2);
164 CLK_GATE_OFF(VPU_CLKB);
165 CLK_GATE_OFF(MALI_CLK_1);
166 CLK_GATE_OFF(MALI_CLK_2);
167 CLK_GATE_OFF(ATV_DEMO_VDAC);
168 CLK_GATE_OFF(EMMC_A);
169 CLK_GATE_OFF(EMMC_B);
170 CLK_GATE_OFF(EMMC_C);
171 CLK_GATE_OFF(EMMC_A_CLK);
172 CLK_GATE_OFF(EMMC_B_CLK);
173
174 CLK_GATE_OFF(MSR_CLK);
175 CLK_GATE_OFF(MSR_HS_CLK);
176 CLK_GATE_OFF(32K_CLK);
177 CLK_GATE_OFF(VAPB_CLK_1);
178 CLK_GATE_OFF(VAPB_CLK_2);
179 CLK_GATE_OFF(GIC);
180 CLK_GATE_OFF(I2C_AO); //no close for to use
181 CLK_GATE_OFF(AO_CPU);
182 CLK_GATE_OFF(ASSIST_MISC);
183 CLK_GATE_OFF(HIU_PARSER);
184 CLK_GATE_OFF(PERIPHS_TOP);
185 CLK_GATE_OFF(PL310_CBUS);
186 CLK_GATE_OFF(ISA);
187 CLK_GATE_OFF(SECURE_AHP_APB3);
188 CLK_GATE_OFF(VPU_INTR);
189 CLK_GATE_OFF(MMC_PCLK); //can not close
190 CLK_GATE_OFF(AIU_PCLK);
191 //can not connect pc
192 CLK_GATE_OFF(USB_GENERAL);
193 CLK_GATE_OFF(AHB_DATA_BUS);
194 CLK_GATE_OFF(AHB_CONTROL_BUS);
195 CLK_GATE_OFF(HDMI_INTR_SYNC); //should open
196 //can't suspend @ 2nd time
197 //CLK_GATE_OFF(RESET);
198
199 // close rom
200 //disable this bit will make other cpu can not be booted.
201 //CLK_GATE_OFF(ROM_CLK);
202
203*/
204 /*************************/
205 CLK_GATE_OFF(AHB_ARB0);
206 CLK_GATE_OFF(ASYNC_FIFO);
207 CLK_GATE_OFF(STREAM);
208 CLK_GATE_OFF(RANDOM_NUM_GEN);
209 CLK_GATE_OFF(RANDOM_NUM_GEN1);
210 CLK_GATE_OFF(SMART_CARD_MPEG_DOMAIN);
211 CLK_GATE_OFF(I2C);
212 CLK_GATE_OFF(SPI);
213 CLK_GATE_OFF(SPICC);
214 CLK_GATE_OFF(DOS);
215 CLK_GATE_OFF(SAR_ADC);
216 CLK_GATE_OFF(MISC_DVIN);
217 CLK_GATE_OFF(BT656);
218 CLK_GATE_OFF(BT656_2);
219 CLK_GATE_OFF(PDM);
220
221 /* close AIU */
222 CLK_GATE_OFF(AIU_IEC958);
223 CLK_GATE_OFF(AIU_ICE958_AMCLK);
224
225 CLK_GATE_OFF(AIU_AMCLK_MEASURE);
226 CLK_GATE_OFF(AIU_AIFIFO2);
227 CLK_GATE_OFF(AIU_MIXER_REG);
228 CLK_GATE_OFF(AIU_ADC);
229 CLK_GATE_OFF(AIU_TOP_LEVEL);
230 CLK_GATE_OFF(AIU_AOCLK);
231 CLK_GATE_OFF(AIU_AI_TOP_GLUE);
232 CLK_GATE_OFF(AIU_I2S_OUT);
233
234 CLK_GATE_OFF(ENC480P);
235
236 CLK_GATE_OFF(DEMUX);
237/*
238* EFUSE/BLK_MOV clock gate must be on,
239 kernel storage ops depend on them.
240 it can be reference PD#112732
241*/
242/*
243 if (secureboot) {
244 printf("secure boot ignore [ BLK_MOV, efuse ] clk gate\n");
245 } else {
246 CLK_GATE_OFF(EFUSE);
247 CLK_GATE_OFF(BLK_MOV);
248 }
249*/
250}
251
252void ee_gate_on(void)
253{
254
255 printf("ee_gate_on ...\n");
256
257 /*
258 //if close , audio maybe have noise
259 CLK_GATE_ON(AUD);
260 CLK_GATE_ON(AUD2);
261 CLK_GATE_ON(AUD_CLK_2);
262 CLK_GATE_ON(AUD_CLK_3);
263 */
264 CLK_GATE_ON(AUD_IN);
265 CLK_GATE_ON(AIU_AUD_MIXER);
266 CLK_GATE_ON(SANA);
267
268 /*kernel will reopen */
269 CLK_GATE_ON(CTS_ENCL);
270 /* CLK_GATE_ON(CTS_ENCT); */
271 CLK_GATE_ON(CTS_ENCI);
272 /* CLK_GATE_ON(CTS_ENCP); */
273
274 /*close cvbs clock*/
275 CLK_GATE_ON(DAC_CLK);
276 CLK_GATE_ON(CTS_VDAC);
277
278 /* usb clock close */
279 CLK_GATE_ON(USB0);
280 CLK_GATE_ON(USB1);
281 CLK_GATE_ON(USB_CLK);
282 CLK_GATE_ON(MISC_USB0_TO_DDR);
283 CLK_GATE_ON(MISC_USB1_TO_DDR);
284
285 /* uarts close */
286 CLK_GATE_ON(UART0);
287 CLK_GATE_ON(UART1);
288 CLK_GATE_ON(UART2);
289 CLK_GATE_ON(UART3);
290
291 CLK_GATE_ON(VCLK2_VENCP);
292 CLK_GATE_ON(VCLK2_VENCT);
293 CLK_GATE_ON(VCLK2_VENCT1);
294 CLK_GATE_ON(VCLK2_OTHER);
295 CLK_GATE_ON(VCLK2_VENCI);
296 CLK_GATE_ON(VCLK2_VENCI1);
297 CLK_GATE_ON(VCLK2_VENCL);
298 CLK_GATE_ON(VCLK2_OTHER1);
299
300
301 CLK_GATE_ON(VCLK2_ENCI);
302 CLK_GATE_ON(VCLK2_ENCL);
303 CLK_GATE_ON(VCLK2_ENCT);
304
305 CLK_GATE_ON(VDEC_CLK_1);
306 CLK_GATE_ON(VDEC_CLK_2);
307 CLK_GATE_ON(VDEC2_CLK_1);
308 CLK_GATE_ON(VDEC2_CLK_2);
309 CLK_GATE_ON(HCODEC_CLK_1);
310 CLK_GATE_ON(HCODEC_CLK_2);
311 /* CLK_GATE_ON(HEVC_CLK_1 ); */
312 /* CLK_GATE_ON(HEVC_CLK_2 ); */
313
314 CLK_GATE_ON(MMC_A_PCLK);
315 CLK_GATE_ON(MMC_B_PCLK);
316 CLK_GATE_ON(MMC_C_PCLK);
317
318 CLK_GATE_ON(LCD_AN_PHY2);
319 CLK_GATE_ON(LCD_AN_PHY3);
320
321 CLK_GATE_ON(ETHERNET);
322 CLK_GATE_ON(ETH_CLK);
323
324 CLK_GATE_ON(GE2D);
325 CLK_GATE_ON(GEN_CLK);
326 CLK_GATE_ON(PCM_MCLK);
327 CLK_GATE_ON(PCM_SCLK);
328
329
330 CLK_GATE_ON(HIU_PARSER_TOP);
331
332 /*************************/
333 CLK_GATE_ON(AHB_ARB0);
334 CLK_GATE_ON(ASYNC_FIFO);
335 CLK_GATE_ON(STREAM);
336 CLK_GATE_ON(RANDOM_NUM_GEN);
337 CLK_GATE_ON(RANDOM_NUM_GEN1);
338 CLK_GATE_ON(SMART_CARD_MPEG_DOMAIN);
339 CLK_GATE_ON(I2C);
340 CLK_GATE_ON(SPI);
341 CLK_GATE_ON(SPICC);
342 CLK_GATE_ON(DOS);
343 CLK_GATE_ON(SAR_ADC);
344 CLK_GATE_ON(MISC_DVIN);
345 CLK_GATE_ON(BT656);
346 CLK_GATE_ON(BT656_2);
347 CLK_GATE_ON(PDM);
348
349 /* close AIU */
350 CLK_GATE_ON(AIU_IEC958);
351 CLK_GATE_ON(AIU_ICE958_AMCLK);
352
353 CLK_GATE_ON(AIU_AMCLK_MEASURE);
354 CLK_GATE_ON(AIU_AIFIFO2);
355 CLK_GATE_ON(AIU_MIXER_REG);
356 CLK_GATE_ON(AIU_ADC);
357 CLK_GATE_ON(AIU_TOP_LEVEL);
358 CLK_GATE_ON(AIU_AOCLK);
359 CLK_GATE_ON(AIU_AI_TOP_GLUE);
360 CLK_GATE_ON(AIU_I2S_OUT);
361
362 CLK_GATE_ON(ENC480P);
363
364 CLK_GATE_ON(DEMUX);
365
366 CLK_GATE_ON(EFUSE);
367 CLK_GATE_ON(BLK_MOV);
368}
369