xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/cru_rk3368.h (revision 88cae289b5aafbf2c7098a02fcdd5f88da644a29)
1d1dcf852SAndy Yan /*
2d1dcf852SAndy Yan  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3d1dcf852SAndy Yan  * Author: Andy Yan <andy.yan@rock-chips.com>
4d1dcf852SAndy Yan  * SPDX-License-Identifier:     GPL-2.0+
5d1dcf852SAndy Yan  */
6d1dcf852SAndy Yan #ifndef _ASM_ARCH_CRU_RK3368_H
7d1dcf852SAndy Yan #define _ASM_ARCH_CRU_RK3368_H
8d1dcf852SAndy Yan 
9d1dcf852SAndy Yan #include <common.h>
10d1dcf852SAndy Yan 
11d1dcf852SAndy Yan 
12d1dcf852SAndy Yan /* RK3368 clock numbers */
13d1dcf852SAndy Yan enum rk3368_pll_id {
14d1dcf852SAndy Yan 	APLLB,
15d1dcf852SAndy Yan 	APLLL,
16d1dcf852SAndy Yan 	DPLL,
17d1dcf852SAndy Yan 	CPLL,
18d1dcf852SAndy Yan 	GPLL,
19d1dcf852SAndy Yan 	NPLL,
20d1dcf852SAndy Yan 	PLL_COUNT,
21d1dcf852SAndy Yan };
22d1dcf852SAndy Yan 
237150785eSElaine Zhang struct rk3368_clk_info {
247150785eSElaine Zhang 	unsigned long id;
257150785eSElaine Zhang 	char *name;
267150785eSElaine Zhang 	bool is_cru;
277150785eSElaine Zhang };
287150785eSElaine Zhang 
29d1dcf852SAndy Yan struct rk3368_cru {
30d1dcf852SAndy Yan 	struct rk3368_pll {
31d1dcf852SAndy Yan 		unsigned int con0;
32d1dcf852SAndy Yan 		unsigned int con1;
33d1dcf852SAndy Yan 		unsigned int con2;
34d1dcf852SAndy Yan 		unsigned int con3;
35d1dcf852SAndy Yan 	} pll[6];
36d1dcf852SAndy Yan 	unsigned int reserved[0x28];
37d1dcf852SAndy Yan 	unsigned int clksel_con[56];
38d1dcf852SAndy Yan 	unsigned int reserved1[8];
39d1dcf852SAndy Yan 	unsigned int clkgate_con[25];
40d1dcf852SAndy Yan 	unsigned int reserved2[7];
41d1dcf852SAndy Yan 	unsigned int glb_srst_fst_val;
42d1dcf852SAndy Yan 	unsigned int glb_srst_snd_val;
43d1dcf852SAndy Yan 	unsigned int reserved3[0x1e];
44d1dcf852SAndy Yan 	unsigned int softrst_con[15];
45d1dcf852SAndy Yan 	unsigned int reserved4[0x11];
46d1dcf852SAndy Yan 	unsigned int misc_con;
47d1dcf852SAndy Yan 	unsigned int glb_cnt_th;
48d1dcf852SAndy Yan 	unsigned int glb_rst_con;
49d1dcf852SAndy Yan 	unsigned int glb_rst_st;
50d1dcf852SAndy Yan 	unsigned int reserved5[0x1c];
51d1dcf852SAndy Yan 	unsigned int sdmmc_con[2];
52d1dcf852SAndy Yan 	unsigned int sdio0_con[2];
53d1dcf852SAndy Yan 	unsigned int sdio1_con[2];
54d1dcf852SAndy Yan 	unsigned int emmc_con[2];
55d1dcf852SAndy Yan };
56d1dcf852SAndy Yan check_member(rk3368_cru, emmc_con[1], 0x41c);
57d1dcf852SAndy Yan 
58d1dcf852SAndy Yan struct rk3368_clk_priv {
59d1dcf852SAndy Yan 	struct rk3368_cru *cru;
60ae79bf68SElaine Zhang 	ulong armlclk_hz;
61ae79bf68SElaine Zhang 	ulong armlclk_enter_hz;
62ae79bf68SElaine Zhang 	ulong armlclk_init_hz;
63ae79bf68SElaine Zhang 	ulong armbclk_hz;
64ae79bf68SElaine Zhang 	ulong armbclk_enter_hz;
65ae79bf68SElaine Zhang 	ulong armbclk_init_hz;
66ae79bf68SElaine Zhang 	bool sync_kernel;
67ae79bf68SElaine Zhang 	bool set_armclk_rate;
68d1dcf852SAndy Yan };
69d1dcf852SAndy Yan 
70d1dcf852SAndy Yan enum {
71d1dcf852SAndy Yan 	/* PLL CON0 */
72d1dcf852SAndy Yan 	PLL_NR_SHIFT			= 8,
73d1dcf852SAndy Yan 	PLL_NR_MASK			= GENMASK(13, 8),
74d1dcf852SAndy Yan 	PLL_OD_SHIFT			= 0,
75d1dcf852SAndy Yan 	PLL_OD_MASK			= GENMASK(3, 0),
76d1dcf852SAndy Yan 
77d1dcf852SAndy Yan 	/* PLL CON1 */
78d1dcf852SAndy Yan 	PLL_LOCK_STA			= BIT(31),
79d1dcf852SAndy Yan 	PLL_NF_SHIFT			= 0,
80d1dcf852SAndy Yan 	PLL_NF_MASK			= GENMASK(12, 0),
81d1dcf852SAndy Yan 
82d1dcf852SAndy Yan 	/* PLL CON2 */
83d1dcf852SAndy Yan 	PLL_BWADJ_SHIFT			= 0,
84d1dcf852SAndy Yan 	PLL_BWADJ_MASK			= GENMASK(11, 0),
85d1dcf852SAndy Yan 
86d1dcf852SAndy Yan 	/* PLL CON3 */
87d1dcf852SAndy Yan 	PLL_MODE_SHIFT			= 8,
88d1dcf852SAndy Yan 	PLL_MODE_MASK			= GENMASK(9, 8),
89d1dcf852SAndy Yan 	PLL_MODE_SLOW			= 0,
90d1dcf852SAndy Yan 	PLL_MODE_NORMAL			= 1,
91d1dcf852SAndy Yan 	PLL_MODE_DEEP_SLOW		= 3,
92d1dcf852SAndy Yan 	PLL_RESET_SHIFT			= 5,
93d1dcf852SAndy Yan 	PLL_RESET			= 1,
94d1dcf852SAndy Yan 	PLL_RESET_MASK			= GENMASK(5, 5),
95d1dcf852SAndy Yan 
967150785eSElaine Zhang 	/* CLKSEL1CON */
977150785eSElaine Zhang 	CORE_ACLK_DIV_SHIFT		= 0,
987150785eSElaine Zhang 	CORE_ACLK_DIV_MASK		= 0x1f << CORE_ACLK_DIV_SHIFT,
997150785eSElaine Zhang 	CORE_DBG_DIV_SHIFT		= 8,
1007150785eSElaine Zhang 	CORE_DBG_DIV_MASK		= 0x1f << CORE_DBG_DIV_SHIFT,
1017150785eSElaine Zhang 
1027150785eSElaine Zhang 	CORE_CLK_PLL_SEL_SHIFT		= 7,
1037150785eSElaine Zhang 	CORE_CLK_PLL_SEL_MASK		= 1 << CORE_CLK_PLL_SEL_SHIFT,
1047150785eSElaine Zhang 	CORE_CLK_PLL_SEL_APLL		= 0,
1057150785eSElaine Zhang 	CORE_CLK_PLL_SEL_GPLL,
1067150785eSElaine Zhang 	CORE_DIV_CON_SHIFT		= 0,
1077150785eSElaine Zhang 	CORE_DIV_CON_MASK		= 0x1f << CORE_DIV_CON_SHIFT,
1087150785eSElaine Zhang 
1097150785eSElaine Zhang 	/* CLKSEL8CON */
1107150785eSElaine Zhang 	PCLK_BUS_DIV_CON_SHIFT		= 12,
1117150785eSElaine Zhang 	PCLK_BUS_DIV_CON_MASK		= 0x7 << PCLK_BUS_DIV_CON_SHIFT,
1127150785eSElaine Zhang 	HCLK_BUS_DIV_CON_SHIFT		= 8,
1137150785eSElaine Zhang 	HCLK_BUS_DIV_CON_MASK		= 0x3 << HCLK_BUS_DIV_CON_SHIFT,
1147150785eSElaine Zhang 	CLK_BUS_PLL_SEL_CPLL		= 0,
1157150785eSElaine Zhang 	CLK_BUS_PLL_SEL_GPLL		= 1,
1167150785eSElaine Zhang 	CLK_BUS_PLL_SEL_SHIFT		= 7,
1177150785eSElaine Zhang 	CLK_BUS_PLL_SEL_MASK		= 1 << CLK_BUS_PLL_SEL_SHIFT,
1187150785eSElaine Zhang 	ACLK_BUS_DIV_CON_SHIFT		= 0,
1197150785eSElaine Zhang 	ACLK_BUS_DIV_CON_MASK		= 0x1f << ACLK_BUS_DIV_CON_SHIFT,
1207150785eSElaine Zhang 
1217150785eSElaine Zhang 	/* CLKSEL9CON */
1227150785eSElaine Zhang 	PCLK_PERI_DIV_CON_SHIFT		= 12,
1237150785eSElaine Zhang 	PCLK_PERI_DIV_CON_MASK		= 0x3 << PCLK_PERI_DIV_CON_SHIFT,
1247150785eSElaine Zhang 	HCLK_PERI_DIV_CON_SHIFT		= 8,
1257150785eSElaine Zhang 	HCLK_PERI_DIV_CON_MASK		= 3 << HCLK_PERI_DIV_CON_SHIFT,
1267150785eSElaine Zhang 	CLK_PERI_PLL_SEL_CPLL		= 0,
1277150785eSElaine Zhang 	CLK_PERI_PLL_SEL_GPLL,
1287150785eSElaine Zhang 	CLK_PERI_PLL_SEL_SHIFT		= 7,
1297150785eSElaine Zhang 	CLK_PERI_PLL_SEL_MASK		= 1 << CLK_PERI_PLL_SEL_SHIFT,
1307150785eSElaine Zhang 	ACLK_PERI_DIV_CON_SHIFT		= 0,
1317150785eSElaine Zhang 	ACLK_PERI_DIV_CON_MASK		= 0x1f,
1327150785eSElaine Zhang 
133a4e49122SElaine Zhang 	/* CLKSEL10CON */
134*88cae289SElaine Zhang 	CLK_CRYPTO_DIV_CON_SHIFT	= 14,
135*88cae289SElaine Zhang 	CLK_CRYPTO_DIV_CON_MASK		= 0x3 << CLK_CRYPTO_DIV_CON_SHIFT,
136a4e49122SElaine Zhang 	PCLK_ALIVE_DIV_CON_SHIFT	= 8,
137a4e49122SElaine Zhang 	PCLK_ALIVE_DIV_CON_MASK		= 0x1f << PCLK_ALIVE_DIV_CON_SHIFT,
138a4e49122SElaine Zhang 
139d1dcf852SAndy Yan 	/* CLKSEL12_CON */
140d1dcf852SAndy Yan 	MCU_STCLK_DIV_SHIFT		= 8,
141d1dcf852SAndy Yan 	MCU_STCLK_DIV_MASK		= GENMASK(10, 8),
142d1dcf852SAndy Yan 	MCU_PLL_SEL_SHIFT		= 7,
143d1dcf852SAndy Yan 	MCU_PLL_SEL_MASK		= BIT(7),
144d1dcf852SAndy Yan 	MCU_PLL_SEL_CPLL		= 0,
145d1dcf852SAndy Yan 	MCU_PLL_SEL_GPLL		= 1,
146d1dcf852SAndy Yan 	MCU_CLK_DIV_SHIFT		= 0,
147d1dcf852SAndy Yan 	MCU_CLK_DIV_MASK		= GENMASK(4, 0),
148d1dcf852SAndy Yan 
1497150785eSElaine Zhang 	/* CLKSEL19_CON */
1507150785eSElaine Zhang 	ACLK_VOP_PLL_SEL_SHIFT		= 6,
1517150785eSElaine Zhang 	ACLK_VOP_PLL_SEL_MASK		= GENMASK(7, 6),
1527150785eSElaine Zhang 	ACLK_VOP_PLL_SEL_CPLL		= 0,
1537150785eSElaine Zhang 	ACLK_VOP_PLL_SEL_GPLL		= 1,
1547150785eSElaine Zhang 	ACLK_VOP_DIV_SHIFT		= 0,
1557150785eSElaine Zhang 	ACLK_VOP_DIV_MASK		= GENMASK(4, 0),
1567150785eSElaine Zhang 
1577150785eSElaine Zhang 	/* CLKSEL20_CON */
1587150785eSElaine Zhang 	DCLK_VOP_PLL_SEL_SHIFT		= 8,
1597150785eSElaine Zhang 	DCLK_VOP_PLL_SEL_MASK		= GENMASK(9, 8),
1607150785eSElaine Zhang 	DCLK_VOP_PLL_SEL_CPLL		= 0,
1617150785eSElaine Zhang 	DCLK_VOP_PLL_SEL_GPLL		= 1,
1627150785eSElaine Zhang 	DCLK_VOP_PLL_SEL_NPLL		= 2,
1637150785eSElaine Zhang 	DCLK_VOP_DIV_SHIFT		= 0,
1647150785eSElaine Zhang 	DCLK_VOP_DIV_MASK		= GENMASK(7, 0),
1657150785eSElaine Zhang 
16673e16df2SDavid Wu 	/* CLKSEL_CON25 */
16773e16df2SDavid Wu 	CLK_SARADC_DIV_CON_SHIFT	= 8,
16873e16df2SDavid Wu 	CLK_SARADC_DIV_CON_MASK		= GENMASK(15, 8),
16973e16df2SDavid Wu 	CLK_SARADC_DIV_CON_WIDTH	= 8,
17073e16df2SDavid Wu 
171df0ae000SPhilipp Tomsich 	/* CLKSEL43_CON */
172b2477abaSDavid Wu 	GMAC_DIV_CON_SHIFT		= 0x0,
173b2477abaSDavid Wu 	GMAC_DIV_CON_MASK		= GENMASK(4, 0),
174b2477abaSDavid Wu 	GMAC_PLL_SHIFT			= 6,
175b2477abaSDavid Wu 	GMAC_PLL_MASK			= GENMASK(7, 6),
176b2477abaSDavid Wu 	GMAC_PLL_SELECT_NEW		= (0x0 << GMAC_PLL_SHIFT),
177b2477abaSDavid Wu 	GMAC_PLL_SELECT_CODEC		= (0x1 << GMAC_PLL_SHIFT),
178b2477abaSDavid Wu 	GMAC_PLL_SELECT_GENERAL		= (0x2 << GMAC_PLL_SHIFT),
179df0ae000SPhilipp Tomsich 	GMAC_MUX_SEL_EXTCLK             = BIT(8),
180df0ae000SPhilipp Tomsich 
181d1dcf852SAndy Yan 	/* CLKSEL51_CON */
182d1dcf852SAndy Yan 	MMC_PLL_SEL_SHIFT		= 8,
183d1dcf852SAndy Yan 	MMC_PLL_SEL_MASK		= GENMASK(9, 8),
184f5a43295SPhilipp Tomsich 	MMC_PLL_SEL_CPLL		= (0 << MMC_PLL_SEL_SHIFT),
185f5a43295SPhilipp Tomsich 	MMC_PLL_SEL_GPLL                = (1 << MMC_PLL_SEL_SHIFT),
186f5a43295SPhilipp Tomsich 	MMC_PLL_SEL_USBPHY_480M         = (2 << MMC_PLL_SEL_SHIFT),
187f5a43295SPhilipp Tomsich 	MMC_PLL_SEL_24M                 = (3 << MMC_PLL_SEL_SHIFT),
188d1dcf852SAndy Yan 	MMC_CLK_DIV_SHIFT		= 0,
189d1dcf852SAndy Yan 	MMC_CLK_DIV_MASK		= GENMASK(6, 0),
190d1dcf852SAndy Yan 
191d1dcf852SAndy Yan 	/* SOFTRST1_CON */
192d1dcf852SAndy Yan 	MCU_PO_SRST_MASK		= BIT(13),
193d1dcf852SAndy Yan 	MCU_SYS_SRST_MASK		= BIT(12),
19405c57e12SPhilipp Tomsich 	DMA1_SRST_REQ                   = BIT(2),
19505c57e12SPhilipp Tomsich 
19605c57e12SPhilipp Tomsich 	/* SOFTRST4_CON */
19705c57e12SPhilipp Tomsich 	DMA2_SRST_REQ                   = BIT(0),
198d1dcf852SAndy Yan 
199d1dcf852SAndy Yan 	/* GLB_RST_CON */
200d1dcf852SAndy Yan 	PMU_GLB_SRST_CTRL_SHIFT		= 2,
201d1dcf852SAndy Yan 	PMU_GLB_SRST_CTRL_MASK		= GENMASK(3, 2),
202d1dcf852SAndy Yan 	PMU_RST_BY_FST_GLB_SRST 	= 0,
203d1dcf852SAndy Yan 	PMU_RST_BY_SND_GLB_SRST 	= 1,
204d1dcf852SAndy Yan 	PMU_RST_DISABLE			= 2,
205d1dcf852SAndy Yan 	WDT_GLB_SRST_CTRL_SHIFT		= 1,
206d1dcf852SAndy Yan 	WDT_GLB_SRST_CTRL_MASK		= BIT(1),
207d1dcf852SAndy Yan 	WDT_TRIGGER_SND_GLB_SRST 	= 0,
208d1dcf852SAndy Yan 	WDT_TRIGGER_FST_GLB_SRST 	= 1,
209d1dcf852SAndy Yan 	TSADC_GLB_SRST_CTRL_SHIFT 	= 0,
210d1dcf852SAndy Yan 	TSADC_GLB_SRST_CTRL_MASK  	= BIT(0),
211d1dcf852SAndy Yan 	TSADC_TRIGGER_SND_GLB_SRST 	= 0,
212d1dcf852SAndy Yan 	TSADC_TRIGGER_FST_GLB_SRST 	= 1,
213d1dcf852SAndy Yan 
214d1dcf852SAndy Yan };
215d1dcf852SAndy Yan #endif
216