xref: /aosp_15_r20/external/arm-trusted-firmware/plat/mediatek/mt6795/include/spm.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef SPM_H
8*54fd6939SJiyong Park #define SPM_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #define SPM_POWERON_CONFIG_SET			(SPM_BASE + 0x000)
11*54fd6939SJiyong Park #define SPM_POWER_ON_VAL0			(SPM_BASE + 0x010)
12*54fd6939SJiyong Park #define SPM_POWER_ON_VAL1			(SPM_BASE + 0x014)
13*54fd6939SJiyong Park #define SPM_CLK_SETTLE				(SPM_BASE + 0x100)
14*54fd6939SJiyong Park #define SPM_CA7_CPU1_PWR_CON			(SPM_BASE + 0x218)
15*54fd6939SJiyong Park #define SPM_CA7_CPU2_PWR_CON			(SPM_BASE + 0x21c)
16*54fd6939SJiyong Park #define SPM_CA7_CPU3_PWR_CON			(SPM_BASE + 0x220)
17*54fd6939SJiyong Park #define SPM_CA7_CPU1_L1_PDN			(SPM_BASE + 0x264)
18*54fd6939SJiyong Park #define SPM_CA7_CPU2_L1_PDN			(SPM_BASE + 0x26c)
19*54fd6939SJiyong Park #define SPM_CA7_CPU3_L1_PDN			(SPM_BASE + 0x274)
20*54fd6939SJiyong Park #define SPM_MD32_SRAM_CON			(SPM_BASE + 0x2c8)
21*54fd6939SJiyong Park #define SPM_PCM_CON0				(SPM_BASE + 0x310)
22*54fd6939SJiyong Park #define SPM_PCM_CON1				(SPM_BASE + 0x314)
23*54fd6939SJiyong Park #define SPM_PCM_IM_PTR				(SPM_BASE + 0x318)
24*54fd6939SJiyong Park #define SPM_PCM_IM_LEN				(SPM_BASE + 0x31c)
25*54fd6939SJiyong Park #define SPM_PCM_REG_DATA_INI			(SPM_BASE + 0x320)
26*54fd6939SJiyong Park #define SPM_PCM_EVENT_VECTOR0			(SPM_BASE + 0x340)
27*54fd6939SJiyong Park #define SPM_PCM_EVENT_VECTOR1			(SPM_BASE + 0x344)
28*54fd6939SJiyong Park #define SPM_PCM_EVENT_VECTOR2			(SPM_BASE + 0x348)
29*54fd6939SJiyong Park #define SPM_PCM_EVENT_VECTOR3			(SPM_BASE + 0x34c)
30*54fd6939SJiyong Park #define SPM_PCM_MAS_PAUSE_MASK			(SPM_BASE + 0x354)
31*54fd6939SJiyong Park #define SPM_PCM_PWR_IO_EN			(SPM_BASE + 0x358)
32*54fd6939SJiyong Park #define SPM_PCM_TIMER_VAL			(SPM_BASE + 0x35c)
33*54fd6939SJiyong Park #define SPM_PCM_TIMER_OUT			(SPM_BASE + 0x360)
34*54fd6939SJiyong Park #define SPM_PCM_REG0_DATA			(SPM_BASE + 0x380)
35*54fd6939SJiyong Park #define SPM_PCM_REG1_DATA			(SPM_BASE + 0x384)
36*54fd6939SJiyong Park #define SPM_PCM_REG2_DATA			(SPM_BASE + 0x388)
37*54fd6939SJiyong Park #define SPM_PCM_REG3_DATA			(SPM_BASE + 0x38c)
38*54fd6939SJiyong Park #define SPM_PCM_REG4_DATA			(SPM_BASE + 0x390)
39*54fd6939SJiyong Park #define SPM_PCM_REG5_DATA			(SPM_BASE + 0x394)
40*54fd6939SJiyong Park #define SPM_PCM_REG6_DATA			(SPM_BASE + 0x398)
41*54fd6939SJiyong Park #define SPM_PCM_REG7_DATA			(SPM_BASE + 0x39c)
42*54fd6939SJiyong Park #define SPM_PCM_REG8_DATA			(SPM_BASE + 0x3a0)
43*54fd6939SJiyong Park #define SPM_PCM_REG9_DATA			(SPM_BASE + 0x3a4)
44*54fd6939SJiyong Park #define SPM_PCM_REG10_DATA			(SPM_BASE + 0x3a8)
45*54fd6939SJiyong Park #define SPM_PCM_REG11_DATA			(SPM_BASE + 0x3ac)
46*54fd6939SJiyong Park #define SPM_PCM_REG12_DATA			(SPM_BASE + 0x3b0)
47*54fd6939SJiyong Park #define SPM_PCM_REG13_DATA			(SPM_BASE + 0x3b4)
48*54fd6939SJiyong Park #define SPM_PCM_REG14_DATA			(SPM_BASE + 0x3b8)
49*54fd6939SJiyong Park #define SPM_PCM_REG15_DATA			(SPM_BASE + 0x3bc)
50*54fd6939SJiyong Park #define SPM_PCM_EVENT_REG_STA			(SPM_BASE + 0x3c0)
51*54fd6939SJiyong Park #define SPM_PCM_FSM_STA				(SPM_BASE + 0x3c4)
52*54fd6939SJiyong Park #define SPM_PCM_IM_HOST_RW_PTR			(SPM_BASE + 0x3c8)
53*54fd6939SJiyong Park #define SPM_PCM_IM_HOST_RW_DAT			(SPM_BASE + 0x3cc)
54*54fd6939SJiyong Park #define SPM_PCM_EVENT_VECTOR4			(SPM_BASE + 0x3d0)
55*54fd6939SJiyong Park #define SPM_PCM_EVENT_VECTOR5			(SPM_BASE + 0x3d4)
56*54fd6939SJiyong Park #define SPM_PCM_EVENT_VECTOR6			(SPM_BASE + 0x3d8)
57*54fd6939SJiyong Park #define SPM_PCM_EVENT_VECTOR7			(SPM_BASE + 0x3dc)
58*54fd6939SJiyong Park #define SPM_PCM_SW_INT_SET			(SPM_BASE + 0x3e0)
59*54fd6939SJiyong Park #define SPM_PCM_SW_INT_CLEAR			(SPM_BASE + 0x3e4)
60*54fd6939SJiyong Park #define SPM_CLK_CON				(SPM_BASE + 0x400)
61*54fd6939SJiyong Park #define SPM_SLEEP_PTPOD2_CON			(SPM_BASE + 0x408)
62*54fd6939SJiyong Park #define SPM_APMCU_PWRCTL			(SPM_BASE + 0x600)
63*54fd6939SJiyong Park #define SPM_AP_DVFS_CON_SET			(SPM_BASE + 0x604)
64*54fd6939SJiyong Park #define SPM_AP_STANBY_CON			(SPM_BASE + 0x608)
65*54fd6939SJiyong Park #define SPM_PWR_STATUS				(SPM_BASE + 0x60c)
66*54fd6939SJiyong Park #define SPM_PWR_STATUS_2ND			(SPM_BASE + 0x610)
67*54fd6939SJiyong Park #define SPM_AP_BSI_REQ				(SPM_BASE + 0x614)
68*54fd6939SJiyong Park #define SPM_SLEEP_TIMER_STA			(SPM_BASE + 0x720)
69*54fd6939SJiyong Park #define SPM_SLEEP_WAKEUP_EVENT_MASK		(SPM_BASE + 0x810)
70*54fd6939SJiyong Park #define SPM_SLEEP_CPU_WAKEUP_EVENT		(SPM_BASE + 0x814)
71*54fd6939SJiyong Park #define SPM_SLEEP_MD32_WAKEUP_EVENT_MASK	(SPM_BASE + 0x818)
72*54fd6939SJiyong Park #define SPM_PCM_WDT_TIMER_VAL			(SPM_BASE + 0x824)
73*54fd6939SJiyong Park #define SPM_PCM_WDT_TIMER_OUT			(SPM_BASE + 0x828)
74*54fd6939SJiyong Park #define SPM_PCM_MD32_MAILBOX			(SPM_BASE + 0x830)
75*54fd6939SJiyong Park #define SPM_PCM_MD32_IRQ			(SPM_BASE + 0x834)
76*54fd6939SJiyong Park #define SPM_SLEEP_ISR_MASK			(SPM_BASE + 0x900)
77*54fd6939SJiyong Park #define SPM_SLEEP_ISR_STATUS			(SPM_BASE + 0x904)
78*54fd6939SJiyong Park #define SPM_SLEEP_ISR_RAW_STA			(SPM_BASE + 0x910)
79*54fd6939SJiyong Park #define SPM_SLEEP_MD32_ISR_RAW_STA		(SPM_BASE + 0x914)
80*54fd6939SJiyong Park #define SPM_SLEEP_WAKEUP_MISC			(SPM_BASE + 0x918)
81*54fd6939SJiyong Park #define SPM_SLEEP_BUS_PROTECT_RDY		(SPM_BASE + 0x91c)
82*54fd6939SJiyong Park #define SPM_SLEEP_SUBSYS_IDLE_STA		(SPM_BASE + 0x920)
83*54fd6939SJiyong Park #define SPM_PCM_RESERVE				(SPM_BASE + 0xb00)
84*54fd6939SJiyong Park #define SPM_PCM_RESERVE2			(SPM_BASE + 0xb04)
85*54fd6939SJiyong Park #define SPM_PCM_FLAGS				(SPM_BASE + 0xb08)
86*54fd6939SJiyong Park #define SPM_PCM_SRC_REQ				(SPM_BASE + 0xb0c)
87*54fd6939SJiyong Park #define SPM_PCM_DEBUG_CON			(SPM_BASE + 0xb20)
88*54fd6939SJiyong Park #define SPM_CA7_CPU0_IRQ_MASK			(SPM_BASE + 0xb30)
89*54fd6939SJiyong Park #define SPM_CA7_CPU1_IRQ_MASK			(SPM_BASE + 0xb34)
90*54fd6939SJiyong Park #define SPM_CA7_CPU2_IRQ_MASK			(SPM_BASE + 0xb38)
91*54fd6939SJiyong Park #define SPM_CA7_CPU3_IRQ_MASK			(SPM_BASE + 0xb3c)
92*54fd6939SJiyong Park #define SPM_CA15_CPU0_IRQ_MASK			(SPM_BASE + 0xb40)
93*54fd6939SJiyong Park #define SPM_CA15_CPU1_IRQ_MASK			(SPM_BASE + 0xb44)
94*54fd6939SJiyong Park #define SPM_CA15_CPU2_IRQ_MASK			(SPM_BASE + 0xb48)
95*54fd6939SJiyong Park #define SPM_CA15_CPU3_IRQ_MASK			(SPM_BASE + 0xb4c)
96*54fd6939SJiyong Park #define SPM_PCM_PASR_DPD_0			(SPM_BASE + 0xb60)
97*54fd6939SJiyong Park #define SPM_PCM_PASR_DPD_1			(SPM_BASE + 0xb64)
98*54fd6939SJiyong Park #define SPM_PCM_PASR_DPD_2			(SPM_BASE + 0xb68)
99*54fd6939SJiyong Park #define SPM_PCM_PASR_DPD_3			(SPM_BASE + 0xb6c)
100*54fd6939SJiyong Park #define SPM_SLEEP_CA7_WFI0_EN			(SPM_BASE + 0xf00)
101*54fd6939SJiyong Park #define SPM_SLEEP_CA7_WFI1_EN			(SPM_BASE + 0xf04)
102*54fd6939SJiyong Park #define SPM_SLEEP_CA7_WFI2_EN			(SPM_BASE + 0xf08)
103*54fd6939SJiyong Park #define SPM_SLEEP_CA7_WFI3_EN			(SPM_BASE + 0xf0c)
104*54fd6939SJiyong Park #define SPM_SLEEP_CA15_WFI0_EN			(SPM_BASE + 0xf10)
105*54fd6939SJiyong Park #define SPM_SLEEP_CA15_WFI1_EN			(SPM_BASE + 0xf14)
106*54fd6939SJiyong Park #define SPM_SLEEP_CA15_WFI2_EN			(SPM_BASE + 0xf18)
107*54fd6939SJiyong Park #define SPM_SLEEP_CA15_WFI3_EN			(SPM_BASE + 0xf1c)
108*54fd6939SJiyong Park 
109*54fd6939SJiyong Park #define SPM_PROJECT_CODE	0xb16
110*54fd6939SJiyong Park 
111*54fd6939SJiyong Park #define SPM_REGWR_EN		(1U << 0)
112*54fd6939SJiyong Park #define SPM_REGWR_CFG_KEY	(SPM_PROJECT_CODE << 16)
113*54fd6939SJiyong Park 
114*54fd6939SJiyong Park #define SPM_CPU_PDN_DIS		(1U << 0)
115*54fd6939SJiyong Park #define SPM_INFRA_PDN_DIS	(1U << 1)
116*54fd6939SJiyong Park #define SPM_DDRPHY_PDN_DIS	(1U << 2)
117*54fd6939SJiyong Park #define SPM_DUALVCORE_PDN_DIS	(1U << 3)
118*54fd6939SJiyong Park #define SPM_PASR_DIS		(1U << 4)
119*54fd6939SJiyong Park #define SPM_DPD_DIS		(1U << 5)
120*54fd6939SJiyong Park #define SPM_SODI_DIS		(1U << 6)
121*54fd6939SJiyong Park #define SPM_MEMPLL_RESET	(1U << 7)
122*54fd6939SJiyong Park #define SPM_MAINPLL_PDN_DIS	(1U << 8)
123*54fd6939SJiyong Park #define SPM_CPU_DVS_DIS		(1U << 9)
124*54fd6939SJiyong Park #define SPM_CPU_DORMANT		(1U << 10)
125*54fd6939SJiyong Park #define SPM_EXT_VSEL_GPIO103	(1U << 11)
126*54fd6939SJiyong Park #define SPM_DDR_HIGH_SPEED	(1U << 12)
127*54fd6939SJiyong Park #define SPM_OPT			(1U << 13)
128*54fd6939SJiyong Park 
129*54fd6939SJiyong Park #define POWER_ON_VAL1_DEF	0x01011820
130*54fd6939SJiyong Park #define PCM_FSM_STA_DEF		0x48490
131*54fd6939SJiyong Park #define PCM_END_FSM_STA_DEF	0x08490
132*54fd6939SJiyong Park #define PCM_END_FSM_STA_MASK	0x3fff0
133*54fd6939SJiyong Park #define PCM_HANDSHAKE_SEND1	0xbeefbeef
134*54fd6939SJiyong Park 
135*54fd6939SJiyong Park #define PCM_WDT_TIMEOUT		(30 * 32768)
136*54fd6939SJiyong Park #define PCM_TIMER_MAX		(0xffffffff - PCM_WDT_TIMEOUT)
137*54fd6939SJiyong Park 
138*54fd6939SJiyong Park #define CON0_PCM_KICK		(1U << 0)
139*54fd6939SJiyong Park #define CON0_IM_KICK		(1U << 1)
140*54fd6939SJiyong Park #define CON0_IM_SLEEP_DVS	(1U << 3)
141*54fd6939SJiyong Park #define CON0_PCM_SW_RESET	(1U << 15)
142*54fd6939SJiyong Park #define CON0_CFG_KEY		(SPM_PROJECT_CODE << 16)
143*54fd6939SJiyong Park 
144*54fd6939SJiyong Park #define CON1_IM_SLAVE		(1U << 0)
145*54fd6939SJiyong Park #define CON1_MIF_APBEN		(1U << 3)
146*54fd6939SJiyong Park #define CON1_PCM_TIMER_EN	(1U << 5)
147*54fd6939SJiyong Park #define CON1_IM_NONRP_EN	(1U << 6)
148*54fd6939SJiyong Park #define CON1_PCM_WDT_EN		(1U << 8)
149*54fd6939SJiyong Park #define CON1_PCM_WDT_WAKE_MODE	(1U << 9)
150*54fd6939SJiyong Park #define CON1_SPM_SRAM_SLP_B	(1U << 10)
151*54fd6939SJiyong Park #define CON1_SPM_SRAM_ISO_B	(1U << 11)
152*54fd6939SJiyong Park #define CON1_EVENT_LOCK_EN	(1U << 12)
153*54fd6939SJiyong Park #define CON1_CFG_KEY		(SPM_PROJECT_CODE << 16)
154*54fd6939SJiyong Park 
155*54fd6939SJiyong Park #define PCM_PWRIO_EN_R0		(1U << 0)
156*54fd6939SJiyong Park #define PCM_PWRIO_EN_R7		(1U << 7)
157*54fd6939SJiyong Park #define PCM_RF_SYNC_R0		(1U << 16)
158*54fd6939SJiyong Park #define PCM_RF_SYNC_R2		(1U << 18)
159*54fd6939SJiyong Park #define PCM_RF_SYNC_R6		(1U << 22)
160*54fd6939SJiyong Park #define PCM_RF_SYNC_R7		(1U << 23)
161*54fd6939SJiyong Park 
162*54fd6939SJiyong Park #define CC_SYSCLK0_EN_0		(1U << 0)
163*54fd6939SJiyong Park #define CC_SYSCLK0_EN_1		(1U << 1)
164*54fd6939SJiyong Park #define CC_SYSCLK1_EN_0		(1U << 2)
165*54fd6939SJiyong Park #define CC_SYSCLK1_EN_1		(1U << 3)
166*54fd6939SJiyong Park #define CC_SYSSETTLE_SEL	(1U << 4)
167*54fd6939SJiyong Park #define CC_LOCK_INFRA_DCM	(1U << 5)
168*54fd6939SJiyong Park #define CC_SRCLKENA_MASK_0	(1U << 6)
169*54fd6939SJiyong Park #define CC_CXO32K_RM_EN_MD1	(1U << 9)
170*54fd6939SJiyong Park #define CC_CXO32K_RM_EN_MD2	(1U << 10)
171*54fd6939SJiyong Park #define CC_CLKSQ1_SEL		(1U << 12)
172*54fd6939SJiyong Park #define CC_DISABLE_DORM_PWR	(1U << 14)
173*54fd6939SJiyong Park #define CC_MD32_DCM_EN		(1U << 18)
174*54fd6939SJiyong Park 
175*54fd6939SJiyong Park #define WFI_OP_AND		1
176*54fd6939SJiyong Park #define WFI_OP_OR		0
177*54fd6939SJiyong Park 
178*54fd6939SJiyong Park #define WAKE_MISC_PCM_TIMER	(1U << 19)
179*54fd6939SJiyong Park #define WAKE_MISC_CPU_WAKE	(1U << 20)
180*54fd6939SJiyong Park 
181*54fd6939SJiyong Park /* define WAKE_SRC_XXX */
182*54fd6939SJiyong Park #define WAKE_SRC_SPM_MERGE	(1 << 0)
183*54fd6939SJiyong Park #define WAKE_SRC_KP		(1 << 2)
184*54fd6939SJiyong Park #define WAKE_SRC_WDT		(1 << 3)
185*54fd6939SJiyong Park #define WAKE_SRC_GPT		(1 << 4)
186*54fd6939SJiyong Park #define WAKE_SRC_EINT		(1 << 6)
187*54fd6939SJiyong Park #define WAKE_SRC_LOW_BAT	(1 << 9)
188*54fd6939SJiyong Park #define WAKE_SRC_MD32		(1 << 10)
189*54fd6939SJiyong Park #define WAKE_SRC_USB_CD		(1 << 14)
190*54fd6939SJiyong Park #define WAKE_SRC_USB_PDN	(1 << 15)
191*54fd6939SJiyong Park #define WAKE_SRC_AFE		(1 << 20)
192*54fd6939SJiyong Park #define WAKE_SRC_THERM		(1 << 21)
193*54fd6939SJiyong Park #define WAKE_SRC_SYSPWREQ	(1 << 24)
194*54fd6939SJiyong Park #define WAKE_SRC_SEJ		(1 << 27)
195*54fd6939SJiyong Park #define WAKE_SRC_ALL_MD32	(1 << 28)
196*54fd6939SJiyong Park #define WAKE_SRC_CPU_IRQ	(1 << 29)
197*54fd6939SJiyong Park 
198*54fd6939SJiyong Park #endif /* SPM_H */
199