blob: 8726eb767511e5a606ef07c18a820a65b9dfe462 [file] [log] [blame]
Soren Brinkmann76fcae32016-03-06 20:16:27 -08001/*
Rajan Vaja83687612018-01-17 02:39:20 -08002 * Copyright (c) 2013-2018, 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
7#ifndef _PM_API_SYS_H_
8#define _PM_API_SYS_H_
9
10#include <stdint.h>
11#include "pm_defs.h"
12
Rajan Vaja35116132018-01-17 02:39:25 -080013enum pm_query_id {
14 PM_QID_INVALID,
15 PM_QID_CLOCK_GET_NAME,
16 PM_QID_CLOCK_GET_TOPOLOGY,
17 PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS,
18 PM_QID_CLOCK_GET_PARENTS,
19 PM_QID_CLOCK_GET_ATTRIBUTES,
Rajan Vajad5dd8362018-01-30 04:16:31 -080020 PM_QID_PINCTRL_GET_NUM_PINS,
21 PM_QID_PINCTRL_GET_NUM_FUNCTIONS,
22 PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS,
23 PM_QID_PINCTRL_GET_FUNCTION_NAME,
24 PM_QID_PINCTRL_GET_FUNCTION_GROUPS,
25 PM_QID_PINCTRL_GET_PIN_GROUPS,
Rajan Vaja35116132018-01-17 02:39:25 -080026};
27
Soren Brinkmann76fcae32016-03-06 20:16:27 -080028/**********************************************************
29 * System-level API function declarations
30 **********************************************************/
31enum pm_ret_status pm_req_suspend(enum pm_node_id nid,
32 enum pm_request_ack ack,
33 unsigned int latency,
34 unsigned int state);
35
36enum pm_ret_status pm_self_suspend(enum pm_node_id nid,
37 unsigned int latency,
38 unsigned int state,
39 uintptr_t address);
40
41enum pm_ret_status pm_force_powerdown(enum pm_node_id nid,
42 enum pm_request_ack ack);
43
44enum pm_ret_status pm_abort_suspend(enum pm_abort_reason reason);
45
46enum pm_ret_status pm_req_wakeup(enum pm_node_id nid,
47 unsigned int set_address,
48 uintptr_t address,
49 enum pm_request_ack ack);
50
51enum pm_ret_status pm_set_wakeup_source(enum pm_node_id target,
52 enum pm_node_id wkup_node,
53 unsigned int enable);
54
Soren Brinkmann58fbb9b2016-09-02 09:50:54 -070055enum pm_ret_status pm_system_shutdown(unsigned int type, unsigned int subtype);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080056
57enum pm_ret_status pm_init_suspend_cb(enum pm_suspend_reason reason,
58 unsigned int latency,
59 unsigned int state,
60 unsigned int timeout);
61
62/* API functions for managing PM Slaves */
63enum pm_ret_status pm_req_node(enum pm_node_id nid,
64 unsigned int capabilities,
65 unsigned int qos,
66 enum pm_request_ack ack);
67enum pm_ret_status pm_release_node(enum pm_node_id nid);
68
69enum pm_ret_status pm_set_requirement(enum pm_node_id nid,
70 unsigned int capabilities,
71 unsigned int qos,
72 enum pm_request_ack ack);
73enum pm_ret_status pm_set_max_latency(enum pm_node_id nid,
74 unsigned int latency);
75
76/* Miscellaneous API functions */
77enum pm_ret_status pm_get_api_version(unsigned int *version);
78enum pm_ret_status pm_set_configuration(unsigned int phys_addr);
Anes Hadziahmetagic1caf88e2017-01-27 18:42:44 +010079enum pm_ret_status pm_get_node_status(enum pm_node_id node,
80 uint32_t *ret_buff);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080081enum pm_ret_status pm_register_notifier(enum pm_node_id nid,
82 unsigned int event,
83 unsigned int wake,
84 unsigned int enable);
85enum pm_ret_status pm_get_op_characteristic(enum pm_node_id nid,
Anes Hadziahmetagic92aee012016-05-12 16:17:30 +020086 enum pm_opchar_type type,
87 uint32_t *result);
Soren Brinkmann76fcae32016-03-06 20:16:27 -080088enum pm_ret_status pm_acknowledge_cb(enum pm_node_id nid,
89 enum pm_ret_status status,
90 unsigned int oppoint);
91enum pm_ret_status pm_notify_cb(enum pm_node_id nid,
92 unsigned int event,
93 unsigned int oppoint);
94
95/* Direct-Control API functions */
96enum pm_ret_status pm_reset_assert(unsigned int reset_id,
97 unsigned int assert);
98enum pm_ret_status pm_reset_get_status(unsigned int reset_id,
99 unsigned int *reset_status);
100enum pm_ret_status pm_mmio_write(uintptr_t address,
101 unsigned int mask,
102 unsigned int value);
103enum pm_ret_status pm_mmio_read(uintptr_t address, unsigned int *value);
Soren Brinkmann881788d2017-09-18 09:13:17 -0700104enum pm_ret_status pm_fpga_load(uint32_t address_low,
105 uint32_t address_high,
Nava kishore Manne68d460c2016-08-20 23:18:09 +0530106 uint32_t size,
107 uint32_t flags);
108enum pm_ret_status pm_fpga_get_status(unsigned int *value);
109
Soren Brinkmanncb366812016-09-22 12:21:11 -0700110enum pm_ret_status pm_get_chipid(uint32_t *value);
Soren Brinkmann84f0af42016-09-30 14:24:25 -0700111void pm_get_callbackdata(uint32_t *data, size_t count);
Rajan Vaja83687612018-01-17 02:39:20 -0800112enum pm_ret_status pm_pinctrl_request(unsigned int pin);
113enum pm_ret_status pm_pinctrl_release(unsigned int pin);
114enum pm_ret_status pm_pinctrl_get_function(unsigned int pin,
Jolly Shah69fb5bf2018-02-07 16:25:41 -0800115 enum pm_node_id *nid);
Rajan Vaja83687612018-01-17 02:39:20 -0800116enum pm_ret_status pm_pinctrl_set_function(unsigned int pin,
Jolly Shah69fb5bf2018-02-07 16:25:41 -0800117 enum pm_node_id nid);
Rajan Vaja83687612018-01-17 02:39:20 -0800118enum pm_ret_status pm_pinctrl_get_config(unsigned int pin,
119 unsigned int param,
120 unsigned int *value);
121enum pm_ret_status pm_pinctrl_set_config(unsigned int pin,
122 unsigned int param,
123 unsigned int value);
Rajan Vaja5529a012018-01-17 02:39:23 -0800124enum pm_ret_status pm_ioctl(enum pm_node_id nid,
125 unsigned int ioctl_id,
126 unsigned int arg1,
127 unsigned int arg2,
128 unsigned int *value);
Rajan Vaja35116132018-01-17 02:39:25 -0800129enum pm_ret_status pm_clock_enable(unsigned int clock_id);
130enum pm_ret_status pm_clock_disable(unsigned int clock_id);
131enum pm_ret_status pm_clock_getstate(unsigned int clock_id,
132 unsigned int *state);
133enum pm_ret_status pm_clock_setdivider(unsigned int clock_id,
134 unsigned int divider);
135enum pm_ret_status pm_clock_getdivider(unsigned int clock_id,
136 unsigned int *divider);
137enum pm_ret_status pm_clock_setrate(unsigned int clock_id,
138 uint64_t rate);
139enum pm_ret_status pm_clock_getrate(unsigned int clock_id,
140 uint64_t *rate);
141enum pm_ret_status pm_clock_setparent(unsigned int clock_id,
142 unsigned int parent_id);
143enum pm_ret_status pm_clock_getparent(unsigned int clock_id,
144 unsigned int *parent_id);
145enum pm_ret_status pm_query_data(enum pm_query_id qid,
146 unsigned int arg1,
147 unsigned int arg2,
148 unsigned int arg3,
149 unsigned int *data);
Soren Brinkmann76fcae32016-03-06 20:16:27 -0800150#endif /* _PM_API_SYS_H_ */