1 /* SPDX-License-Identifier: GPL-2.0+ */
5 * Peng Fan <peng.fan@nxp.com>
8 #ifndef _ASM_ARCH_IMX8M_CLOCK_H
9 #define _ASM_ARCH_IMX8M_CLOCK_H
12 #include <linux/bitops.h>
32 GPU_CORE_CLK_ROOT = 3,
33 GPU_SHADER_CLK_ROOT = 4,
34 MAIN_AXI_CLK_ROOT = 16,
35 ENET_AXI_CLK_ROOT = 17,
36 NAND_USDHC_BUS_CLK_ROOT = 18,
37 VPU_BUS_CLK_ROOT = 19,
38 DISPLAY_AXI_CLK_ROOT = 20,
39 DISPLAY_APB_CLK_ROOT = 21,
40 DISPLAY_RTRM_CLK_ROOT = 22,
41 USB_BUS_CLK_ROOT = 23,
42 GPU_AXI_CLK_ROOT = 24,
43 GPU_AHB_CLK_ROOT = 25,
45 NOC_APB_CLK_ROOT = 27,
48 AUDIO_AHB_CLK_ROOT = 34,
49 MIPI_DSI_ESC_RX_CLK_ROOT = 36,
52 DRAM_ALT_CLK_ROOT = 64,
53 DRAM_APB_CLK_ROOT = 65,
56 DISPLAY_DTRC_CLK_ROOT = 68,
57 DISPLAY_DC8000_CLK_ROOT = 69,
58 PCIE1_CTRL_CLK_ROOT = 70,
59 PCIE1_PHY_CLK_ROOT = 71,
60 PCIE1_AUX_CLK_ROOT = 72,
61 DC_PIXEL_CLK_ROOT = 73,
62 LCDIF_PIXEL_CLK_ROOT = 74,
71 ENET_REF_CLK_ROOT = 83,
72 ENET_TIMER_CLK_ROOT = 84,
73 ENET_PHY_REF_CLK_ROOT = 85,
86 USB_CORE_REF_CLK_ROOT = 98,
87 USB_PHY_REF_CLK_ROOT = 99,
89 ECSPI1_CLK_ROOT = 101,
90 ECSPI2_CLK_ROOT = 102,
101 TRACE_CLK_ROOT = 113,
103 WRCLK_CLK_ROOT = 115,
106 MIPI_DSI_CORE_CLK_ROOT = 118,
107 MIPI_DSI_PHY_REF_CLK_ROOT = 119,
108 MIPI_DSI_DBI_CLK_ROOT = 120,
109 OLD_MIPI_DSI_ESC_CLK_ROOT = 121,
110 MIPI_CSI1_CORE_CLK_ROOT = 122,
111 MIPI_CSI1_PHY_REF_CLK_ROOT = 123,
112 MIPI_CSI1_ESC_CLK_ROOT = 124,
113 MIPI_CSI2_CORE_CLK_ROOT = 125,
114 MIPI_CSI2_PHY_REF_CLK_ROOT = 126,
115 MIPI_CSI2_ESC_CLK_ROOT = 127,
116 PCIE2_CTRL_CLK_ROOT = 128,
117 PCIE2_PHY_CLK_ROOT = 129,
118 PCIE2_AUX_CLK_ROOT = 130,
119 ECSPI3_CLK_ROOT = 131,
120 OLD_MIPI_DSI_ESC_RX_ROOT = 132,
121 DISPLAY_HDMI_CLK_ROOT = 133,
132 SYSTEM_PLL1_800M_CLK,
133 SYSTEM_PLL1_400M_CLK,
134 SYSTEM_PLL1_266M_CLK,
135 SYSTEM_PLL1_200M_CLK,
136 SYSTEM_PLL1_160M_CLK,
137 SYSTEM_PLL1_133M_CLK,
138 SYSTEM_PLL1_100M_CLK,
141 SYSTEM_PLL2_1000M_CLK,
142 SYSTEM_PLL2_500M_CLK,
143 SYSTEM_PLL2_333M_CLK,
144 SYSTEM_PLL2_250M_CLK,
145 SYSTEM_PLL2_200M_CLK,
146 SYSTEM_PLL2_166M_CLK,
147 SYSTEM_PLL2_125M_CLK,
148 SYSTEM_PLL2_100M_CLK,
164 enum clk_ccgr_index {
170 CCGR_DRAM2_OBSOLETE = 6,
227 CCGR_SIM_DISPLAY = 63,
232 CCGR_SIM_WAKEUP = 68,
255 CCGR_HEVC_INTER = 91,
265 CCGR_MIPI_CSI1 = 101,
266 CCGR_MIPI_CSI2 = 102,
272 CLK_SRC_CKIL_SYNC_REQ = 0,
273 CLK_SRC_ARM_PLL_EN = 1,
274 CLK_SRC_GPU_PLL_EN = 2,
275 CLK_SRC_VPU_PLL_EN = 3,
276 CLK_SRC_DRAM_PLL_EN = 4,
277 CLK_SRC_SYSTEM_PLL1_EN = 5,
278 CLK_SRC_SYSTEM_PLL2_EN = 6,
279 CLK_SRC_SYSTEM_PLL3_EN = 7,
280 CLK_SRC_AUDIO_PLL1_EN = 8,
281 CLK_SRC_AUDIO_PLL2_EN = 9,
282 CLK_SRC_VIDEO_PLL1_EN = 10,
283 CLK_SRC_VIDEO_PLL2_EN = 11,
284 CLK_SRC_ARM_PLL = 12,
285 CLK_SRC_GPU_PLL = 13,
286 CLK_SRC_VPU_PLL = 14,
287 CLK_SRC_DRAM_PLL = 15,
288 CLK_SRC_SYSTEM_PLL1_800M = 16,
289 CLK_SRC_SYSTEM_PLL1_400M = 17,
290 CLK_SRC_SYSTEM_PLL1_266M = 18,
291 CLK_SRC_SYSTEM_PLL1_200M = 19,
292 CLK_SRC_SYSTEM_PLL1_160M = 20,
293 CLK_SRC_SYSTEM_PLL1_133M = 21,
294 CLK_SRC_SYSTEM_PLL1_100M = 22,
295 CLK_SRC_SYSTEM_PLL1_80M = 23,
296 CLK_SRC_SYSTEM_PLL1_40M = 24,
297 CLK_SRC_SYSTEM_PLL2_1000M = 25,
298 CLK_SRC_SYSTEM_PLL2_500M = 26,
299 CLK_SRC_SYSTEM_PLL2_333M = 27,
300 CLK_SRC_SYSTEM_PLL2_250M = 28,
301 CLK_SRC_SYSTEM_PLL2_200M = 29,
302 CLK_SRC_SYSTEM_PLL2_166M = 30,
303 CLK_SRC_SYSTEM_PLL2_125M = 31,
304 CLK_SRC_SYSTEM_PLL2_100M = 32,
305 CLK_SRC_SYSTEM_PLL2_50M = 33,
306 CLK_SRC_SYSTEM_PLL3 = 34,
307 CLK_SRC_AUDIO_PLL1 = 35,
308 CLK_SRC_AUDIO_PLL2 = 36,
309 CLK_SRC_VIDEO_PLL1 = 37,
310 CLK_SRC_VIDEO_PLL2 = 38,
311 CLK_SRC_OSC_25M = 39,
312 CLK_SRC_OSC_27M = 40,
315 /* AUDIO PLL1/2 VIDEO PLL1 GPU PLL VPU PLL ARM PLL*/
316 #define FRAC_PLL_LOCK_MASK BIT(31)
317 #define FRAC_PLL_CLKE_MASK BIT(21)
318 #define FRAC_PLL_PD_MASK BIT(19)
319 #define FRAC_PLL_REFCLK_SEL_MASK BIT(16)
320 #define FRAC_PLL_LOCK_SEL_MASK BIT(15)
321 #define FRAC_PLL_BYPASS_MASK BIT(14)
322 #define FRAC_PLL_COUNTCLK_SEL_MASK BIT(13)
323 #define FRAC_PLL_NEWDIV_VAL_MASK BIT(12)
324 #define FRAC_PLL_NEWDIV_ACK_MASK BIT(11)
325 #define FRAC_PLL_REFCLK_DIV_VAL(n) (((n) << 5) & (0x3f << 5))
326 #define FRAC_PLL_REFCLK_DIV_VAL_MASK (0x3f << 5)
327 #define FRAC_PLL_REFCLK_DIV_VAL_SHIFT 5
328 #define FRAC_PLL_OUTPUT_DIV_VAL_MASK 0x1f
329 #define FRAC_PLL_OUTPUT_DIV_VAL(n) ((n) & 0x1f)
331 #define FRAC_PLL_REFCLK_SEL_OSC_25M (0 << 16)
332 #define FRAC_PLL_REFCLK_SEL_OSC_27M BIT(16)
333 #define FRAC_PLL_REFCLK_SEL_HDMI_PHY_27M (2 << 16)
334 #define FRAC_PLL_REFCLK_SEL_CLK_PN (3 << 16)
336 #define FRAC_PLL_FRAC_DIV_CTL_MASK (0x1ffffff << 7)
337 #define FRAC_PLL_FRAC_DIV_CTL_SHIFT 7
338 #define FRAC_PLL_INT_DIV_CTL_MASK 0x7f
339 #define FRAC_PLL_INT_DIV_CTL_VAL(n) ((n) & 0x7f)
341 /* SYS PLL1/2/3 VIDEO PLL2 DRAM PLL */
342 #define SSCG_PLL_LOCK_MASK BIT(31)
343 #define SSCG_PLL_CLKE_MASK BIT(25)
344 #define SSCG_PLL_DIV2_CLKE_MASK BIT(23)
345 #define SSCG_PLL_DIV3_CLKE_MASK BIT(21)
346 #define SSCG_PLL_DIV4_CLKE_MASK BIT(19)
347 #define SSCG_PLL_DIV5_CLKE_MASK BIT(17)
348 #define SSCG_PLL_DIV6_CLKE_MASK BIT(15)
349 #define SSCG_PLL_DIV8_CLKE_MASK BIT(13)
350 #define SSCG_PLL_DIV10_CLKE_MASK BIT(11)
351 #define SSCG_PLL_DIV20_CLKE_MASK BIT(9)
352 #define SSCG_PLL_VIDEO_PLL2_CLKE_MASK BIT(9)
353 #define SSCG_PLL_DRAM_PLL_CLKE_MASK BIT(9)
354 #define SSCG_PLL_PLL3_CLKE_MASK BIT(9)
355 #define SSCG_PLL_PD_MASK BIT(7)
356 #define SSCG_PLL_BYPASS1_MASK BIT(5)
357 #define SSCG_PLL_BYPASS2_MASK BIT(4)
358 #define SSCG_PLL_LOCK_SEL_MASK BIT(3)
359 #define SSCG_PLL_COUNTCLK_SEL_MASK BIT(2)
360 #define SSCG_PLL_REFCLK_SEL_MASK 0x3
361 #define SSCG_PLL_REFCLK_SEL_OSC_25M (0 << 16)
362 #define SSCG_PLL_REFCLK_SEL_OSC_27M BIT(16)
363 #define SSCG_PLL_REFCLK_SEL_HDMI_PHY_27M (2 << 16)
364 #define SSCG_PLL_REFCLK_SEL_CLK_PN (3 << 16)
366 #define SSCG_PLL_SSDS_MASK BIT(8)
367 #define SSCG_PLL_SSMD_MASK (0x7 << 5)
368 #define SSCG_PLL_SSMF_MASK (0xf << 1)
369 #define SSCG_PLL_SSE_MASK 0x1
371 #define SSCG_PLL_REF_DIVR1_MASK (0x7 << 25)
372 #define SSCG_PLL_REF_DIVR1_SHIFT 25
373 #define SSCG_PLL_REF_DIVR1_VAL(n) (((n) << 25) & SSCG_PLL_REF_DIVR1_MASK)
374 #define SSCG_PLL_REF_DIVR2_MASK (0x3f << 19)
375 #define SSCG_PLL_REF_DIVR2_SHIFT 19
376 #define SSCG_PLL_REF_DIVR2_VAL(n) (((n) << 19) & SSCG_PLL_REF_DIVR2_MASK)
377 #define SSCG_PLL_FEEDBACK_DIV_F1_MASK (0x3f << 13)
378 #define SSCG_PLL_FEEDBACK_DIV_F1_SHIFT 13
379 #define SSCG_PLL_FEEDBACK_DIV_F1_VAL(n) (((n) << 13) & \
380 SSCG_PLL_FEEDBACK_DIV_F1_MASK)
381 #define SSCG_PLL_FEEDBACK_DIV_F2_MASK (0x3f << 7)
382 #define SSCG_PLL_FEEDBACK_DIV_F2_SHIFT 7
383 #define SSCG_PLL_FEEDBACK_DIV_F2_VAL(n) (((n) << 7) & \
384 SSCG_PLL_FEEDBACK_DIV_F2_MASK)
385 #define SSCG_PLL_OUTPUT_DIV_VAL_MASK (0x3f << 1)
386 #define SSCG_PLL_OUTPUT_DIV_VAL_SHIFT 1
387 #define SSCG_PLL_OUTPUT_DIV_VAL(n) (((n) << 1) & \
388 SSCG_PLL_OUTPUT_DIV_VAL_MASK)
389 #define SSCG_PLL_FILTER_RANGE_MASK 0x1
391 #define HW_DIGPROG_MAJOR_UPPER_MASK (0xff << 16)
392 #define HW_DIGPROG_MAJOR_LOWER_MASK (0xff << 8)
393 #define HW_DIGPROG_MINOR_MASK 0xff
395 #define HW_OSC_27M_CLKE_MASK BIT(4)
396 #define HW_OSC_25M_CLKE_MASK BIT(2)
397 #define HW_OSC_32K_SEL_MASK 0x1
398 #define HW_OSC_32K_SEL_RTC 0x1
399 #define HW_OSC_32K_SEL_25M_DIV800 0x0
401 #define HW_FRAC_ARM_PLL_DIV_MASK (0x7 << 20)
402 #define HW_FRAC_ARM_PLL_DIV_SHIFT 20
403 #define HW_FRAC_VPU_PLL_DIV_MASK (0x7 << 16)
404 #define HW_FRAC_VPU_PLL_DIV_SHIFT 16
405 #define HW_FRAC_GPU_PLL_DIV_MASK (0x7 << 12)
406 #define HW_FRAC_GPU_PLL_DIV_SHIFT 12
407 #define HW_FRAC_VIDEO_PLL1_DIV_MASK (0x7 << 10)
408 #define HW_FRAC_VIDEO_PLL1_DIV_SHIFT 10
409 #define HW_FRAC_AUDIO_PLL2_DIV_MASK (0x7 << 4)
410 #define HW_FRAC_AUDIO_PLL2_DIV_SHIFT 4
411 #define HW_FRAC_AUDIO_PLL1_DIV_MASK 0x7
412 #define HW_FRAC_AUDIO_PLL1_DIV_SHIFT 0
414 #define HW_SSCG_VIDEO_PLL2_DIV_MASK (0x7 << 16)
415 #define HW_SSCG_VIDEO_PLL2_DIV_SHIFT 16
416 #define HW_SSCG_DRAM_PLL_DIV_MASK (0x7 << 14)
417 #define HW_SSCG_DRAM_PLL_DIV_SHIFT 14
418 #define HW_SSCG_SYSTEM_PLL3_DIV_MASK (0x7 << 8)
419 #define HW_SSCG_SYSTEM_PLL3_DIV_SHIFT 8
420 #define HW_SSCG_SYSTEM_PLL2_DIV_MASK (0x7 << 4)
421 #define HW_SSCG_SYSTEM_PLL2_DIV_SHIFT 4
422 #define HW_SSCG_SYSTEM_PLL1_DIV_MASK 0x7
423 #define HW_SSCG_SYSTEM_PLL1_DIV_SHIFT 0
425 enum frac_pll_out_val {
430 void init_nand_clk(void);