xref: /arm-trusted-firmware/plat/xilinx/zynqmp/pm_service/zynqmp_pm_defs.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2013-2022, Arm Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  * Copyright (c) 2022-2023, Advanced Micro Devices, Inc. All rights reserved.
4*91f16700Schasinglulu  *
5*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu /* ZynqMP power management enums and defines */
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #ifndef ZYNQMP_PM_DEFS_H
11*91f16700Schasinglulu #define ZYNQMP_PM_DEFS_H
12*91f16700Schasinglulu 
13*91f16700Schasinglulu /*********************************************************************
14*91f16700Schasinglulu  * Macro definitions
15*91f16700Schasinglulu  ********************************************************************/
16*91f16700Schasinglulu 
17*91f16700Schasinglulu /*
18*91f16700Schasinglulu  * Version number is a 32bit value, like:
19*91f16700Schasinglulu  * (PM_VERSION_MAJOR << 16) | PM_VERSION_MINOR
20*91f16700Schasinglulu  */
21*91f16700Schasinglulu #define PM_VERSION_MAJOR	1U
22*91f16700Schasinglulu #define PM_VERSION_MINOR	1U
23*91f16700Schasinglulu 
24*91f16700Schasinglulu #define PM_VERSION	((PM_VERSION_MAJOR << 16U) | PM_VERSION_MINOR)
25*91f16700Schasinglulu 
26*91f16700Schasinglulu /*
27*91f16700Schasinglulu  * PM API versions
28*91f16700Schasinglulu  */
29*91f16700Schasinglulu 
30*91f16700Schasinglulu /* Expected version of firmware APIs */
31*91f16700Schasinglulu #define FW_API_BASE_VERSION		(1U)
32*91f16700Schasinglulu /* Expected version of firmware API for feature check */
33*91f16700Schasinglulu #define FW_API_VERSION_2		(2U)
34*91f16700Schasinglulu /* Version of APIs implemented in TF-A */
35*91f16700Schasinglulu #define TFA_API_BASE_VERSION		(1U)
36*91f16700Schasinglulu /* Updating the QUERY_DATA API versioning as the bitmask functionality
37*91f16700Schasinglulu  * support is added in the v2.*/
38*91f16700Schasinglulu #define TFA_API_QUERY_DATA_VERSION	(2U)
39*91f16700Schasinglulu 
40*91f16700Schasinglulu /* Capabilities for RAM */
41*91f16700Schasinglulu #define PM_CAP_ACCESS	0x1U
42*91f16700Schasinglulu #define PM_CAP_CONTEXT	0x2U
43*91f16700Schasinglulu 
44*91f16700Schasinglulu /* APU processor states */
45*91f16700Schasinglulu #define PM_PROC_STATE_FORCEDOFF		0U
46*91f16700Schasinglulu #define PM_PROC_STATE_ACTIVE		1U
47*91f16700Schasinglulu #define PM_PROC_STATE_SLEEP		2U
48*91f16700Schasinglulu #define PM_PROC_STATE_SUSPENDING	3U
49*91f16700Schasinglulu 
50*91f16700Schasinglulu #define PM_SET_SUSPEND_MODE		0xa02
51*91f16700Schasinglulu 
52*91f16700Schasinglulu /*********************************************************************
53*91f16700Schasinglulu  * Enum definitions
54*91f16700Schasinglulu  ********************************************************************/
55*91f16700Schasinglulu 
56*91f16700Schasinglulu enum pm_node_id {
57*91f16700Schasinglulu 	NODE_UNKNOWN = 0,
58*91f16700Schasinglulu 	NODE_APU,
59*91f16700Schasinglulu 	NODE_APU_0,
60*91f16700Schasinglulu 	NODE_APU_1,
61*91f16700Schasinglulu 	NODE_APU_2,
62*91f16700Schasinglulu 	NODE_APU_3,
63*91f16700Schasinglulu 	NODE_RPU,
64*91f16700Schasinglulu 	NODE_RPU_0,
65*91f16700Schasinglulu 	NODE_RPU_1,
66*91f16700Schasinglulu 	NODE_PLD,
67*91f16700Schasinglulu 	NODE_FPD,
68*91f16700Schasinglulu 	NODE_OCM_BANK_0,
69*91f16700Schasinglulu 	NODE_OCM_BANK_1,
70*91f16700Schasinglulu 	NODE_OCM_BANK_2,
71*91f16700Schasinglulu 	NODE_OCM_BANK_3,
72*91f16700Schasinglulu 	NODE_TCM_0_A,
73*91f16700Schasinglulu 	NODE_TCM_0_B,
74*91f16700Schasinglulu 	NODE_TCM_1_A,
75*91f16700Schasinglulu 	NODE_TCM_1_B,
76*91f16700Schasinglulu 	NODE_L2,
77*91f16700Schasinglulu 	NODE_GPU_PP_0,
78*91f16700Schasinglulu 	NODE_GPU_PP_1,
79*91f16700Schasinglulu 	NODE_USB_0,
80*91f16700Schasinglulu 	NODE_USB_1,
81*91f16700Schasinglulu 	NODE_TTC_0,
82*91f16700Schasinglulu 	NODE_TTC_1,
83*91f16700Schasinglulu 	NODE_TTC_2,
84*91f16700Schasinglulu 	NODE_TTC_3,
85*91f16700Schasinglulu 	NODE_SATA,
86*91f16700Schasinglulu 	NODE_ETH_0,
87*91f16700Schasinglulu 	NODE_ETH_1,
88*91f16700Schasinglulu 	NODE_ETH_2,
89*91f16700Schasinglulu 	NODE_ETH_3,
90*91f16700Schasinglulu 	NODE_UART_0,
91*91f16700Schasinglulu 	NODE_UART_1,
92*91f16700Schasinglulu 	NODE_SPI_0,
93*91f16700Schasinglulu 	NODE_SPI_1,
94*91f16700Schasinglulu 	NODE_I2C_0,
95*91f16700Schasinglulu 	NODE_I2C_1,
96*91f16700Schasinglulu 	NODE_SD_0,
97*91f16700Schasinglulu 	NODE_SD_1,
98*91f16700Schasinglulu 	NODE_DP,
99*91f16700Schasinglulu 	NODE_GDMA,
100*91f16700Schasinglulu 	NODE_ADMA,
101*91f16700Schasinglulu 	NODE_NAND,
102*91f16700Schasinglulu 	NODE_QSPI,
103*91f16700Schasinglulu 	NODE_GPIO,
104*91f16700Schasinglulu 	NODE_CAN_0,
105*91f16700Schasinglulu 	NODE_CAN_1,
106*91f16700Schasinglulu 	NODE_EXTERN,
107*91f16700Schasinglulu 	NODE_APLL,
108*91f16700Schasinglulu 	NODE_VPLL,
109*91f16700Schasinglulu 	NODE_DPLL,
110*91f16700Schasinglulu 	NODE_RPLL,
111*91f16700Schasinglulu 	NODE_IOPLL,
112*91f16700Schasinglulu 	NODE_DDR,
113*91f16700Schasinglulu 	NODE_IPI_APU,
114*91f16700Schasinglulu 	NODE_IPI_RPU_0,
115*91f16700Schasinglulu 	NODE_GPU,
116*91f16700Schasinglulu 	NODE_PCIE,
117*91f16700Schasinglulu 	NODE_PCAP,
118*91f16700Schasinglulu 	NODE_RTC,
119*91f16700Schasinglulu 	NODE_LPD,
120*91f16700Schasinglulu 	NODE_VCU,
121*91f16700Schasinglulu 	NODE_IPI_RPU_1,
122*91f16700Schasinglulu 	NODE_IPI_PL_0,
123*91f16700Schasinglulu 	NODE_IPI_PL_1,
124*91f16700Schasinglulu 	NODE_IPI_PL_2,
125*91f16700Schasinglulu 	NODE_IPI_PL_3,
126*91f16700Schasinglulu 	NODE_PL,
127*91f16700Schasinglulu 	NODE_GEM_TSU,
128*91f16700Schasinglulu 	NODE_SWDT_0,
129*91f16700Schasinglulu 	NODE_SWDT_1,
130*91f16700Schasinglulu 	NODE_CSU,
131*91f16700Schasinglulu 	NODE_PJTAG,
132*91f16700Schasinglulu 	NODE_TRACE,
133*91f16700Schasinglulu 	NODE_TESTSCAN,
134*91f16700Schasinglulu 	NODE_PMU,
135*91f16700Schasinglulu 	NODE_MAX,
136*91f16700Schasinglulu };
137*91f16700Schasinglulu 
138*91f16700Schasinglulu enum pm_request_ack {
139*91f16700Schasinglulu 	REQ_ACK_NO = 1,
140*91f16700Schasinglulu 	REQ_ACK_BLOCKING,
141*91f16700Schasinglulu 	REQ_ACK_NON_BLOCKING,
142*91f16700Schasinglulu };
143*91f16700Schasinglulu 
144*91f16700Schasinglulu enum pm_suspend_reason {
145*91f16700Schasinglulu 	SUSPEND_REASON_PU_REQ = 201,
146*91f16700Schasinglulu 	SUSPEND_REASON_ALERT,
147*91f16700Schasinglulu 	SUSPEND_REASON_SYS_SHUTDOWN,
148*91f16700Schasinglulu };
149*91f16700Schasinglulu 
150*91f16700Schasinglulu enum pm_ram_state {
151*91f16700Schasinglulu 	PM_RAM_STATE_OFF = 1,
152*91f16700Schasinglulu 	PM_RAM_STATE_RETENTION,
153*91f16700Schasinglulu 	PM_RAM_STATE_ON,
154*91f16700Schasinglulu };
155*91f16700Schasinglulu 
156*91f16700Schasinglulu /**
157*91f16700Schasinglulu  * enum pm_boot_status - enum represents the boot status of the PM.
158*91f16700Schasinglulu  * @PM_INITIAL_BOOT: boot is a fresh system startup.
159*91f16700Schasinglulu  * @PM_RESUME: boot is a resume.
160*91f16700Schasinglulu  * @PM_BOOT_ERROR: error, boot cause cannot be identified.
161*91f16700Schasinglulu  *
162*91f16700Schasinglulu  */
163*91f16700Schasinglulu enum pm_boot_status {
164*91f16700Schasinglulu 	PM_INITIAL_BOOT,
165*91f16700Schasinglulu 	PM_RESUME,
166*91f16700Schasinglulu 	PM_BOOT_ERROR,
167*91f16700Schasinglulu };
168*91f16700Schasinglulu 
169*91f16700Schasinglulu /**
170*91f16700Schasinglulu  * enum pm_shutdown_type - enum represents the shutdown type of the PM.
171*91f16700Schasinglulu  * @PMF_SHUTDOWN_TYPE_SHUTDOWN: shutdown.
172*91f16700Schasinglulu  * @PMF_SHUTDOWN_TYPE_RESET: reset/reboot.
173*91f16700Schasinglulu  * @PMF_SHUTDOWN_TYPE_SETSCOPE_ONLY: set the shutdown/reboot scope.
174*91f16700Schasinglulu  *
175*91f16700Schasinglulu  */
176*91f16700Schasinglulu enum pm_shutdown_type {
177*91f16700Schasinglulu 	PMF_SHUTDOWN_TYPE_SHUTDOWN,
178*91f16700Schasinglulu 	PMF_SHUTDOWN_TYPE_RESET,
179*91f16700Schasinglulu 	PMF_SHUTDOWN_TYPE_SETSCOPE_ONLY,
180*91f16700Schasinglulu };
181*91f16700Schasinglulu 
182*91f16700Schasinglulu /**
183*91f16700Schasinglulu  * enum pm_shutdown_subtype - enum represents the shutdown subtype of the PM.
184*91f16700Schasinglulu  * @PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM: shutdown/reboot APU subsystem only.
185*91f16700Schasinglulu  * @PMF_SHUTDOWN_SUBTYPE_PS_ONLY: shutdown/reboot entire PS (but not PL).
186*91f16700Schasinglulu  * @PMF_SHUTDOWN_SUBTYPE_SYSTEM: shutdown/reboot entire system.
187*91f16700Schasinglulu  *
188*91f16700Schasinglulu  */
189*91f16700Schasinglulu enum pm_shutdown_subtype {
190*91f16700Schasinglulu 	PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM,
191*91f16700Schasinglulu 	PMF_SHUTDOWN_SUBTYPE_PS_ONLY,
192*91f16700Schasinglulu 	PMF_SHUTDOWN_SUBTYPE_SYSTEM,
193*91f16700Schasinglulu };
194*91f16700Schasinglulu 
195*91f16700Schasinglulu /**
196*91f16700Schasinglulu  * enum pm_pll_mode - enum represents the mode of the PLL.
197*91f16700Schasinglulu  * @PM_PLL_MODE_RESET: PLL is in reset (not locked).
198*91f16700Schasinglulu  * @PM_PLL_MODE_INTEGER: PLL is locked in integer mode.
199*91f16700Schasinglulu  * @PM_PLL_MODE_FRACTIONAL: PLL is locked in fractional mode.
200*91f16700Schasinglulu  * @PM_PLL_MODE_MAX: Represents the maximum mode value for the PLL.
201*91f16700Schasinglulu  */
202*91f16700Schasinglulu enum pm_pll_mode {
203*91f16700Schasinglulu 	PM_PLL_MODE_RESET,
204*91f16700Schasinglulu 	PM_PLL_MODE_INTEGER,
205*91f16700Schasinglulu 	PM_PLL_MODE_FRACTIONAL,
206*91f16700Schasinglulu 	PM_PLL_MODE_MAX,
207*91f16700Schasinglulu };
208*91f16700Schasinglulu 
209*91f16700Schasinglulu /**
210*91f16700Schasinglulu  * enum pm_clock_div_id - enum represents the clock division identifiers in the
211*91f16700Schasinglulu  *                        PM.
212*91f16700Schasinglulu  * @PM_CLOCK_DIV0_ID: Clock divider 0.
213*91f16700Schasinglulu  * @PM_CLOCK_DIV1_ID: Clock divider 1.
214*91f16700Schasinglulu  */
215*91f16700Schasinglulu enum pm_clock_div_id {
216*91f16700Schasinglulu 	PM_CLOCK_DIV0_ID,
217*91f16700Schasinglulu 	PM_CLOCK_DIV1_ID,
218*91f16700Schasinglulu };
219*91f16700Schasinglulu 
220*91f16700Schasinglulu #endif /* ZYNQMP_PM_DEFS_H */
221