xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/cru_rk3399.h (revision 044bc79de91b458ae1047cab33ab2ea910485e4e)
1b0b3c865SKever Yang /*
2b0b3c865SKever Yang  * (C) Copyright 2016 Rockchip Electronics Co., Ltd
3b0b3c865SKever Yang  *
4b0b3c865SKever Yang  * SPDX-License-Identifier:     GPL-2.0+
5b0b3c865SKever Yang  */
6b0b3c865SKever Yang 
7b0b3c865SKever Yang #ifndef __ASM_ARCH_CRU_RK3399_H_
8b0b3c865SKever Yang #define __ASM_ARCH_CRU_RK3399_H_
9b0b3c865SKever Yang 
10b0b3c865SKever Yang #include <common.h>
11b0b3c865SKever Yang 
12c8a6bc96SSimon Glass /* Private data for the clock driver - used by rockchip_get_cru() */
13c8a6bc96SSimon Glass struct rk3399_clk_priv {
14c8a6bc96SSimon Glass 	struct rk3399_cru *cru;
15*044bc79dSElaine Zhang 	ulong armlclk_hz;
16*044bc79dSElaine Zhang 	ulong armlclk_enter_hz;
17*044bc79dSElaine Zhang 	ulong armlclk_init_hz;
18*044bc79dSElaine Zhang 	ulong armbclk_hz;
19*044bc79dSElaine Zhang 	ulong armbclk_enter_hz;
20*044bc79dSElaine Zhang 	ulong armbclk_init_hz;
21*044bc79dSElaine Zhang 	bool sync_kernel;
22*044bc79dSElaine Zhang 	bool set_armclk_rate;
23c8a6bc96SSimon Glass };
24c8a6bc96SSimon Glass 
255ae2fd97SKever Yang struct rk3399_pmuclk_priv {
265ae2fd97SKever Yang 	struct rk3399_pmucru *pmucru;
275ae2fd97SKever Yang };
285ae2fd97SKever Yang 
29b0b3c865SKever Yang struct rk3399_pmucru {
30b0b3c865SKever Yang 	u32 ppll_con[6];
31b0b3c865SKever Yang 	u32 reserved[0x1a];
32b0b3c865SKever Yang 	u32 pmucru_clksel[6];
33b0b3c865SKever Yang 	u32 pmucru_clkfrac_con[2];
34b0b3c865SKever Yang 	u32 reserved2[0x18];
35b0b3c865SKever Yang 	u32 pmucru_clkgate_con[3];
36b0b3c865SKever Yang 	u32 reserved3;
37b0b3c865SKever Yang 	u32 pmucru_softrst_con[2];
38b0b3c865SKever Yang 	u32 reserved4[2];
39b0b3c865SKever Yang 	u32 pmucru_rstnhold_con[2];
40b0b3c865SKever Yang 	u32 reserved5[2];
41b0b3c865SKever Yang 	u32 pmucru_gatedis_con[2];
42b0b3c865SKever Yang };
43b0b3c865SKever Yang check_member(rk3399_pmucru, pmucru_gatedis_con[1], 0x134);
44b0b3c865SKever Yang 
45b0b3c865SKever Yang struct rk3399_cru {
46b0b3c865SKever Yang 	u32 apll_l_con[6];
47b0b3c865SKever Yang 	u32 reserved[2];
48b0b3c865SKever Yang 	u32 apll_b_con[6];
49b0b3c865SKever Yang 	u32 reserved1[2];
50b0b3c865SKever Yang 	u32 dpll_con[6];
51b0b3c865SKever Yang 	u32 reserved2[2];
52b0b3c865SKever Yang 	u32 cpll_con[6];
53b0b3c865SKever Yang 	u32 reserved3[2];
54b0b3c865SKever Yang 	u32 gpll_con[6];
55b0b3c865SKever Yang 	u32 reserved4[2];
56b0b3c865SKever Yang 	u32 npll_con[6];
57b0b3c865SKever Yang 	u32 reserved5[2];
58b0b3c865SKever Yang 	u32 vpll_con[6];
59b0b3c865SKever Yang 	u32 reserved6[0x0a];
60b0b3c865SKever Yang 	u32 clksel_con[108];
61b0b3c865SKever Yang 	u32 reserved7[0x14];
62b0b3c865SKever Yang 	u32 clkgate_con[35];
63b0b3c865SKever Yang 	u32 reserved8[0x1d];
64b0b3c865SKever Yang 	u32 softrst_con[21];
65b0b3c865SKever Yang 	u32 reserved9[0x2b];
66b0b3c865SKever Yang 	u32 glb_srst_fst_value;
67b0b3c865SKever Yang 	u32 glb_srst_snd_value;
68b0b3c865SKever Yang 	u32 glb_cnt_th;
69b0b3c865SKever Yang 	u32 misc_con;
70b0b3c865SKever Yang 	u32 glb_rst_con;
71b0b3c865SKever Yang 	u32 glb_rst_st;
72b0b3c865SKever Yang 	u32 reserved10[0x1a];
73b0b3c865SKever Yang 	u32 sdmmc_con[2];
74b0b3c865SKever Yang 	u32 sdio0_con[2];
75b0b3c865SKever Yang 	u32 sdio1_con[2];
76b0b3c865SKever Yang };
77b0b3c865SKever Yang check_member(rk3399_cru, sdio1_con[1], 0x594);
78b0b3c865SKever Yang #define MHz		1000000
79b0b3c865SKever Yang #define KHz		1000
80b0b3c865SKever Yang #define OSC_HZ		(24*MHz)
81b0b3c865SKever Yang #define APLL_HZ		(600*MHz)
826bfdfc4fSElaine Zhang #define GPLL_HZ		(800 * MHz)
83b0b3c865SKever Yang #define CPLL_HZ		(384*MHz)
846bfdfc4fSElaine Zhang #define NPLL_HZ		(600 * MHz)
858389dcbfSKever Yang #define PPLL_HZ		(676*MHz)
86b0b3c865SKever Yang 
878389dcbfSKever Yang #define PMU_PCLK_HZ	(48*MHz)
88b0b3c865SKever Yang 
89b0b3c865SKever Yang #define ACLKM_CORE_HZ	(300*MHz)
90b0b3c865SKever Yang #define ATCLK_CORE_HZ	(300*MHz)
91b0b3c865SKever Yang #define PCLK_DBG_HZ	(100*MHz)
92b0b3c865SKever Yang 
934897499eSElaine Zhang #define PERIHP_ACLK_HZ	(150 * MHz)
944897499eSElaine Zhang #define PERIHP_HCLK_HZ	(75 * MHz)
954897499eSElaine Zhang #define PERIHP_PCLK_HZ	(37500 * KHz)
96b0b3c865SKever Yang 
9741c0dd9bSElaine Zhang #define PERILP0_ACLK_HZ	(300 * MHz)
984897499eSElaine Zhang #define PERILP0_HCLK_HZ	(100 * MHz)
994897499eSElaine Zhang #define PERILP0_PCLK_HZ	(50 * MHz)
100b0b3c865SKever Yang 
1014897499eSElaine Zhang #define PERILP1_HCLK_HZ	(100 * MHz)
1024897499eSElaine Zhang #define PERILP1_PCLK_HZ	(50 * MHz)
103b0b3c865SKever Yang 
104b0b3c865SKever Yang #define PWM_CLOCK_HZ    PMU_PCLK_HZ
105b0b3c865SKever Yang 
106ccced9e1SLin Huang enum apll_frequencies {
107ccced9e1SLin Huang 	APLL_1600_MHZ,
1088b75ff34SElaine Zhang 	APLL_816_MHZ,
109ccced9e1SLin Huang 	APLL_600_MHZ,
110ccced9e1SLin Huang };
111ccced9e1SLin Huang 
112ccced9e1SLin Huang enum cpu_cluster {
113ccced9e1SLin Huang 	CPU_CLUSTER_LITTLE,
114ccced9e1SLin Huang 	CPU_CLUSTER_BIG,
115b0b3c865SKever Yang };
116b0b3c865SKever Yang 
1176bfdfc4fSElaine Zhang enum rk3399_pll_id {
1186bfdfc4fSElaine Zhang 	APLLL_ID = 0,
1196bfdfc4fSElaine Zhang 	APLLB_ID,
1206bfdfc4fSElaine Zhang 	DPLL_ID,
1216bfdfc4fSElaine Zhang 	CPLL_ID,
1226bfdfc4fSElaine Zhang 	GPLL_ID,
1236bfdfc4fSElaine Zhang 	NPLL_ID,
1246bfdfc4fSElaine Zhang 	VPLL_ID,
1256bfdfc4fSElaine Zhang 
1266bfdfc4fSElaine Zhang 	PPLL_ID,
1276bfdfc4fSElaine Zhang 
1286bfdfc4fSElaine Zhang 	END_PLL_ID
1296bfdfc4fSElaine Zhang };
1306bfdfc4fSElaine Zhang 
1318b75ff34SElaine Zhang struct rk3399_clk_info {
1328b75ff34SElaine Zhang 	unsigned long id;
1338b75ff34SElaine Zhang 	char *name;
1348b75ff34SElaine Zhang 	bool is_cru;
1358b75ff34SElaine Zhang };
1368b75ff34SElaine Zhang 
137b0b3c865SKever Yang #endif	/* __ASM_ARCH_CRU_RK3399_H_ */
138