| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Xilinx Zynq MPSoC Firmware driver |
| * |
| * Copyright (C) 2018-2019 Xilinx, Inc. |
| */ |
| |
| #ifndef _ZYNQMP_FIRMWARE_H_ |
| #define _ZYNQMP_FIRMWARE_H_ |
| |
| enum pm_api_id { |
| PM_GET_API_VERSION = 1, |
| PM_SET_CONFIGURATION, |
| PM_GET_NODE_STATUS, |
| PM_GET_OPERATING_CHARACTERISTIC, |
| PM_REGISTER_NOTIFIER, |
| PM_REQUEST_SUSPEND, |
| PM_SELF_SUSPEND, |
| PM_FORCE_POWERDOWN, |
| PM_ABORT_SUSPEND, |
| PM_REQUEST_WAKEUP, |
| PM_SET_WAKEUP_SOURCE, |
| PM_SYSTEM_SHUTDOWN, |
| PM_REQUEST_NODE, |
| PM_RELEASE_NODE, |
| PM_SET_REQUIREMENT, |
| PM_SET_MAX_LATENCY, |
| PM_RESET_ASSERT, |
| PM_RESET_GET_STATUS, |
| PM_MMIO_WRITE, |
| PM_MMIO_READ, |
| PM_PM_INIT_FINALIZE, |
| PM_FPGA_LOAD, |
| PM_FPGA_GET_STATUS, |
| PM_GET_CHIPID, |
| PM_SECURE_SHA = 26, |
| PM_SECURE_RSA, |
| PM_PINCTRL_REQUEST, |
| PM_PINCTRL_RELEASE, |
| PM_PINCTRL_GET_FUNCTION, |
| PM_PINCTRL_SET_FUNCTION, |
| PM_PINCTRL_CONFIG_PARAM_GET, |
| PM_PINCTRL_CONFIG_PARAM_SET, |
| PM_IOCTL, |
| PM_QUERY_DATA, |
| PM_CLOCK_ENABLE, |
| PM_CLOCK_DISABLE, |
| PM_CLOCK_GETSTATE, |
| PM_CLOCK_SETDIVIDER, |
| PM_CLOCK_GETDIVIDER, |
| PM_CLOCK_SETRATE, |
| PM_CLOCK_GETRATE, |
| PM_CLOCK_SETPARENT, |
| PM_CLOCK_GETPARENT, |
| PM_SECURE_IMAGE, |
| PM_FPGA_READ = 46, |
| PM_SECURE_AES, |
| PM_CLOCK_PLL_GETPARAM = 49, |
| PM_REGISTER_ACCESS = 52, |
| PM_EFUSE_ACCESS, |
| PM_FEATURE_CHECK = 63, |
| PM_API_MAX, |
| }; |
| |
| enum pm_query_id { |
| PM_QID_INVALID = 0, |
| PM_QID_CLOCK_GET_NAME = 1, |
| PM_QID_CLOCK_GET_TOPOLOGY = 2, |
| PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS = 3, |
| PM_QID_CLOCK_GET_PARENTS = 4, |
| PM_QID_CLOCK_GET_ATTRIBUTES = 5, |
| PM_QID_PINCTRL_GET_NUM_PINS = 6, |
| PM_QID_PINCTRL_GET_NUM_FUNCTIONS = 7, |
| PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS = 8, |
| PM_QID_PINCTRL_GET_FUNCTION_NAME = 9, |
| PM_QID_PINCTRL_GET_FUNCTION_GROUPS = 10, |
| PM_QID_PINCTRL_GET_PIN_GROUPS = 11, |
| PM_QID_CLOCK_GET_NUM_CLOCKS = 12, |
| PM_QID_CLOCK_GET_MAX_DIVISOR = 13, |
| }; |
| |
| #define PM_SIP_SVC 0xc2000000 |
| |
| #define ZYNQMP_PM_VERSION_MAJOR 1 |
| #define ZYNQMP_PM_VERSION_MINOR 0 |
| #define ZYNQMP_PM_VERSION_MAJOR_SHIFT 16 |
| #define ZYNQMP_PM_VERSION_MINOR_MASK 0xFFFF |
| |
| #define ZYNQMP_PM_VERSION \ |
| ((ZYNQMP_PM_VERSION_MAJOR << ZYNQMP_PM_VERSION_MAJOR_SHIFT) | \ |
| ZYNQMP_PM_VERSION_MINOR) |
| |
| #define ZYNQMP_PM_VERSION_INVALID ~0 |
| |
| #define PMUFW_V1_0 ((1 << ZYNQMP_PM_VERSION_MAJOR_SHIFT) | 0) |
| |
| /* |
| * Return payload size |
| * Not every firmware call expects the same amount of return bytes, however the |
| * firmware driver always copies 5 bytes from RX buffer to the ret_payload |
| * buffer. Therefore allocating with this defined value is recommended to avoid |
| * overflows. |
| */ |
| #define PAYLOAD_ARG_CNT 5U |
| |
| unsigned int zynqmp_firmware_version(void); |
| void zynqmp_pmufw_load_config_object(const void *cfg_obj, size_t size); |
| int xilinx_pm_request(u32 api_id, u32 arg0, u32 arg1, u32 arg2, |
| u32 arg3, u32 *ret_payload); |
| |
| #endif /* _ZYNQMP_FIRMWARE_H_ */ |