xref: /arm-trusted-firmware/plat/rockchip/rk3368/drivers/soc/soc.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef SOC_H
8*91f16700Schasinglulu #define SOC_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu enum plls_id {
11*91f16700Schasinglulu 	ABPLL_ID = 0,
12*91f16700Schasinglulu 	ALPLL_ID,
13*91f16700Schasinglulu 	DPLL_ID,
14*91f16700Schasinglulu 	CPLL_ID,
15*91f16700Schasinglulu 	GPLL_ID,
16*91f16700Schasinglulu 	NPLL_ID,
17*91f16700Schasinglulu 	END_PLL_ID,
18*91f16700Schasinglulu };
19*91f16700Schasinglulu 
20*91f16700Schasinglulu /*****************************************************************************
21*91f16700Schasinglulu  * secure timer
22*91f16700Schasinglulu  *****************************************************************************/
23*91f16700Schasinglulu #define TIMER_LOADE_COUNT0	0x00
24*91f16700Schasinglulu #define TIMER_LOADE_COUNT1	0x04
25*91f16700Schasinglulu #define TIMER_CURRENT_VALUE0	0x08
26*91f16700Schasinglulu #define TIMER_CURRENT_VALUE1	0x0C
27*91f16700Schasinglulu #define TIMER_CONTROL_REG	0x10
28*91f16700Schasinglulu #define TIMER_INTSTATUS		0x18
29*91f16700Schasinglulu 
30*91f16700Schasinglulu #define TIMER_EN		0x1
31*91f16700Schasinglulu 
32*91f16700Schasinglulu #define STIMER1_BASE		(STIME_BASE + 0x20)
33*91f16700Schasinglulu 
34*91f16700Schasinglulu #define CYCL_24M_CNT_US(us)	(24 * us)
35*91f16700Schasinglulu #define CYCL_24M_CNT_MS(ms)	(ms * CYCL_24M_CNT_US(1000))
36*91f16700Schasinglulu 
37*91f16700Schasinglulu /*****************************************************************************
38*91f16700Schasinglulu  * sgrf reg, offset
39*91f16700Schasinglulu  *****************************************************************************/
40*91f16700Schasinglulu #define SGRF_SOC_CON(n)		(0x0 + (n) * 4)
41*91f16700Schasinglulu #define SGRF_BUSDMAC_CON(n)	(0x100 + (n) * 4)
42*91f16700Schasinglulu 
43*91f16700Schasinglulu #define SGRF_SOC_CON_NS		0xffff0000
44*91f16700Schasinglulu 
45*91f16700Schasinglulu /*****************************************************************************
46*91f16700Schasinglulu  * con6[2]pmusram is security.
47*91f16700Schasinglulu  * con6[6]stimer is security.
48*91f16700Schasinglulu  *****************************************************************************/
49*91f16700Schasinglulu #define PMUSRAM_S_SHIFT		2
50*91f16700Schasinglulu #define PMUSRAM_S		1
51*91f16700Schasinglulu #define STIMER_S_SHIFT		6
52*91f16700Schasinglulu #define STIMER_S		1
53*91f16700Schasinglulu #define SGRF_SOC_CON7_BITS	((0xffffu << 16) | \
54*91f16700Schasinglulu 				 (PMUSRAM_S << PMUSRAM_S_SHIFT) | \
55*91f16700Schasinglulu 				 (STIMER_S << STIMER_S_SHIFT))
56*91f16700Schasinglulu 
57*91f16700Schasinglulu #define SGRF_BUSDMAC_CON0_NS	0xfffcfff8
58*91f16700Schasinglulu #define SGRF_BUSDMAC_CON1_NS	0xffff0fff
59*91f16700Schasinglulu 
60*91f16700Schasinglulu /*
61*91f16700Schasinglulu  * sgrf_soc_con1~2, mask and offset
62*91f16700Schasinglulu  */
63*91f16700Schasinglulu #define CPU_BOOT_ADDR_WMASK	0xffff0000
64*91f16700Schasinglulu #define CPU_BOOT_ADDR_ALIGN	16
65*91f16700Schasinglulu 
66*91f16700Schasinglulu /*****************************************************************************
67*91f16700Schasinglulu  * cru reg, offset
68*91f16700Schasinglulu  *****************************************************************************/
69*91f16700Schasinglulu #define CRU_SOFTRST_CON		0x300
70*91f16700Schasinglulu #define CRU_SOFTRSTS_CON(n)	(CRU_SOFTRST_CON + ((n) * 4))
71*91f16700Schasinglulu #define CRU_SOFTRSTS_CON_CNT	15
72*91f16700Schasinglulu 
73*91f16700Schasinglulu #define SOFTRST_DMA1		0x40004
74*91f16700Schasinglulu #define SOFTRST_DMA2		0x10001
75*91f16700Schasinglulu 
76*91f16700Schasinglulu #define RST_DMA1_MSK		0x4
77*91f16700Schasinglulu #define RST_DMA2_MSK		0x0
78*91f16700Schasinglulu 
79*91f16700Schasinglulu #define CRU_CLKSEL_CON		0x100
80*91f16700Schasinglulu #define CRU_CLKSELS_CON(i)	(CRU_CLKSEL_CON + ((i) * 4))
81*91f16700Schasinglulu #define CRU_CLKSEL_CON_CNT	56
82*91f16700Schasinglulu 
83*91f16700Schasinglulu #define CRU_CLKGATE_CON		0x200
84*91f16700Schasinglulu #define CRU_CLKGATES_CON(i)	(CRU_CLKGATE_CON + ((i) * 4))
85*91f16700Schasinglulu #define CRU_CLKGATES_CON_CNT	25
86*91f16700Schasinglulu 
87*91f16700Schasinglulu #define CRU_GLB_SRST_FST	0x280
88*91f16700Schasinglulu #define CRU_GLB_SRST_SND	0x284
89*91f16700Schasinglulu #define CRU_GLB_RST_CON		0x388
90*91f16700Schasinglulu 
91*91f16700Schasinglulu #define CRU_CONS_GATEID(i)	(16 * (i))
92*91f16700Schasinglulu #define GATE_ID(reg, bit)	((reg * 16) + bit)
93*91f16700Schasinglulu 
94*91f16700Schasinglulu #define PMU_RST_BY_SECOND_SFT	(BIT(1) << 2)
95*91f16700Schasinglulu #define PMU_RST_NOT_BY_SFT	(BIT(1) << 2)
96*91f16700Schasinglulu 
97*91f16700Schasinglulu /***************************************************************************
98*91f16700Schasinglulu  * pll
99*91f16700Schasinglulu  ***************************************************************************/
100*91f16700Schasinglulu #define PLL_PWR_DN_MSK		(0x1 << 1)
101*91f16700Schasinglulu #define PLL_PWR_DN		REG_WMSK_BITS(1, 1, 0x1)
102*91f16700Schasinglulu #define PLL_PWR_ON		REG_WMSK_BITS(0, 1, 0x1)
103*91f16700Schasinglulu #define PLL_RESET		REG_WMSK_BITS(1, 5, 0x1)
104*91f16700Schasinglulu #define PLL_RESET_RESUME	REG_WMSK_BITS(0, 5, 0x1)
105*91f16700Schasinglulu #define PLL_BYPASS_MSK		(0x1 << 0)
106*91f16700Schasinglulu #define PLL_BYPASS_W_MSK	(PLL_BYPASS_MSK << 16)
107*91f16700Schasinglulu #define PLL_BYPASS		REG_WMSK_BITS(1, 0, 0x1)
108*91f16700Schasinglulu #define PLL_NO_BYPASS		REG_WMSK_BITS(0, 0, 0x1)
109*91f16700Schasinglulu #define PLL_MODE_SHIFT		8
110*91f16700Schasinglulu #define PLL_MODE_MSK		0x3
111*91f16700Schasinglulu #define PLLS_MODE_WMASK		(PLL_MODE_MSK << (16 + PLL_MODE_SHIFT))
112*91f16700Schasinglulu #define PLL_SLOW		0x0
113*91f16700Schasinglulu #define PLL_NORM		0x1
114*91f16700Schasinglulu #define PLL_DEEP		0x2
115*91f16700Schasinglulu #define PLL_SLOW_BITS		REG_WMSK_BITS(PLL_SLOW, 8, 0x3)
116*91f16700Schasinglulu #define PLL_NORM_BITS		REG_WMSK_BITS(PLL_NORM, 8, 0x3)
117*91f16700Schasinglulu #define PLL_DEEP_BITS		REG_WMSK_BITS(PLL_DEEP, 8, 0x3)
118*91f16700Schasinglulu 
119*91f16700Schasinglulu #define PLL_CONS(id, i)		((id) * 0x10 + ((i) * 4))
120*91f16700Schasinglulu 
121*91f16700Schasinglulu #define REG_W_MSK(bits_shift, msk) \
122*91f16700Schasinglulu 		((msk) << ((bits_shift) + 16))
123*91f16700Schasinglulu #define REG_VAL_CLRBITS(val, bits_shift, msk) \
124*91f16700Schasinglulu 		(val & (~(msk << bits_shift)))
125*91f16700Schasinglulu #define REG_SET_BITS(bits, bits_shift, msk) \
126*91f16700Schasinglulu 		(((bits) & (msk)) << (bits_shift))
127*91f16700Schasinglulu #define REG_WMSK_BITS(bits, bits_shift, msk) \
128*91f16700Schasinglulu 		(REG_W_MSK(bits_shift, msk) | \
129*91f16700Schasinglulu 		REG_SET_BITS(bits, bits_shift, msk))
130*91f16700Schasinglulu 
131*91f16700Schasinglulu #define regs_updata_bit_set(addr, shift) \
132*91f16700Schasinglulu 		regs_updata_bits((addr), 0x1, 0x1, (shift))
133*91f16700Schasinglulu #define regs_updata_bit_clr(addr, shift) \
134*91f16700Schasinglulu 		regs_updata_bits((addr), 0x0, 0x1, (shift))
135*91f16700Schasinglulu 
136*91f16700Schasinglulu void regs_updata_bits(uintptr_t addr, uint32_t val,
137*91f16700Schasinglulu 		      uint32_t mask, uint32_t shift);
138*91f16700Schasinglulu void soc_sleep_config(void);
139*91f16700Schasinglulu void pm_plls_resume(void);
140*91f16700Schasinglulu 
141*91f16700Schasinglulu #endif /* SOC_H */
142