aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/firmware
diff options
context:
space:
mode:
authorRajan Vaja <rajan.vaja@xilinx.com>2019-02-01 17:08:49 -0500
committerMichal Simek <michal.simek@xilinx.com>2019-02-12 07:37:48 -0500
commitc1986ac3d483b051fc237aea3e9812fd1bb4d239 (patch)
tree3d1cd2a720fb1f965c1526bd9c5603b056cbda1c /include/linux/firmware
parent8fd27fb4cf76a64d4ea4814b358541477dc7a31e (diff)
firmware: xilinx: Add APIs to control node status/power
Add Xilinx ZynqMP firmware APIs to control node status and power. These APIs allows turning on/off power domain and setting capabilities of devices present in power domain. Signed-off-by: Rajan Vaja <rajan.vaja@xilinx.com> Signed-off-by: Jolly Shah <jolly.shah@xilinx.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Diffstat (limited to 'include/linux/firmware')
-rw-r--r--include/linux/firmware/xlnx-zynqmp.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/include/linux/firmware/xlnx-zynqmp.h b/include/linux/firmware/xlnx-zynqmp.h
index 56b2108a2148..642dab10f65d 100644
--- a/include/linux/firmware/xlnx-zynqmp.h
+++ b/include/linux/firmware/xlnx-zynqmp.h
@@ -40,8 +40,19 @@
40/* Payload size (consists of callback API ID + arguments) */ 40/* Payload size (consists of callback API ID + arguments) */
41#define CB_PAYLOAD_SIZE (CB_ARG_CNT + 1) 41#define CB_PAYLOAD_SIZE (CB_ARG_CNT + 1)
42 42
43#define ZYNQMP_PM_MAX_QOS 100U
44
45/* Node capabilities */
46#define ZYNQMP_PM_CAPABILITY_ACCESS 0x1U
47#define ZYNQMP_PM_CAPABILITY_CONTEXT 0x2U
48#define ZYNQMP_PM_CAPABILITY_WAKEUP 0x4U
49#define ZYNQMP_PM_CAPABILITY_POWER 0x8U
50
43enum pm_api_id { 51enum pm_api_id {
44 PM_GET_API_VERSION = 1, 52 PM_GET_API_VERSION = 1,
53 PM_REQUEST_NODE = 13,
54 PM_RELEASE_NODE,
55 PM_SET_REQUIREMENT,
45 PM_RESET_ASSERT = 17, 56 PM_RESET_ASSERT = 17,
46 PM_RESET_GET_STATUS, 57 PM_RESET_GET_STATUS,
47 PM_PM_INIT_FINALIZE = 21, 58 PM_PM_INIT_FINALIZE = 21,
@@ -224,6 +235,12 @@ enum zynqmp_pm_suspend_reason {
224 SUSPEND_SYSTEM_SHUTDOWN, 235 SUSPEND_SYSTEM_SHUTDOWN,
225}; 236};
226 237
238enum zynqmp_pm_request_ack {
239 ZYNQMP_PM_REQUEST_ACK_NO = 1,
240 ZYNQMP_PM_REQUEST_ACK_BLOCKING,
241 ZYNQMP_PM_REQUEST_ACK_NON_BLOCKING,
242};
243
227/** 244/**
228 * struct zynqmp_pm_query_data - PM query data 245 * struct zynqmp_pm_query_data - PM query data
229 * @qid: query ID 246 * @qid: query ID
@@ -257,6 +274,15 @@ struct zynqmp_eemi_ops {
257 int (*reset_get_status)(const enum zynqmp_pm_reset reset, u32 *status); 274 int (*reset_get_status)(const enum zynqmp_pm_reset reset, u32 *status);
258 int (*init_finalize)(void); 275 int (*init_finalize)(void);
259 int (*set_suspend_mode)(u32 mode); 276 int (*set_suspend_mode)(u32 mode);
277 int (*request_node)(const u32 node,
278 const u32 capabilities,
279 const u32 qos,
280 const enum zynqmp_pm_request_ack ack);
281 int (*release_node)(const u32 node);
282 int (*set_requirement)(const u32 node,
283 const u32 capabilities,
284 const u32 qos,
285 const enum zynqmp_pm_request_ack ack);
260}; 286};
261 287
262int zynqmp_pm_invoke_fn(u32 pm_api_id, u32 arg0, u32 arg1, 288int zynqmp_pm_invoke_fn(u32 pm_api_id, u32 arg0, u32 arg1,