blob: ff66d3f024a84dc2173fdae8e208c27f64017e51 [file] [log] [blame]
Soren Brinkmann76fcae32016-03-06 20:16:27 -08001/*
Rajan Vaja02d18422019-03-04 11:09:39 +05302 * Copyright (c) 2013-2020, 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
Soren Brinkmann76fcae32016-03-06 20:16:27 -080031/**********************************************************
32 * System-level API function declarations
33 **********************************************************/
34enum pm_ret_status pm_req_suspend(enum pm_node_id nid,
35 enum pm_request_ack ack,
36 unsigned int latency,
37 unsigned int state);
38
39enum pm_ret_status pm_self_suspend(enum pm_node_id nid,
40 unsigned int latency,
41 unsigned int state,
42 uintptr_t address);
43
44enum pm_ret_status pm_force_powerdown(enum pm_node_id nid,
45 enum pm_request_ack ack);
46
47enum pm_ret_status pm_abort_suspend(enum pm_abort_reason reason);
48
49enum pm_ret_status pm_req_wakeup(enum pm_node_id nid,
50 unsigned int set_address,
51 uintptr_t address,
52 enum pm_request_ack ack);
53
54enum pm_ret_status pm_set_wakeup_source(enum pm_node_id target,
55 enum pm_node_id wkup_node,
56 unsigned int enable);
57
Soren Brinkmann58fbb9b2016-09-02 09:50:54 -070058enum pm_ret_status pm_system_shutdown(unsigned int type, unsigned int subtype);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080059
60enum pm_ret_status pm_init_suspend_cb(enum pm_suspend_reason reason,
61 unsigned int latency,
62 unsigned int state,
63 unsigned int timeout);
64
65/* API functions for managing PM Slaves */
66enum pm_ret_status pm_req_node(enum pm_node_id nid,
67 unsigned int capabilities,
68 unsigned int qos,
69 enum pm_request_ack ack);
70enum pm_ret_status pm_release_node(enum pm_node_id nid);
71
72enum pm_ret_status pm_set_requirement(enum pm_node_id nid,
73 unsigned int capabilities,
74 unsigned int qos,
75 enum pm_request_ack ack);
76enum pm_ret_status pm_set_max_latency(enum pm_node_id nid,
77 unsigned int latency);
78
79/* Miscellaneous API functions */
80enum pm_ret_status pm_get_api_version(unsigned int *version);
81enum pm_ret_status pm_set_configuration(unsigned int phys_addr);
Filip Drazicf2ddd912017-03-15 11:50:47 +010082enum pm_ret_status pm_init_finalize(void);
Anes Hadziahmetagic1caf88e2017-01-27 18:42:44 +010083enum pm_ret_status pm_get_node_status(enum pm_node_id node,
84 uint32_t *ret_buff);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080085enum pm_ret_status pm_register_notifier(enum pm_node_id nid,
86 unsigned int event,
87 unsigned int wake,
88 unsigned int enable);
89enum pm_ret_status pm_get_op_characteristic(enum pm_node_id nid,
Anes Hadziahmetagic92aee012016-05-12 16:17:30 +020090 enum pm_opchar_type type,
91 uint32_t *result);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080092enum pm_ret_status pm_acknowledge_cb(enum pm_node_id nid,
93 enum pm_ret_status status,
94 unsigned int oppoint);
95enum pm_ret_status pm_notify_cb(enum pm_node_id nid,
96 unsigned int event,
97 unsigned int oppoint);
98
99/* Direct-Control API functions */
100enum pm_ret_status pm_reset_assert(unsigned int reset_id,
101 unsigned int assert);
102enum pm_ret_status pm_reset_get_status(unsigned int reset_id,
103 unsigned int *reset_status);
104enum pm_ret_status pm_mmio_write(uintptr_t address,
105 unsigned int mask,
106 unsigned int value);
107enum pm_ret_status pm_mmio_read(uintptr_t address, unsigned int *value);
Soren Brinkmann881788d2017-09-18 09:13:17 -0700108enum pm_ret_status pm_fpga_load(uint32_t address_low,
109 uint32_t address_high,
Nava kishore Manne68d460c2016-08-20 23:18:09 +0530110 uint32_t size,
111 uint32_t flags);
112enum pm_ret_status pm_fpga_get_status(unsigned int *value);
113
Soren Brinkmanncb366812016-09-22 12:21:11 -0700114enum pm_ret_status pm_get_chipid(uint32_t *value);
Siva Durga Prasad Paladugude93d982018-04-30 15:49:27 +0530115enum pm_ret_status pm_secure_rsaaes(uint32_t address_high,
116 uint32_t address_low,
117 uint32_t size,
118 uint32_t flags);
Siva Durga Prasad Paladugu1f80d3f2018-04-30 15:56:10 +0530119unsigned int pm_get_shutdown_scope(void);
Rajan Vaja02d18422019-03-04 11:09:39 +0530120void pm_get_callbackdata(uint32_t *data, size_t count);
Rajan Vaja83687612018-01-17 02:39:20 -0800121enum pm_ret_status pm_pinctrl_request(unsigned int pin);
122enum pm_ret_status pm_pinctrl_release(unsigned int pin);
123enum pm_ret_status pm_pinctrl_get_function(unsigned int pin,
Jolly Shah69fb5bf2018-02-07 16:25:41 -0800124 enum pm_node_id *nid);
Rajan Vaja83687612018-01-17 02:39:20 -0800125enum pm_ret_status pm_pinctrl_set_function(unsigned int pin,
Jolly Shah69fb5bf2018-02-07 16:25:41 -0800126 enum pm_node_id nid);
Rajan Vaja83687612018-01-17 02:39:20 -0800127enum pm_ret_status pm_pinctrl_get_config(unsigned int pin,
128 unsigned int param,
129 unsigned int *value);
130enum pm_ret_status pm_pinctrl_set_config(unsigned int pin,
131 unsigned int param,
132 unsigned int value);
Rajan Vaja5529a012018-01-17 02:39:23 -0800133enum pm_ret_status pm_ioctl(enum pm_node_id nid,
134 unsigned int ioctl_id,
135 unsigned int arg1,
136 unsigned int arg2,
137 unsigned int *value);
Rajan Vaja35116132018-01-17 02:39:25 -0800138enum pm_ret_status pm_clock_enable(unsigned int clock_id);
139enum pm_ret_status pm_clock_disable(unsigned int clock_id);
140enum pm_ret_status pm_clock_getstate(unsigned int clock_id,
141 unsigned int *state);
142enum pm_ret_status pm_clock_setdivider(unsigned int clock_id,
143 unsigned int divider);
144enum pm_ret_status pm_clock_getdivider(unsigned int clock_id,
145 unsigned int *divider);
146enum pm_ret_status pm_clock_setrate(unsigned int clock_id,
147 uint64_t rate);
148enum pm_ret_status pm_clock_getrate(unsigned int clock_id,
149 uint64_t *rate);
150enum pm_ret_status pm_clock_setparent(unsigned int clock_id,
151 unsigned int parent_id);
152enum pm_ret_status pm_clock_getparent(unsigned int clock_id,
153 unsigned int *parent_id);
154enum pm_ret_status pm_query_data(enum pm_query_id qid,
155 unsigned int arg1,
156 unsigned int arg2,
157 unsigned int arg3,
158 unsigned int *data);
Siva Durga Prasad Paladuguf3994cc2018-05-01 11:12:55 +0530159enum pm_ret_status pm_sha_hash(uint32_t address_high,
160 uint32_t address_low,
161 uint32_t size,
162 uint32_t flags);
163enum pm_ret_status pm_rsa_core(uint32_t address_high,
164 uint32_t address_low,
165 uint32_t size,
166 uint32_t flags);
Siva Durga Prasad Paladugua4ed4b22018-04-30 20:06:58 +0530167enum pm_ret_status pm_secure_image(uint32_t address_low,
168 uint32_t address_high,
169 uint32_t key_lo,
170 uint32_t key_hi,
171 uint32_t *value);
Siva Durga Prasad Paladugu7c6516a2018-09-04 17:41:34 +0530172
173enum pm_ret_status pm_fpga_read(uint32_t reg_numframes,
174 uint32_t address_low,
175 uint32_t address_high,
176 uint32_t readback_type,
177 uint32_t *value);
Siva Durga Prasad Paladugu8bd905b2018-09-04 18:05:50 +0530178enum pm_ret_status pm_aes_engine(uint32_t address_high,
179 uint32_t address_low,
180 uint32_t *value);
Siva Durga Prasad Paladugu7c6516a2018-09-04 17:41:34 +0530181
Jolly Shaha7cc5ee2019-01-02 12:27:00 -0800182enum pm_ret_status pm_pll_set_parameter(enum pm_node_id nid,
183 enum pm_pll_param param_id,
184 unsigned int value);
185
Jolly Shahcb2f45d2019-01-04 11:28:38 -0800186enum pm_ret_status pm_pll_get_parameter(enum pm_node_id nid,
187 enum pm_pll_param param_id,
188 unsigned int *value);
189
Jolly Shah1f0d5852019-01-04 11:32:31 -0800190enum pm_ret_status pm_pll_set_mode(enum pm_node_id nid, enum pm_pll_mode mode);
Jolly Shah141421e2019-01-04 11:35:48 -0800191enum pm_ret_status pm_pll_get_mode(enum pm_node_id nid, enum pm_pll_mode *mode);
Jolly Shah1f0d5852019-01-04 11:32:31 -0800192
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +0000193#endif /* PM_API_SYS_H */