1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2013-2022, Arm Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * Copyright (c) 2022-2023, Advanced Micro Devices, Inc. All rights reserved. 4*91f16700Schasinglulu * 5*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu /* ZynqMP power management enums and defines */ 9*91f16700Schasinglulu 10*91f16700Schasinglulu #ifndef ZYNQMP_PM_DEFS_H 11*91f16700Schasinglulu #define ZYNQMP_PM_DEFS_H 12*91f16700Schasinglulu 13*91f16700Schasinglulu /********************************************************************* 14*91f16700Schasinglulu * Macro definitions 15*91f16700Schasinglulu ********************************************************************/ 16*91f16700Schasinglulu 17*91f16700Schasinglulu /* 18*91f16700Schasinglulu * Version number is a 32bit value, like: 19*91f16700Schasinglulu * (PM_VERSION_MAJOR << 16) | PM_VERSION_MINOR 20*91f16700Schasinglulu */ 21*91f16700Schasinglulu #define PM_VERSION_MAJOR 1U 22*91f16700Schasinglulu #define PM_VERSION_MINOR 1U 23*91f16700Schasinglulu 24*91f16700Schasinglulu #define PM_VERSION ((PM_VERSION_MAJOR << 16U) | PM_VERSION_MINOR) 25*91f16700Schasinglulu 26*91f16700Schasinglulu /* 27*91f16700Schasinglulu * PM API versions 28*91f16700Schasinglulu */ 29*91f16700Schasinglulu 30*91f16700Schasinglulu /* Expected version of firmware APIs */ 31*91f16700Schasinglulu #define FW_API_BASE_VERSION (1U) 32*91f16700Schasinglulu /* Expected version of firmware API for feature check */ 33*91f16700Schasinglulu #define FW_API_VERSION_2 (2U) 34*91f16700Schasinglulu /* Version of APIs implemented in TF-A */ 35*91f16700Schasinglulu #define TFA_API_BASE_VERSION (1U) 36*91f16700Schasinglulu /* Updating the QUERY_DATA API versioning as the bitmask functionality 37*91f16700Schasinglulu * support is added in the v2.*/ 38*91f16700Schasinglulu #define TFA_API_QUERY_DATA_VERSION (2U) 39*91f16700Schasinglulu 40*91f16700Schasinglulu /* Capabilities for RAM */ 41*91f16700Schasinglulu #define PM_CAP_ACCESS 0x1U 42*91f16700Schasinglulu #define PM_CAP_CONTEXT 0x2U 43*91f16700Schasinglulu 44*91f16700Schasinglulu /* APU processor states */ 45*91f16700Schasinglulu #define PM_PROC_STATE_FORCEDOFF 0U 46*91f16700Schasinglulu #define PM_PROC_STATE_ACTIVE 1U 47*91f16700Schasinglulu #define PM_PROC_STATE_SLEEP 2U 48*91f16700Schasinglulu #define PM_PROC_STATE_SUSPENDING 3U 49*91f16700Schasinglulu 50*91f16700Schasinglulu #define PM_SET_SUSPEND_MODE 0xa02 51*91f16700Schasinglulu 52*91f16700Schasinglulu /********************************************************************* 53*91f16700Schasinglulu * Enum definitions 54*91f16700Schasinglulu ********************************************************************/ 55*91f16700Schasinglulu 56*91f16700Schasinglulu enum pm_node_id { 57*91f16700Schasinglulu NODE_UNKNOWN = 0, 58*91f16700Schasinglulu NODE_APU, 59*91f16700Schasinglulu NODE_APU_0, 60*91f16700Schasinglulu NODE_APU_1, 61*91f16700Schasinglulu NODE_APU_2, 62*91f16700Schasinglulu NODE_APU_3, 63*91f16700Schasinglulu NODE_RPU, 64*91f16700Schasinglulu NODE_RPU_0, 65*91f16700Schasinglulu NODE_RPU_1, 66*91f16700Schasinglulu NODE_PLD, 67*91f16700Schasinglulu NODE_FPD, 68*91f16700Schasinglulu NODE_OCM_BANK_0, 69*91f16700Schasinglulu NODE_OCM_BANK_1, 70*91f16700Schasinglulu NODE_OCM_BANK_2, 71*91f16700Schasinglulu NODE_OCM_BANK_3, 72*91f16700Schasinglulu NODE_TCM_0_A, 73*91f16700Schasinglulu NODE_TCM_0_B, 74*91f16700Schasinglulu NODE_TCM_1_A, 75*91f16700Schasinglulu NODE_TCM_1_B, 76*91f16700Schasinglulu NODE_L2, 77*91f16700Schasinglulu NODE_GPU_PP_0, 78*91f16700Schasinglulu NODE_GPU_PP_1, 79*91f16700Schasinglulu NODE_USB_0, 80*91f16700Schasinglulu NODE_USB_1, 81*91f16700Schasinglulu NODE_TTC_0, 82*91f16700Schasinglulu NODE_TTC_1, 83*91f16700Schasinglulu NODE_TTC_2, 84*91f16700Schasinglulu NODE_TTC_3, 85*91f16700Schasinglulu NODE_SATA, 86*91f16700Schasinglulu NODE_ETH_0, 87*91f16700Schasinglulu NODE_ETH_1, 88*91f16700Schasinglulu NODE_ETH_2, 89*91f16700Schasinglulu NODE_ETH_3, 90*91f16700Schasinglulu NODE_UART_0, 91*91f16700Schasinglulu NODE_UART_1, 92*91f16700Schasinglulu NODE_SPI_0, 93*91f16700Schasinglulu NODE_SPI_1, 94*91f16700Schasinglulu NODE_I2C_0, 95*91f16700Schasinglulu NODE_I2C_1, 96*91f16700Schasinglulu NODE_SD_0, 97*91f16700Schasinglulu NODE_SD_1, 98*91f16700Schasinglulu NODE_DP, 99*91f16700Schasinglulu NODE_GDMA, 100*91f16700Schasinglulu NODE_ADMA, 101*91f16700Schasinglulu NODE_NAND, 102*91f16700Schasinglulu NODE_QSPI, 103*91f16700Schasinglulu NODE_GPIO, 104*91f16700Schasinglulu NODE_CAN_0, 105*91f16700Schasinglulu NODE_CAN_1, 106*91f16700Schasinglulu NODE_EXTERN, 107*91f16700Schasinglulu NODE_APLL, 108*91f16700Schasinglulu NODE_VPLL, 109*91f16700Schasinglulu NODE_DPLL, 110*91f16700Schasinglulu NODE_RPLL, 111*91f16700Schasinglulu NODE_IOPLL, 112*91f16700Schasinglulu NODE_DDR, 113*91f16700Schasinglulu NODE_IPI_APU, 114*91f16700Schasinglulu NODE_IPI_RPU_0, 115*91f16700Schasinglulu NODE_GPU, 116*91f16700Schasinglulu NODE_PCIE, 117*91f16700Schasinglulu NODE_PCAP, 118*91f16700Schasinglulu NODE_RTC, 119*91f16700Schasinglulu NODE_LPD, 120*91f16700Schasinglulu NODE_VCU, 121*91f16700Schasinglulu NODE_IPI_RPU_1, 122*91f16700Schasinglulu NODE_IPI_PL_0, 123*91f16700Schasinglulu NODE_IPI_PL_1, 124*91f16700Schasinglulu NODE_IPI_PL_2, 125*91f16700Schasinglulu NODE_IPI_PL_3, 126*91f16700Schasinglulu NODE_PL, 127*91f16700Schasinglulu NODE_GEM_TSU, 128*91f16700Schasinglulu NODE_SWDT_0, 129*91f16700Schasinglulu NODE_SWDT_1, 130*91f16700Schasinglulu NODE_CSU, 131*91f16700Schasinglulu NODE_PJTAG, 132*91f16700Schasinglulu NODE_TRACE, 133*91f16700Schasinglulu NODE_TESTSCAN, 134*91f16700Schasinglulu NODE_PMU, 135*91f16700Schasinglulu NODE_MAX, 136*91f16700Schasinglulu }; 137*91f16700Schasinglulu 138*91f16700Schasinglulu enum pm_request_ack { 139*91f16700Schasinglulu REQ_ACK_NO = 1, 140*91f16700Schasinglulu REQ_ACK_BLOCKING, 141*91f16700Schasinglulu REQ_ACK_NON_BLOCKING, 142*91f16700Schasinglulu }; 143*91f16700Schasinglulu 144*91f16700Schasinglulu enum pm_suspend_reason { 145*91f16700Schasinglulu SUSPEND_REASON_PU_REQ = 201, 146*91f16700Schasinglulu SUSPEND_REASON_ALERT, 147*91f16700Schasinglulu SUSPEND_REASON_SYS_SHUTDOWN, 148*91f16700Schasinglulu }; 149*91f16700Schasinglulu 150*91f16700Schasinglulu enum pm_ram_state { 151*91f16700Schasinglulu PM_RAM_STATE_OFF = 1, 152*91f16700Schasinglulu PM_RAM_STATE_RETENTION, 153*91f16700Schasinglulu PM_RAM_STATE_ON, 154*91f16700Schasinglulu }; 155*91f16700Schasinglulu 156*91f16700Schasinglulu /** 157*91f16700Schasinglulu * enum pm_boot_status - enum represents the boot status of the PM. 158*91f16700Schasinglulu * @PM_INITIAL_BOOT: boot is a fresh system startup. 159*91f16700Schasinglulu * @PM_RESUME: boot is a resume. 160*91f16700Schasinglulu * @PM_BOOT_ERROR: error, boot cause cannot be identified. 161*91f16700Schasinglulu * 162*91f16700Schasinglulu */ 163*91f16700Schasinglulu enum pm_boot_status { 164*91f16700Schasinglulu PM_INITIAL_BOOT, 165*91f16700Schasinglulu PM_RESUME, 166*91f16700Schasinglulu PM_BOOT_ERROR, 167*91f16700Schasinglulu }; 168*91f16700Schasinglulu 169*91f16700Schasinglulu /** 170*91f16700Schasinglulu * enum pm_shutdown_type - enum represents the shutdown type of the PM. 171*91f16700Schasinglulu * @PMF_SHUTDOWN_TYPE_SHUTDOWN: shutdown. 172*91f16700Schasinglulu * @PMF_SHUTDOWN_TYPE_RESET: reset/reboot. 173*91f16700Schasinglulu * @PMF_SHUTDOWN_TYPE_SETSCOPE_ONLY: set the shutdown/reboot scope. 174*91f16700Schasinglulu * 175*91f16700Schasinglulu */ 176*91f16700Schasinglulu enum pm_shutdown_type { 177*91f16700Schasinglulu PMF_SHUTDOWN_TYPE_SHUTDOWN, 178*91f16700Schasinglulu PMF_SHUTDOWN_TYPE_RESET, 179*91f16700Schasinglulu PMF_SHUTDOWN_TYPE_SETSCOPE_ONLY, 180*91f16700Schasinglulu }; 181*91f16700Schasinglulu 182*91f16700Schasinglulu /** 183*91f16700Schasinglulu * enum pm_shutdown_subtype - enum represents the shutdown subtype of the PM. 184*91f16700Schasinglulu * @PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM: shutdown/reboot APU subsystem only. 185*91f16700Schasinglulu * @PMF_SHUTDOWN_SUBTYPE_PS_ONLY: shutdown/reboot entire PS (but not PL). 186*91f16700Schasinglulu * @PMF_SHUTDOWN_SUBTYPE_SYSTEM: shutdown/reboot entire system. 187*91f16700Schasinglulu * 188*91f16700Schasinglulu */ 189*91f16700Schasinglulu enum pm_shutdown_subtype { 190*91f16700Schasinglulu PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM, 191*91f16700Schasinglulu PMF_SHUTDOWN_SUBTYPE_PS_ONLY, 192*91f16700Schasinglulu PMF_SHUTDOWN_SUBTYPE_SYSTEM, 193*91f16700Schasinglulu }; 194*91f16700Schasinglulu 195*91f16700Schasinglulu /** 196*91f16700Schasinglulu * enum pm_pll_mode - enum represents the mode of the PLL. 197*91f16700Schasinglulu * @PM_PLL_MODE_RESET: PLL is in reset (not locked). 198*91f16700Schasinglulu * @PM_PLL_MODE_INTEGER: PLL is locked in integer mode. 199*91f16700Schasinglulu * @PM_PLL_MODE_FRACTIONAL: PLL is locked in fractional mode. 200*91f16700Schasinglulu * @PM_PLL_MODE_MAX: Represents the maximum mode value for the PLL. 201*91f16700Schasinglulu */ 202*91f16700Schasinglulu enum pm_pll_mode { 203*91f16700Schasinglulu PM_PLL_MODE_RESET, 204*91f16700Schasinglulu PM_PLL_MODE_INTEGER, 205*91f16700Schasinglulu PM_PLL_MODE_FRACTIONAL, 206*91f16700Schasinglulu PM_PLL_MODE_MAX, 207*91f16700Schasinglulu }; 208*91f16700Schasinglulu 209*91f16700Schasinglulu /** 210*91f16700Schasinglulu * enum pm_clock_div_id - enum represents the clock division identifiers in the 211*91f16700Schasinglulu * PM. 212*91f16700Schasinglulu * @PM_CLOCK_DIV0_ID: Clock divider 0. 213*91f16700Schasinglulu * @PM_CLOCK_DIV1_ID: Clock divider 1. 214*91f16700Schasinglulu */ 215*91f16700Schasinglulu enum pm_clock_div_id { 216*91f16700Schasinglulu PM_CLOCK_DIV0_ID, 217*91f16700Schasinglulu PM_CLOCK_DIV1_ID, 218*91f16700Schasinglulu }; 219*91f16700Schasinglulu 220*91f16700Schasinglulu #endif /* ZYNQMP_PM_DEFS_H */ 221