Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.0-rc5 116 lines 2.8 kB view raw
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_IOCTL = 34, 38 PM_QUERY_DATA, 39 PM_CLOCK_ENABLE, 40 PM_CLOCK_DISABLE, 41 PM_CLOCK_GETSTATE, 42 PM_CLOCK_SETDIVIDER, 43 PM_CLOCK_GETDIVIDER, 44 PM_CLOCK_SETRATE, 45 PM_CLOCK_GETRATE, 46 PM_CLOCK_SETPARENT, 47 PM_CLOCK_GETPARENT, 48}; 49 50/* PMU-FW return status codes */ 51enum pm_ret_status { 52 XST_PM_SUCCESS = 0, 53 XST_PM_INTERNAL = 2000, 54 XST_PM_CONFLICT, 55 XST_PM_NO_ACCESS, 56 XST_PM_INVALID_NODE, 57 XST_PM_DOUBLE_REQ, 58 XST_PM_ABORT_SUSPEND, 59}; 60 61enum pm_ioctl_id { 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, 66}; 67 68enum pm_query_id { 69 PM_QID_INVALID, 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, 76}; 77 78/** 79 * struct zynqmp_pm_query_data - PM query data 80 * @qid: query ID 81 * @arg1: Argument 1 of query data 82 * @arg2: Argument 2 of query data 83 * @arg3: Argument 3 of query data 84 */ 85struct zynqmp_pm_query_data { 86 u32 qid; 87 u32 arg1; 88 u32 arg2; 89 u32 arg3; 90}; 91 92struct 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); 105}; 106 107#if IS_REACHABLE(CONFIG_ARCH_ZYNQMP) 108const struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void); 109#else 110static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void) 111{ 112 return NULL; 113} 114#endif 115 116#endif /* __FIRMWARE_ZYNQMP_H__ */