xref: /rk3399_ARM-atf/plat/xilinx/zynqmp/pm_service/zynqmp_pm_api_sys.h (revision 047b1b9afce13993db8363f55be6e0cbfb69bf0d)
1a92681d9SJay Buddhabhatti /*
2619bc13eSMichal Simek  * Copyright (c) 2013-2022, Arm Limited and Contributors. All rights reserved.
3*8ce93ec9SRonak Jain  * Copyright (c) 2023-2025, Advanced Micro Devices, Inc. All rights reserved.
4a92681d9SJay Buddhabhatti  *
5a92681d9SJay Buddhabhatti  * SPDX-License-Identifier: BSD-3-Clause
6a92681d9SJay Buddhabhatti  */
7a92681d9SJay Buddhabhatti 
8a92681d9SJay Buddhabhatti #ifndef ZYNQMP_PM_API_SYS_H
9a92681d9SJay Buddhabhatti #define ZYNQMP_PM_API_SYS_H
10a92681d9SJay Buddhabhatti 
11a92681d9SJay Buddhabhatti #include <stdint.h>
12a92681d9SJay Buddhabhatti 
13a92681d9SJay Buddhabhatti #include "pm_defs.h"
1492f7de1eSJay Buddhabhatti #include "zynqmp_pm_defs.h"
15a92681d9SJay Buddhabhatti 
1692f7de1eSJay Buddhabhatti enum pm_query_ids {
17a92681d9SJay Buddhabhatti 	PM_QID_INVALID,
18a92681d9SJay Buddhabhatti 	PM_QID_CLOCK_GET_NAME,
19a92681d9SJay Buddhabhatti 	PM_QID_CLOCK_GET_TOPOLOGY,
20a92681d9SJay Buddhabhatti 	PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS,
21a92681d9SJay Buddhabhatti 	PM_QID_CLOCK_GET_PARENTS,
22a92681d9SJay Buddhabhatti 	PM_QID_CLOCK_GET_ATTRIBUTES,
23a92681d9SJay Buddhabhatti 	PM_QID_PINCTRL_GET_NUM_PINS,
24a92681d9SJay Buddhabhatti 	PM_QID_PINCTRL_GET_NUM_FUNCTIONS,
25a92681d9SJay Buddhabhatti 	PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS,
26a92681d9SJay Buddhabhatti 	PM_QID_PINCTRL_GET_FUNCTION_NAME,
27a92681d9SJay Buddhabhatti 	PM_QID_PINCTRL_GET_FUNCTION_GROUPS,
28a92681d9SJay Buddhabhatti 	PM_QID_PINCTRL_GET_PIN_GROUPS,
29a92681d9SJay Buddhabhatti 	PM_QID_CLOCK_GET_NUM_CLOCKS,
30a92681d9SJay Buddhabhatti 	PM_QID_CLOCK_GET_MAX_DIVISOR,
31a92681d9SJay Buddhabhatti };
32a92681d9SJay Buddhabhatti 
33a92681d9SJay Buddhabhatti enum pm_register_access_id {
34a92681d9SJay Buddhabhatti 	CONFIG_REG_WRITE,
35a92681d9SJay Buddhabhatti 	CONFIG_REG_READ,
36a92681d9SJay Buddhabhatti };
37a92681d9SJay Buddhabhatti 
38de7ed953SPrasad Kummari /*
39a92681d9SJay Buddhabhatti  * Assigning of argument values into array elements.
40a92681d9SJay Buddhabhatti  */
41*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD1(pl, flag, arg0) {			\
42*8ce93ec9SRonak Jain 	pl[0] = ((uint32_t)(arg0) | ((uint32_t)(flag) << 24U));	\
43a92681d9SJay Buddhabhatti }
44a92681d9SJay Buddhabhatti 
45*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD2(pl, flag, arg0, arg1) {		\
46a92681d9SJay Buddhabhatti 	pl[1] = (uint32_t)(arg1);				\
47*8ce93ec9SRonak Jain 	PM_PACK_PAYLOAD1(pl, (flag), (arg0));			\
48a92681d9SJay Buddhabhatti }
49a92681d9SJay Buddhabhatti 
50*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD3(pl, flag, arg0, arg1, arg2) {		\
51a92681d9SJay Buddhabhatti 	pl[2] = (uint32_t)(arg2);				\
52*8ce93ec9SRonak Jain 	PM_PACK_PAYLOAD2(pl, (flag), (arg0), (arg1));		\
53a92681d9SJay Buddhabhatti }
54a92681d9SJay Buddhabhatti 
55*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD4(pl, flag, arg0, arg1, arg2, arg3) {	\
56a92681d9SJay Buddhabhatti 	pl[3] = (uint32_t)(arg3);				\
57*8ce93ec9SRonak Jain 	PM_PACK_PAYLOAD3(pl, (flag), (arg0), (arg1), (arg2));	\
58a92681d9SJay Buddhabhatti }
59a92681d9SJay Buddhabhatti 
60*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD5(pl, flag, arg0, arg1, arg2, arg3, arg4) {	\
61a92681d9SJay Buddhabhatti 	pl[4] = (uint32_t)(arg4);					\
62*8ce93ec9SRonak Jain 	PM_PACK_PAYLOAD4(pl, (flag), (arg0), (arg1), (arg2), (arg3));	\
63a92681d9SJay Buddhabhatti }
64a92681d9SJay Buddhabhatti 
65*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD6(pl, flag, arg0, arg1, arg2, arg3, arg4, arg5) {	\
66a92681d9SJay Buddhabhatti 	pl[5] = (uint32_t)(arg5);						\
67*8ce93ec9SRonak Jain 	PM_PACK_PAYLOAD5(pl, (flag), (arg0), (arg1), (arg2), (arg3), (arg4));	\
68a92681d9SJay Buddhabhatti }
69a92681d9SJay Buddhabhatti 
70a92681d9SJay Buddhabhatti /**********************************************************
71a92681d9SJay Buddhabhatti  * System-level API function declarations
72a92681d9SJay Buddhabhatti  **********************************************************/
73a92681d9SJay Buddhabhatti enum pm_ret_status pm_req_suspend(enum pm_node_id target,
74a92681d9SJay Buddhabhatti 				  enum pm_request_ack ack,
75a92681d9SJay Buddhabhatti 				  uint32_t latency,
76*8ce93ec9SRonak Jain 				  uint32_t state,
77*8ce93ec9SRonak Jain 				  uint32_t flag);
78a92681d9SJay Buddhabhatti 
79a92681d9SJay Buddhabhatti enum pm_ret_status pm_self_suspend(enum pm_node_id nid,
80a92681d9SJay Buddhabhatti 				   uint32_t latency,
81a92681d9SJay Buddhabhatti 				   uint32_t state,
82*8ce93ec9SRonak Jain 				   uintptr_t address,
83*8ce93ec9SRonak Jain 				   uint32_t flag);
84a92681d9SJay Buddhabhatti 
85a92681d9SJay Buddhabhatti enum pm_ret_status pm_force_powerdown(enum pm_node_id target,
86*8ce93ec9SRonak Jain 				      enum pm_request_ack ack,
87*8ce93ec9SRonak Jain 				      uint32_t flag);
88a92681d9SJay Buddhabhatti 
89a92681d9SJay Buddhabhatti enum pm_ret_status pm_req_wakeup(enum pm_node_id target,
90a92681d9SJay Buddhabhatti 				 uint32_t set_address,
91a92681d9SJay Buddhabhatti 				 uintptr_t address,
92*8ce93ec9SRonak Jain 				 enum pm_request_ack ack,
93*8ce93ec9SRonak Jain 				 uint32_t flag);
94a92681d9SJay Buddhabhatti 
95a92681d9SJay Buddhabhatti enum pm_ret_status pm_set_wakeup_source(enum pm_node_id target,
96a92681d9SJay Buddhabhatti 					enum pm_node_id wkup_node,
97*8ce93ec9SRonak Jain 					uint32_t enable,
98*8ce93ec9SRonak Jain 					uint32_t flag);
99a92681d9SJay Buddhabhatti 
100*8ce93ec9SRonak Jain enum pm_ret_status pm_system_shutdown(uint32_t type, uint32_t subtype,
101*8ce93ec9SRonak Jain 				      uint32_t flag);
102a92681d9SJay Buddhabhatti 
103a92681d9SJay Buddhabhatti /* API functions for managing PM Slaves */
104a92681d9SJay Buddhabhatti enum pm_ret_status pm_req_node(enum pm_node_id nid,
105a92681d9SJay Buddhabhatti 			       uint32_t capabilities,
106a92681d9SJay Buddhabhatti 			       uint32_t qos,
107*8ce93ec9SRonak Jain 			       enum pm_request_ack ack,
108*8ce93ec9SRonak Jain 			       uint32_t flag);
109a92681d9SJay Buddhabhatti 
110a92681d9SJay Buddhabhatti enum pm_ret_status pm_set_requirement(enum pm_node_id nid,
111a92681d9SJay Buddhabhatti 				      uint32_t capabilities,
112a92681d9SJay Buddhabhatti 				      uint32_t qos,
113*8ce93ec9SRonak Jain 				      enum pm_request_ack ack,
114*8ce93ec9SRonak Jain 				      uint32_t flag);
115a92681d9SJay Buddhabhatti 
116a92681d9SJay Buddhabhatti /* Miscellaneous API functions */
117*8ce93ec9SRonak Jain enum pm_ret_status pm_get_api_version(uint32_t *version, uint32_t flag);
118a92681d9SJay Buddhabhatti enum pm_ret_status pm_get_node_status(enum pm_node_id nid,
119*8ce93ec9SRonak Jain 				      uint32_t *ret_buff, uint32_t flag);
120a92681d9SJay Buddhabhatti 
121a92681d9SJay Buddhabhatti /* Direct-Control API functions */
122a92681d9SJay Buddhabhatti enum pm_ret_status pm_mmio_write(uintptr_t address,
123a92681d9SJay Buddhabhatti 				 uint32_t mask,
124*8ce93ec9SRonak Jain 				 uint32_t value, uint32_t flag);
125*8ce93ec9SRonak Jain enum pm_ret_status pm_mmio_read(uintptr_t address, uint32_t *value,
126*8ce93ec9SRonak Jain 				uint32_t flag);
127a92681d9SJay Buddhabhatti enum pm_ret_status pm_fpga_load(uint32_t address_low,
128a92681d9SJay Buddhabhatti 				uint32_t address_high,
129a92681d9SJay Buddhabhatti 				uint32_t size,
130*8ce93ec9SRonak Jain 				uint32_t flags,
131*8ce93ec9SRonak Jain 				uint32_t security_flag);
132*8ce93ec9SRonak Jain enum pm_ret_status pm_fpga_get_status(uint32_t *value, uint32_t flag);
133a92681d9SJay Buddhabhatti 
134*8ce93ec9SRonak Jain enum pm_ret_status pm_get_chipid(uint32_t *value, uint32_t flag);
135a92681d9SJay Buddhabhatti enum pm_ret_status pm_secure_rsaaes(uint32_t address_low,
136a92681d9SJay Buddhabhatti 				    uint32_t address_high,
137a92681d9SJay Buddhabhatti 				    uint32_t size,
138*8ce93ec9SRonak Jain 				    uint32_t flags,
139*8ce93ec9SRonak Jain 				    uint32_t security_flag);
140a92681d9SJay Buddhabhatti uint32_t pm_get_shutdown_scope(void);
141a92681d9SJay Buddhabhatti enum pm_ret_status pm_get_callbackdata(uint32_t *data, size_t count);
142a92681d9SJay Buddhabhatti enum pm_ret_status pm_ioctl(enum pm_node_id nid,
143a92681d9SJay Buddhabhatti 			    uint32_t ioctl_id,
144a92681d9SJay Buddhabhatti 			    uint32_t arg1,
145a92681d9SJay Buddhabhatti 			    uint32_t arg2,
146*8ce93ec9SRonak Jain 			    uint32_t *value,
147*8ce93ec9SRonak Jain 			    uint32_t flag);
148*8ce93ec9SRonak Jain enum pm_ret_status pm_clock_enable(uint32_t clock_id, uint32_t flag);
149*8ce93ec9SRonak Jain enum pm_ret_status pm_clock_disable(uint32_t clock_id, uint32_t flag);
150a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_getstate(uint32_t clock_id,
151*8ce93ec9SRonak Jain 				     uint32_t *state, uint32_t flag);
152a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_setdivider(uint32_t clock_id,
153*8ce93ec9SRonak Jain 				       uint32_t divider, uint32_t flag);
154a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_getdivider(uint32_t clock_id,
155*8ce93ec9SRonak Jain 				       uint32_t *divider, uint32_t flag);
156a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_setparent(uint32_t clock_id,
157*8ce93ec9SRonak Jain 				      uint32_t parent_index, uint32_t flag);
158a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_getparent(uint32_t clock_id,
159*8ce93ec9SRonak Jain 				      uint32_t *parent_index, uint32_t flag);
16092f7de1eSJay Buddhabhatti void pm_query_data(enum pm_query_ids qid, uint32_t arg1, uint32_t arg2,
161*8ce93ec9SRonak Jain 		   uint32_t arg3, uint32_t *data, uint32_t flag);
162a92681d9SJay Buddhabhatti enum pm_ret_status pm_sha_hash(uint32_t address_high,
163a92681d9SJay Buddhabhatti 			       uint32_t address_low,
164a92681d9SJay Buddhabhatti 			       uint32_t size,
165*8ce93ec9SRonak Jain 			       uint32_t flags,
166*8ce93ec9SRonak Jain 			       uint32_t security_flag);
167a92681d9SJay Buddhabhatti enum pm_ret_status pm_rsa_core(uint32_t address_high,
168a92681d9SJay Buddhabhatti 			       uint32_t address_low,
169a92681d9SJay Buddhabhatti 			       uint32_t size,
170*8ce93ec9SRonak Jain 			       uint32_t flags,
171*8ce93ec9SRonak Jain 			       uint32_t security_flag);
172a92681d9SJay Buddhabhatti enum pm_ret_status pm_secure_image(uint32_t address_low,
173a92681d9SJay Buddhabhatti 				   uint32_t address_high,
174a92681d9SJay Buddhabhatti 				   uint32_t key_lo,
175a92681d9SJay Buddhabhatti 				   uint32_t key_hi,
176*8ce93ec9SRonak Jain 				   uint32_t *value,
177*8ce93ec9SRonak Jain 				   uint32_t flag);
178a92681d9SJay Buddhabhatti enum pm_ret_status pm_fpga_read(uint32_t reg_numframes,
179a92681d9SJay Buddhabhatti 				uint32_t address_low,
180a92681d9SJay Buddhabhatti 				uint32_t address_high,
181a92681d9SJay Buddhabhatti 				uint32_t readback_type,
182*8ce93ec9SRonak Jain 				uint32_t *value,
183*8ce93ec9SRonak Jain 				uint32_t flag);
184a92681d9SJay Buddhabhatti enum pm_ret_status pm_aes_engine(uint32_t address_high,
185a92681d9SJay Buddhabhatti 				 uint32_t address_low,
186*8ce93ec9SRonak Jain 				 uint32_t  *value,
187*8ce93ec9SRonak Jain 				 uint32_t flag);
188a92681d9SJay Buddhabhatti enum pm_ret_status pm_register_access(uint32_t register_access_id,
189a92681d9SJay Buddhabhatti 				      uint32_t address,
190a92681d9SJay Buddhabhatti 				      uint32_t mask,
191a92681d9SJay Buddhabhatti 				      uint32_t value,
192*8ce93ec9SRonak Jain 				      uint32_t *out,
193*8ce93ec9SRonak Jain 				      uint32_t flag);
194a92681d9SJay Buddhabhatti enum pm_ret_status pm_pll_set_parameter(enum pm_node_id nid,
195a92681d9SJay Buddhabhatti 					enum pm_pll_param param_id,
196*8ce93ec9SRonak Jain 					uint32_t value,
197*8ce93ec9SRonak Jain 					uint32_t flag);
198a92681d9SJay Buddhabhatti enum pm_ret_status pm_pll_get_parameter(enum pm_node_id nid,
199a92681d9SJay Buddhabhatti 					enum pm_pll_param param_id,
200*8ce93ec9SRonak Jain 					uint32_t *value,
201*8ce93ec9SRonak Jain 					uint32_t flag);
202*8ce93ec9SRonak Jain enum pm_ret_status pm_pll_set_mode(enum pm_node_id nid,
203*8ce93ec9SRonak Jain 				   enum pm_pll_mode mode,
204*8ce93ec9SRonak Jain 				   uint32_t flag);
205*8ce93ec9SRonak Jain enum pm_ret_status pm_pll_get_mode(enum pm_node_id nid,
206*8ce93ec9SRonak Jain 				   enum pm_pll_mode *mode,
207*8ce93ec9SRonak Jain 				   uint32_t flag);
208a92681d9SJay Buddhabhatti enum pm_ret_status pm_efuse_access(uint32_t address_high,
209*8ce93ec9SRonak Jain 				   uint32_t address_low, uint32_t *value,
210*8ce93ec9SRonak Jain 				   uint32_t flag);
211a92681d9SJay Buddhabhatti enum pm_ret_status pm_feature_check(uint32_t api_id, uint32_t *version,
212*8ce93ec9SRonak Jain 				    uint32_t *bit_mask, uint8_t len,
213*8ce93ec9SRonak Jain 				    uint32_t flag);
214*8ce93ec9SRonak Jain enum pm_ret_status check_api_dependency(uint8_t id, uint32_t flag);
215a92681d9SJay Buddhabhatti 
216a92681d9SJay Buddhabhatti #endif /* ZYNQMP_PM_API_SYS_H */
217