1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Xilinx Zynq MPSoC Firmware layer
5 * Copyright (C) 2014-2018 Xilinx
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>
13 #ifndef __FIRMWARE_ZYNQMP_H__
14 #define __FIRMWARE_ZYNQMP_H__
16 #define ZYNQMP_PM_VERSION_MAJOR 1
17 #define ZYNQMP_PM_VERSION_MINOR 0
19 #define ZYNQMP_PM_VERSION ((ZYNQMP_PM_VERSION_MAJOR << 16) | \
20 ZYNQMP_PM_VERSION_MINOR)
22 #define ZYNQMP_TZ_VERSION_MAJOR 1
23 #define ZYNQMP_TZ_VERSION_MINOR 0
25 #define ZYNQMP_TZ_VERSION ((ZYNQMP_TZ_VERSION_MAJOR << 16) | \
26 ZYNQMP_TZ_VERSION_MINOR)
28 /* SMC SIP service Call Function Identifier Prefix */
29 #define PM_SIP_SVC 0xC2000000
30 #define PM_GET_TRUSTZONE_VERSION 0xa03
32 /* Number of 32bits values in payload */
33 #define PAYLOAD_ARG_CNT 4U
36 PM_GET_API_VERSION = 1,
50 /* PMU-FW return status codes */
53 XST_PM_INTERNAL = 2000,
62 IOCTL_SET_PLL_FRAC_MODE = 8,
63 IOCTL_GET_PLL_FRAC_MODE,
64 IOCTL_SET_PLL_FRAC_DATA,
65 IOCTL_GET_PLL_FRAC_DATA,
70 PM_QID_CLOCK_GET_NAME,
71 PM_QID_CLOCK_GET_TOPOLOGY,
72 PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS,
73 PM_QID_CLOCK_GET_PARENTS,
74 PM_QID_CLOCK_GET_ATTRIBUTES,
75 PM_QID_CLOCK_GET_NUM_CLOCKS = 12,
79 * struct zynqmp_pm_query_data - PM query data
81 * @arg1: Argument 1 of query data
82 * @arg2: Argument 2 of query data
83 * @arg3: Argument 3 of query data
85 struct zynqmp_pm_query_data {
92 struct zynqmp_eemi_ops {
93 int (*get_api_version)(u32 *version);
94 int (*query_data)(struct zynqmp_pm_query_data qdata, u32 *out);
95 int (*clock_enable)(u32 clock_id);
96 int (*clock_disable)(u32 clock_id);
97 int (*clock_getstate)(u32 clock_id, u32 *state);
98 int (*clock_setdivider)(u32 clock_id, u32 divider);
99 int (*clock_getdivider)(u32 clock_id, u32 *divider);
100 int (*clock_setrate)(u32 clock_id, u64 rate);
101 int (*clock_getrate)(u32 clock_id, u64 *rate);
102 int (*clock_setparent)(u32 clock_id, u32 parent_id);
103 int (*clock_getparent)(u32 clock_id, u32 *parent_id);
104 int (*ioctl)(u32 node_id, u32 ioctl_id, u32 arg1, u32 arg2, u32 *out);
107 #if IS_REACHABLE(CONFIG_ARCH_ZYNQMP)
108 const struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void);
110 static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)
116 #endif /* __FIRMWARE_ZYNQMP_H__ */