blob: 9ba9475d47cf7a0e2a77a2f5dcd5eba4deef080d [file] [log] [blame]
Soren Brinkmann76fcae32016-03-06 20:16:27 -08001/*
Ronak Jain52de5942022-01-20 23:11:18 -08002 * Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved.
Soren Brinkmann76fcae32016-03-06 20:16:27 -08003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Soren Brinkmann76fcae32016-03-06 20:16:27 -08005 */
6
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +00007#ifndef PM_API_SYS_H
8#define PM_API_SYS_H
Soren Brinkmann76fcae32016-03-06 20:16:27 -08009
10#include <stdint.h>
Antonio Nino Diaze0f90632018-12-14 00:18:21 +000011
Soren Brinkmann76fcae32016-03-06 20:16:27 -080012#include "pm_defs.h"
13
Rajan Vaja35116132018-01-17 02:39:25 -080014enum pm_query_id {
15 PM_QID_INVALID,
16 PM_QID_CLOCK_GET_NAME,
17 PM_QID_CLOCK_GET_TOPOLOGY,
18 PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS,
19 PM_QID_CLOCK_GET_PARENTS,
20 PM_QID_CLOCK_GET_ATTRIBUTES,
Rajan Vajad5dd8362018-01-30 04:16:31 -080021 PM_QID_PINCTRL_GET_NUM_PINS,
22 PM_QID_PINCTRL_GET_NUM_FUNCTIONS,
23 PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS,
24 PM_QID_PINCTRL_GET_FUNCTION_NAME,
25 PM_QID_PINCTRL_GET_FUNCTION_GROUPS,
26 PM_QID_PINCTRL_GET_PIN_GROUPS,
Rajan Vajada959402018-07-20 03:16:27 -070027 PM_QID_CLOCK_GET_NUM_CLOCKS,
Rajan Vajab34deca2019-03-20 01:13:21 +053028 PM_QID_CLOCK_GET_MAX_DIVISOR,
Rajan Vaja35116132018-01-17 02:39:25 -080029};
30
Kalyani Akula6ebe4832020-11-22 22:42:10 -080031enum pm_register_access_id {
32 CONFIG_REG_WRITE,
33 CONFIG_REG_READ,
34};
35
Rajan Vaja0c0615a2021-10-12 03:30:09 -070036/**
37 * Assigning of argument values into array elements.
38 */
39#define PM_PACK_PAYLOAD1(pl, arg0) { \
40 pl[0] = (uint32_t)(arg0); \
41}
42
43#define PM_PACK_PAYLOAD2(pl, arg0, arg1) { \
44 pl[1] = (uint32_t)(arg1); \
45 PM_PACK_PAYLOAD1(pl, arg0); \
46}
47
48#define PM_PACK_PAYLOAD3(pl, arg0, arg1, arg2) { \
49 pl[2] = (uint32_t)(arg2); \
50 PM_PACK_PAYLOAD2(pl, arg0, arg1); \
51}
52
53#define PM_PACK_PAYLOAD4(pl, arg0, arg1, arg2, arg3) { \
54 pl[3] = (uint32_t)(arg3); \
55 PM_PACK_PAYLOAD3(pl, arg0, arg1, arg2); \
56}
57
58#define PM_PACK_PAYLOAD5(pl, arg0, arg1, arg2, arg3, arg4) { \
59 pl[4] = (uint32_t)(arg4); \
60 PM_PACK_PAYLOAD4(pl, arg0, arg1, arg2, arg3); \
61}
62
63#define PM_PACK_PAYLOAD6(pl, arg0, arg1, arg2, arg3, arg4, arg5) { \
64 pl[5] = (uint32_t)(arg5); \
65 PM_PACK_PAYLOAD5(pl, arg0, arg1, arg2, arg3, arg4); \
66}
67
Soren Brinkmann76fcae32016-03-06 20:16:27 -080068/**********************************************************
69 * System-level API function declarations
70 **********************************************************/
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +053071enum pm_ret_status pm_req_suspend(enum pm_node_id target,
Soren Brinkmann76fcae32016-03-06 20:16:27 -080072 enum pm_request_ack ack,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053073 uint32_t latency,
74 uint32_t state);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080075
76enum pm_ret_status pm_self_suspend(enum pm_node_id nid,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053077 uint32_t latency,
78 uint32_t state,
Soren Brinkmann76fcae32016-03-06 20:16:27 -080079 uintptr_t address);
80
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +053081enum pm_ret_status pm_force_powerdown(enum pm_node_id target,
Soren Brinkmann76fcae32016-03-06 20:16:27 -080082 enum pm_request_ack ack);
83
84enum pm_ret_status pm_abort_suspend(enum pm_abort_reason reason);
85
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +053086enum pm_ret_status pm_req_wakeup(enum pm_node_id target,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053087 uint32_t set_address,
Soren Brinkmann76fcae32016-03-06 20:16:27 -080088 uintptr_t address,
89 enum pm_request_ack ack);
90
91enum pm_ret_status pm_set_wakeup_source(enum pm_node_id target,
92 enum pm_node_id wkup_node,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053093 uint32_t enable);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080094
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053095enum pm_ret_status pm_system_shutdown(uint32_t type, uint32_t subtype);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080096
Soren Brinkmann76fcae32016-03-06 20:16:27 -080097/* API functions for managing PM Slaves */
98enum pm_ret_status pm_req_node(enum pm_node_id nid,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +053099 uint32_t capabilities,
100 uint32_t qos,
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800101 enum pm_request_ack ack);
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800102
103enum pm_ret_status pm_set_requirement(enum pm_node_id nid,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530104 uint32_t capabilities,
105 uint32_t qos,
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800106 enum pm_request_ack ack);
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800107
108/* Miscellaneous API functions */
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530109enum pm_ret_status pm_get_api_version(uint32_t *version);
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +0530110enum pm_ret_status pm_get_node_status(enum pm_node_id nid,
Anes Hadziahmetagic1caf88e2017-01-27 18:42:44 +0100111 uint32_t *ret_buff);
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800112
113/* Direct-Control API functions */
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800114enum pm_ret_status pm_mmio_write(uintptr_t address,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530115 uint32_t mask,
116 uint32_t value);
117enum pm_ret_status pm_mmio_read(uintptr_t address, uint32_t *value);
Soren Brinkmann881788d2017-09-18 09:13:17 -0700118enum pm_ret_status pm_fpga_load(uint32_t address_low,
119 uint32_t address_high,
Nava kishore Manne68d460c2016-08-20 23:18:09 +0530120 uint32_t size,
121 uint32_t flags);
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530122enum pm_ret_status pm_fpga_get_status(uint32_t *value);
Nava kishore Manne68d460c2016-08-20 23:18:09 +0530123
Soren Brinkmanncb366812016-09-22 12:21:11 -0700124enum pm_ret_status pm_get_chipid(uint32_t *value);
Venkatesh Yadav Abbarapuc70726f2022-05-16 17:44:33 +0530125enum pm_ret_status pm_secure_rsaaes(uint32_t address_low,
126 uint32_t address_high,
Siva Durga Prasad Paladugude93d982018-04-30 15:49:27 +0530127 uint32_t size,
128 uint32_t flags);
HariBabu Gattem6535f862022-09-22 02:45:16 -0700129uint32_t pm_get_shutdown_scope(void);
Rajan Vaja02d18422019-03-04 11:09:39 +0530130void pm_get_callbackdata(uint32_t *data, size_t count);
Rajan Vaja5529a012018-01-17 02:39:23 -0800131enum pm_ret_status pm_ioctl(enum pm_node_id nid,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530132 uint32_t ioctl_id,
133 uint32_t arg1,
134 uint32_t arg2,
135 uint32_t *value);
136enum pm_ret_status pm_clock_enable(uint32_t clock_id);
137enum pm_ret_status pm_clock_disable(uint32_t clock_id);
138enum pm_ret_status pm_clock_getstate(uint32_t clock_id,
139 uint32_t *state);
140enum pm_ret_status pm_clock_setdivider(uint32_t clock_id,
141 uint32_t divider);
142enum pm_ret_status pm_clock_getdivider(uint32_t clock_id,
143 uint32_t *divider);
144enum pm_ret_status pm_clock_setrate(uint32_t clock_id,
Rajan Vaja35116132018-01-17 02:39:25 -0800145 uint64_t rate);
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530146enum pm_ret_status pm_clock_getrate(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_setparent(uint32_t clock_id,
149 uint32_t parent_index);
150enum pm_ret_status pm_clock_getparent(uint32_t clock_id,
151 uint32_t *parent_index);
152void pm_query_data(enum pm_query_id qid, uint32_t arg1, uint32_t arg2,
153 uint32_t arg3, uint32_t *data);
Siva Durga Prasad Paladuguf3994cc2018-05-01 11:12:55 +0530154enum pm_ret_status pm_sha_hash(uint32_t address_high,
155 uint32_t address_low,
156 uint32_t size,
157 uint32_t flags);
158enum pm_ret_status pm_rsa_core(uint32_t address_high,
159 uint32_t address_low,
160 uint32_t size,
161 uint32_t flags);
Siva Durga Prasad Paladugua4ed4b22018-04-30 20:06:58 +0530162enum pm_ret_status pm_secure_image(uint32_t address_low,
163 uint32_t address_high,
164 uint32_t key_lo,
165 uint32_t key_hi,
166 uint32_t *value);
Siva Durga Prasad Paladugu7c6516a2018-09-04 17:41:34 +0530167enum pm_ret_status pm_fpga_read(uint32_t reg_numframes,
168 uint32_t address_low,
169 uint32_t address_high,
170 uint32_t readback_type,
171 uint32_t *value);
Siva Durga Prasad Paladugu8bd905b2018-09-04 18:05:50 +0530172enum pm_ret_status pm_aes_engine(uint32_t address_high,
173 uint32_t address_low,
174 uint32_t *value);
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530175enum pm_ret_status pm_register_access(uint32_t register_access_id,
176 uint32_t address,
177 uint32_t mask,
178 uint32_t value,
179 uint32_t *out);
Jolly Shaha7cc5ee2019-01-02 12:27:00 -0800180enum pm_ret_status pm_pll_set_parameter(enum pm_node_id nid,
Michal Simek08341b72022-03-09 08:53:20 +0100181 enum pm_pll_param param_id,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530182 uint32_t value);
Jolly Shahcb2f45d2019-01-04 11:28:38 -0800183enum pm_ret_status pm_pll_get_parameter(enum pm_node_id nid,
Michal Simek08341b72022-03-09 08:53:20 +0100184 enum pm_pll_param param_id,
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530185 uint32_t *value);
Jolly Shah1f0d5852019-01-04 11:32:31 -0800186enum pm_ret_status pm_pll_set_mode(enum pm_node_id nid, enum pm_pll_mode mode);
Jolly Shah141421e2019-01-04 11:35:48 -0800187enum pm_ret_status pm_pll_get_mode(enum pm_node_id nid, enum pm_pll_mode *mode);
VNSL Durgadeb1a362020-11-23 04:46:04 -0800188enum pm_ret_status pm_efuse_access(uint32_t address_high,
189 uint32_t address_low, uint32_t *value);
Venkatesh Yadav Abbarapue7c45382022-05-19 14:49:49 +0530190enum pm_ret_status em_set_action(uint32_t *value);
191enum pm_ret_status em_remove_action(uint32_t *value);
192enum pm_ret_status em_send_errors(uint32_t *value);
Ronak Jain325bad12021-12-21 01:39:59 -0800193enum pm_ret_status pm_feature_check(uint32_t api_id, uint32_t *version,
194 uint32_t *bit_mask, uint8_t len);
195enum pm_ret_status check_api_dependency(uint8_t id);
Ronak Jain42d6f392021-08-11 00:26:28 -0700196
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +0000197#endif /* PM_API_SYS_H */