1 /* SPDX-License-Identifier: GPL-2.0+ */
3 * (C) Copyright 2021 Paweł Jarosz <paweljarosz3691@gmail.com>
6 #ifndef _ASM_ARCH_CRU_RK3066_H
7 #define _ASM_ARCH_CRU_RK3066_H
9 #include <linux/bitops.h>
10 #include <linux/bitfield.h>
12 #define REG(name, h, l) \
13 name##_MASK = GENMASK(h, l), \
14 name##_SHIFT = __bf_shf(name##_MASK)
16 #define OSC_HZ (24 * 1000 * 1000)
18 #define APLL_HZ (1416 * 1000000)
19 #define APLL_SAFE_HZ (600 * 1000000)
20 #define GPLL_HZ (594 * 1000000)
21 #define CPLL_HZ (384 * 1000000)
23 /* The SRAM is clocked off aclk_cpu, so we want to max it out for boot speed */
24 #define CPU_ACLK_HZ 297000000
25 #define CPU_HCLK_HZ 148500000
26 #define CPU_PCLK_HZ 74250000
27 #define CPU_H2P_HZ 74250000
29 #define PERI_ACLK_HZ 148500000
30 #define PERI_HCLK_HZ 148500000
31 #define PERI_PCLK_HZ 74250000
33 /* Private data for the clock driver - used by rockchip_get_cru() */
34 struct rk3066_clk_priv {
35 struct rk3066_grf *grf;
36 struct rk3066_cru *cru;
49 u32 cru_clksel_con[35];
50 u32 cru_clkgate_con[10];
52 u32 cru_glb_srst_fst_value;
53 u32 cru_glb_srst_snd_value;
55 u32 cru_softrst_con[9];
61 check_member(rk3066_cru, cru_glb_cnt_th, 0x0140);
65 REG(CPU_ACLK_PLL, 8, 8),
66 CPU_ACLK_PLL_SELECT_APLL = 0,
67 CPU_ACLK_PLL_SELECT_GPLL,
69 REG(CORE_PERI_DIV, 7, 6),
71 REG(A9_CORE_DIV, 4, 0),
76 REG(AHB2APB_DIV, 15, 14),
78 REG(CPU_PCLK_DIV, 13, 12),
80 REG(CPU_HCLK_DIV, 9, 8),
82 REG(CPU_ACLK_DIV, 2, 0),
85 /* CRU_CLKSEL10_CON */
87 REG(PERI_SEL_PLL, 15, 15),
91 REG(PERI_PCLK_DIV, 13, 12),
93 REG(PERI_HCLK_DIV, 9, 8),
95 REG(PERI_ACLK_DIV, 4, 0),
98 /* CRU_CLKSEL11_CON */
103 /* CRU_CLKSEL12_CON */
105 REG(UART_PLL, 15, 15),
106 UART_PLL_SELECT_GENERAL = 0,
107 UART_PLL_SELECT_CODEC,
109 REG(EMMC_DIV, 13, 8),
114 /* CRU_CLKSEL24_CON */
116 REG(SARADC_DIV, 15, 8),
119 /* CRU_CLKSEL25_CON */
121 REG(SPI1_DIV, 14, 8),
126 /* CRU_CLKSEL34_CON */
128 REG(TSADC_DIV, 15, 0),
133 REG(GPLL_MODE, 13, 12),
135 REG(CPLL_MODE, 9, 8),
137 REG(DPLL_MODE, 5, 4),
139 REG(APLL_MODE, 1, 0),