blob: a2597bc55f934f2fbaca1a1d7f86c4036f8fba1b [file] [log] [blame]
Soren Brinkmann76fcae32016-03-06 20:16:27 -08001/*
Michal Simek2a47faa2023-04-14 08:43:51 +02002 * Copyright (c) 2013-2022, Arm Limited and Contributors. All rights reserved.
Michal Simekd4ff2722023-04-20 08:01:03 +02003 * Copyright (c) 2023, Advanced Micro Devices, Inc. All rights reserved.
Soren Brinkmann76fcae32016-03-06 20:16:27 -08004 *
dp-armfa3cf0b2017-05-03 09:38:09 +01005 * SPDX-License-Identifier: BSD-3-Clause
Soren Brinkmann76fcae32016-03-06 20:16:27 -08006 */
7
Jay Buddhabhatti26e138a2022-12-21 23:03:35 -08008#ifndef ZYNQMP_PM_API_SYS_H
9#define ZYNQMP_PM_API_SYS_H
Soren Brinkmann76fcae32016-03-06 20:16:27 -080010
11#include <stdint.h>
Antonio Nino Diaze0f90632018-12-14 00:18:21 +000012
Soren Brinkmann76fcae32016-03-06 20:16:27 -080013#include "pm_defs.h"
Jay Buddhabhatti5b9f3912023-02-02 22:34:03 -080014#include "zynqmp_pm_defs.h"
Soren Brinkmann76fcae32016-03-06 20:16:27 -080015
Jay Buddhabhatti5b9f3912023-02-02 22:34:03 -080016enum pm_query_ids {
Rajan Vaja35116132018-01-17 02:39:25 -080017 PM_QID_INVALID,
18 PM_QID_CLOCK_GET_NAME,
19 PM_QID_CLOCK_GET_TOPOLOGY,
20 PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS,
21 PM_QID_CLOCK_GET_PARENTS,
22 PM_QID_CLOCK_GET_ATTRIBUTES,
Rajan Vajad5dd8362018-01-30 04:16:31 -080023 PM_QID_PINCTRL_GET_NUM_PINS,
24 PM_QID_PINCTRL_GET_NUM_FUNCTIONS,
25 PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS,
26 PM_QID_PINCTRL_GET_FUNCTION_NAME,
27 PM_QID_PINCTRL_GET_FUNCTION_GROUPS,
28 PM_QID_PINCTRL_GET_PIN_GROUPS,
Rajan Vajada959402018-07-20 03:16:27 -070029 PM_QID_CLOCK_GET_NUM_CLOCKS,
Rajan Vajab34deca2019-03-20 01:13:21 +053030 PM_QID_CLOCK_GET_MAX_DIVISOR,
Rajan Vaja35116132018-01-17 02:39:25 -080031};
32
Kalyani Akula6ebe4832020-11-22 22:42:10 -080033enum pm_register_access_id {
34 CONFIG_REG_WRITE,
35 CONFIG_REG_READ,
36};
37
Prasad Kummari7d0623a2023-06-09 14:32:00 +053038/*
Rajan Vaja0c0615a2021-10-12 03:30:09 -070039 * Assigning of argument values into array elements.
40 */
41#define PM_PACK_PAYLOAD1(pl, arg0) { \
42 pl[0] = (uint32_t)(arg0); \
43}
44
45#define PM_PACK_PAYLOAD2(pl, arg0, arg1) { \
46 pl[1] = (uint32_t)(arg1); \
47 PM_PACK_PAYLOAD1(pl, arg0); \
48}
49
50#define PM_PACK_PAYLOAD3(pl, arg0, arg1, arg2) { \
51 pl[2] = (uint32_t)(arg2); \
52 PM_PACK_PAYLOAD2(pl, arg0, arg1); \
53}
54
55#define PM_PACK_PAYLOAD4(pl, arg0, arg1, arg2, arg3) { \
56 pl[3] = (uint32_t)(arg3); \
57 PM_PACK_PAYLOAD3(pl, arg0, arg1, arg2); \
58}
59
60#define PM_PACK_PAYLOAD5(pl, arg0, arg1, arg2, arg3, arg4) { \
61 pl[4] = (uint32_t)(arg4); \
62 PM_PACK_PAYLOAD4(pl, arg0, arg1, arg2, arg3); \
63}
64
65#define PM_PACK_PAYLOAD6(pl, arg0, arg1, arg2, arg3, arg4, arg5) { \
66 pl[5] = (uint32_t)(arg5); \
67 PM_PACK_PAYLOAD5(pl, arg0, arg1, arg2, arg3, arg4); \
68}
69
Soren Brinkmann76fcae32016-03-06 20:16:27 -080070/**********************************************************
71 * System-level API function declarations
72 **********************************************************/
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +053073enum pm_ret_status pm_req_suspend(enum pm_node_id target,
Soren Brinkmann76fcae32016-03-06 20:16:27 -080074 enum pm_request_ack ack,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053075 uint32_t latency,
76 uint32_t state);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080077
78enum pm_ret_status pm_self_suspend(enum pm_node_id nid,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053079 uint32_t latency,
80 uint32_t state,
Soren Brinkmann76fcae32016-03-06 20:16:27 -080081 uintptr_t address);
82
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +053083enum pm_ret_status pm_force_powerdown(enum pm_node_id target,
Soren Brinkmann76fcae32016-03-06 20:16:27 -080084 enum pm_request_ack ack);
85
86enum pm_ret_status pm_abort_suspend(enum pm_abort_reason reason);
87
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +053088enum pm_ret_status pm_req_wakeup(enum pm_node_id target,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053089 uint32_t set_address,
Soren Brinkmann76fcae32016-03-06 20:16:27 -080090 uintptr_t address,
91 enum pm_request_ack ack);
92
93enum pm_ret_status pm_set_wakeup_source(enum pm_node_id target,
94 enum pm_node_id wkup_node,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053095 uint32_t enable);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080096
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053097enum pm_ret_status pm_system_shutdown(uint32_t type, uint32_t subtype);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080098
Soren Brinkmann76fcae32016-03-06 20:16:27 -080099/* API functions for managing PM Slaves */
100enum pm_ret_status pm_req_node(enum pm_node_id nid,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530101 uint32_t capabilities,
102 uint32_t qos,
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800103 enum pm_request_ack ack);
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800104
105enum pm_ret_status pm_set_requirement(enum pm_node_id nid,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530106 uint32_t capabilities,
107 uint32_t qos,
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800108 enum pm_request_ack ack);
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800109
110/* Miscellaneous API functions */
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530111enum pm_ret_status pm_get_api_version(uint32_t *version);
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +0530112enum pm_ret_status pm_get_node_status(enum pm_node_id nid,
Anes Hadziahmetagic1caf88e2017-01-27 18:42:44 +0100113 uint32_t *ret_buff);
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800114
115/* Direct-Control API functions */
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800116enum pm_ret_status pm_mmio_write(uintptr_t address,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530117 uint32_t mask,
118 uint32_t value);
119enum pm_ret_status pm_mmio_read(uintptr_t address, uint32_t *value);
Soren Brinkmann881788d2017-09-18 09:13:17 -0700120enum pm_ret_status pm_fpga_load(uint32_t address_low,
121 uint32_t address_high,
Nava kishore Manne68d460c2016-08-20 23:18:09 +0530122 uint32_t size,
123 uint32_t flags);
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530124enum pm_ret_status pm_fpga_get_status(uint32_t *value);
Nava kishore Manne68d460c2016-08-20 23:18:09 +0530125
Soren Brinkmanncb366812016-09-22 12:21:11 -0700126enum pm_ret_status pm_get_chipid(uint32_t *value);
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +0530127enum pm_ret_status pm_secure_rsaaes(uint32_t address_low,
128 uint32_t address_high,
Siva Durga Prasad Paladugude93d982018-04-30 15:49:27 +0530129 uint32_t size,
130 uint32_t flags);
HariBabu Gattem6535f862022-09-22 02:45:16 -0700131uint32_t pm_get_shutdown_scope(void);
Naman Trivedi Manojbhaibeec83f2023-03-07 12:41:12 +0530132enum pm_ret_status pm_get_callbackdata(uint32_t *data, size_t count);
Rajan Vaja5529a012018-01-17 02:39:23 -0800133enum pm_ret_status pm_ioctl(enum pm_node_id nid,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530134 uint32_t ioctl_id,
135 uint32_t arg1,
136 uint32_t arg2,
137 uint32_t *value);
138enum pm_ret_status pm_clock_enable(uint32_t clock_id);
139enum pm_ret_status pm_clock_disable(uint32_t clock_id);
140enum pm_ret_status pm_clock_getstate(uint32_t clock_id,
141 uint32_t *state);
142enum pm_ret_status pm_clock_setdivider(uint32_t clock_id,
143 uint32_t divider);
144enum pm_ret_status pm_clock_getdivider(uint32_t clock_id,
145 uint32_t *divider);
146enum pm_ret_status pm_clock_setrate(uint32_t clock_id,
Rajan Vaja35116132018-01-17 02:39:25 -0800147 uint64_t rate);
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530148enum pm_ret_status pm_clock_getrate(uint32_t clock_id,
Rajan Vaja35116132018-01-17 02:39:25 -0800149 uint64_t *rate);
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530150enum pm_ret_status pm_clock_setparent(uint32_t clock_id,
151 uint32_t parent_index);
152enum pm_ret_status pm_clock_getparent(uint32_t clock_id,
153 uint32_t *parent_index);
Jay Buddhabhatti5b9f3912023-02-02 22:34:03 -0800154void pm_query_data(enum pm_query_ids qid, uint32_t arg1, uint32_t arg2,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530155 uint32_t arg3, uint32_t *data);
Siva Durga Prasad Paladuguf3994cc2018-05-01 11:12:55 +0530156enum pm_ret_status pm_sha_hash(uint32_t address_high,
157 uint32_t address_low,
158 uint32_t size,
159 uint32_t flags);
160enum pm_ret_status pm_rsa_core(uint32_t address_high,
161 uint32_t address_low,
162 uint32_t size,
163 uint32_t flags);
Siva Durga Prasad Paladugua4ed4b22018-04-30 20:06:58 +0530164enum pm_ret_status pm_secure_image(uint32_t address_low,
165 uint32_t address_high,
166 uint32_t key_lo,
167 uint32_t key_hi,
168 uint32_t *value);
Siva Durga Prasad Paladugu7c6516a2018-09-04 17:41:34 +0530169enum pm_ret_status pm_fpga_read(uint32_t reg_numframes,
170 uint32_t address_low,
171 uint32_t address_high,
172 uint32_t readback_type,
173 uint32_t *value);
Siva Durga Prasad Paladugu8bd905b2018-09-04 18:05:50 +0530174enum pm_ret_status pm_aes_engine(uint32_t address_high,
175 uint32_t address_low,
176 uint32_t *value);
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530177enum pm_ret_status pm_register_access(uint32_t register_access_id,
178 uint32_t address,
179 uint32_t mask,
180 uint32_t value,
181 uint32_t *out);
Jolly Shaha7cc5ee2019-01-02 12:27:00 -0800182enum pm_ret_status pm_pll_set_parameter(enum pm_node_id nid,
Michal Simek08341b72022-03-09 08:53:20 +0100183 enum pm_pll_param param_id,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530184 uint32_t value);
Jolly Shahcb2f45d2019-01-04 11:28:38 -0800185enum pm_ret_status pm_pll_get_parameter(enum pm_node_id nid,
Michal Simek08341b72022-03-09 08:53:20 +0100186 enum pm_pll_param param_id,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530187 uint32_t *value);
Jolly Shah1f0d5852019-01-04 11:32:31 -0800188enum pm_ret_status pm_pll_set_mode(enum pm_node_id nid, enum pm_pll_mode mode);
Jolly Shah141421e2019-01-04 11:35:48 -0800189enum pm_ret_status pm_pll_get_mode(enum pm_node_id nid, enum pm_pll_mode *mode);
VNSL Durgadeb1a362020-11-23 04:46:04 -0800190enum pm_ret_status pm_efuse_access(uint32_t address_high,
191 uint32_t address_low, uint32_t *value);
Ronak Jain325bad12021-12-21 01:39:59 -0800192enum pm_ret_status pm_feature_check(uint32_t api_id, uint32_t *version,
193 uint32_t *bit_mask, uint8_t len);
194enum pm_ret_status check_api_dependency(uint8_t id);
Ronak Jain42d6f392021-08-11 00:26:28 -0700195
Jay Buddhabhatti26e138a2022-12-21 23:03:35 -0800196#endif /* ZYNQMP_PM_API_SYS_H */