blob: da8789301a6c1b5081508b8a1677d8b1a1df7e09 [file] [log] [blame]
Soren Brinkmannc8284402016-03-06 20:16:27 -08001/*
Kalyani Akulad716f042020-11-22 22:42:10 -08002 * Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved.
Soren Brinkmannc8284402016-03-06 20:16:27 -08003 *
dp-arm82cb2c12017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Soren Brinkmannc8284402016-03-06 20:16:27 -08005 */
6
7/* ZynqMP power management enums and defines */
8
Antonio Nino Diazc3cf06f2018-11-08 10:20:19 +00009#ifndef PM_DEFS_H
10#define PM_DEFS_H
Soren Brinkmannc8284402016-03-06 20:16:27 -080011
12/*********************************************************************
13 * Macro definitions
14 ********************************************************************/
15
16/*
17 * Version number is a 32bit value, like:
18 * (PM_VERSION_MAJOR << 16) | PM_VERSION_MINOR
19 */
Jolly Shah96d69862018-02-07 15:37:01 -080020#define PM_VERSION_MAJOR 1
21#define PM_VERSION_MINOR 0
Soren Brinkmannc8284402016-03-06 20:16:27 -080022
23#define PM_VERSION ((PM_VERSION_MAJOR << 16) | PM_VERSION_MINOR)
24
25/* Capabilities for RAM */
26#define PM_CAP_ACCESS 0x1U
27#define PM_CAP_CONTEXT 0x2U
28
29#define MAX_LATENCY (~0U)
30#define MAX_QOS 100U
31
Filip Drazic95fd9902016-07-20 17:17:39 +020032/* State arguments of the self suspend */
33#define PM_STATE_CPU_IDLE 0x0U
34#define PM_STATE_SUSPEND_TO_RAM 0xFU
35
Soren Brinkmannc8284402016-03-06 20:16:27 -080036/*********************************************************************
37 * Enum definitions
38 ********************************************************************/
39
40enum pm_api_id {
41 /* Miscellaneous API functions: */
42 PM_GET_API_VERSION = 1, /* Do not change or move */
43 PM_SET_CONFIGURATION,
44 PM_GET_NODE_STATUS,
45 PM_GET_OP_CHARACTERISTIC,
46 PM_REGISTER_NOTIFIER,
47 /* API for suspending of PUs: */
48 PM_REQ_SUSPEND,
49 PM_SELF_SUSPEND,
50 PM_FORCE_POWERDOWN,
51 PM_ABORT_SUSPEND,
52 PM_REQ_WAKEUP,
53 PM_SET_WAKEUP_SOURCE,
54 PM_SYSTEM_SHUTDOWN,
55 /* API for managing PM slaves: */
56 PM_REQ_NODE,
57 PM_RELEASE_NODE,
58 PM_SET_REQUIREMENT,
59 PM_SET_MAX_LATENCY,
60 /* Direct control API functions: */
61 PM_RESET_ASSERT,
62 PM_RESET_GET_STATUS,
63 PM_MMIO_WRITE,
64 PM_MMIO_READ,
Filip Drazic04849672017-03-16 16:56:53 +010065 PM_INIT_FINALIZE,
Nava kishore Manne2ddc31d2016-08-20 23:18:09 +053066 PM_FPGA_LOAD,
67 PM_FPGA_GET_STATUS,
Siva Durga Prasad Paladugu3104f2e2016-08-24 11:45:47 +053068 PM_GET_CHIPID,
Rajan Vajaf61262a2018-01-18 22:54:07 -080069 PM_SECURE_RSA_AES,
70 PM_SECURE_SHA,
71 PM_SECURE_RSA,
Rajan Vaja849ba7f2018-01-17 02:39:20 -080072 PM_PINCTRL_REQUEST,
73 PM_PINCTRL_RELEASE,
74 PM_PINCTRL_GET_FUNCTION,
75 PM_PINCTRL_SET_FUNCTION,
76 PM_PINCTRL_CONFIG_PARAM_GET,
77 PM_PINCTRL_CONFIG_PARAM_SET,
Rajan Vajaf76918a2018-01-17 02:39:23 -080078 PM_IOCTL,
Rajan Vajacaae4972018-01-17 02:39:25 -080079 /* API to query information from firmware */
80 PM_QUERY_DATA,
81 /* Clock control API functions */
82 PM_CLOCK_ENABLE,
83 PM_CLOCK_DISABLE,
84 PM_CLOCK_GETSTATE,
85 PM_CLOCK_SETDIVIDER,
86 PM_CLOCK_GETDIVIDER,
87 PM_CLOCK_SETRATE,
88 PM_CLOCK_GETRATE,
89 PM_CLOCK_SETPARENT,
90 PM_CLOCK_GETPARENT,
Siva Durga Prasad Paladugu5479fa72018-04-30 20:06:58 +053091 PM_SECURE_IMAGE,
Siva Durga Prasad Paladugu26a754f2018-09-04 17:41:34 +053092 /* FPGA PL Readback */
93 PM_FPGA_READ,
Siva Durga Prasad Paladugudb484532018-09-04 18:05:50 +053094 PM_SECURE_AES,
Jolly Shahbfed44a2019-01-02 12:27:00 -080095 /* PLL control API functions */
96 PM_PLL_SET_PARAMETER,
Jolly Shahd833f642019-01-04 11:28:38 -080097 PM_PLL_GET_PARAMETER,
Jolly Shah5f1a5fe2019-01-04 11:32:31 -080098 PM_PLL_SET_MODE,
Jolly Shah20279792019-01-04 11:35:48 -080099 PM_PLL_GET_MODE,
Kalyani Akulad716f042020-11-22 22:42:10 -0800100 /* PM Register Access API */
101 PM_REGISTER_ACCESS,
VNSL Durga1f910192020-11-23 04:46:04 -0800102 PM_EFUSE_ACCESS,
Soren Brinkmannc8284402016-03-06 20:16:27 -0800103 PM_API_MAX
104};
105
106enum pm_node_id {
107 NODE_UNKNOWN = 0,
108 NODE_APU,
109 NODE_APU_0,
110 NODE_APU_1,
111 NODE_APU_2,
112 NODE_APU_3,
113 NODE_RPU,
114 NODE_RPU_0,
115 NODE_RPU_1,
Rajan Vajaf61262a2018-01-18 22:54:07 -0800116 NODE_PLD,
Soren Brinkmannc8284402016-03-06 20:16:27 -0800117 NODE_FPD,
118 NODE_OCM_BANK_0,
119 NODE_OCM_BANK_1,
120 NODE_OCM_BANK_2,
121 NODE_OCM_BANK_3,
122 NODE_TCM_0_A,
123 NODE_TCM_0_B,
124 NODE_TCM_1_A,
125 NODE_TCM_1_B,
126 NODE_L2,
127 NODE_GPU_PP_0,
128 NODE_GPU_PP_1,
129 NODE_USB_0,
130 NODE_USB_1,
131 NODE_TTC_0,
132 NODE_TTC_1,
133 NODE_TTC_2,
134 NODE_TTC_3,
135 NODE_SATA,
136 NODE_ETH_0,
137 NODE_ETH_1,
138 NODE_ETH_2,
139 NODE_ETH_3,
140 NODE_UART_0,
141 NODE_UART_1,
142 NODE_SPI_0,
143 NODE_SPI_1,
144 NODE_I2C_0,
145 NODE_I2C_1,
146 NODE_SD_0,
147 NODE_SD_1,
148 NODE_DP,
149 NODE_GDMA,
150 NODE_ADMA,
151 NODE_NAND,
152 NODE_QSPI,
153 NODE_GPIO,
154 NODE_CAN_0,
155 NODE_CAN_1,
Mirela Simonovicc496f5a2017-01-30 17:44:00 +0100156 NODE_EXTERN,
Soren Brinkmannc8284402016-03-06 20:16:27 -0800157 NODE_APLL,
158 NODE_VPLL,
159 NODE_DPLL,
160 NODE_RPLL,
161 NODE_IOPLL,
162 NODE_DDR,
Mirela Simonovic2ba68952016-06-07 18:15:40 +0200163 NODE_IPI_APU,
Mirela Simonovic2c239f72016-06-17 16:17:23 +0200164 NODE_IPI_RPU_0,
Filip Drazic6aa4c532016-07-26 12:07:05 +0200165 NODE_GPU,
166 NODE_PCIE,
167 NODE_PCAP,
168 NODE_RTC,
Rajan Vajaf61262a2018-01-18 22:54:07 -0800169 NODE_LPD,
170 NODE_VCU,
171 NODE_IPI_RPU_1,
172 NODE_IPI_PL_0,
173 NODE_IPI_PL_1,
174 NODE_IPI_PL_2,
175 NODE_IPI_PL_3,
176 NODE_PL,
Rajan Vajae52e10a2018-01-17 02:39:21 -0800177 NODE_GEM_TSU,
178 NODE_SWDT_0,
179 NODE_SWDT_1,
180 NODE_CSU,
181 NODE_PJTAG,
182 NODE_TRACE,
183 NODE_TESTSCAN,
184 NODE_PMU,
185 NODE_MAX,
Soren Brinkmannc8284402016-03-06 20:16:27 -0800186};
187
188enum pm_request_ack {
189 REQ_ACK_NO = 1,
190 REQ_ACK_BLOCKING,
191 REQ_ACK_NON_BLOCKING,
192};
193
194enum pm_abort_reason {
195 ABORT_REASON_WKUP_EVENT = 100,
196 ABORT_REASON_PU_BUSY,
197 ABORT_REASON_NO_PWRDN,
198 ABORT_REASON_UNKNOWN,
199};
200
201enum pm_suspend_reason {
202 SUSPEND_REASON_PU_REQ = 201,
203 SUSPEND_REASON_ALERT,
204 SUSPEND_REASON_SYS_SHUTDOWN,
205};
206
207enum pm_ram_state {
208 PM_RAM_STATE_OFF = 1,
209 PM_RAM_STATE_RETENTION,
210 PM_RAM_STATE_ON,
211};
212
213enum pm_opchar_type {
214 PM_OPCHAR_TYPE_POWER = 1,
Soren Brinkmannc8284402016-03-06 20:16:27 -0800215 PM_OPCHAR_TYPE_TEMP,
Anes Hadziahmetagic493541d2016-05-12 16:17:30 +0200216 PM_OPCHAR_TYPE_LATENCY,
Soren Brinkmannc8284402016-03-06 20:16:27 -0800217};
218
219/**
220 * @PM_RET_SUCCESS: success
Davorin Mistaa8b10c62018-08-24 17:09:06 +0200221 * @PM_RET_ERROR_ARGS: illegal arguments provided (deprecated)
222 * @PM_RET_ERROR_NOTSUPPORTED: feature not supported (deprecated)
223 * @PM_RET_ERROR_INTERNAL: internal error
224 * @PM_RET_ERROR_CONFLICT: conflict
Soren Brinkmannc8284402016-03-06 20:16:27 -0800225 * @PM_RET_ERROR_ACCESS: access rights violation
Davorin Mistaa8b10c62018-08-24 17:09:06 +0200226 * @PM_RET_ERROR_INVALID_NODE: invalid node
227 * @PM_RET_ERROR_DOUBLE_REQ: duplicate request for same node
228 * @PM_RET_ERROR_ABORT_SUSPEND: suspend procedure has been aborted
Soren Brinkmannc8284402016-03-06 20:16:27 -0800229 * @PM_RET_ERROR_TIMEOUT: timeout in communication with PMU
Davorin Mistaa8b10c62018-08-24 17:09:06 +0200230 * @PM_RET_ERROR_NODE_USED: node is already in use
Soren Brinkmannc8284402016-03-06 20:16:27 -0800231 */
232enum pm_ret_status {
233 PM_RET_SUCCESS,
Davorin Mistaa8b10c62018-08-24 17:09:06 +0200234 PM_RET_ERROR_ARGS = 1,
235 PM_RET_ERROR_NOTSUPPORTED = 4,
236 PM_RET_ERROR_INTERNAL = 2000,
237 PM_RET_ERROR_CONFLICT = 2001,
238 PM_RET_ERROR_ACCESS = 2002,
239 PM_RET_ERROR_INVALID_NODE = 2003,
240 PM_RET_ERROR_DOUBLE_REQ = 2004,
241 PM_RET_ERROR_ABORT_SUSPEND = 2005,
242 PM_RET_ERROR_TIMEOUT = 2006,
243 PM_RET_ERROR_NODE_USED = 2007
Soren Brinkmannc8284402016-03-06 20:16:27 -0800244};
245
246/**
247 * @PM_INITIAL_BOOT: boot is a fresh system startup
248 * @PM_RESUME: boot is a resume
249 * @PM_BOOT_ERROR: error, boot cause cannot be identified
250 */
251enum pm_boot_status {
252 PM_INITIAL_BOOT,
253 PM_RESUME,
254 PM_BOOT_ERROR,
255};
256
Siva Durga Prasad Paladugu61ef3762018-04-30 15:56:10 +0530257/**
258 * @PMF_SHUTDOWN_TYPE_SHUTDOWN: shutdown
259 * @PMF_SHUTDOWN_TYPE_RESET: reset/reboot
260 * @PMF_SHUTDOWN_TYPE_SETSCOPE_ONLY: set the shutdown/reboot scope
261 */
Soren Brinkmann83531702016-09-02 09:50:54 -0700262enum pm_shutdown_type {
263 PMF_SHUTDOWN_TYPE_SHUTDOWN,
264 PMF_SHUTDOWN_TYPE_RESET,
Siva Durga Prasad Paladugu61ef3762018-04-30 15:56:10 +0530265 PMF_SHUTDOWN_TYPE_SETSCOPE_ONLY,
Soren Brinkmann83531702016-09-02 09:50:54 -0700266};
267
Siva Durga Prasad Paladugu61ef3762018-04-30 15:56:10 +0530268/**
269 * @PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM: shutdown/reboot APU subsystem only
270 * @PMF_SHUTDOWN_SUBTYPE_PS_ONLY: shutdown/reboot entire PS (but not PL)
271 * @PMF_SHUTDOWN_SUBTYPE_SYSTEM: shutdown/reboot entire system
272 */
Soren Brinkmann83531702016-09-02 09:50:54 -0700273enum pm_shutdown_subtype {
274 PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM,
275 PMF_SHUTDOWN_SUBTYPE_PS_ONLY,
276 PMF_SHUTDOWN_SUBTYPE_SYSTEM,
277};
278
Jolly Shahbfed44a2019-01-02 12:27:00 -0800279/**
280 * @PM_PLL_PARAM_DIV2: Enable for divide by 2 function inside the PLL
281 * @PM_PLL_PARAM_FBDIV: Feedback divisor integer portion for the PLL
282 * @PM_PLL_PARAM_DATA: Feedback divisor fractional portion for the PLL
283 * @PM_PLL_PARAM_PRE_SRC: Clock source for PLL input
284 * @PM_PLL_PARAM_POST_SRC: Clock source for PLL Bypass mode
285 * @PM_PLL_PARAM_LOCK_DLY: Lock circuit config settings for lock windowsize
286 * @PM_PLL_PARAM_LOCK_CNT: Lock circuit counter setting
287 * @PM_PLL_PARAM_LFHF: PLL loop filter high frequency capacitor control
288 * @PM_PLL_PARAM_CP: PLL charge pump control
289 * @PM_PLL_PARAM_RES: PLL loop filter resistor control
290 */
291enum pm_pll_param {
292 PM_PLL_PARAM_DIV2,
293 PM_PLL_PARAM_FBDIV,
294 PM_PLL_PARAM_DATA,
295 PM_PLL_PARAM_PRE_SRC,
296 PM_PLL_PARAM_POST_SRC,
297 PM_PLL_PARAM_LOCK_DLY,
298 PM_PLL_PARAM_LOCK_CNT,
299 PM_PLL_PARAM_LFHF,
300 PM_PLL_PARAM_CP,
301 PM_PLL_PARAM_RES,
302 PM_PLL_PARAM_MAX,
303};
304
Jolly Shah5f1a5fe2019-01-04 11:32:31 -0800305/**
306 * @PM_PLL_MODE_RESET: PLL is in reset (not locked)
307 * @PM_PLL_MODE_INTEGER: PLL is locked in integer mode
308 * @PM_PLL_MODE_FRACTIONAL: PLL is locked in fractional mode
309 */
310enum pm_pll_mode {
311 PM_PLL_MODE_RESET,
312 PM_PLL_MODE_INTEGER,
313 PM_PLL_MODE_FRACTIONAL,
314 PM_PLL_MODE_MAX,
315};
Jolly Shahbfed44a2019-01-02 12:27:00 -0800316
Jolly Shah48dc44e2019-01-04 11:49:46 -0800317/**
318 * @PM_CLOCK_DIV0_ID: Clock divider 0
319 * @PM_CLOCK_DIV1_ID: Clock divider 1
320 */
321enum pm_clock_div_id {
322 PM_CLOCK_DIV0_ID,
323 PM_CLOCK_DIV1_ID,
324};
325
Antonio Nino Diazc3cf06f2018-11-08 10:20:19 +0000326#endif /* PM_DEFS_H */