blob: 287f42caa623f5303e9cf6b0f8ed424736401414 [file] [log] [blame]
Rajan Vaja76582672018-09-12 12:38:36 -07001/* 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,
Rajan Vaja59ecdd72018-09-12 12:38:37 -070037 PM_QUERY_DATA = 35,
Rajan Vaja76582672018-09-12 12:38:36 -070038};
39
40/* PMU-FW return status codes */
41enum pm_ret_status {
42 XST_PM_SUCCESS = 0,
43 XST_PM_INTERNAL = 2000,
44 XST_PM_CONFLICT,
45 XST_PM_NO_ACCESS,
46 XST_PM_INVALID_NODE,
47 XST_PM_DOUBLE_REQ,
48 XST_PM_ABORT_SUSPEND,
49};
50
Rajan Vaja59ecdd72018-09-12 12:38:37 -070051enum pm_query_id {
52 PM_QID_INVALID,
53};
54
55/**
56 * struct zynqmp_pm_query_data - PM query data
57 * @qid: query ID
58 * @arg1: Argument 1 of query data
59 * @arg2: Argument 2 of query data
60 * @arg3: Argument 3 of query data
61 */
62struct zynqmp_pm_query_data {
63 u32 qid;
64 u32 arg1;
65 u32 arg2;
66 u32 arg3;
67};
68
Rajan Vaja76582672018-09-12 12:38:36 -070069struct zynqmp_eemi_ops {
70 int (*get_api_version)(u32 *version);
Rajan Vaja59ecdd72018-09-12 12:38:37 -070071 int (*query_data)(struct zynqmp_pm_query_data qdata, u32 *out);
Rajan Vaja76582672018-09-12 12:38:36 -070072};
73
74#if IS_REACHABLE(CONFIG_ARCH_ZYNQMP)
75const struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void);
76#else
77static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)
78{
79 return NULL;
80}
81#endif
82
83#endif /* __FIRMWARE_ZYNQMP_H__ */