xref: /arm-trusted-firmware/plat/mediatek/drivers/mcusys/v1/mcucfg.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2022, MediaTek Inc. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef MCUCFG_V1_H
8*91f16700Schasinglulu #define MCUCFG_V1_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #ifndef __ASSEMBLER__
11*91f16700Schasinglulu #include <stdint.h>
12*91f16700Schasinglulu #endif /*__ASSEMBLER__*/
13*91f16700Schasinglulu 
14*91f16700Schasinglulu #include <platform_def.h>
15*91f16700Schasinglulu 
16*91f16700Schasinglulu #define MP2_MISC_CONFIG_BOOT_ADDR_L(cpu)	(MCUCFG_BASE + 0x2290 + ((cpu) * 8))
17*91f16700Schasinglulu #define MP2_MISC_CONFIG_BOOT_ADDR_H(cpu)	(MCUCFG_BASE + 0x2294 + ((cpu) * 8))
18*91f16700Schasinglulu 
19*91f16700Schasinglulu #define MP2_CPUCFG				(MCUCFG_BASE + 0x2208)
20*91f16700Schasinglulu 
21*91f16700Schasinglulu #define MP0_CPUTOP_SPMC_CTL			(MCUCFG_BASE + 0x788)
22*91f16700Schasinglulu #define MP1_CPUTOP_SPMC_CTL			(MCUCFG_BASE + 0x78C)
23*91f16700Schasinglulu #define MP1_CPUTOP_SPMC_SRAM_CTL		(MCUCFG_BASE + 0x790)
24*91f16700Schasinglulu 
25*91f16700Schasinglulu #define CPUSYSx_CPUx_SPMC_CTL(cluster, cpu)	(MCUCFG_BASE + 0x1C30 + \
26*91f16700Schasinglulu 						 (cluster) * 0x2000 + (cpu) * 4)
27*91f16700Schasinglulu 
28*91f16700Schasinglulu #define CPUSYS0_CPU0_SPMC_CTL			(MCUCFG_BASE + 0x1C30)
29*91f16700Schasinglulu #define CPUSYS0_CPU1_SPMC_CTL			(MCUCFG_BASE + 0x1C34)
30*91f16700Schasinglulu #define CPUSYS0_CPU2_SPMC_CTL			(MCUCFG_BASE + 0x1C38)
31*91f16700Schasinglulu #define CPUSYS0_CPU3_SPMC_CTL			(MCUCFG_BASE + 0x1C3C)
32*91f16700Schasinglulu 
33*91f16700Schasinglulu #define CPUSYS1_CPU0_SPMC_CTL			(MCUCFG_BASE + 0x3C30)
34*91f16700Schasinglulu #define CPUSYS1_CPU1_SPMC_CTL			(MCUCFG_BASE + 0x3C34)
35*91f16700Schasinglulu #define CPUSYS1_CPU2_SPMC_CTL			(MCUCFG_BASE + 0x3C38)
36*91f16700Schasinglulu #define CPUSYS1_CPU3_SPMC_CTL			(MCUCFG_BASE + 0x3C3C)
37*91f16700Schasinglulu 
38*91f16700Schasinglulu /* CPC related registers */
39*91f16700Schasinglulu #define CPC_MCUSYS_CPC_OFF_THRES		(MCUCFG_BASE + 0xA714)
40*91f16700Schasinglulu #define CPC_MCUSYS_PWR_CTRL			(MCUCFG_BASE + 0xA804)
41*91f16700Schasinglulu #define CPC_MCUSYS_CPC_FLOW_CTRL_CFG		(MCUCFG_BASE + 0xA814)
42*91f16700Schasinglulu #define CPC_MCUSYS_LAST_CORE_REQ		(MCUCFG_BASE + 0xA818)
43*91f16700Schasinglulu #define CPC_MCUSYS_MP_LAST_CORE_RESP		(MCUCFG_BASE + 0xA81C)
44*91f16700Schasinglulu #define CPC_MCUSYS_LAST_CORE_RESP		(MCUCFG_BASE + 0xA824)
45*91f16700Schasinglulu #define CPC_MCUSYS_PWR_ON_MASK			(MCUCFG_BASE + 0xA828)
46*91f16700Schasinglulu #define CPC_SPMC_PWR_STATUS			(MCUCFG_BASE + 0xA840)
47*91f16700Schasinglulu #define CPC_MCUSYS_CPU_ON_SW_HINT_SET		(MCUCFG_BASE + 0xA8A8)
48*91f16700Schasinglulu #define CPC_MCUSYS_CPU_ON_SW_HINT_CLR		(MCUCFG_BASE + 0xA8AC)
49*91f16700Schasinglulu #define CPC_MCUSYS_CPC_DBG_SETTING		(MCUCFG_BASE + 0xAB00)
50*91f16700Schasinglulu #define CPC_MCUSYS_CPC_KERNEL_TIME_L_BASE	(MCUCFG_BASE + 0xAB04)
51*91f16700Schasinglulu #define CPC_MCUSYS_CPC_KERNEL_TIME_H_BASE	(MCUCFG_BASE + 0xAB08)
52*91f16700Schasinglulu #define CPC_MCUSYS_CPC_SYSTEM_TIME_L_BASE	(MCUCFG_BASE + 0xAB0C)
53*91f16700Schasinglulu #define CPC_MCUSYS_CPC_SYSTEM_TIME_H_BASE	(MCUCFG_BASE + 0xAB10)
54*91f16700Schasinglulu #define CPC_MCUSYS_TRACE_SEL			(MCUCFG_BASE + 0xAB14)
55*91f16700Schasinglulu #define CPC_MCUSYS_TRACE_DATA			(MCUCFG_BASE + 0xAB20)
56*91f16700Schasinglulu #define CPC_MCUSYS_CLUSTER_COUNTER		(MCUCFG_BASE + 0xAB70)
57*91f16700Schasinglulu #define CPC_MCUSYS_CLUSTER_COUNTER_CLR		(MCUCFG_BASE + 0xAB74)
58*91f16700Schasinglulu 
59*91f16700Schasinglulu /* CPC_MCUSYS_CPC_FLOW_CTRL_CFG bit control */
60*91f16700Schasinglulu #define CPC_CTRL_ENABLE				BIT(16)
61*91f16700Schasinglulu #define SSPM_CORE_PWR_ON_EN			BIT(7) /* for cpu-hotplug */
62*91f16700Schasinglulu #define SSPM_ALL_PWR_CTRL_EN			BIT(13) /* for cpu-hotplug */
63*91f16700Schasinglulu #define GIC_WAKEUP_IGNORE(cpu)			BIT(21 + cpu)
64*91f16700Schasinglulu 
65*91f16700Schasinglulu #define CPC_MCUSYS_CPC_RESET_ON_KEEP_ON		BIT(17)
66*91f16700Schasinglulu #define CPC_MCUSYS_CPC_RESET_PWR_ON_EN		BIT(20)
67*91f16700Schasinglulu 
68*91f16700Schasinglulu /* SPMC related registers */
69*91f16700Schasinglulu #define SPM_MCUSYS_PWR_CON			(MCUCFG_BASE + 0xD200)
70*91f16700Schasinglulu #define SPM_MP0_CPUTOP_PWR_CON			(MCUCFG_BASE + 0xD204)
71*91f16700Schasinglulu #define SPM_MP0_CPU0_PWR_CON			(MCUCFG_BASE + 0xD208)
72*91f16700Schasinglulu #define SPM_MP0_CPU1_PWR_CON			(MCUCFG_BASE + 0xD20C)
73*91f16700Schasinglulu #define SPM_MP0_CPU2_PWR_CON			(MCUCFG_BASE + 0xD210)
74*91f16700Schasinglulu #define SPM_MP0_CPU3_PWR_CON			(MCUCFG_BASE + 0xD214)
75*91f16700Schasinglulu #define SPM_MP0_CPU4_PWR_CON			(MCUCFG_BASE + 0xD218)
76*91f16700Schasinglulu #define SPM_MP0_CPU5_PWR_CON			(MCUCFG_BASE + 0xD21C)
77*91f16700Schasinglulu #define SPM_MP0_CPU6_PWR_CON			(MCUCFG_BASE + 0xD220)
78*91f16700Schasinglulu #define SPM_MP0_CPU7_PWR_CON			(MCUCFG_BASE + 0xD224)
79*91f16700Schasinglulu 
80*91f16700Schasinglulu /* bit fields of SPM_*_PWR_CON */
81*91f16700Schasinglulu #define PWR_ON_ACK				BIT(31)
82*91f16700Schasinglulu #define VPROC_EXT_OFF				BIT(7)
83*91f16700Schasinglulu #define DORMANT_EN				BIT(6)
84*91f16700Schasinglulu #define RESETPWRON_CONFIG			BIT(5)
85*91f16700Schasinglulu #define PWR_CLK_DIS				BIT(4)
86*91f16700Schasinglulu #define PWR_ON					BIT(2)
87*91f16700Schasinglulu #define PWR_RST_B				BIT(0)
88*91f16700Schasinglulu 
89*91f16700Schasinglulu #define SPARK2LDO				(MCUCFG_BASE + 0x2700)
90*91f16700Schasinglulu /* APB Module mcucfg */
91*91f16700Schasinglulu #define MP0_CA7_CACHE_CONFIG			(MCUCFG_BASE + 0x000)
92*91f16700Schasinglulu #define MP0_AXI_CONFIG				(MCUCFG_BASE + 0x02C)
93*91f16700Schasinglulu #define MP0_MISC_CONFIG0			(MCUCFG_BASE + 0x030)
94*91f16700Schasinglulu #define MP0_MISC_CONFIG1			(MCUCFG_BASE + 0x034)
95*91f16700Schasinglulu #define MP0_MISC_CONFIG2			(MCUCFG_BASE + 0x038)
96*91f16700Schasinglulu #define MP0_MISC_CONFIG_BOOT_ADDR(cpu)		(MCUCFG_BASE + 0x038 + ((cpu) * 8))
97*91f16700Schasinglulu #define MP0_MISC_CONFIG3			(MCUCFG_BASE + 0x03C)
98*91f16700Schasinglulu #define MP0_MISC_CONFIG9			(MCUCFG_BASE + 0x054)
99*91f16700Schasinglulu #define MP0_CA7_MISC_CONFIG			(MCUCFG_BASE + 0x064)
100*91f16700Schasinglulu 
101*91f16700Schasinglulu #define MP0_RW_RSVD0				(MCUCFG_BASE + 0x06C)
102*91f16700Schasinglulu #define MP1_CA7_CACHE_CONFIG			(MCUCFG_BASE + 0x200)
103*91f16700Schasinglulu #define MP1_AXI_CONFIG				(MCUCFG_BASE + 0x22C)
104*91f16700Schasinglulu #define MP1_MISC_CONFIG0			(MCUCFG_BASE + 0x230)
105*91f16700Schasinglulu #define MP1_MISC_CONFIG1			(MCUCFG_BASE + 0x234)
106*91f16700Schasinglulu #define MP1_MISC_CONFIG2			(MCUCFG_BASE + 0x238)
107*91f16700Schasinglulu #define MP1_MISC_CONFIG_BOOT_ADDR(cpu)		(MCUCFG_BASE + 0x238 + ((cpu) * 8))
108*91f16700Schasinglulu #define MP1_MISC_CONFIG3			(MCUCFG_BASE + 0x23C)
109*91f16700Schasinglulu #define MP1_MISC_CONFIG9			(MCUCFG_BASE + 0x254)
110*91f16700Schasinglulu #define MP1_CA7_MISC_CONFIG			(MCUCFG_BASE + 0x264)
111*91f16700Schasinglulu 
112*91f16700Schasinglulu #define CCI_ADB400_DCM_CONFIG			(MCUCFG_BASE + 0x740)
113*91f16700Schasinglulu #define SYNC_DCM_CONFIG				(MCUCFG_BASE + 0x744)
114*91f16700Schasinglulu 
115*91f16700Schasinglulu #define MP0_CLUSTER_CFG0			(MCUCFG_BASE + 0xC8D0)
116*91f16700Schasinglulu 
117*91f16700Schasinglulu #define MP0_SPMC				(MCUCFG_BASE + 0x788)
118*91f16700Schasinglulu #define MP1_SPMC				(MCUCFG_BASE + 0x78C)
119*91f16700Schasinglulu #define MP2_AXI_CONFIG				(MCUCFG_BASE + 0x220C)
120*91f16700Schasinglulu #define MP2_AXI_CONFIG_ACINACTM			BIT(0)
121*91f16700Schasinglulu #define MP2_AXI_CONFIG_AINACTS			BIT(4)
122*91f16700Schasinglulu 
123*91f16700Schasinglulu #define MPx_AXI_CONFIG_ACINACTM			BIT(4)
124*91f16700Schasinglulu #define MPx_AXI_CONFIG_AINACTS			BIT(5)
125*91f16700Schasinglulu 
126*91f16700Schasinglulu #define MPx_CA7_MISC_CONFIG_standbywfil2	BIT(28)
127*91f16700Schasinglulu 
128*91f16700Schasinglulu #define MP0_CPU0_STANDBYWFE			BIT(20)
129*91f16700Schasinglulu #define MP0_CPU1_STANDBYWFE			BIT(21)
130*91f16700Schasinglulu #define MP0_CPU2_STANDBYWFE			BIT(22)
131*91f16700Schasinglulu #define MP0_CPU3_STANDBYWFE			BIT(23)
132*91f16700Schasinglulu 
133*91f16700Schasinglulu #define MP1_CPU0_STANDBYWFE			BIT(20)
134*91f16700Schasinglulu #define MP1_CPU1_STANDBYWFE			BIT(21)
135*91f16700Schasinglulu #define MP1_CPU2_STANDBYWFE			BIT(22)
136*91f16700Schasinglulu #define MP1_CPU3_STANDBYWFE			BIT(23)
137*91f16700Schasinglulu 
138*91f16700Schasinglulu #define CPUSYS0_SPARKVRETCNTRL			(MCUCFG_BASE+0x1c00)
139*91f16700Schasinglulu #define CPUSYS0_SPARKEN				(MCUCFG_BASE+0x1c04)
140*91f16700Schasinglulu #define CPUSYS0_AMUXSEL				(MCUCFG_BASE+0x1c08)
141*91f16700Schasinglulu #define CPUSYS1_SPARKVRETCNTRL			(MCUCFG_BASE+0x3c00)
142*91f16700Schasinglulu #define CPUSYS1_SPARKEN				(MCUCFG_BASE+0x3c04)
143*91f16700Schasinglulu #define CPUSYS1_AMUXSEL				(MCUCFG_BASE+0x3c08)
144*91f16700Schasinglulu 
145*91f16700Schasinglulu #define MP2_PWR_RST_CTL				(MCUCFG_BASE + 0x2008)
146*91f16700Schasinglulu #define MP2_PTP3_CPUTOP_SPMC0			(MCUCFG_BASE + 0x22A0)
147*91f16700Schasinglulu #define MP2_PTP3_CPUTOP_SPMC1			(MCUCFG_BASE + 0x22A4)
148*91f16700Schasinglulu 
149*91f16700Schasinglulu #define MP2_COQ					(MCUCFG_BASE + 0x22BC)
150*91f16700Schasinglulu #define MP2_COQ_SW_DIS				BIT(0)
151*91f16700Schasinglulu 
152*91f16700Schasinglulu #define MP2_CA15M_MON_SEL			(MCUCFG_BASE + 0x2400)
153*91f16700Schasinglulu #define MP2_CA15M_MON_L				(MCUCFG_BASE + 0x2404)
154*91f16700Schasinglulu 
155*91f16700Schasinglulu #define CPUSYS2_CPU0_SPMC_CTL			(MCUCFG_BASE + 0x2430)
156*91f16700Schasinglulu #define CPUSYS2_CPU1_SPMC_CTL			(MCUCFG_BASE + 0x2438)
157*91f16700Schasinglulu #define CPUSYS2_CPU0_SPMC_STA			(MCUCFG_BASE + 0x2434)
158*91f16700Schasinglulu #define CPUSYS2_CPU1_SPMC_STA			(MCUCFG_BASE + 0x243C)
159*91f16700Schasinglulu 
160*91f16700Schasinglulu #define MP0_CA7L_DBG_PWR_CTRL			(MCUCFG_BASE + 0x068)
161*91f16700Schasinglulu #define MP1_CA7L_DBG_PWR_CTRL			(MCUCFG_BASE + 0x268)
162*91f16700Schasinglulu #define BIG_DBG_PWR_CTRL			(MCUCFG_BASE + 0x75C)
163*91f16700Schasinglulu 
164*91f16700Schasinglulu #define MP2_SW_RST_B				BIT(0)
165*91f16700Schasinglulu #define MP2_TOPAON_APB_MASK			BIT(1)
166*91f16700Schasinglulu #define B_SW_HOT_PLUG_RESET			BIT(30)
167*91f16700Schasinglulu #define B_SW_PD_OFFSET				(18)
168*91f16700Schasinglulu #define B_SW_PD					(0x3F << B_SW_PD_OFFSET)
169*91f16700Schasinglulu 
170*91f16700Schasinglulu #define B_SW_SRAM_SLEEPB_OFFSET			(12)
171*91f16700Schasinglulu #define B_SW_SRAM_SLEEPB			(0x3F << B_SW_SRAM_SLEEPB_OFFSET)
172*91f16700Schasinglulu 
173*91f16700Schasinglulu #define B_SW_SRAM_ISOINTB			BIT(9)
174*91f16700Schasinglulu #define B_SW_ISO				BIT(8)
175*91f16700Schasinglulu #define B_SW_LOGIC_PDB				BIT(7)
176*91f16700Schasinglulu #define B_SW_LOGIC_PRE2_PDB			BIT(6)
177*91f16700Schasinglulu #define B_SW_LOGIC_PRE1_PDB			BIT(5)
178*91f16700Schasinglulu #define B_SW_FSM_OVERRIDE			BIT(4)
179*91f16700Schasinglulu #define B_SW_PWR_ON				BIT(3)
180*91f16700Schasinglulu #define B_SW_PWR_ON_OVERRIDE_EN			BIT(2)
181*91f16700Schasinglulu 
182*91f16700Schasinglulu #define B_FSM_STATE_OUT_OFFSET			(6)
183*91f16700Schasinglulu #define B_FSM_STATE_OUT_MASK			(0x1F << B_FSM_STATE_OUT_OFFSET)
184*91f16700Schasinglulu #define B_SW_LOGIC_PDBO_ALL_OFF_ACK		BIT(5)
185*91f16700Schasinglulu #define B_SW_LOGIC_PDBO_ALL_ON_ACK		BIT(4)
186*91f16700Schasinglulu #define B_SW_LOGIC_PRE2_PDBO_ALL_ON_ACK		BIT(3)
187*91f16700Schasinglulu #define B_SW_LOGIC_PRE1_PDBO_ALL_ON_ACK		BIT(2)
188*91f16700Schasinglulu 
189*91f16700Schasinglulu 
190*91f16700Schasinglulu #define B_FSM_OFF				(0U << B_FSM_STATE_OUT_OFFSET)
191*91f16700Schasinglulu #define B_FSM_ON				(1U << B_FSM_STATE_OUT_OFFSET)
192*91f16700Schasinglulu #define B_FSM_RET				(2U << B_FSM_STATE_OUT_OFFSET)
193*91f16700Schasinglulu 
194*91f16700Schasinglulu #ifndef __ASSEMBLER__
195*91f16700Schasinglulu /* cpu boot mode */
196*91f16700Schasinglulu enum mp0_coucfg_64bit_ctrl {
197*91f16700Schasinglulu 	MP0_CPUCFG_64BIT_SHIFT = 12,
198*91f16700Schasinglulu 	MP1_CPUCFG_64BIT_SHIFT = 28,
199*91f16700Schasinglulu 	MP0_CPUCFG_64BIT = 0xfu << MP0_CPUCFG_64BIT_SHIFT,
200*91f16700Schasinglulu 	MP1_CPUCFG_64BIT = 0xfu << MP1_CPUCFG_64BIT_SHIFT,
201*91f16700Schasinglulu };
202*91f16700Schasinglulu 
203*91f16700Schasinglulu enum mp1_dis_rgu0_ctrl {
204*91f16700Schasinglulu 	MP1_DIS_RGU0_WAIT_PD_CPUS_L1_ACK_SHIFT = 0,
205*91f16700Schasinglulu 	MP1_DIS_RGU1_WAIT_PD_CPUS_L1_ACK_SHIFT = 4,
206*91f16700Schasinglulu 	MP1_DIS_RGU2_WAIT_PD_CPUS_L1_ACK_SHIFT = 8,
207*91f16700Schasinglulu 	MP1_DIS_RGU3_WAIT_PD_CPUS_L1_ACK_SHIFT = 12,
208*91f16700Schasinglulu 	MP1_DIS_RGU_NOCPU_WAIT_PD_CPUS_L1_ACK_SHIFT = 16,
209*91f16700Schasinglulu 	MP1_DIS_RGU0_WAIT_PD_CPUS_L1_ACK = 0xF << MP1_DIS_RGU0_WAIT_PD_CPUS_L1_ACK_SHIFT,
210*91f16700Schasinglulu 	MP1_DIS_RGU1_WAIT_PD_CPUS_L1_ACK = 0xF << MP1_DIS_RGU1_WAIT_PD_CPUS_L1_ACK_SHIFT,
211*91f16700Schasinglulu 	MP1_DIS_RGU2_WAIT_PD_CPUS_L1_ACK = 0xF << MP1_DIS_RGU2_WAIT_PD_CPUS_L1_ACK_SHIFT,
212*91f16700Schasinglulu 	MP1_DIS_RGU3_WAIT_PD_CPUS_L1_ACK = 0xF << MP1_DIS_RGU3_WAIT_PD_CPUS_L1_ACK_SHIFT,
213*91f16700Schasinglulu 	MP1_DIS_RGU_NOCPU_WAIT_PD_CPUS_L1_ACK = 0xF << MP1_DIS_RGU_NOCPU_WAIT_PD_CPUS_L1_ACK_SHIFT,
214*91f16700Schasinglulu };
215*91f16700Schasinglulu 
216*91f16700Schasinglulu enum mp1_ainacts_ctrl {
217*91f16700Schasinglulu 	MP1_AINACTS_SHIFT = 4,
218*91f16700Schasinglulu 	MP1_AINACTS = 1U << MP1_AINACTS_SHIFT,
219*91f16700Schasinglulu };
220*91f16700Schasinglulu 
221*91f16700Schasinglulu enum mp1_sw_cg_gen {
222*91f16700Schasinglulu 	MP1_SW_CG_GEN_SHIFT = 12,
223*91f16700Schasinglulu 	MP1_SW_CG_GEN = 1U << MP1_SW_CG_GEN_SHIFT,
224*91f16700Schasinglulu };
225*91f16700Schasinglulu 
226*91f16700Schasinglulu enum mp1_l2rstdisable {
227*91f16700Schasinglulu 	MP1_L2RSTDISABLE_SHIFT = 14,
228*91f16700Schasinglulu 	MP1_L2RSTDISABLE = 1U << MP1_L2RSTDISABLE_SHIFT,
229*91f16700Schasinglulu };
230*91f16700Schasinglulu #endif /*__ASSEMBLER__*/
231*91f16700Schasinglulu 
232*91f16700Schasinglulu #endif  /* MCUCFG_V1_H */
233