xref: /rk3399_ARM-atf/plat/rockchip/px30/drivers/soc/soc.h (revision 010d6ae3388ef63f2a2afcd408c1dc461fb43583)
1*010d6ae3SXiaoDong Huang /*
2*010d6ae3SXiaoDong Huang  * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
3*010d6ae3SXiaoDong Huang  *
4*010d6ae3SXiaoDong Huang  * SPDX-License-Identifier: BSD-3-Clause
5*010d6ae3SXiaoDong Huang  */
6*010d6ae3SXiaoDong Huang 
7*010d6ae3SXiaoDong Huang #ifndef __SOC_H__
8*010d6ae3SXiaoDong Huang #define __SOC_H__
9*010d6ae3SXiaoDong Huang 
10*010d6ae3SXiaoDong Huang #include <plat_private.h>
11*010d6ae3SXiaoDong Huang 
12*010d6ae3SXiaoDong Huang #ifndef BITS_WMSK
13*010d6ae3SXiaoDong Huang #define BITS_WMSK(msk, shift)	((msk) << (shift + REG_MSK_SHIFT))
14*010d6ae3SXiaoDong Huang #endif
15*010d6ae3SXiaoDong Huang 
16*010d6ae3SXiaoDong Huang enum plls_id {
17*010d6ae3SXiaoDong Huang 	APLL_ID = 0,
18*010d6ae3SXiaoDong Huang 	DPLL_ID,
19*010d6ae3SXiaoDong Huang 	CPLL_ID,
20*010d6ae3SXiaoDong Huang 	NPLL_ID,
21*010d6ae3SXiaoDong Huang 	GPLL_ID,
22*010d6ae3SXiaoDong Huang 	END_PLL_ID,
23*010d6ae3SXiaoDong Huang };
24*010d6ae3SXiaoDong Huang 
25*010d6ae3SXiaoDong Huang enum pll_mode {
26*010d6ae3SXiaoDong Huang 	SLOW_MODE,
27*010d6ae3SXiaoDong Huang 	NORM_MODE,
28*010d6ae3SXiaoDong Huang 	DEEP_SLOW_MODE,
29*010d6ae3SXiaoDong Huang };
30*010d6ae3SXiaoDong Huang 
31*010d6ae3SXiaoDong Huang /***************************************************************************
32*010d6ae3SXiaoDong Huang  * SGRF
33*010d6ae3SXiaoDong Huang  ***************************************************************************/
34*010d6ae3SXiaoDong Huang #define SGRF_SOC_CON(i)		((i) * 0x4)
35*010d6ae3SXiaoDong Huang #define SGRF_DMAC_CON(i)	(0x30 + (i) * 0x4)
36*010d6ae3SXiaoDong Huang 
37*010d6ae3SXiaoDong Huang #define SGRF_MST_S_ALL_NS	0xffffffff
38*010d6ae3SXiaoDong Huang #define SGRF_SLV_S_ALL_NS	0xffff0000
39*010d6ae3SXiaoDong Huang #define DMA_IRQ_BOOT_NS		0xffffffff
40*010d6ae3SXiaoDong Huang #define DMA_PERI_CH_NS_15_0	0xffffffff
41*010d6ae3SXiaoDong Huang #define DMA_PERI_CH_NS_19_16	0x000f000f
42*010d6ae3SXiaoDong Huang #define DMA_MANAGER_BOOT_NS	0x00010001
43*010d6ae3SXiaoDong Huang #define DMA_SOFTRST_REQ		BITS_WITH_WMASK(1, 0x1, 12)
44*010d6ae3SXiaoDong Huang #define DMA_SOFTRST_RLS		BITS_WITH_WMASK(0, 0x1, 12)
45*010d6ae3SXiaoDong Huang 
46*010d6ae3SXiaoDong Huang /***************************************************************************
47*010d6ae3SXiaoDong Huang  * GRF
48*010d6ae3SXiaoDong Huang  ***************************************************************************/
49*010d6ae3SXiaoDong Huang #define GRF_SOC_CON(i)		(0x0400 + (i) * 4)
50*010d6ae3SXiaoDong Huang #define GRF_PD_VO_CON0		0x0434
51*010d6ae3SXiaoDong Huang #define GRF_SOC_STATUS0		0x0480
52*010d6ae3SXiaoDong Huang #define GRF_CPU_STATUS0		0x0520
53*010d6ae3SXiaoDong Huang #define GRF_CPU_STATUS1		0x0524
54*010d6ae3SXiaoDong Huang #define GRF_SOC_NOC_CON0	0x0530
55*010d6ae3SXiaoDong Huang #define GRF_SOC_NOC_CON1	0x0534
56*010d6ae3SXiaoDong Huang 
57*010d6ae3SXiaoDong Huang #define CKECK_WFE_MSK		0x1
58*010d6ae3SXiaoDong Huang #define CKECK_WFI_MSK		0x10
59*010d6ae3SXiaoDong Huang #define CKECK_WFEI_MSK		0x11
60*010d6ae3SXiaoDong Huang 
61*010d6ae3SXiaoDong Huang #define GRF_SOC_CON2_NSWDT_RST_EN 12
62*010d6ae3SXiaoDong Huang 
63*010d6ae3SXiaoDong Huang /***************************************************************************
64*010d6ae3SXiaoDong Huang  * DDR FIREWALL
65*010d6ae3SXiaoDong Huang  ***************************************************************************/
66*010d6ae3SXiaoDong Huang #define FIREWALL_DDR_FW_DDR_RGN(i)	((i) * 0x4)
67*010d6ae3SXiaoDong Huang #define FIREWALL_DDR_FW_DDR_MST(i)	(0x20 + (i) * 0x4)
68*010d6ae3SXiaoDong Huang #define FIREWALL_DDR_FW_DDR_CON_REG	0x40
69*010d6ae3SXiaoDong Huang #define FIREWALL_DDR_FW_DDR_RGN_NUM	8
70*010d6ae3SXiaoDong Huang #define FIREWALL_DDR_FW_DDR_MST_NUM	6
71*010d6ae3SXiaoDong Huang 
72*010d6ae3SXiaoDong Huang #define PLAT_MAX_DDR_CAPACITY_MB	4096
73*010d6ae3SXiaoDong Huang #define RG_MAP_SECURE(top, base)	((((top) - 1) << 16) | (base))
74*010d6ae3SXiaoDong Huang 
75*010d6ae3SXiaoDong Huang /***************************************************************************
76*010d6ae3SXiaoDong Huang  * cru
77*010d6ae3SXiaoDong Huang  ***************************************************************************/
78*010d6ae3SXiaoDong Huang #define CRU_MODE		0xa0
79*010d6ae3SXiaoDong Huang #define CRU_MISC		0xa4
80*010d6ae3SXiaoDong Huang #define CRU_GLB_CNT_TH	0xb0
81*010d6ae3SXiaoDong Huang #define CRU_GLB_RST_ST	0xb4
82*010d6ae3SXiaoDong Huang #define CRU_GLB_SRST_FST	0xb8
83*010d6ae3SXiaoDong Huang #define CRU_GLB_SRST_SND	0xbc
84*010d6ae3SXiaoDong Huang #define CRU_GLB_RST_CON		0xc0
85*010d6ae3SXiaoDong Huang 
86*010d6ae3SXiaoDong Huang #define CRU_CLKSEL_CON		0x100
87*010d6ae3SXiaoDong Huang #define CRU_CLKSELS_CON(i)	(CRU_CLKSEL_CON + (i) * 4)
88*010d6ae3SXiaoDong Huang #define CRU_CLKSEL_CON_CNT	60
89*010d6ae3SXiaoDong Huang 
90*010d6ae3SXiaoDong Huang #define CRU_CLKGATE_CON		0x200
91*010d6ae3SXiaoDong Huang #define CRU_CLKGATES_CON(i)	(CRU_CLKGATE_CON + (i) * 4)
92*010d6ae3SXiaoDong Huang #define CRU_CLKGATES_CON_CNT	18
93*010d6ae3SXiaoDong Huang 
94*010d6ae3SXiaoDong Huang #define CRU_SOFTRST_CON		0x300
95*010d6ae3SXiaoDong Huang #define CRU_SOFTRSTS_CON(n)	(CRU_SOFTRST_CON + ((n) * 4))
96*010d6ae3SXiaoDong Huang #define CRU_SOFTRSTS_CON_CNT	12
97*010d6ae3SXiaoDong Huang 
98*010d6ae3SXiaoDong Huang #define CRU_AUTOCS_CON0(id)	(0x400 + (id) * 8)
99*010d6ae3SXiaoDong Huang #define CRU_AUTOCS_CON1(id)	(0x404 + (id) * 8)
100*010d6ae3SXiaoDong Huang 
101*010d6ae3SXiaoDong Huang #define CRU_CONS_GATEID(i)	(16 * (i))
102*010d6ae3SXiaoDong Huang #define GATE_ID(reg, bit)	((reg) * 16 + (bit))
103*010d6ae3SXiaoDong Huang 
104*010d6ae3SXiaoDong Huang #define CRU_GLB_SRST_FST_VALUE	0xfdb9
105*010d6ae3SXiaoDong Huang #define CRU_GLB_SRST_SND_VALUE	0xeca8
106*010d6ae3SXiaoDong Huang 
107*010d6ae3SXiaoDong Huang #define CRU_GLB_RST_TSADC_EXT 6
108*010d6ae3SXiaoDong Huang #define CRU_GLB_RST_WDT_EXT 7
109*010d6ae3SXiaoDong Huang 
110*010d6ae3SXiaoDong Huang #define CRU_GLB_CNT_RST_MSK  0xffff
111*010d6ae3SXiaoDong Huang #define CRU_GLB_CNT_RST_1MS  0x5DC0
112*010d6ae3SXiaoDong Huang 
113*010d6ae3SXiaoDong Huang #define CRU_GLB_RST_TSADC_FST BIT(0)
114*010d6ae3SXiaoDong Huang #define CRU_GLB_RST_WDT_FST BIT(1)
115*010d6ae3SXiaoDong Huang 
116*010d6ae3SXiaoDong Huang /***************************************************************************
117*010d6ae3SXiaoDong Huang  * pll
118*010d6ae3SXiaoDong Huang  ***************************************************************************/
119*010d6ae3SXiaoDong Huang #define CRU_PLL_CONS(id, i)	((id) * 0x20 + (i) * 4)
120*010d6ae3SXiaoDong Huang #define PLL_CON(i)		((i) * 4)
121*010d6ae3SXiaoDong Huang #define PLL_CON_CNT		5
122*010d6ae3SXiaoDong Huang #define PLL_LOCK_MSK		BIT(10)
123*010d6ae3SXiaoDong Huang #define PLL_MODE_SHIFT(id)	((id) == CPLL_ID ? \
124*010d6ae3SXiaoDong Huang 				  2 : \
125*010d6ae3SXiaoDong Huang 				  ((id) == DPLL_ID ? 4 : 2 * (id)))
126*010d6ae3SXiaoDong Huang #define PLL_MODE_MSK(id)	(0x3 << PLL_MODE_SHIFT(id))
127*010d6ae3SXiaoDong Huang 
128*010d6ae3SXiaoDong Huang #define PLL_LOCKED_TIMEOUT	600000U
129*010d6ae3SXiaoDong Huang 
130*010d6ae3SXiaoDong Huang /***************************************************************************
131*010d6ae3SXiaoDong Huang  * GPIO
132*010d6ae3SXiaoDong Huang  ***************************************************************************/
133*010d6ae3SXiaoDong Huang #define SWPORTA_DR		0x00
134*010d6ae3SXiaoDong Huang #define SWPORTA_DDR		0x04
135*010d6ae3SXiaoDong Huang #define GPIO_INTEN		0x30
136*010d6ae3SXiaoDong Huang #define GPIO_INT_STATUS		0x40
137*010d6ae3SXiaoDong Huang #define GPIO_NUMS		4
138*010d6ae3SXiaoDong Huang 
139*010d6ae3SXiaoDong Huang /**************************************************
140*010d6ae3SXiaoDong Huang  * secure timer
141*010d6ae3SXiaoDong Huang  **************************************************/
142*010d6ae3SXiaoDong Huang 
143*010d6ae3SXiaoDong Huang /* chanal0~5 */
144*010d6ae3SXiaoDong Huang #define STIMER_CHN_BASE(n)	(STIME_BASE + 0x20 * (n))
145*010d6ae3SXiaoDong Huang 
146*010d6ae3SXiaoDong Huang #define TIMER_LOAD_COUNT0	0x0
147*010d6ae3SXiaoDong Huang #define TIMER_LOAD_COUNT1	0x4
148*010d6ae3SXiaoDong Huang 
149*010d6ae3SXiaoDong Huang #define TIMER_CUR_VALUE0	0x8
150*010d6ae3SXiaoDong Huang #define TIMER_CUR_VALUE1	0xc
151*010d6ae3SXiaoDong Huang 
152*010d6ae3SXiaoDong Huang #define TIMER_CONTROL_REG	0x10
153*010d6ae3SXiaoDong Huang #define TIMER_INTSTATUS		0x18
154*010d6ae3SXiaoDong Huang 
155*010d6ae3SXiaoDong Huang #define TIMER_DIS		0x0
156*010d6ae3SXiaoDong Huang #define TIMER_EN		0x1
157*010d6ae3SXiaoDong Huang 
158*010d6ae3SXiaoDong Huang #define TIMER_FMODE		(0x0 << 1)
159*010d6ae3SXiaoDong Huang #define TIMER_RMODE		(0x1 << 1)
160*010d6ae3SXiaoDong Huang 
161*010d6ae3SXiaoDong Huang #define TIMER_LOAD_COUNT0_MSK	(0xffffffff)
162*010d6ae3SXiaoDong Huang #define TIMER_LOAD_COUNT1_MSK	(0xffffffff00000000)
163*010d6ae3SXiaoDong Huang 
164*010d6ae3SXiaoDong Huang void clk_gate_con_save(uint32_t *clkgt_save);
165*010d6ae3SXiaoDong Huang void clk_gate_con_restore(uint32_t *clkgt_save);
166*010d6ae3SXiaoDong Huang void clk_gate_con_disable(void);
167*010d6ae3SXiaoDong Huang 
168*010d6ae3SXiaoDong Huang void secure_timer_init(void);
169*010d6ae3SXiaoDong Huang void secure_timer_disable(void);
170*010d6ae3SXiaoDong Huang void px30_soc_reset_config(void);
171*010d6ae3SXiaoDong Huang 
172*010d6ae3SXiaoDong Huang #endif /* __SOC_H__ */
173