xref: /OK3568_Linux_fs/kernel/include/linux/firmware/xlnx-zynqmp.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Xilinx Zynq MPSoC Firmware layer
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  *  Copyright (C) 2014-2019 Xilinx
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  *  Michal Simek <michal.simek@xilinx.com>
8*4882a593Smuzhiyun  *  Davorin Mista <davorin.mista@aggios.com>
9*4882a593Smuzhiyun  *  Jolly Shah <jollys@xilinx.com>
10*4882a593Smuzhiyun  *  Rajan Vaja <rajanv@xilinx.com>
11*4882a593Smuzhiyun  */
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #ifndef __FIRMWARE_ZYNQMP_H__
14*4882a593Smuzhiyun #define __FIRMWARE_ZYNQMP_H__
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #define ZYNQMP_PM_VERSION_MAJOR	1
17*4882a593Smuzhiyun #define ZYNQMP_PM_VERSION_MINOR	0
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define ZYNQMP_PM_VERSION	((ZYNQMP_PM_VERSION_MAJOR << 16) | \
20*4882a593Smuzhiyun 					ZYNQMP_PM_VERSION_MINOR)
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #define ZYNQMP_TZ_VERSION_MAJOR	1
23*4882a593Smuzhiyun #define ZYNQMP_TZ_VERSION_MINOR	0
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define ZYNQMP_TZ_VERSION	((ZYNQMP_TZ_VERSION_MAJOR << 16) | \
26*4882a593Smuzhiyun 					ZYNQMP_TZ_VERSION_MINOR)
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /* SMC SIP service Call Function Identifier Prefix */
29*4882a593Smuzhiyun #define PM_SIP_SVC			0xC2000000
30*4882a593Smuzhiyun #define PM_GET_TRUSTZONE_VERSION	0xa03
31*4882a593Smuzhiyun #define PM_SET_SUSPEND_MODE		0xa02
32*4882a593Smuzhiyun #define GET_CALLBACK_DATA		0xa01
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /* Number of 32bits values in payload */
35*4882a593Smuzhiyun #define PAYLOAD_ARG_CNT	4U
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /* Number of arguments for a callback */
38*4882a593Smuzhiyun #define CB_ARG_CNT     4
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /* Payload size (consists of callback API ID + arguments) */
41*4882a593Smuzhiyun #define CB_PAYLOAD_SIZE (CB_ARG_CNT + 1)
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #define ZYNQMP_PM_MAX_QOS		100U
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #define GSS_NUM_REGS	(4)
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun /* Node capabilities */
48*4882a593Smuzhiyun #define	ZYNQMP_PM_CAPABILITY_ACCESS	0x1U
49*4882a593Smuzhiyun #define	ZYNQMP_PM_CAPABILITY_CONTEXT	0x2U
50*4882a593Smuzhiyun #define	ZYNQMP_PM_CAPABILITY_WAKEUP	0x4U
51*4882a593Smuzhiyun #define	ZYNQMP_PM_CAPABILITY_UNUSABLE	0x8U
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun /*
54*4882a593Smuzhiyun  * Firmware FPGA Manager flags
55*4882a593Smuzhiyun  * XILINX_ZYNQMP_PM_FPGA_FULL:	FPGA full reconfiguration
56*4882a593Smuzhiyun  * XILINX_ZYNQMP_PM_FPGA_PARTIAL: FPGA partial reconfiguration
57*4882a593Smuzhiyun  */
58*4882a593Smuzhiyun #define XILINX_ZYNQMP_PM_FPGA_FULL	0x0U
59*4882a593Smuzhiyun #define XILINX_ZYNQMP_PM_FPGA_PARTIAL	BIT(0)
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun enum pm_api_id {
62*4882a593Smuzhiyun 	PM_GET_API_VERSION = 1,
63*4882a593Smuzhiyun 	PM_SYSTEM_SHUTDOWN = 12,
64*4882a593Smuzhiyun 	PM_REQUEST_NODE = 13,
65*4882a593Smuzhiyun 	PM_RELEASE_NODE,
66*4882a593Smuzhiyun 	PM_SET_REQUIREMENT,
67*4882a593Smuzhiyun 	PM_RESET_ASSERT = 17,
68*4882a593Smuzhiyun 	PM_RESET_GET_STATUS,
69*4882a593Smuzhiyun 	PM_PM_INIT_FINALIZE = 21,
70*4882a593Smuzhiyun 	PM_FPGA_LOAD,
71*4882a593Smuzhiyun 	PM_FPGA_GET_STATUS,
72*4882a593Smuzhiyun 	PM_GET_CHIPID = 24,
73*4882a593Smuzhiyun 	PM_IOCTL = 34,
74*4882a593Smuzhiyun 	PM_QUERY_DATA,
75*4882a593Smuzhiyun 	PM_CLOCK_ENABLE,
76*4882a593Smuzhiyun 	PM_CLOCK_DISABLE,
77*4882a593Smuzhiyun 	PM_CLOCK_GETSTATE,
78*4882a593Smuzhiyun 	PM_CLOCK_SETDIVIDER,
79*4882a593Smuzhiyun 	PM_CLOCK_GETDIVIDER,
80*4882a593Smuzhiyun 	PM_CLOCK_SETRATE,
81*4882a593Smuzhiyun 	PM_CLOCK_GETRATE,
82*4882a593Smuzhiyun 	PM_CLOCK_SETPARENT,
83*4882a593Smuzhiyun 	PM_CLOCK_GETPARENT,
84*4882a593Smuzhiyun 	PM_SECURE_AES = 47,
85*4882a593Smuzhiyun 	PM_FEATURE_CHECK = 63,
86*4882a593Smuzhiyun 	PM_API_MAX,
87*4882a593Smuzhiyun };
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun /* PMU-FW return status codes */
90*4882a593Smuzhiyun enum pm_ret_status {
91*4882a593Smuzhiyun 	XST_PM_SUCCESS = 0,
92*4882a593Smuzhiyun 	XST_PM_NO_FEATURE = 19,
93*4882a593Smuzhiyun 	XST_PM_INTERNAL = 2000,
94*4882a593Smuzhiyun 	XST_PM_CONFLICT,
95*4882a593Smuzhiyun 	XST_PM_NO_ACCESS,
96*4882a593Smuzhiyun 	XST_PM_INVALID_NODE,
97*4882a593Smuzhiyun 	XST_PM_DOUBLE_REQ,
98*4882a593Smuzhiyun 	XST_PM_ABORT_SUSPEND,
99*4882a593Smuzhiyun 	XST_PM_MULT_USER = 2008,
100*4882a593Smuzhiyun };
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun enum pm_ioctl_id {
103*4882a593Smuzhiyun 	IOCTL_SD_DLL_RESET = 6,
104*4882a593Smuzhiyun 	IOCTL_SET_SD_TAPDELAY,
105*4882a593Smuzhiyun 	IOCTL_SET_PLL_FRAC_MODE,
106*4882a593Smuzhiyun 	IOCTL_GET_PLL_FRAC_MODE,
107*4882a593Smuzhiyun 	IOCTL_SET_PLL_FRAC_DATA,
108*4882a593Smuzhiyun 	IOCTL_GET_PLL_FRAC_DATA,
109*4882a593Smuzhiyun 	IOCTL_WRITE_GGS = 12,
110*4882a593Smuzhiyun 	IOCTL_READ_GGS = 13,
111*4882a593Smuzhiyun 	IOCTL_WRITE_PGGS = 14,
112*4882a593Smuzhiyun 	IOCTL_READ_PGGS = 15,
113*4882a593Smuzhiyun 	/* Set healthy bit value */
114*4882a593Smuzhiyun 	IOCTL_SET_BOOT_HEALTH_STATUS = 17,
115*4882a593Smuzhiyun };
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun enum pm_query_id {
118*4882a593Smuzhiyun 	PM_QID_INVALID,
119*4882a593Smuzhiyun 	PM_QID_CLOCK_GET_NAME,
120*4882a593Smuzhiyun 	PM_QID_CLOCK_GET_TOPOLOGY,
121*4882a593Smuzhiyun 	PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS,
122*4882a593Smuzhiyun 	PM_QID_CLOCK_GET_PARENTS,
123*4882a593Smuzhiyun 	PM_QID_CLOCK_GET_ATTRIBUTES,
124*4882a593Smuzhiyun 	PM_QID_CLOCK_GET_NUM_CLOCKS = 12,
125*4882a593Smuzhiyun 	PM_QID_CLOCK_GET_MAX_DIVISOR,
126*4882a593Smuzhiyun };
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun enum zynqmp_pm_reset_action {
129*4882a593Smuzhiyun 	PM_RESET_ACTION_RELEASE,
130*4882a593Smuzhiyun 	PM_RESET_ACTION_ASSERT,
131*4882a593Smuzhiyun 	PM_RESET_ACTION_PULSE,
132*4882a593Smuzhiyun };
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun enum zynqmp_pm_reset {
135*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_START = 1000,
136*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_PCIE_CFG = ZYNQMP_PM_RESET_START,
137*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_PCIE_BRIDGE,
138*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_PCIE_CTRL,
139*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_DP,
140*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_SWDT_CRF,
141*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_AFI_FM5,
142*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_AFI_FM4,
143*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_AFI_FM3,
144*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_AFI_FM2,
145*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_AFI_FM1,
146*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_AFI_FM0,
147*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GDMA,
148*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPU_PP1,
149*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPU_PP0,
150*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPU,
151*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GT,
152*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_SATA,
153*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_ACPU3_PWRON,
154*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_ACPU2_PWRON,
155*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_ACPU1_PWRON,
156*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_ACPU0_PWRON,
157*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_APU_L2,
158*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_ACPU3,
159*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_ACPU2,
160*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_ACPU1,
161*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_ACPU0,
162*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_DDR,
163*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_APM_FPD,
164*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_SOFT,
165*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GEM0,
166*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GEM1,
167*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GEM2,
168*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GEM3,
169*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_QSPI,
170*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_UART0,
171*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_UART1,
172*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_SPI0,
173*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_SPI1,
174*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_SDIO0,
175*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_SDIO1,
176*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_CAN0,
177*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_CAN1,
178*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_I2C0,
179*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_I2C1,
180*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_TTC0,
181*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_TTC1,
182*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_TTC2,
183*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_TTC3,
184*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_SWDT_CRL,
185*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_NAND,
186*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_ADMA,
187*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPIO,
188*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_IOU_CC,
189*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_TIMESTAMP,
190*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_RPU_R50,
191*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_RPU_R51,
192*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_RPU_AMBA,
193*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_OCM,
194*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_RPU_PGE,
195*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_USB0_CORERESET,
196*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_USB1_CORERESET,
197*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_USB0_HIBERRESET,
198*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_USB1_HIBERRESET,
199*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_USB0_APB,
200*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_USB1_APB,
201*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_IPI,
202*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_APM_LPD,
203*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_RTC,
204*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_SYSMON,
205*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_AFI_FM6,
206*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_LPD_SWDT,
207*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_FPD,
208*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_RPU_DBG1,
209*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_RPU_DBG0,
210*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_DBG_LPD,
211*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_DBG_FPD,
212*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_APLL,
213*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_DPLL,
214*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_VPLL,
215*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_IOPLL,
216*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_RPLL,
217*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_0,
218*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_1,
219*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_2,
220*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_3,
221*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_4,
222*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_5,
223*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_6,
224*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_7,
225*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_8,
226*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_9,
227*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_10,
228*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_11,
229*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_12,
230*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_13,
231*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_14,
232*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_15,
233*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_16,
234*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_17,
235*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_18,
236*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_19,
237*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_20,
238*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_21,
239*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_22,
240*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_23,
241*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_24,
242*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_25,
243*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_26,
244*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_27,
245*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_28,
246*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_29,
247*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_30,
248*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_GPO3_PL_31,
249*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_RPU_LS,
250*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_PS_ONLY,
251*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_PL,
252*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_PS_PL0,
253*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_PS_PL1,
254*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_PS_PL2,
255*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_PS_PL3,
256*4882a593Smuzhiyun 	ZYNQMP_PM_RESET_END = ZYNQMP_PM_RESET_PS_PL3
257*4882a593Smuzhiyun };
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun enum zynqmp_pm_suspend_reason {
260*4882a593Smuzhiyun 	SUSPEND_POWER_REQUEST = 201,
261*4882a593Smuzhiyun 	SUSPEND_ALERT,
262*4882a593Smuzhiyun 	SUSPEND_SYSTEM_SHUTDOWN,
263*4882a593Smuzhiyun };
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun enum zynqmp_pm_request_ack {
266*4882a593Smuzhiyun 	ZYNQMP_PM_REQUEST_ACK_NO = 1,
267*4882a593Smuzhiyun 	ZYNQMP_PM_REQUEST_ACK_BLOCKING,
268*4882a593Smuzhiyun 	ZYNQMP_PM_REQUEST_ACK_NON_BLOCKING,
269*4882a593Smuzhiyun };
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun enum pm_node_id {
272*4882a593Smuzhiyun 	NODE_SD_0 = 39,
273*4882a593Smuzhiyun 	NODE_SD_1,
274*4882a593Smuzhiyun };
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun enum tap_delay_type {
277*4882a593Smuzhiyun 	PM_TAPDELAY_INPUT = 0,
278*4882a593Smuzhiyun 	PM_TAPDELAY_OUTPUT,
279*4882a593Smuzhiyun };
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun enum dll_reset_type {
282*4882a593Smuzhiyun 	PM_DLL_RESET_ASSERT,
283*4882a593Smuzhiyun 	PM_DLL_RESET_RELEASE,
284*4882a593Smuzhiyun 	PM_DLL_RESET_PULSE,
285*4882a593Smuzhiyun };
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun enum zynqmp_pm_shutdown_type {
288*4882a593Smuzhiyun 	ZYNQMP_PM_SHUTDOWN_TYPE_SHUTDOWN,
289*4882a593Smuzhiyun 	ZYNQMP_PM_SHUTDOWN_TYPE_RESET,
290*4882a593Smuzhiyun 	ZYNQMP_PM_SHUTDOWN_TYPE_SETSCOPE_ONLY,
291*4882a593Smuzhiyun };
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun enum zynqmp_pm_shutdown_subtype {
294*4882a593Smuzhiyun 	ZYNQMP_PM_SHUTDOWN_SUBTYPE_SUBSYSTEM,
295*4882a593Smuzhiyun 	ZYNQMP_PM_SHUTDOWN_SUBTYPE_PS_ONLY,
296*4882a593Smuzhiyun 	ZYNQMP_PM_SHUTDOWN_SUBTYPE_SYSTEM,
297*4882a593Smuzhiyun };
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /**
300*4882a593Smuzhiyun  * struct zynqmp_pm_query_data - PM query data
301*4882a593Smuzhiyun  * @qid:	query ID
302*4882a593Smuzhiyun  * @arg1:	Argument 1 of query data
303*4882a593Smuzhiyun  * @arg2:	Argument 2 of query data
304*4882a593Smuzhiyun  * @arg3:	Argument 3 of query data
305*4882a593Smuzhiyun  */
306*4882a593Smuzhiyun struct zynqmp_pm_query_data {
307*4882a593Smuzhiyun 	u32 qid;
308*4882a593Smuzhiyun 	u32 arg1;
309*4882a593Smuzhiyun 	u32 arg2;
310*4882a593Smuzhiyun 	u32 arg3;
311*4882a593Smuzhiyun };
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun int zynqmp_pm_invoke_fn(u32 pm_api_id, u32 arg0, u32 arg1,
315*4882a593Smuzhiyun 			u32 arg2, u32 arg3, u32 *ret_payload);
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun #if IS_REACHABLE(CONFIG_ZYNQMP_FIRMWARE)
318*4882a593Smuzhiyun int zynqmp_pm_get_api_version(u32 *version);
319*4882a593Smuzhiyun int zynqmp_pm_get_chipid(u32 *idcode, u32 *version);
320*4882a593Smuzhiyun int zynqmp_pm_query_data(struct zynqmp_pm_query_data qdata, u32 *out);
321*4882a593Smuzhiyun int zynqmp_pm_clock_enable(u32 clock_id);
322*4882a593Smuzhiyun int zynqmp_pm_clock_disable(u32 clock_id);
323*4882a593Smuzhiyun int zynqmp_pm_clock_getstate(u32 clock_id, u32 *state);
324*4882a593Smuzhiyun int zynqmp_pm_clock_setdivider(u32 clock_id, u32 divider);
325*4882a593Smuzhiyun int zynqmp_pm_clock_getdivider(u32 clock_id, u32 *divider);
326*4882a593Smuzhiyun int zynqmp_pm_clock_setrate(u32 clock_id, u64 rate);
327*4882a593Smuzhiyun int zynqmp_pm_clock_getrate(u32 clock_id, u64 *rate);
328*4882a593Smuzhiyun int zynqmp_pm_clock_setparent(u32 clock_id, u32 parent_id);
329*4882a593Smuzhiyun int zynqmp_pm_clock_getparent(u32 clock_id, u32 *parent_id);
330*4882a593Smuzhiyun int zynqmp_pm_set_pll_frac_mode(u32 clk_id, u32 mode);
331*4882a593Smuzhiyun int zynqmp_pm_get_pll_frac_mode(u32 clk_id, u32 *mode);
332*4882a593Smuzhiyun int zynqmp_pm_set_pll_frac_data(u32 clk_id, u32 data);
333*4882a593Smuzhiyun int zynqmp_pm_get_pll_frac_data(u32 clk_id, u32 *data);
334*4882a593Smuzhiyun int zynqmp_pm_set_sd_tapdelay(u32 node_id, u32 type, u32 value);
335*4882a593Smuzhiyun int zynqmp_pm_sd_dll_reset(u32 node_id, u32 type);
336*4882a593Smuzhiyun int zynqmp_pm_reset_assert(const enum zynqmp_pm_reset reset,
337*4882a593Smuzhiyun 			   const enum zynqmp_pm_reset_action assert_flag);
338*4882a593Smuzhiyun int zynqmp_pm_reset_get_status(const enum zynqmp_pm_reset reset, u32 *status);
339*4882a593Smuzhiyun int zynqmp_pm_init_finalize(void);
340*4882a593Smuzhiyun int zynqmp_pm_set_suspend_mode(u32 mode);
341*4882a593Smuzhiyun int zynqmp_pm_request_node(const u32 node, const u32 capabilities,
342*4882a593Smuzhiyun 			   const u32 qos, const enum zynqmp_pm_request_ack ack);
343*4882a593Smuzhiyun int zynqmp_pm_release_node(const u32 node);
344*4882a593Smuzhiyun int zynqmp_pm_set_requirement(const u32 node, const u32 capabilities,
345*4882a593Smuzhiyun 			      const u32 qos,
346*4882a593Smuzhiyun 			      const enum zynqmp_pm_request_ack ack);
347*4882a593Smuzhiyun int zynqmp_pm_aes_engine(const u64 address, u32 *out);
348*4882a593Smuzhiyun int zynqmp_pm_fpga_load(const u64 address, const u32 size, const u32 flags);
349*4882a593Smuzhiyun int zynqmp_pm_fpga_get_status(u32 *value);
350*4882a593Smuzhiyun int zynqmp_pm_write_ggs(u32 index, u32 value);
351*4882a593Smuzhiyun int zynqmp_pm_read_ggs(u32 index, u32 *value);
352*4882a593Smuzhiyun int zynqmp_pm_write_pggs(u32 index, u32 value);
353*4882a593Smuzhiyun int zynqmp_pm_read_pggs(u32 index, u32 *value);
354*4882a593Smuzhiyun int zynqmp_pm_system_shutdown(const u32 type, const u32 subtype);
355*4882a593Smuzhiyun int zynqmp_pm_set_boot_health_status(u32 value);
356*4882a593Smuzhiyun #else
zynqmp_pm_get_api_version(u32 * version)357*4882a593Smuzhiyun static inline int zynqmp_pm_get_api_version(u32 *version)
358*4882a593Smuzhiyun {
359*4882a593Smuzhiyun 	return -ENODEV;
360*4882a593Smuzhiyun }
361*4882a593Smuzhiyun 
zynqmp_pm_get_chipid(u32 * idcode,u32 * version)362*4882a593Smuzhiyun static inline int zynqmp_pm_get_chipid(u32 *idcode, u32 *version)
363*4882a593Smuzhiyun {
364*4882a593Smuzhiyun 	return -ENODEV;
365*4882a593Smuzhiyun }
366*4882a593Smuzhiyun 
zynqmp_pm_query_data(struct zynqmp_pm_query_data qdata,u32 * out)367*4882a593Smuzhiyun static inline int zynqmp_pm_query_data(struct zynqmp_pm_query_data qdata,
368*4882a593Smuzhiyun 				       u32 *out)
369*4882a593Smuzhiyun {
370*4882a593Smuzhiyun 	return -ENODEV;
371*4882a593Smuzhiyun }
372*4882a593Smuzhiyun 
zynqmp_pm_clock_enable(u32 clock_id)373*4882a593Smuzhiyun static inline int zynqmp_pm_clock_enable(u32 clock_id)
374*4882a593Smuzhiyun {
375*4882a593Smuzhiyun 	return -ENODEV;
376*4882a593Smuzhiyun }
377*4882a593Smuzhiyun 
zynqmp_pm_clock_disable(u32 clock_id)378*4882a593Smuzhiyun static inline int zynqmp_pm_clock_disable(u32 clock_id)
379*4882a593Smuzhiyun {
380*4882a593Smuzhiyun 	return -ENODEV;
381*4882a593Smuzhiyun }
382*4882a593Smuzhiyun 
zynqmp_pm_clock_getstate(u32 clock_id,u32 * state)383*4882a593Smuzhiyun static inline int zynqmp_pm_clock_getstate(u32 clock_id, u32 *state)
384*4882a593Smuzhiyun {
385*4882a593Smuzhiyun 	return -ENODEV;
386*4882a593Smuzhiyun }
387*4882a593Smuzhiyun 
zynqmp_pm_clock_setdivider(u32 clock_id,u32 divider)388*4882a593Smuzhiyun static inline int zynqmp_pm_clock_setdivider(u32 clock_id, u32 divider)
389*4882a593Smuzhiyun {
390*4882a593Smuzhiyun 	return -ENODEV;
391*4882a593Smuzhiyun }
392*4882a593Smuzhiyun 
zynqmp_pm_clock_getdivider(u32 clock_id,u32 * divider)393*4882a593Smuzhiyun static inline int zynqmp_pm_clock_getdivider(u32 clock_id, u32 *divider)
394*4882a593Smuzhiyun {
395*4882a593Smuzhiyun 	return -ENODEV;
396*4882a593Smuzhiyun }
397*4882a593Smuzhiyun 
zynqmp_pm_clock_setrate(u32 clock_id,u64 rate)398*4882a593Smuzhiyun static inline int zynqmp_pm_clock_setrate(u32 clock_id, u64 rate)
399*4882a593Smuzhiyun {
400*4882a593Smuzhiyun 	return -ENODEV;
401*4882a593Smuzhiyun }
402*4882a593Smuzhiyun 
zynqmp_pm_clock_getrate(u32 clock_id,u64 * rate)403*4882a593Smuzhiyun static inline int zynqmp_pm_clock_getrate(u32 clock_id, u64 *rate)
404*4882a593Smuzhiyun {
405*4882a593Smuzhiyun 	return -ENODEV;
406*4882a593Smuzhiyun }
407*4882a593Smuzhiyun 
zynqmp_pm_clock_setparent(u32 clock_id,u32 parent_id)408*4882a593Smuzhiyun static inline int zynqmp_pm_clock_setparent(u32 clock_id, u32 parent_id)
409*4882a593Smuzhiyun {
410*4882a593Smuzhiyun 	return -ENODEV;
411*4882a593Smuzhiyun }
412*4882a593Smuzhiyun 
zynqmp_pm_clock_getparent(u32 clock_id,u32 * parent_id)413*4882a593Smuzhiyun static inline int zynqmp_pm_clock_getparent(u32 clock_id, u32 *parent_id)
414*4882a593Smuzhiyun {
415*4882a593Smuzhiyun 	return -ENODEV;
416*4882a593Smuzhiyun }
417*4882a593Smuzhiyun 
zynqmp_pm_set_pll_frac_mode(u32 clk_id,u32 mode)418*4882a593Smuzhiyun static inline int zynqmp_pm_set_pll_frac_mode(u32 clk_id, u32 mode)
419*4882a593Smuzhiyun {
420*4882a593Smuzhiyun 	return -ENODEV;
421*4882a593Smuzhiyun }
422*4882a593Smuzhiyun 
zynqmp_pm_get_pll_frac_mode(u32 clk_id,u32 * mode)423*4882a593Smuzhiyun static inline int zynqmp_pm_get_pll_frac_mode(u32 clk_id, u32 *mode)
424*4882a593Smuzhiyun {
425*4882a593Smuzhiyun 	return -ENODEV;
426*4882a593Smuzhiyun }
427*4882a593Smuzhiyun 
zynqmp_pm_set_pll_frac_data(u32 clk_id,u32 data)428*4882a593Smuzhiyun static inline int zynqmp_pm_set_pll_frac_data(u32 clk_id, u32 data)
429*4882a593Smuzhiyun {
430*4882a593Smuzhiyun 	return -ENODEV;
431*4882a593Smuzhiyun }
432*4882a593Smuzhiyun 
zynqmp_pm_get_pll_frac_data(u32 clk_id,u32 * data)433*4882a593Smuzhiyun static inline int zynqmp_pm_get_pll_frac_data(u32 clk_id, u32 *data)
434*4882a593Smuzhiyun {
435*4882a593Smuzhiyun 	return -ENODEV;
436*4882a593Smuzhiyun }
437*4882a593Smuzhiyun 
zynqmp_pm_set_sd_tapdelay(u32 node_id,u32 type,u32 value)438*4882a593Smuzhiyun static inline int zynqmp_pm_set_sd_tapdelay(u32 node_id, u32 type, u32 value)
439*4882a593Smuzhiyun {
440*4882a593Smuzhiyun 	return -ENODEV;
441*4882a593Smuzhiyun }
442*4882a593Smuzhiyun 
zynqmp_pm_sd_dll_reset(u32 node_id,u32 type)443*4882a593Smuzhiyun static inline int zynqmp_pm_sd_dll_reset(u32 node_id, u32 type)
444*4882a593Smuzhiyun {
445*4882a593Smuzhiyun 	return -ENODEV;
446*4882a593Smuzhiyun }
447*4882a593Smuzhiyun 
zynqmp_pm_reset_assert(const enum zynqmp_pm_reset reset,const enum zynqmp_pm_reset_action assert_flag)448*4882a593Smuzhiyun static inline int zynqmp_pm_reset_assert(const enum zynqmp_pm_reset reset,
449*4882a593Smuzhiyun 			   const enum zynqmp_pm_reset_action assert_flag)
450*4882a593Smuzhiyun {
451*4882a593Smuzhiyun 	return -ENODEV;
452*4882a593Smuzhiyun }
453*4882a593Smuzhiyun 
zynqmp_pm_reset_get_status(const enum zynqmp_pm_reset reset,u32 * status)454*4882a593Smuzhiyun static inline int zynqmp_pm_reset_get_status(const enum zynqmp_pm_reset reset,
455*4882a593Smuzhiyun 					     u32 *status)
456*4882a593Smuzhiyun {
457*4882a593Smuzhiyun 	return -ENODEV;
458*4882a593Smuzhiyun }
459*4882a593Smuzhiyun 
zynqmp_pm_init_finalize(void)460*4882a593Smuzhiyun static inline int zynqmp_pm_init_finalize(void)
461*4882a593Smuzhiyun {
462*4882a593Smuzhiyun 	return -ENODEV;
463*4882a593Smuzhiyun }
464*4882a593Smuzhiyun 
zynqmp_pm_set_suspend_mode(u32 mode)465*4882a593Smuzhiyun static inline int zynqmp_pm_set_suspend_mode(u32 mode)
466*4882a593Smuzhiyun {
467*4882a593Smuzhiyun 	return -ENODEV;
468*4882a593Smuzhiyun }
469*4882a593Smuzhiyun 
zynqmp_pm_request_node(const u32 node,const u32 capabilities,const u32 qos,const enum zynqmp_pm_request_ack ack)470*4882a593Smuzhiyun static inline int zynqmp_pm_request_node(const u32 node, const u32 capabilities,
471*4882a593Smuzhiyun 					 const u32 qos,
472*4882a593Smuzhiyun 					 const enum zynqmp_pm_request_ack ack)
473*4882a593Smuzhiyun {
474*4882a593Smuzhiyun 	return -ENODEV;
475*4882a593Smuzhiyun }
476*4882a593Smuzhiyun 
zynqmp_pm_release_node(const u32 node)477*4882a593Smuzhiyun static inline int zynqmp_pm_release_node(const u32 node)
478*4882a593Smuzhiyun {
479*4882a593Smuzhiyun 	return -ENODEV;
480*4882a593Smuzhiyun }
481*4882a593Smuzhiyun 
zynqmp_pm_set_requirement(const u32 node,const u32 capabilities,const u32 qos,const enum zynqmp_pm_request_ack ack)482*4882a593Smuzhiyun static inline int zynqmp_pm_set_requirement(const u32 node,
483*4882a593Smuzhiyun 					const u32 capabilities,
484*4882a593Smuzhiyun 					const u32 qos,
485*4882a593Smuzhiyun 					const enum zynqmp_pm_request_ack ack)
486*4882a593Smuzhiyun {
487*4882a593Smuzhiyun 	return -ENODEV;
488*4882a593Smuzhiyun }
489*4882a593Smuzhiyun 
zynqmp_pm_aes_engine(const u64 address,u32 * out)490*4882a593Smuzhiyun static inline int zynqmp_pm_aes_engine(const u64 address, u32 *out)
491*4882a593Smuzhiyun {
492*4882a593Smuzhiyun 	return -ENODEV;
493*4882a593Smuzhiyun }
494*4882a593Smuzhiyun 
zynqmp_pm_fpga_load(const u64 address,const u32 size,const u32 flags)495*4882a593Smuzhiyun static inline int zynqmp_pm_fpga_load(const u64 address, const u32 size,
496*4882a593Smuzhiyun 				      const u32 flags)
497*4882a593Smuzhiyun {
498*4882a593Smuzhiyun 	return -ENODEV;
499*4882a593Smuzhiyun }
500*4882a593Smuzhiyun 
zynqmp_pm_fpga_get_status(u32 * value)501*4882a593Smuzhiyun static inline int zynqmp_pm_fpga_get_status(u32 *value)
502*4882a593Smuzhiyun {
503*4882a593Smuzhiyun 	return -ENODEV;
504*4882a593Smuzhiyun }
505*4882a593Smuzhiyun 
zynqmp_pm_write_ggs(u32 index,u32 value)506*4882a593Smuzhiyun static inline int zynqmp_pm_write_ggs(u32 index, u32 value)
507*4882a593Smuzhiyun {
508*4882a593Smuzhiyun 	return -ENODEV;
509*4882a593Smuzhiyun }
510*4882a593Smuzhiyun 
zynqmp_pm_read_ggs(u32 index,u32 * value)511*4882a593Smuzhiyun static inline int zynqmp_pm_read_ggs(u32 index, u32 *value)
512*4882a593Smuzhiyun {
513*4882a593Smuzhiyun 	return -ENODEV;
514*4882a593Smuzhiyun }
515*4882a593Smuzhiyun 
zynqmp_pm_write_pggs(u32 index,u32 value)516*4882a593Smuzhiyun static inline int zynqmp_pm_write_pggs(u32 index, u32 value)
517*4882a593Smuzhiyun {
518*4882a593Smuzhiyun 	return -ENODEV;
519*4882a593Smuzhiyun }
520*4882a593Smuzhiyun 
zynqmp_pm_read_pggs(u32 index,u32 * value)521*4882a593Smuzhiyun static inline int zynqmp_pm_read_pggs(u32 index, u32 *value)
522*4882a593Smuzhiyun {
523*4882a593Smuzhiyun 	return -ENODEV;
524*4882a593Smuzhiyun }
525*4882a593Smuzhiyun 
zynqmp_pm_system_shutdown(const u32 type,const u32 subtype)526*4882a593Smuzhiyun static inline int zynqmp_pm_system_shutdown(const u32 type, const u32 subtype)
527*4882a593Smuzhiyun {
528*4882a593Smuzhiyun 	return -ENODEV;
529*4882a593Smuzhiyun }
530*4882a593Smuzhiyun 
zynqmp_pm_set_boot_health_status(u32 value)531*4882a593Smuzhiyun static inline int zynqmp_pm_set_boot_health_status(u32 value)
532*4882a593Smuzhiyun {
533*4882a593Smuzhiyun 	return -ENODEV;
534*4882a593Smuzhiyun }
535*4882a593Smuzhiyun #endif
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun #endif /* __FIRMWARE_ZYNQMP_H__ */
538