Googler | 695f9d9 | 2023-09-11 15:38:29 +0800 | [diff] [blame^] | 1 | /* 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 |
| 14 | extern unsigned int cvbs_mode; |
| 15 | #endif |
| 16 | void 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 | |
| 252 | void 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 | |