aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/firmware/xlnx-zynqmp.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/include/linux/firmware/xlnx-zynqmp.h b/include/linux/firmware/xlnx-zynqmp.h
new file mode 100644
index 000000000000..015e130431e6
--- /dev/null
+++ b/include/linux/firmware/xlnx-zynqmp.h
@@ -0,0 +1,113 @@
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Xilinx Zynq MPSoC Firmware layer
4 *
5 * Copyright (C) 2014-2018 Xilinx
6 *
7 * Michal Simek <michal.simek@xilinx.com>
8 * Davorin Mista <davorin.mista@aggios.com>
9 * Jolly Shah <jollys@xilinx.com>
10 * Rajan Vaja <rajanv@xilinx.com>
11 */
12
13#ifndef __FIRMWARE_ZYNQMP_H__
14#define __FIRMWARE_ZYNQMP_H__
15
16#define ZYNQMP_PM_VERSION_MAJOR 1
17#define ZYNQMP_PM_VERSION_MINOR 0
18
19#define ZYNQMP_PM_VERSION ((ZYNQMP_PM_VERSION_MAJOR << 16) | \
20 ZYNQMP_PM_VERSION_MINOR)
21
22#define ZYNQMP_TZ_VERSION_MAJOR 1
23#define ZYNQMP_TZ_VERSION_MINOR 0
24
25#define ZYNQMP_TZ_VERSION ((ZYNQMP_TZ_VERSION_MAJOR << 16) | \
26 ZYNQMP_TZ_VERSION_MINOR)
27
28/* SMC SIP service Call Function Identifier Prefix */
29#define PM_SIP_SVC 0xC2000000
30#define PM_GET_TRUSTZONE_VERSION 0xa03
31
32/* Number of 32bits values in payload */
33#define PAYLOAD_ARG_CNT 4U
34
35enum pm_api_id {
36 PM_GET_API_VERSION = 1,
37 PM_QUERY_DATA = 35,
38 PM_CLOCK_ENABLE,
39 PM_CLOCK_DISABLE,
40 PM_CLOCK_GETSTATE,
41 PM_CLOCK_SETDIVIDER,
42 PM_CLOCK_GETDIVIDER,
43 PM_CLOCK_SETRATE,
44 PM_CLOCK_GETRATE,
45 PM_CLOCK_SETPARENT,
46 PM_CLOCK_GETPARENT,
47};
48
49/* PMU-FW return status codes */
50enum pm_ret_status {
51 XST_PM_SUCCESS = 0,
52 XST_PM_INTERNAL = 2000,
53 XST_PM_CONFLICT,
54 XST_PM_NO_ACCESS,
55 XST_PM_INVALID_NODE,
56 XST_PM_DOUBLE_REQ,
57 XST_PM_ABORT_SUSPEND,
58};
59
60enum pm_ioctl_id {
61 IOCTL_SET_PLL_FRAC_MODE = 8,
62 IOCTL_GET_PLL_FRAC_MODE,
63 IOCTL_SET_PLL_FRAC_DATA,
64 IOCTL_GET_PLL_FRAC_DATA,
65};
66
67enum pm_query_id {
68 PM_QID_INVALID,
69 PM_QID_CLOCK_GET_NAME,
70 PM_QID_CLOCK_GET_TOPOLOGY,
71 PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS,
72 PM_QID_CLOCK_GET_PARENTS,
73 PM_QID_CLOCK_GET_ATTRIBUTES,
74};
75
76/**
77 * struct zynqmp_pm_query_data - PM query data
78 * @qid: query ID
79 * @arg1: Argument 1 of query data
80 * @arg2: Argument 2 of query data
81 * @arg3: Argument 3 of query data
82 */
83struct zynqmp_pm_query_data {
84 u32 qid;
85 u32 arg1;
86 u32 arg2;
87 u32 arg3;
88};
89
90struct zynqmp_eemi_ops {
91 int (*get_api_version)(u32 *version);
92 int (*query_data)(struct zynqmp_pm_query_data qdata, u32 *out);
93 int (*clock_enable)(u32 clock_id);
94 int (*clock_disable)(u32 clock_id);
95 int (*clock_getstate)(u32 clock_id, u32 *state);
96 int (*clock_setdivider)(u32 clock_id, u32 divider);
97 int (*clock_getdivider)(u32 clock_id, u32 *divider);
98 int (*clock_setrate)(u32 clock_id, u64 rate);
99 int (*clock_getrate)(u32 clock_id, u64 *rate);
100 int (*clock_setparent)(u32 clock_id, u32 parent_id);
101 int (*clock_getparent)(u32 clock_id, u32 *parent_id);
102};
103
104#if IS_REACHABLE(CONFIG_ARCH_ZYNQMP)
105const struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void);
106#else
107static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)
108{
109 return NULL;
110}
111#endif
112
113#endif /* __FIRMWARE_ZYNQMP_H__ */