blob: 793f75009140847a23770a82b10b7551753377a0 [file] [log] [blame]
Tejas Patel354fe572018-12-14 00:55:37 -08001/*
Rajan Vaja030620d2020-11-23 04:13:54 -08002 * Copyright (c) 2019-2020, Xilinx, Inc. All rights reserved.
Tejas Patel354fe572018-12-14 00:55:37 -08003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7/* Versal power management enums and defines */
8
9#ifndef PM_DEFS_H
10#define PM_DEFS_H
11
12#include "pm_node.h"
13
14/*********************************************************************
15 * Macro definitions
16 ********************************************************************/
17
Tejas Patel54d13192019-02-27 18:44:55 +053018/* State arguments of the self suspend */
19#define PM_STATE_CPU_IDLE 0x0U
20#define PM_STATE_SUSPEND_TO_RAM 0xFU
21
22#define MAX_LATENCY (~0U)
23#define MAX_QOS 100U
24
Tejas Patel354fe572018-12-14 00:55:37 -080025/* Processor core device IDs */
26#define APU_DEVID(IDX) NODEID(XPM_NODECLASS_DEVICE, XPM_NODESUBCL_DEV_CORE, \
27 XPM_NODETYPE_DEV_CORE_APU, (IDX))
28
29#define XPM_DEVID_ACPU_0 APU_DEVID(XPM_NODEIDX_DEV_ACPU_0)
30#define XPM_DEVID_ACPU_1 APU_DEVID(XPM_NODEIDX_DEV_ACPU_1)
31
Tejas Patelfcb7c162019-02-27 18:44:56 +053032#define PERIPH_DEVID(IDX) NODEID(XPM_NODECLASS_DEVICE, \
33 XPM_NODESUBCL_DEV_PERIPH, \
34 XPM_NODETYPE_DEV_PERIPH, (IDX))
35
Ravi Patel22b0b492019-03-06 12:34:46 +053036#define PM_GET_CALLBACK_DATA 0xa01
37#define PM_GET_TRUSTZONE_VERSION 0xa03
38
39/* PM API Versions */
40#define PM_API_BASE_VERSION 1U
41
Rajan Vaja030620d2020-11-23 04:13:54 -080042#define PM_API_QUERY_DATA_VERSION 2U
43
Tejas Patel9d09ff92019-01-08 01:46:35 -080044/* PM API ids */
45#define PM_GET_API_VERSION 1U
Tejas Patel41f3e0b2019-01-08 01:46:37 -080046#define PM_GET_DEVICE_STATUS 3U
Saeed Nowshadi2294b422019-06-03 10:22:35 -070047#define PM_GET_OP_CHARACTERISTIC 4U
Tejas Patel42015552020-11-25 01:56:57 -080048#define PM_REGISTER_NOTIFIER 5U
Tejas Patelfe0e10a2019-12-08 23:29:44 -080049#define PM_REQ_SUSPEND 6U
50#define PM_SELF_SUSPEND 7U
Tejas Patel6b282252019-01-10 03:03:47 -080051#define PM_FORCE_POWERDOWN 8U
Tejas Patelfe0e10a2019-12-08 23:29:44 -080052#define PM_ABORT_SUSPEND 9U
Tejas Patel49cd8712019-01-23 14:18:51 +053053#define PM_REQ_WAKEUP 10U
Tejas Pateldb812052019-01-23 14:18:53 +053054#define PM_SET_WAKEUP_SOURCE 11U
Tejas Patel6b282252019-01-10 03:03:47 -080055#define PM_SYSTEM_SHUTDOWN 12U
Tejas Patel41f3e0b2019-01-08 01:46:37 -080056#define PM_REQUEST_DEVICE 13U
57#define PM_RELEASE_DEVICE 14U
58#define PM_SET_REQUIREMENT 15U
Tejas Patel5c154e12020-11-25 01:53:12 -080059#define PM_SET_MAX_LATENCY 16U
Tejas Patel87c4f3a2019-01-08 01:46:38 -080060#define PM_RESET_ASSERT 17U
61#define PM_RESET_GET_STATUS 18U
Tejas Patel02662022019-01-21 17:56:49 +053062#define PM_INIT_FINALIZE 21U
Ravi Patelbd4aa5a2019-08-12 03:17:54 -070063#define PM_GET_CHIPID 24U
Tejas Patel20e92022019-01-08 01:46:39 -080064#define PM_PINCTRL_REQUEST 28U
65#define PM_PINCTRL_RELEASE 29U
66#define PM_PINCTRL_GET_FUNCTION 30U
67#define PM_PINCTRL_SET_FUNCTION 31U
68#define PM_PINCTRL_CONFIG_PARAM_GET 32U
69#define PM_PINCTRL_CONFIG_PARAM_SET 33U
Tejas Patel9141f442019-01-10 03:03:48 -080070#define PM_IOCTL 34U
Tejas Patela3e34ad2019-02-01 17:25:19 +053071#define PM_QUERY_DATA 35U
Tejas Patel1f56fb12019-01-08 01:46:40 -080072#define PM_CLOCK_ENABLE 36U
73#define PM_CLOCK_DISABLE 37U
74#define PM_CLOCK_GETSTATE 38U
75#define PM_CLOCK_SETDIVIDER 39U
76#define PM_CLOCK_GETDIVIDER 40U
77#define PM_CLOCK_SETRATE 41U
78#define PM_CLOCK_GETRATE 42U
79#define PM_CLOCK_SETPARENT 43U
80#define PM_CLOCK_GETPARENT 44U
Tejas Patel023116d2019-01-08 01:46:41 -080081#define PM_PLL_SET_PARAMETER 48U
82#define PM_PLL_GET_PARAMETER 49U
83#define PM_PLL_SET_MODE 50U
84#define PM_PLL_GET_MODE 51U
Ravi Patel22b0b492019-03-06 12:34:46 +053085#define PM_FEATURE_CHECK 63U
Tejas Patel9d09ff92019-01-08 01:46:35 -080086
Jolly Shahed05a712019-03-22 05:33:39 +053087/* Loader API ids */
88#define PM_LOAD_PDI 0x701U
89
Tejas Patel9141f442019-01-10 03:03:48 -080090/* IOCTL IDs for clock driver */
91#define IOCTL_SET_PLL_FRAC_MODE 8
92#define IOCTL_GET_PLL_FRAC_MODE 9
93#define IOCTL_SET_PLL_FRAC_DATA 10
94#define IOCTL_GET_PLL_FRAC_DATA 11
95
96/* Parameter ID for PLL IOCTLs */
97/* Fractional data portion for PLL */
98#define PM_PLL_PARAM_DATA 2
99
Saeed Nowshadic5a1bda2019-12-08 23:35:35 -0800100/* System shutdown macros */
101#define XPM_SHUTDOWN_TYPE_SHUTDOWN 0U
102#define XPM_SHUTDOWN_TYPE_RESET 1U
103#define XPM_SHUTDOWN_TYPE_SETSCOPE_ONLY 2U
104
105#define XPM_SHUTDOWN_SUBTYPE_RST_SUBSYSTEM 0U
106#define XPM_SHUTDOWN_SUBTYPE_RST_PS_ONLY 1U
107#define XPM_SHUTDOWN_SUBTYPE_RST_SYSTEM 2U
108
Tejas Patel354fe572018-12-14 00:55:37 -0800109/*********************************************************************
110 * Enum definitions
111 ********************************************************************/
112
Tejas Patelfe0e10a2019-12-08 23:29:44 -0800113enum pm_abort_reason {
114 ABORT_REASON_WKUP_EVENT = 100,
115 ABORT_REASON_PU_BUSY,
116 ABORT_REASON_NO_PWRDN,
117 ABORT_REASON_UNKNOWN,
118};
119
Saeed Nowshadi2294b422019-06-03 10:22:35 -0700120enum pm_opchar_type {
121 PM_OPCHAR_TYPE_POWER = 1,
122 PM_OPCHAR_TYPE_TEMP,
123 PM_OPCHAR_TYPE_LATENCY,
124};
125
Tejas Patel354fe572018-12-14 00:55:37 -0800126/**
Tejas Patel41f3e0b2019-01-08 01:46:37 -0800127 * Subsystem IDs
128 */
129typedef enum {
130 XPM_SUBSYSID_PMC,
131 XPM_SUBSYSID_PSM,
132 XPM_SUBSYSID_APU,
133 XPM_SUBSYSID_RPU0_LOCK,
134 XPM_SUBSYSID_RPU0_0,
135 XPM_SUBSYSID_RPU0_1,
136 XPM_SUBSYSID_DDR0,
137 XPM_SUBSYSID_ME,
138 XPM_SUBSYSID_PL,
139 XPM_SUBSYSID_MAX,
140} XPm_SubsystemId;
141
142/**
Tejas Patel354fe572018-12-14 00:55:37 -0800143 * @PM_RET_SUCCESS: success
144 * @PM_RET_ERROR_ARGS: illegal arguments provided (deprecated)
145 * @PM_RET_ERROR_NOTSUPPORTED: feature not supported (deprecated)
Ravi Patel22b0b492019-03-06 12:34:46 +0530146 * @PM_RET_ERROR_NOFEATURE: feature is not available
Tejas Patel354fe572018-12-14 00:55:37 -0800147 * @PM_RET_ERROR_INTERNAL: internal error
148 * @PM_RET_ERROR_CONFLICT: conflict
149 * @PM_RET_ERROR_ACCESS: access rights violation
150 * @PM_RET_ERROR_INVALID_NODE: invalid node
151 * @PM_RET_ERROR_DOUBLE_REQ: duplicate request for same node
152 * @PM_RET_ERROR_ABORT_SUSPEND: suspend procedure has been aborted
153 * @PM_RET_ERROR_TIMEOUT: timeout in communication with PMU
154 * @PM_RET_ERROR_NODE_USED: node is already in use
155 */
156enum pm_ret_status {
157 PM_RET_SUCCESS,
158 PM_RET_ERROR_ARGS = 1,
159 PM_RET_ERROR_NOTSUPPORTED = 4,
Ravi Patel22b0b492019-03-06 12:34:46 +0530160 PM_RET_ERROR_NOFEATURE = 19,
Tejas Patel354fe572018-12-14 00:55:37 -0800161 PM_RET_ERROR_INTERNAL = 2000,
162 PM_RET_ERROR_CONFLICT = 2001,
163 PM_RET_ERROR_ACCESS = 2002,
164 PM_RET_ERROR_INVALID_NODE = 2003,
165 PM_RET_ERROR_DOUBLE_REQ = 2004,
166 PM_RET_ERROR_ABORT_SUSPEND = 2005,
167 PM_RET_ERROR_TIMEOUT = 2006,
168 PM_RET_ERROR_NODE_USED = 2007
169};
Rajan Vaja030620d2020-11-23 04:13:54 -0800170
171/**
172 * Qids
173 */
174enum pm_query_id {
175 XPM_QID_INVALID,
176 XPM_QID_CLOCK_GET_NAME,
177 XPM_QID_CLOCK_GET_TOPOLOGY,
178 XPM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS,
179 XPM_QID_CLOCK_GET_MUXSOURCES,
180 XPM_QID_CLOCK_GET_ATTRIBUTES,
181 XPM_QID_PINCTRL_GET_NUM_PINS,
182 XPM_QID_PINCTRL_GET_NUM_FUNCTIONS,
183 XPM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS,
184 XPM_QID_PINCTRL_GET_FUNCTION_NAME,
185 XPM_QID_PINCTRL_GET_FUNCTION_GROUPS,
186 XPM_QID_PINCTRL_GET_PIN_GROUPS,
187 XPM_QID_CLOCK_GET_NUM_CLOCKS,
188 XPM_QID_CLOCK_GET_MAX_DIVISOR,
189 XPM_QID_PLD_GET_PARENT,
190};
Tejas Patel354fe572018-12-14 00:55:37 -0800191#endif /* PM_DEFS_H */