1a92681d9SJay Buddhabhatti /* 2619bc13eSMichal Simek * Copyright (c) 2013-2022, Arm Limited and Contributors. All rights reserved. 3*8ce93ec9SRonak Jain * Copyright (c) 2023-2025, Advanced Micro Devices, Inc. All rights reserved. 4a92681d9SJay Buddhabhatti * 5a92681d9SJay Buddhabhatti * SPDX-License-Identifier: BSD-3-Clause 6a92681d9SJay Buddhabhatti */ 7a92681d9SJay Buddhabhatti 8a92681d9SJay Buddhabhatti #ifndef ZYNQMP_PM_API_SYS_H 9a92681d9SJay Buddhabhatti #define ZYNQMP_PM_API_SYS_H 10a92681d9SJay Buddhabhatti 11a92681d9SJay Buddhabhatti #include <stdint.h> 12a92681d9SJay Buddhabhatti 13a92681d9SJay Buddhabhatti #include "pm_defs.h" 1492f7de1eSJay Buddhabhatti #include "zynqmp_pm_defs.h" 15a92681d9SJay Buddhabhatti 1692f7de1eSJay Buddhabhatti enum pm_query_ids { 17a92681d9SJay Buddhabhatti PM_QID_INVALID, 18a92681d9SJay Buddhabhatti PM_QID_CLOCK_GET_NAME, 19a92681d9SJay Buddhabhatti PM_QID_CLOCK_GET_TOPOLOGY, 20a92681d9SJay Buddhabhatti PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS, 21a92681d9SJay Buddhabhatti PM_QID_CLOCK_GET_PARENTS, 22a92681d9SJay Buddhabhatti PM_QID_CLOCK_GET_ATTRIBUTES, 23a92681d9SJay Buddhabhatti PM_QID_PINCTRL_GET_NUM_PINS, 24a92681d9SJay Buddhabhatti PM_QID_PINCTRL_GET_NUM_FUNCTIONS, 25a92681d9SJay Buddhabhatti PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS, 26a92681d9SJay Buddhabhatti PM_QID_PINCTRL_GET_FUNCTION_NAME, 27a92681d9SJay Buddhabhatti PM_QID_PINCTRL_GET_FUNCTION_GROUPS, 28a92681d9SJay Buddhabhatti PM_QID_PINCTRL_GET_PIN_GROUPS, 29a92681d9SJay Buddhabhatti PM_QID_CLOCK_GET_NUM_CLOCKS, 30a92681d9SJay Buddhabhatti PM_QID_CLOCK_GET_MAX_DIVISOR, 31a92681d9SJay Buddhabhatti }; 32a92681d9SJay Buddhabhatti 33a92681d9SJay Buddhabhatti enum pm_register_access_id { 34a92681d9SJay Buddhabhatti CONFIG_REG_WRITE, 35a92681d9SJay Buddhabhatti CONFIG_REG_READ, 36a92681d9SJay Buddhabhatti }; 37a92681d9SJay Buddhabhatti 38de7ed953SPrasad Kummari /* 39a92681d9SJay Buddhabhatti * Assigning of argument values into array elements. 40a92681d9SJay Buddhabhatti */ 41*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD1(pl, flag, arg0) { \ 42*8ce93ec9SRonak Jain pl[0] = ((uint32_t)(arg0) | ((uint32_t)(flag) << 24U)); \ 43a92681d9SJay Buddhabhatti } 44a92681d9SJay Buddhabhatti 45*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD2(pl, flag, arg0, arg1) { \ 46a92681d9SJay Buddhabhatti pl[1] = (uint32_t)(arg1); \ 47*8ce93ec9SRonak Jain PM_PACK_PAYLOAD1(pl, (flag), (arg0)); \ 48a92681d9SJay Buddhabhatti } 49a92681d9SJay Buddhabhatti 50*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD3(pl, flag, arg0, arg1, arg2) { \ 51a92681d9SJay Buddhabhatti pl[2] = (uint32_t)(arg2); \ 52*8ce93ec9SRonak Jain PM_PACK_PAYLOAD2(pl, (flag), (arg0), (arg1)); \ 53a92681d9SJay Buddhabhatti } 54a92681d9SJay Buddhabhatti 55*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD4(pl, flag, arg0, arg1, arg2, arg3) { \ 56a92681d9SJay Buddhabhatti pl[3] = (uint32_t)(arg3); \ 57*8ce93ec9SRonak Jain PM_PACK_PAYLOAD3(pl, (flag), (arg0), (arg1), (arg2)); \ 58a92681d9SJay Buddhabhatti } 59a92681d9SJay Buddhabhatti 60*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD5(pl, flag, arg0, arg1, arg2, arg3, arg4) { \ 61a92681d9SJay Buddhabhatti pl[4] = (uint32_t)(arg4); \ 62*8ce93ec9SRonak Jain PM_PACK_PAYLOAD4(pl, (flag), (arg0), (arg1), (arg2), (arg3)); \ 63a92681d9SJay Buddhabhatti } 64a92681d9SJay Buddhabhatti 65*8ce93ec9SRonak Jain #define PM_PACK_PAYLOAD6(pl, flag, arg0, arg1, arg2, arg3, arg4, arg5) { \ 66a92681d9SJay Buddhabhatti pl[5] = (uint32_t)(arg5); \ 67*8ce93ec9SRonak Jain PM_PACK_PAYLOAD5(pl, (flag), (arg0), (arg1), (arg2), (arg3), (arg4)); \ 68a92681d9SJay Buddhabhatti } 69a92681d9SJay Buddhabhatti 70a92681d9SJay Buddhabhatti /********************************************************** 71a92681d9SJay Buddhabhatti * System-level API function declarations 72a92681d9SJay Buddhabhatti **********************************************************/ 73a92681d9SJay Buddhabhatti enum pm_ret_status pm_req_suspend(enum pm_node_id target, 74a92681d9SJay Buddhabhatti enum pm_request_ack ack, 75a92681d9SJay Buddhabhatti uint32_t latency, 76*8ce93ec9SRonak Jain uint32_t state, 77*8ce93ec9SRonak Jain uint32_t flag); 78a92681d9SJay Buddhabhatti 79a92681d9SJay Buddhabhatti enum pm_ret_status pm_self_suspend(enum pm_node_id nid, 80a92681d9SJay Buddhabhatti uint32_t latency, 81a92681d9SJay Buddhabhatti uint32_t state, 82*8ce93ec9SRonak Jain uintptr_t address, 83*8ce93ec9SRonak Jain uint32_t flag); 84a92681d9SJay Buddhabhatti 85a92681d9SJay Buddhabhatti enum pm_ret_status pm_force_powerdown(enum pm_node_id target, 86*8ce93ec9SRonak Jain enum pm_request_ack ack, 87*8ce93ec9SRonak Jain uint32_t flag); 88a92681d9SJay Buddhabhatti 89a92681d9SJay Buddhabhatti enum pm_ret_status pm_req_wakeup(enum pm_node_id target, 90a92681d9SJay Buddhabhatti uint32_t set_address, 91a92681d9SJay Buddhabhatti uintptr_t address, 92*8ce93ec9SRonak Jain enum pm_request_ack ack, 93*8ce93ec9SRonak Jain uint32_t flag); 94a92681d9SJay Buddhabhatti 95a92681d9SJay Buddhabhatti enum pm_ret_status pm_set_wakeup_source(enum pm_node_id target, 96a92681d9SJay Buddhabhatti enum pm_node_id wkup_node, 97*8ce93ec9SRonak Jain uint32_t enable, 98*8ce93ec9SRonak Jain uint32_t flag); 99a92681d9SJay Buddhabhatti 100*8ce93ec9SRonak Jain enum pm_ret_status pm_system_shutdown(uint32_t type, uint32_t subtype, 101*8ce93ec9SRonak Jain uint32_t flag); 102a92681d9SJay Buddhabhatti 103a92681d9SJay Buddhabhatti /* API functions for managing PM Slaves */ 104a92681d9SJay Buddhabhatti enum pm_ret_status pm_req_node(enum pm_node_id nid, 105a92681d9SJay Buddhabhatti uint32_t capabilities, 106a92681d9SJay Buddhabhatti uint32_t qos, 107*8ce93ec9SRonak Jain enum pm_request_ack ack, 108*8ce93ec9SRonak Jain uint32_t flag); 109a92681d9SJay Buddhabhatti 110a92681d9SJay Buddhabhatti enum pm_ret_status pm_set_requirement(enum pm_node_id nid, 111a92681d9SJay Buddhabhatti uint32_t capabilities, 112a92681d9SJay Buddhabhatti uint32_t qos, 113*8ce93ec9SRonak Jain enum pm_request_ack ack, 114*8ce93ec9SRonak Jain uint32_t flag); 115a92681d9SJay Buddhabhatti 116a92681d9SJay Buddhabhatti /* Miscellaneous API functions */ 117*8ce93ec9SRonak Jain enum pm_ret_status pm_get_api_version(uint32_t *version, uint32_t flag); 118a92681d9SJay Buddhabhatti enum pm_ret_status pm_get_node_status(enum pm_node_id nid, 119*8ce93ec9SRonak Jain uint32_t *ret_buff, uint32_t flag); 120a92681d9SJay Buddhabhatti 121a92681d9SJay Buddhabhatti /* Direct-Control API functions */ 122a92681d9SJay Buddhabhatti enum pm_ret_status pm_mmio_write(uintptr_t address, 123a92681d9SJay Buddhabhatti uint32_t mask, 124*8ce93ec9SRonak Jain uint32_t value, uint32_t flag); 125*8ce93ec9SRonak Jain enum pm_ret_status pm_mmio_read(uintptr_t address, uint32_t *value, 126*8ce93ec9SRonak Jain uint32_t flag); 127a92681d9SJay Buddhabhatti enum pm_ret_status pm_fpga_load(uint32_t address_low, 128a92681d9SJay Buddhabhatti uint32_t address_high, 129a92681d9SJay Buddhabhatti uint32_t size, 130*8ce93ec9SRonak Jain uint32_t flags, 131*8ce93ec9SRonak Jain uint32_t security_flag); 132*8ce93ec9SRonak Jain enum pm_ret_status pm_fpga_get_status(uint32_t *value, uint32_t flag); 133a92681d9SJay Buddhabhatti 134*8ce93ec9SRonak Jain enum pm_ret_status pm_get_chipid(uint32_t *value, uint32_t flag); 135a92681d9SJay Buddhabhatti enum pm_ret_status pm_secure_rsaaes(uint32_t address_low, 136a92681d9SJay Buddhabhatti uint32_t address_high, 137a92681d9SJay Buddhabhatti uint32_t size, 138*8ce93ec9SRonak Jain uint32_t flags, 139*8ce93ec9SRonak Jain uint32_t security_flag); 140a92681d9SJay Buddhabhatti uint32_t pm_get_shutdown_scope(void); 141a92681d9SJay Buddhabhatti enum pm_ret_status pm_get_callbackdata(uint32_t *data, size_t count); 142a92681d9SJay Buddhabhatti enum pm_ret_status pm_ioctl(enum pm_node_id nid, 143a92681d9SJay Buddhabhatti uint32_t ioctl_id, 144a92681d9SJay Buddhabhatti uint32_t arg1, 145a92681d9SJay Buddhabhatti uint32_t arg2, 146*8ce93ec9SRonak Jain uint32_t *value, 147*8ce93ec9SRonak Jain uint32_t flag); 148*8ce93ec9SRonak Jain enum pm_ret_status pm_clock_enable(uint32_t clock_id, uint32_t flag); 149*8ce93ec9SRonak Jain enum pm_ret_status pm_clock_disable(uint32_t clock_id, uint32_t flag); 150a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_getstate(uint32_t clock_id, 151*8ce93ec9SRonak Jain uint32_t *state, uint32_t flag); 152a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_setdivider(uint32_t clock_id, 153*8ce93ec9SRonak Jain uint32_t divider, uint32_t flag); 154a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_getdivider(uint32_t clock_id, 155*8ce93ec9SRonak Jain uint32_t *divider, uint32_t flag); 156a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_setparent(uint32_t clock_id, 157*8ce93ec9SRonak Jain uint32_t parent_index, uint32_t flag); 158a92681d9SJay Buddhabhatti enum pm_ret_status pm_clock_getparent(uint32_t clock_id, 159*8ce93ec9SRonak Jain uint32_t *parent_index, uint32_t flag); 16092f7de1eSJay Buddhabhatti void pm_query_data(enum pm_query_ids qid, uint32_t arg1, uint32_t arg2, 161*8ce93ec9SRonak Jain uint32_t arg3, uint32_t *data, uint32_t flag); 162a92681d9SJay Buddhabhatti enum pm_ret_status pm_sha_hash(uint32_t address_high, 163a92681d9SJay Buddhabhatti uint32_t address_low, 164a92681d9SJay Buddhabhatti uint32_t size, 165*8ce93ec9SRonak Jain uint32_t flags, 166*8ce93ec9SRonak Jain uint32_t security_flag); 167a92681d9SJay Buddhabhatti enum pm_ret_status pm_rsa_core(uint32_t address_high, 168a92681d9SJay Buddhabhatti uint32_t address_low, 169a92681d9SJay Buddhabhatti uint32_t size, 170*8ce93ec9SRonak Jain uint32_t flags, 171*8ce93ec9SRonak Jain uint32_t security_flag); 172a92681d9SJay Buddhabhatti enum pm_ret_status pm_secure_image(uint32_t address_low, 173a92681d9SJay Buddhabhatti uint32_t address_high, 174a92681d9SJay Buddhabhatti uint32_t key_lo, 175a92681d9SJay Buddhabhatti uint32_t key_hi, 176*8ce93ec9SRonak Jain uint32_t *value, 177*8ce93ec9SRonak Jain uint32_t flag); 178a92681d9SJay Buddhabhatti enum pm_ret_status pm_fpga_read(uint32_t reg_numframes, 179a92681d9SJay Buddhabhatti uint32_t address_low, 180a92681d9SJay Buddhabhatti uint32_t address_high, 181a92681d9SJay Buddhabhatti uint32_t readback_type, 182*8ce93ec9SRonak Jain uint32_t *value, 183*8ce93ec9SRonak Jain uint32_t flag); 184a92681d9SJay Buddhabhatti enum pm_ret_status pm_aes_engine(uint32_t address_high, 185a92681d9SJay Buddhabhatti uint32_t address_low, 186*8ce93ec9SRonak Jain uint32_t *value, 187*8ce93ec9SRonak Jain uint32_t flag); 188a92681d9SJay Buddhabhatti enum pm_ret_status pm_register_access(uint32_t register_access_id, 189a92681d9SJay Buddhabhatti uint32_t address, 190a92681d9SJay Buddhabhatti uint32_t mask, 191a92681d9SJay Buddhabhatti uint32_t value, 192*8ce93ec9SRonak Jain uint32_t *out, 193*8ce93ec9SRonak Jain uint32_t flag); 194a92681d9SJay Buddhabhatti enum pm_ret_status pm_pll_set_parameter(enum pm_node_id nid, 195a92681d9SJay Buddhabhatti enum pm_pll_param param_id, 196*8ce93ec9SRonak Jain uint32_t value, 197*8ce93ec9SRonak Jain uint32_t flag); 198a92681d9SJay Buddhabhatti enum pm_ret_status pm_pll_get_parameter(enum pm_node_id nid, 199a92681d9SJay Buddhabhatti enum pm_pll_param param_id, 200*8ce93ec9SRonak Jain uint32_t *value, 201*8ce93ec9SRonak Jain uint32_t flag); 202*8ce93ec9SRonak Jain enum pm_ret_status pm_pll_set_mode(enum pm_node_id nid, 203*8ce93ec9SRonak Jain enum pm_pll_mode mode, 204*8ce93ec9SRonak Jain uint32_t flag); 205*8ce93ec9SRonak Jain enum pm_ret_status pm_pll_get_mode(enum pm_node_id nid, 206*8ce93ec9SRonak Jain enum pm_pll_mode *mode, 207*8ce93ec9SRonak Jain uint32_t flag); 208a92681d9SJay Buddhabhatti enum pm_ret_status pm_efuse_access(uint32_t address_high, 209*8ce93ec9SRonak Jain uint32_t address_low, uint32_t *value, 210*8ce93ec9SRonak Jain uint32_t flag); 211a92681d9SJay Buddhabhatti enum pm_ret_status pm_feature_check(uint32_t api_id, uint32_t *version, 212*8ce93ec9SRonak Jain uint32_t *bit_mask, uint8_t len, 213*8ce93ec9SRonak Jain uint32_t flag); 214*8ce93ec9SRonak Jain enum pm_ret_status check_api_dependency(uint8_t id, uint32_t flag); 215a92681d9SJay Buddhabhatti 216a92681d9SJay Buddhabhatti #endif /* ZYNQMP_PM_API_SYS_H */ 217