xref: /rk3399_ARM-atf/plat/nxp/soc-ls1088a/include/soc.h (revision 9df5ba05b4fe4cd44157363a897b73553ba6e2f1)
1*9df5ba05SJiafei Pan /*
2*9df5ba05SJiafei Pan  * Copyright 2022 NXP
3*9df5ba05SJiafei Pan  *
4*9df5ba05SJiafei Pan  * SPDX-License-Identifier: BSD-3-Clause
5*9df5ba05SJiafei Pan  */
6*9df5ba05SJiafei Pan 
7*9df5ba05SJiafei Pan #ifndef SOC_H
8*9df5ba05SJiafei Pan #define	SOC_H
9*9df5ba05SJiafei Pan 
10*9df5ba05SJiafei Pan /* Chassis specific defines - common across SoC's of a particular platform */
11*9df5ba05SJiafei Pan #include "dcfg_lsch3.h"
12*9df5ba05SJiafei Pan #include "soc_default_base_addr.h"
13*9df5ba05SJiafei Pan #include "soc_default_helper_macros.h"
14*9df5ba05SJiafei Pan 
15*9df5ba05SJiafei Pan /*
16*9df5ba05SJiafei Pan  * SVR Definition of LS1088A
17*9df5ba05SJiafei Pan  * A: without security
18*9df5ba05SJiafei Pan  * AE: with security
19*9df5ba05SJiafei Pan  * (not include major and minor rev)
20*9df5ba05SJiafei Pan  */
21*9df5ba05SJiafei Pan #define SVR_LS1044A			0x870323
22*9df5ba05SJiafei Pan #define SVR_LS1044AE			0x870322
23*9df5ba05SJiafei Pan #define SVR_LS1048A			0x870321
24*9df5ba05SJiafei Pan #define SVR_LS1048AE			0x870320
25*9df5ba05SJiafei Pan #define SVR_LS1084A			0x870303
26*9df5ba05SJiafei Pan #define SVR_LS1084AE			0x870302
27*9df5ba05SJiafei Pan #define SVR_LS1088A			0x870301
28*9df5ba05SJiafei Pan #define SVR_LS1088AE			0x870300
29*9df5ba05SJiafei Pan 
30*9df5ba05SJiafei Pan #define SVR_WO_E			0xFFFFFE
31*9df5ba05SJiafei Pan 
32*9df5ba05SJiafei Pan /* Number of cores in platform */
33*9df5ba05SJiafei Pan #define NUMBER_OF_CLUSTERS		2
34*9df5ba05SJiafei Pan #define CORES_PER_CLUSTER		4
35*9df5ba05SJiafei Pan #define PLATFORM_CORE_COUNT		(NUMBER_OF_CLUSTERS * CORES_PER_CLUSTER)
36*9df5ba05SJiafei Pan 
37*9df5ba05SJiafei Pan /* set to 0 if the clusters are not symmetrical */
38*9df5ba05SJiafei Pan #define SYMMETRICAL_CLUSTERS		1
39*9df5ba05SJiafei Pan 
40*9df5ba05SJiafei Pan 
41*9df5ba05SJiafei Pan #define NUM_DRAM_REGIONS		2
42*9df5ba05SJiafei Pan #define	NXP_DRAM0_ADDR			0x80000000
43*9df5ba05SJiafei Pan #define NXP_DRAM0_MAX_SIZE		0x80000000	/*  2 GB  */
44*9df5ba05SJiafei Pan 
45*9df5ba05SJiafei Pan #define NXP_DRAM1_ADDR			0x8080000000
46*9df5ba05SJiafei Pan #define NXP_DRAM1_MAX_SIZE		0x7F80000000	/* 510 G */
47*9df5ba05SJiafei Pan 
48*9df5ba05SJiafei Pan /* DRAM0 Size defined in platform_def.h */
49*9df5ba05SJiafei Pan #define	NXP_DRAM0_SIZE			PLAT_DEF_DRAM0_SIZE
50*9df5ba05SJiafei Pan 
51*9df5ba05SJiafei Pan #define NXP_POWMGTDCR			0x700123C20
52*9df5ba05SJiafei Pan 
53*9df5ba05SJiafei Pan /* epu register offsets and values */
54*9df5ba05SJiafei Pan #define EPU_EPGCR_OFFSET		0x0
55*9df5ba05SJiafei Pan #define EPU_EPIMCR10_OFFSET		0x128
56*9df5ba05SJiafei Pan #define EPU_EPCTR10_OFFSET		0xa28
57*9df5ba05SJiafei Pan #define EPU_EPCCR10_OFFSET		0x828
58*9df5ba05SJiafei Pan 
59*9df5ba05SJiafei Pan #ifdef EPU_EPCCR10_VAL
60*9df5ba05SJiafei Pan #undef EPU_EPCCR10_VAL
61*9df5ba05SJiafei Pan #endif
62*9df5ba05SJiafei Pan #define EPU_EPCCR10_VAL			0xf2800000
63*9df5ba05SJiafei Pan 
64*9df5ba05SJiafei Pan #define EPU_EPIMCR10_VAL		0xba000000
65*9df5ba05SJiafei Pan #define EPU_EPCTR10_VAL			0x0
66*9df5ba05SJiafei Pan #define EPU_EPGCR_VAL			(1 << 31)
67*9df5ba05SJiafei Pan 
68*9df5ba05SJiafei Pan /* pmu register offsets and values */
69*9df5ba05SJiafei Pan #define PMU_PCPW20SR_OFFSET		0x830
70*9df5ba05SJiafei Pan #define PMU_CLAINACTSETR_OFFSET		0x1100
71*9df5ba05SJiafei Pan #define PMU_CLAINACTCLRR_OFFSET		0x1104
72*9df5ba05SJiafei Pan #define PMU_CLSINACTSETR_OFFSET		0x1108
73*9df5ba05SJiafei Pan #define PMU_CLSINACTCLRR_OFFSET		0x110C
74*9df5ba05SJiafei Pan #define PMU_CLL2FLUSHSETR_OFFSET	0x1110
75*9df5ba05SJiafei Pan #define PMU_CLSL2FLUSHCLRR_OFFSET	0x1114
76*9df5ba05SJiafei Pan #define PMU_CLL2FLUSHSR_OFFSET		0x1118
77*9df5ba05SJiafei Pan #define PMU_POWMGTCSR_OFFSET		0x4000
78*9df5ba05SJiafei Pan #define PMU_IPPDEXPCR0_OFFSET		0x4040
79*9df5ba05SJiafei Pan #define PMU_IPPDEXPCR1_OFFSET		0x4044
80*9df5ba05SJiafei Pan #define PMU_IPPDEXPCR2_OFFSET		0x4048
81*9df5ba05SJiafei Pan #define PMU_IPPDEXPCR3_OFFSET		0x404C
82*9df5ba05SJiafei Pan #define PMU_IPPDEXPCR4_OFFSET		0x4050
83*9df5ba05SJiafei Pan #define PMU_IPPDEXPCR5_OFFSET		0x4054
84*9df5ba05SJiafei Pan #define PMU_IPSTPCR0_OFFSET		0x4120
85*9df5ba05SJiafei Pan #define PMU_IPSTPCR1_OFFSET		0x4124
86*9df5ba05SJiafei Pan #define PMU_IPSTPCR2_OFFSET		0x4128
87*9df5ba05SJiafei Pan #define PMU_IPSTPCR3_OFFSET		0x412C
88*9df5ba05SJiafei Pan #define PMU_IPSTPCR4_OFFSET		0x4130
89*9df5ba05SJiafei Pan #define PMU_IPSTPCR5_OFFSET		0x4134
90*9df5ba05SJiafei Pan #define PMU_IPSTPCR6_OFFSET		0x4138
91*9df5ba05SJiafei Pan #define PMU_IPSTPACK0_OFFSET		0x4140
92*9df5ba05SJiafei Pan #define PMU_IPSTPACK1_OFFSET		0x4144
93*9df5ba05SJiafei Pan #define PMU_IPSTPACK2_OFFSET		0x4148
94*9df5ba05SJiafei Pan #define PMU_IPSTPACK3_OFFSET		0x414C
95*9df5ba05SJiafei Pan #define PMU_IPSTPACK4_OFFSET		0x4150
96*9df5ba05SJiafei Pan #define PMU_IPSTPACK5_OFFSET		0x4154
97*9df5ba05SJiafei Pan #define PMU_IPSTPACK6_OFFSET		0x4158
98*9df5ba05SJiafei Pan #define PMU_POWMGTCSR_VAL		(1 << 20)
99*9df5ba05SJiafei Pan 
100*9df5ba05SJiafei Pan #define IPPDEXPCR0_MASK			0xFFFFFFFF
101*9df5ba05SJiafei Pan #define IPPDEXPCR1_MASK			0xFFFFFFFF
102*9df5ba05SJiafei Pan #define IPPDEXPCR2_MASK			0xFFFFFFFF
103*9df5ba05SJiafei Pan #define IPPDEXPCR3_MASK			0xFFFFFFFF
104*9df5ba05SJiafei Pan #define IPPDEXPCR4_MASK			0xFFFFFFFF
105*9df5ba05SJiafei Pan #define IPPDEXPCR5_MASK			0xFFFFFFFF
106*9df5ba05SJiafei Pan 
107*9df5ba05SJiafei Pan /* DEVDISR5_FLX_TMR */
108*9df5ba05SJiafei Pan #define IPPDEXPCR_FLX_TMR		0x00004000
109*9df5ba05SJiafei Pan #define DEVDISR5_FLX_TMR		0x00004000
110*9df5ba05SJiafei Pan 
111*9df5ba05SJiafei Pan #define IPSTPCR0_VALUE			0x0041310C
112*9df5ba05SJiafei Pan #define IPSTPCR1_VALUE			0x000003FF
113*9df5ba05SJiafei Pan #define IPSTPCR2_VALUE			0x00013006
114*9df5ba05SJiafei Pan 
115*9df5ba05SJiafei Pan /* Dont' stop UART */
116*9df5ba05SJiafei Pan #define IPSTPCR3_VALUE			0x0000033A
117*9df5ba05SJiafei Pan 
118*9df5ba05SJiafei Pan #define IPSTPCR4_VALUE			0x00103300
119*9df5ba05SJiafei Pan #define IPSTPCR5_VALUE			0x00000001
120*9df5ba05SJiafei Pan #define IPSTPCR6_VALUE			0x00000000
121*9df5ba05SJiafei Pan 
122*9df5ba05SJiafei Pan 
123*9df5ba05SJiafei Pan #define TZPC_BLOCK_SIZE			0x1000
124*9df5ba05SJiafei Pan 
125*9df5ba05SJiafei Pan /* PORSR1 */
126*9df5ba05SJiafei Pan #define PORSR1_RCW_MASK			0xFF800000
127*9df5ba05SJiafei Pan #define PORSR1_RCW_SHIFT		23
128*9df5ba05SJiafei Pan 
129*9df5ba05SJiafei Pan /* CFG_RCW_SRC[6:0] */
130*9df5ba05SJiafei Pan #define RCW_SRC_TYPE_MASK		0x70
131*9df5ba05SJiafei Pan 
132*9df5ba05SJiafei Pan /* RCW SRC NOR */
133*9df5ba05SJiafei Pan #define	NOR_16B_VAL			0x20
134*9df5ba05SJiafei Pan 
135*9df5ba05SJiafei Pan /*
136*9df5ba05SJiafei Pan  * RCW SRC Serial Flash
137*9df5ba05SJiafei Pan  * 1. SERAIL NOR (QSPI)
138*9df5ba05SJiafei Pan  * 2. OTHERS (SD/MMC, SPI, I2C1)
139*9df5ba05SJiafei Pan  */
140*9df5ba05SJiafei Pan #define RCW_SRC_SERIAL_MASK		0x7F
141*9df5ba05SJiafei Pan #define QSPI_VAL			0x62
142*9df5ba05SJiafei Pan #define SDHC_VAL			0x40
143*9df5ba05SJiafei Pan #define EMMC_VAL			0x41
144*9df5ba05SJiafei Pan 
145*9df5ba05SJiafei Pan /*
146*9df5ba05SJiafei Pan  * Required LS standard platform porting definitions
147*9df5ba05SJiafei Pan  * for CCN-504 - Read from RN-F node ID register
148*9df5ba05SJiafei Pan  */
149*9df5ba05SJiafei Pan #define PLAT_CLUSTER_TO_CCN_ID_MAP 1, 9, 11, 19
150*9df5ba05SJiafei Pan 
151*9df5ba05SJiafei Pan /* Defines required for using XLAT tables from ARM common code */
152*9df5ba05SJiafei Pan #define PLAT_PHY_ADDR_SPACE_SIZE	(1ULL << 40)
153*9df5ba05SJiafei Pan #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ULL << 40)
154*9df5ba05SJiafei Pan 
155*9df5ba05SJiafei Pan /*
156*9df5ba05SJiafei Pan  * Clock Divisors
157*9df5ba05SJiafei Pan  */
158*9df5ba05SJiafei Pan #define NXP_PLATFORM_CLK_DIVIDER	1
159*9df5ba05SJiafei Pan #define NXP_UART_CLK_DIVIDER		2
160*9df5ba05SJiafei Pan 
161*9df5ba05SJiafei Pan /* dcfg register offsets and values */
162*9df5ba05SJiafei Pan #define DCFG_DEVDISR1_OFFSET		0x70
163*9df5ba05SJiafei Pan #define DCFG_DEVDISR2_OFFSET		0x74
164*9df5ba05SJiafei Pan #define DCFG_DEVDISR3_OFFSET		0x78
165*9df5ba05SJiafei Pan #define DCFG_DEVDISR5_OFFSET		0x80
166*9df5ba05SJiafei Pan #define DCFG_DEVDISR6_OFFSET		0x84
167*9df5ba05SJiafei Pan 
168*9df5ba05SJiafei Pan #define DCFG_DEVDISR1_SEC		(1 << 22)
169*9df5ba05SJiafei Pan #define DCFG_DEVDISR3_QBMAIN		(1 << 12)
170*9df5ba05SJiafei Pan #define DCFG_DEVDISR4_SPI_QSPI		(1 << 4 | 1 << 5)
171*9df5ba05SJiafei Pan #define DCFG_DEVDISR5_MEM		(1 << 0)
172*9df5ba05SJiafei Pan 
173*9df5ba05SJiafei Pan #define DEVDISR1_VALUE			0x0041310c
174*9df5ba05SJiafei Pan #define DEVDISR2_VALUE			0x000003ff
175*9df5ba05SJiafei Pan #define DEVDISR3_VALUE			0x00013006
176*9df5ba05SJiafei Pan #define DEVDISR4_VALUE			0x0000033e
177*9df5ba05SJiafei Pan #define DEVDISR5_VALUE			0x00103300
178*9df5ba05SJiafei Pan #define DEVDISR6_VALUE			0x00000001
179*9df5ba05SJiafei Pan 
180*9df5ba05SJiafei Pan /*
181*9df5ba05SJiafei Pan  * pwr mgmt features supported in the soc-specific code:
182*9df5ba05SJiafei Pan  * value == 0x0, the soc code does not support this feature
183*9df5ba05SJiafei Pan  * value != 0x0, the soc code supports this feature
184*9df5ba05SJiafei Pan  */
185*9df5ba05SJiafei Pan #define SOC_CORE_RELEASE		0x1
186*9df5ba05SJiafei Pan #define SOC_CORE_RESTART		0x1
187*9df5ba05SJiafei Pan #define SOC_CORE_OFF			0x1
188*9df5ba05SJiafei Pan #define SOC_CORE_STANDBY		0x1
189*9df5ba05SJiafei Pan #define SOC_CORE_PWR_DWN		0x1
190*9df5ba05SJiafei Pan #define SOC_CLUSTER_STANDBY		0x1
191*9df5ba05SJiafei Pan #define SOC_CLUSTER_PWR_DWN		0x1
192*9df5ba05SJiafei Pan #define SOC_SYSTEM_STANDBY		0x1
193*9df5ba05SJiafei Pan #define SOC_SYSTEM_PWR_DWN		0x1
194*9df5ba05SJiafei Pan #define SOC_SYSTEM_OFF			0x1
195*9df5ba05SJiafei Pan #define SOC_SYSTEM_RESET		0x1
196*9df5ba05SJiafei Pan 
197*9df5ba05SJiafei Pan #define SYSTEM_PWR_DOMAINS		1
198*9df5ba05SJiafei Pan #define PLAT_NUM_PWR_DOMAINS	(PLATFORM_CORE_COUNT + \
199*9df5ba05SJiafei Pan 				NUMBER_OF_CLUSTERS  + \
200*9df5ba05SJiafei Pan 				SYSTEM_PWR_DOMAINS)
201*9df5ba05SJiafei Pan 
202*9df5ba05SJiafei Pan /* Power state coordination occurs at the system level */
203*9df5ba05SJiafei Pan #define PLAT_PD_COORD_LVL MPIDR_AFFLVL2
204*9df5ba05SJiafei Pan #define PLAT_MAX_PWR_LVL  PLAT_PD_COORD_LVL
205*9df5ba05SJiafei Pan 
206*9df5ba05SJiafei Pan /* Local power state for power domains in Run state */
207*9df5ba05SJiafei Pan #define LS_LOCAL_STATE_RUN  PSCI_LOCAL_STATE_RUN
208*9df5ba05SJiafei Pan 
209*9df5ba05SJiafei Pan /* define retention state */
210*9df5ba05SJiafei Pan #define PLAT_MAX_RET_STATE  (PSCI_LOCAL_STATE_RUN + 1)
211*9df5ba05SJiafei Pan #define LS_LOCAL_STATE_RET  PLAT_MAX_RET_STATE
212*9df5ba05SJiafei Pan 
213*9df5ba05SJiafei Pan /* define power-down state */
214*9df5ba05SJiafei Pan #define PLAT_MAX_OFF_STATE  (PLAT_MAX_RET_STATE + 1)
215*9df5ba05SJiafei Pan #define LS_LOCAL_STATE_OFF  PLAT_MAX_OFF_STATE
216*9df5ba05SJiafei Pan 
217*9df5ba05SJiafei Pan #ifndef __ASSEMBLER__
218*9df5ba05SJiafei Pan /* CCI slave interfaces */
219*9df5ba05SJiafei Pan static const int cci_map[] = {
220*9df5ba05SJiafei Pan 	3,
221*9df5ba05SJiafei Pan 	4,
222*9df5ba05SJiafei Pan };
223*9df5ba05SJiafei Pan void soc_init_lowlevel(void);
224*9df5ba05SJiafei Pan void soc_init_percpu(void);
225*9df5ba05SJiafei Pan void _soc_set_start_addr(unsigned long addr);
226*9df5ba05SJiafei Pan void _set_platform_security(void);
227*9df5ba05SJiafei Pan #endif
228*9df5ba05SJiafei Pan 
229*9df5ba05SJiafei Pan #endif /* SOC_H */
230