xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-am33xx/clock.h (revision 8bb687fdc10946a25e81393f8d6617d17e890df0)
1f87fa62aSChandan Nath /*
2f87fa62aSChandan Nath  * clock.h
3f87fa62aSChandan Nath  *
4f87fa62aSChandan Nath  * clock header
5f87fa62aSChandan Nath  *
6b43c17cbSMatt Porter  * Copyright (C) 2011, Texas Instruments Incorporated - http://www.ti.com/
7f87fa62aSChandan Nath  *
81a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
9f87fa62aSChandan Nath  */
10f87fa62aSChandan Nath 
11f87fa62aSChandan Nath #ifndef _CLOCKS_H_
12f87fa62aSChandan Nath #define _CLOCKS_H_
13f87fa62aSChandan Nath 
14f87fa62aSChandan Nath #include <asm/arch/clocks_am33xx.h>
15fbd6295dSLokesh Vutla #include <asm/arch/hardware.h>
16f87fa62aSChandan Nath 
17*8bb687fdSTom Rini #if defined(CONFIG_TI816X) || defined(CONFIG_TI814X)
18dcf846d5STENART Antoine #include <asm/arch/clock_ti81xx.h>
19dcf846d5STENART Antoine #endif
20dcf846d5STENART Antoine 
2194d77fb6SLokesh Vutla #define LDELAY 1000000
2294d77fb6SLokesh Vutla 
2395cb69faSLokesh Vutla /*CM_<clock_domain>__CLKCTRL */
2495cb69faSLokesh Vutla #define CD_CLKCTRL_CLKTRCTRL_SHIFT		0
2595cb69faSLokesh Vutla #define CD_CLKCTRL_CLKTRCTRL_MASK		3
2695cb69faSLokesh Vutla 
2795cb69faSLokesh Vutla #define CD_CLKCTRL_CLKTRCTRL_NO_SLEEP		0
2895cb69faSLokesh Vutla #define CD_CLKCTRL_CLKTRCTRL_SW_SLEEP		1
2995cb69faSLokesh Vutla #define CD_CLKCTRL_CLKTRCTRL_SW_WKUP		2
3095cb69faSLokesh Vutla 
3195cb69faSLokesh Vutla /* CM_<clock_domain>_<module>_CLKCTRL */
3295cb69faSLokesh Vutla #define MODULE_CLKCTRL_MODULEMODE_SHIFT		0
3395cb69faSLokesh Vutla #define MODULE_CLKCTRL_MODULEMODE_MASK		3
3495cb69faSLokesh Vutla #define MODULE_CLKCTRL_IDLEST_SHIFT		16
3595cb69faSLokesh Vutla #define MODULE_CLKCTRL_IDLEST_MASK		(3 << 16)
3695cb69faSLokesh Vutla 
3795cb69faSLokesh Vutla #define MODULE_CLKCTRL_MODULEMODE_SW_DISABLE		0
3895cb69faSLokesh Vutla #define MODULE_CLKCTRL_MODULEMODE_SW_EXPLICIT_EN	2
3995cb69faSLokesh Vutla 
4095cb69faSLokesh Vutla #define MODULE_CLKCTRL_IDLEST_FULLY_FUNCTIONAL	0
4195cb69faSLokesh Vutla #define MODULE_CLKCTRL_IDLEST_TRANSITIONING	1
4295cb69faSLokesh Vutla #define MODULE_CLKCTRL_IDLEST_IDLE		2
4395cb69faSLokesh Vutla #define MODULE_CLKCTRL_IDLEST_DISABLED		3
4495cb69faSLokesh Vutla 
4594d77fb6SLokesh Vutla /* CM_CLKMODE_DPLL */
464b97bcbeSYegor Yefremov #define CM_CLKMODE_DPLL_SSC_EN_SHIFT		12
474b97bcbeSYegor Yefremov #define CM_CLKMODE_DPLL_SSC_EN_MASK		(1 << 12)
48c01bc75eSHeiko Schocher #define CM_CLKMODE_DPLL_SSC_ACK_MASK		(1 << 13)
49c01bc75eSHeiko Schocher #define CM_CLKMODE_DPLL_SSC_DOWNSPREAD_MASK	(1 << 14)
50c01bc75eSHeiko Schocher #define CM_CLKMODE_DPLL_SSC_TYPE_MASK		(1 << 15)
5194d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_REGM4XEN_SHIFT		11
5294d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_REGM4XEN_MASK		(1 << 11)
5394d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_LPMODE_EN_SHIFT		10
5494d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_LPMODE_EN_MASK		(1 << 10)
5594d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_RELOCK_RAMP_EN_SHIFT	9
5694d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_RELOCK_RAMP_EN_MASK	(1 << 9)
5794d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_DRIFTGUARD_EN_SHIFT	8
5894d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_DRIFTGUARD_EN_MASK	(1 << 8)
5994d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_RAMP_RATE_SHIFT		5
6094d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_RAMP_RATE_MASK		(0x7 << 5)
6194d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_EN_SHIFT		0
6294d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_EN_MASK			(0x7 << 0)
6394d77fb6SLokesh Vutla 
6494d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_DPLL_EN_SHIFT		0
6594d77fb6SLokesh Vutla #define CM_CLKMODE_DPLL_DPLL_EN_MASK		7
6694d77fb6SLokesh Vutla 
6794d77fb6SLokesh Vutla #define DPLL_EN_STOP			1
6894d77fb6SLokesh Vutla #define DPLL_EN_MN_BYPASS		4
6994d77fb6SLokesh Vutla #define DPLL_EN_LOW_POWER_BYPASS	5
7094d77fb6SLokesh Vutla #define DPLL_EN_LOCK			7
7194d77fb6SLokesh Vutla 
7294d77fb6SLokesh Vutla /* CM_IDLEST_DPLL fields */
7394d77fb6SLokesh Vutla #define ST_DPLL_CLK_MASK		1
7494d77fb6SLokesh Vutla 
7594d77fb6SLokesh Vutla /* CM_CLKSEL_DPLL */
7694d77fb6SLokesh Vutla #define CM_CLKSEL_DPLL_M_SHIFT			8
7794d77fb6SLokesh Vutla #define CM_CLKSEL_DPLL_M_MASK			(0x7FF << 8)
7894d77fb6SLokesh Vutla #define CM_CLKSEL_DPLL_N_SHIFT			0
7994d77fb6SLokesh Vutla #define CM_CLKSEL_DPLL_N_MASK			0x7F
8094d77fb6SLokesh Vutla 
8194d77fb6SLokesh Vutla struct dpll_params {
8294d77fb6SLokesh Vutla 	u32 m;
8394d77fb6SLokesh Vutla 	u32 n;
8494d77fb6SLokesh Vutla 	s8 m2;
8594d77fb6SLokesh Vutla 	s8 m3;
8694d77fb6SLokesh Vutla 	s8 m4;
8794d77fb6SLokesh Vutla 	s8 m5;
8894d77fb6SLokesh Vutla 	s8 m6;
8994d77fb6SLokesh Vutla };
9094d77fb6SLokesh Vutla 
9194d77fb6SLokesh Vutla struct dpll_regs {
9294d77fb6SLokesh Vutla 	u32 cm_clkmode_dpll;
9394d77fb6SLokesh Vutla 	u32 cm_idlest_dpll;
9494d77fb6SLokesh Vutla 	u32 cm_autoidle_dpll;
9594d77fb6SLokesh Vutla 	u32 cm_clksel_dpll;
9694d77fb6SLokesh Vutla 	u32 cm_div_m2_dpll;
9794d77fb6SLokesh Vutla 	u32 cm_div_m3_dpll;
9894d77fb6SLokesh Vutla 	u32 cm_div_m4_dpll;
9994d77fb6SLokesh Vutla 	u32 cm_div_m5_dpll;
10094d77fb6SLokesh Vutla 	u32 cm_div_m6_dpll;
10194d77fb6SLokesh Vutla };
10294d77fb6SLokesh Vutla 
10394d77fb6SLokesh Vutla extern const struct dpll_regs dpll_mpu_regs;
10494d77fb6SLokesh Vutla extern const struct dpll_regs dpll_core_regs;
10594d77fb6SLokesh Vutla extern const struct dpll_regs dpll_per_regs;
10694d77fb6SLokesh Vutla extern const struct dpll_regs dpll_ddr_regs;
107fbd6295dSLokesh Vutla extern const struct dpll_params dpll_mpu_opp[NUM_CRYSTAL_FREQ][NUM_OPPS];
108fbd6295dSLokesh Vutla extern const struct dpll_params dpll_core_1000MHz[NUM_CRYSTAL_FREQ];
109fbd6295dSLokesh Vutla extern const struct dpll_params dpll_per_192MHz[NUM_CRYSTAL_FREQ];
110fbd6295dSLokesh Vutla extern const struct dpll_params dpll_ddr2_266MHz[NUM_CRYSTAL_FREQ];
111fbd6295dSLokesh Vutla extern const struct dpll_params dpll_ddr3_303MHz[NUM_CRYSTAL_FREQ];
112fbd6295dSLokesh Vutla extern const struct dpll_params dpll_ddr3_400MHz[NUM_CRYSTAL_FREQ];
11394d77fb6SLokesh Vutla 
11495cb69faSLokesh Vutla extern struct cm_wkuppll *const cmwkup;
11594d77fb6SLokesh Vutla 
116cf04d032SLokesh Vutla const struct dpll_params *get_dpll_mpu_params(void);
117cf04d032SLokesh Vutla const struct dpll_params *get_dpll_core_params(void);
118cf04d032SLokesh Vutla const struct dpll_params *get_dpll_per_params(void);
11994d77fb6SLokesh Vutla const struct dpll_params *get_dpll_ddr_params(void);
12064ce2fbdSTom Rini void scale_vcores(void);
12194d77fb6SLokesh Vutla void do_setup_dpll(const struct dpll_regs *, const struct dpll_params *);
12295cb69faSLokesh Vutla void prcm_init(void);
12395cb69faSLokesh Vutla void enable_basic_clocks(void);
12495cb69faSLokesh Vutla void do_enable_clocks(u32 *const *, u32 *const *, u8);
125fca45722SKishon Vijay Abraham I void do_disable_clocks(u32 *const *, u32 *const *, u8);
12694d77fb6SLokesh Vutla 
127694607b5SHeiko Schocher void set_mpu_spreadspectrum(int permille);
128f87fa62aSChandan Nath #endif
129