1*6fba6e04STony Xie /* 2*6fba6e04STony Xie * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 3*6fba6e04STony Xie * 4*6fba6e04STony Xie * Redistribution and use in source and binary forms, with or without 5*6fba6e04STony Xie * modification, are permitted provided that the following conditions are met: 6*6fba6e04STony Xie * 7*6fba6e04STony Xie * Redistributions of source code must retain the above copyright notice, this 8*6fba6e04STony Xie * list of conditions and the following disclaimer. 9*6fba6e04STony Xie * 10*6fba6e04STony Xie * Redistributions in binary form must reproduce the above copyright notice, 11*6fba6e04STony Xie * this list of conditions and the following disclaimer in the documentation 12*6fba6e04STony Xie * and/or other materials provided with the distribution. 13*6fba6e04STony Xie * 14*6fba6e04STony Xie * Neither the name of ARM nor the names of its contributors may be used 15*6fba6e04STony Xie * to endorse or promote products derived from this software without specific 16*6fba6e04STony Xie * prior written permission. 17*6fba6e04STony Xie * 18*6fba6e04STony Xie * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19*6fba6e04STony Xie * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*6fba6e04STony Xie * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*6fba6e04STony Xie * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22*6fba6e04STony Xie * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23*6fba6e04STony Xie * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24*6fba6e04STony Xie * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25*6fba6e04STony Xie * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26*6fba6e04STony Xie * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27*6fba6e04STony Xie * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28*6fba6e04STony Xie * POSSIBILITY OF SUCH DAMAGE. 29*6fba6e04STony Xie */ 30*6fba6e04STony Xie 31*6fba6e04STony Xie #ifndef __PMU_H__ 32*6fba6e04STony Xie #define __PMU_H__ 33*6fba6e04STony Xie 34*6fba6e04STony Xie /* Allocate sp reginon in pmusram */ 35*6fba6e04STony Xie #define PSRAM_SP_SIZE 0x80 36*6fba6e04STony Xie #define PSRAM_SP_BOTTOM (PSRAM_SP_TOP - PSRAM_SP_SIZE) 37*6fba6e04STony Xie 38*6fba6e04STony Xie /***************************************************************************** 39*6fba6e04STony Xie * Common define for per soc pmu.h 40*6fba6e04STony Xie *****************************************************************************/ 41*6fba6e04STony Xie /* The ways of cores power domain contorlling */ 42*6fba6e04STony Xie enum cores_pm_ctr_mode { 43*6fba6e04STony Xie core_pwr_pd = 0, 44*6fba6e04STony Xie core_pwr_wfi = 1, 45*6fba6e04STony Xie core_pwr_wfi_int = 2 46*6fba6e04STony Xie }; 47*6fba6e04STony Xie 48*6fba6e04STony Xie /***************************************************************************** 49*6fba6e04STony Xie * pmu con,reg 50*6fba6e04STony Xie *****************************************************************************/ 51*6fba6e04STony Xie #define PMU_WKUP_CFG(n) ((n) * 4) 52*6fba6e04STony Xie 53*6fba6e04STony Xie #define PMU_CORE_PM_CON(cpu) (0xc0 + (cpu * 4)) 54*6fba6e04STony Xie 55*6fba6e04STony Xie /* the shift of bits for cores status */ 56*6fba6e04STony Xie enum pmu_core_pwrst_shift { 57*6fba6e04STony Xie clstl_cpu_wfe = 2, 58*6fba6e04STony Xie clstl_cpu_wfi = 6, 59*6fba6e04STony Xie clstb_cpu_wfe = 12, 60*6fba6e04STony Xie clstb_cpu_wfi = 16 61*6fba6e04STony Xie }; 62*6fba6e04STony Xie 63*6fba6e04STony Xie #define CKECK_WFE_MSK 0x1 64*6fba6e04STony Xie #define CKECK_WFI_MSK 0x10 65*6fba6e04STony Xie #define CKECK_WFEI_MSK 0x11 66*6fba6e04STony Xie 67*6fba6e04STony Xie enum pmu_powerdomain_id { 68*6fba6e04STony Xie PD_CPUL0 = 0, 69*6fba6e04STony Xie PD_CPUL1, 70*6fba6e04STony Xie PD_CPUL2, 71*6fba6e04STony Xie PD_CPUL3, 72*6fba6e04STony Xie PD_CPUB0, 73*6fba6e04STony Xie PD_CPUB1, 74*6fba6e04STony Xie PD_SCUL, 75*6fba6e04STony Xie PD_SCUB, 76*6fba6e04STony Xie PD_TCPD0, 77*6fba6e04STony Xie PD_TCPD1, 78*6fba6e04STony Xie PD_CCI, 79*6fba6e04STony Xie PD_PERILP, 80*6fba6e04STony Xie PD_PERIHP, 81*6fba6e04STony Xie PD_CENTER, 82*6fba6e04STony Xie PD_VIO, 83*6fba6e04STony Xie PD_GPU, 84*6fba6e04STony Xie PD_VCODEC, 85*6fba6e04STony Xie PD_VDU, 86*6fba6e04STony Xie PD_RGA, 87*6fba6e04STony Xie PD_IEP, 88*6fba6e04STony Xie PD_VO, 89*6fba6e04STony Xie PD_ISP0 = 22, 90*6fba6e04STony Xie PD_ISP1, 91*6fba6e04STony Xie PD_HDCP, 92*6fba6e04STony Xie PD_GMAC, 93*6fba6e04STony Xie PD_EMMC, 94*6fba6e04STony Xie PD_USB3, 95*6fba6e04STony Xie PD_EDP, 96*6fba6e04STony Xie PD_GIC, 97*6fba6e04STony Xie PD_SD, 98*6fba6e04STony Xie PD_SDIOAUDIO, 99*6fba6e04STony Xie PD_END 100*6fba6e04STony Xie }; 101*6fba6e04STony Xie 102*6fba6e04STony Xie enum powerdomain_state { 103*6fba6e04STony Xie PMU_POWER_ON = 0, 104*6fba6e04STony Xie PMU_POWER_OFF, 105*6fba6e04STony Xie }; 106*6fba6e04STony Xie 107*6fba6e04STony Xie enum pmu_bus_id { 108*6fba6e04STony Xie BUS_ID_GPU = 0, 109*6fba6e04STony Xie BUS_ID_PERILP, 110*6fba6e04STony Xie BUS_ID_PERIHP, 111*6fba6e04STony Xie BUS_ID_VCODEC, 112*6fba6e04STony Xie BUS_ID_VDU, 113*6fba6e04STony Xie BUS_ID_RGA, 114*6fba6e04STony Xie BUS_ID_IEP, 115*6fba6e04STony Xie BUS_ID_VOPB, 116*6fba6e04STony Xie BUS_ID_VOPL, 117*6fba6e04STony Xie BUS_ID_ISP0, 118*6fba6e04STony Xie BUS_ID_ISP1, 119*6fba6e04STony Xie BUS_ID_HDCP, 120*6fba6e04STony Xie BUS_ID_USB3, 121*6fba6e04STony Xie BUS_ID_PERILPM0, 122*6fba6e04STony Xie BUS_ID_CENTER, 123*6fba6e04STony Xie BUS_ID_CCIM0, 124*6fba6e04STony Xie BUS_ID_CCIM1, 125*6fba6e04STony Xie BUS_ID_VIO, 126*6fba6e04STony Xie BUS_ID_MSCH0, 127*6fba6e04STony Xie BUS_ID_MSCH1, 128*6fba6e04STony Xie BUS_ID_ALIVE, 129*6fba6e04STony Xie BUS_ID_PMU, 130*6fba6e04STony Xie BUS_ID_EDP, 131*6fba6e04STony Xie BUS_ID_GMAC, 132*6fba6e04STony Xie BUS_ID_EMMC, 133*6fba6e04STony Xie BUS_ID_CENTER1, 134*6fba6e04STony Xie BUS_ID_PMUM0, 135*6fba6e04STony Xie BUS_ID_GIC, 136*6fba6e04STony Xie BUS_ID_SD, 137*6fba6e04STony Xie BUS_ID_SDIOAUDIO, 138*6fba6e04STony Xie }; 139*6fba6e04STony Xie 140*6fba6e04STony Xie enum pmu_bus_state { 141*6fba6e04STony Xie BUS_ACTIVE, 142*6fba6e04STony Xie BUS_IDLE, 143*6fba6e04STony Xie }; 144*6fba6e04STony Xie 145*6fba6e04STony Xie /* pmu_cpuapm bit */ 146*6fba6e04STony Xie enum pmu_cores_pm_by_wfi { 147*6fba6e04STony Xie core_pm_en = 0, 148*6fba6e04STony Xie core_pm_int_wakeup_en, 149*6fba6e04STony Xie core_pm_resv, 150*6fba6e04STony Xie core_pm_sft_wakeup_en 151*6fba6e04STony Xie }; 152*6fba6e04STony Xie 153*6fba6e04STony Xie enum pmu_wkup_cfg0 { 154*6fba6e04STony Xie PMU_GPIO0A_POSE_WKUP_EN = 0, 155*6fba6e04STony Xie PMU_GPIO0B_POSE_WKUP_EN = 8, 156*6fba6e04STony Xie PMU_GPIO0C_POSE_WKUP_EN = 16, 157*6fba6e04STony Xie PMU_GPIO0D_POSE_WKUP_EN = 24, 158*6fba6e04STony Xie }; 159*6fba6e04STony Xie 160*6fba6e04STony Xie enum pmu_wkup_cfg1 { 161*6fba6e04STony Xie PMU_GPIO0A_NEGEDGE_WKUP_EN = 0, 162*6fba6e04STony Xie PMU_GPIO0B_NEGEDGE_WKUP_EN = 7, 163*6fba6e04STony Xie PMU_GPIO0C_NEGEDGE_WKUP_EN = 16, 164*6fba6e04STony Xie PMU_GPIO0D_NEGEDGE_WKUP_EN = 24, 165*6fba6e04STony Xie }; 166*6fba6e04STony Xie 167*6fba6e04STony Xie enum pmu_wkup_cfg2 { 168*6fba6e04STony Xie PMU_GPIO1A_POSE_WKUP_EN = 0, 169*6fba6e04STony Xie PMU_GPIO1B_POSE_WKUP_EN = 7, 170*6fba6e04STony Xie PMU_GPIO1C_POSE_WKUP_EN = 16, 171*6fba6e04STony Xie PMU_GPIO1D_POSE_WKUP_EN = 24, 172*6fba6e04STony Xie }; 173*6fba6e04STony Xie 174*6fba6e04STony Xie enum pmu_wkup_cfg3 { 175*6fba6e04STony Xie PMU_GPIO1A_NEGEDGE_WKUP_EN = 0, 176*6fba6e04STony Xie PMU_GPIO1B_NEGEDGE_WKUP_EN = 7, 177*6fba6e04STony Xie PMU_GPIO1C_NEGEDGE_WKUP_EN = 16, 178*6fba6e04STony Xie PMU_GPIO1D_NEGEDGE_WKUP_EN = 24, 179*6fba6e04STony Xie }; 180*6fba6e04STony Xie 181*6fba6e04STony Xie /* pmu_wkup_cfg4 */ 182*6fba6e04STony Xie enum pmu_wkup_cfg4 { 183*6fba6e04STony Xie PMU_CLUSTER_L_WKUP_EN = 0, 184*6fba6e04STony Xie PMU_CLUSTER_B_WKUP_EN, 185*6fba6e04STony Xie PMU_GPIO_WKUP_EN, 186*6fba6e04STony Xie PMU_SDIO_WKUP_EN, 187*6fba6e04STony Xie 188*6fba6e04STony Xie PMU_SDMMC_WKUP_EN, 189*6fba6e04STony Xie PMU_TIMER_WKUP_EN = 6, 190*6fba6e04STony Xie PMU_USBDEV_WKUP_EN, 191*6fba6e04STony Xie 192*6fba6e04STony Xie PMU_SFT_WKUP_EN, 193*6fba6e04STony Xie PMU_M0_WDT_WKUP_EN, 194*6fba6e04STony Xie PMU_TIMEOUT_WKUP_EN, 195*6fba6e04STony Xie PMU_PWM_WKUP_EN, 196*6fba6e04STony Xie 197*6fba6e04STony Xie PMU_PCIE_WKUP_EN = 13, 198*6fba6e04STony Xie }; 199*6fba6e04STony Xie 200*6fba6e04STony Xie enum pmu_pwrdn_con { 201*6fba6e04STony Xie PMU_A53_L0_PWRDWN_EN = 0, 202*6fba6e04STony Xie PMU_A53_L1_PWRDWN_EN, 203*6fba6e04STony Xie PMU_A53_L2_PWRDWN_EN, 204*6fba6e04STony Xie PMU_A53_L3_PWRDWN_EN, 205*6fba6e04STony Xie 206*6fba6e04STony Xie PMU_A72_B0_PWRDWN_EN, 207*6fba6e04STony Xie PMU_A72_B1_PWRDWN_EN, 208*6fba6e04STony Xie PMU_SCU_L_PWRDWN_EN, 209*6fba6e04STony Xie PMU_SCU_B_PWRDWN_EN, 210*6fba6e04STony Xie 211*6fba6e04STony Xie PMU_TCPD0_PWRDWN_EN, 212*6fba6e04STony Xie PMU_TCPD1_PWRDWN_EN, 213*6fba6e04STony Xie PMU_CCI_PWRDWN_EN, 214*6fba6e04STony Xie PMU_PERILP_PWRDWN_EN, 215*6fba6e04STony Xie 216*6fba6e04STony Xie PMU_PERIHP_PWRDWN_EN, 217*6fba6e04STony Xie PMU_CENTER_PWRDWN_EN, 218*6fba6e04STony Xie PMU_VIO_PWRDWN_EN, 219*6fba6e04STony Xie PMU_GPU_PWRDWN_EN, 220*6fba6e04STony Xie 221*6fba6e04STony Xie PMU_VCODEC_PWRDWN_EN, 222*6fba6e04STony Xie PMU_VDU_PWRDWN_EN, 223*6fba6e04STony Xie PMU_RGA_PWRDWN_EN, 224*6fba6e04STony Xie PMU_IEP_PWRDWN_EN, 225*6fba6e04STony Xie 226*6fba6e04STony Xie PMU_VO_PWRDWN_EN, 227*6fba6e04STony Xie PMU_ISP0_PWRDWN_EN = 22, 228*6fba6e04STony Xie PMU_ISP1_PWRDWN_EN, 229*6fba6e04STony Xie 230*6fba6e04STony Xie PMU_HDCP_PWRDWN_EN, 231*6fba6e04STony Xie PMU_GMAC_PWRDWN_EN, 232*6fba6e04STony Xie PMU_EMMC_PWRDWN_EN, 233*6fba6e04STony Xie PMU_USB3_PWRDWN_EN, 234*6fba6e04STony Xie 235*6fba6e04STony Xie PMU_EDP_PWRDWN_EN, 236*6fba6e04STony Xie PMU_GIC_PWRDWN_EN, 237*6fba6e04STony Xie PMU_SD_PWRDWN_EN, 238*6fba6e04STony Xie PMU_SDIOAUDIO_PWRDWN_EN, 239*6fba6e04STony Xie }; 240*6fba6e04STony Xie 241*6fba6e04STony Xie enum pmu_pwrdn_st { 242*6fba6e04STony Xie PMU_A53_L0_PWRDWN_ST = 0, 243*6fba6e04STony Xie PMU_A53_L1_PWRDWN_ST, 244*6fba6e04STony Xie PMU_A53_L2_PWRDWN_ST, 245*6fba6e04STony Xie PMU_A53_L3_PWRDWN_ST, 246*6fba6e04STony Xie 247*6fba6e04STony Xie PMU_A72_B0_PWRDWN_ST, 248*6fba6e04STony Xie PMU_A72_B1_PWRDWN_ST, 249*6fba6e04STony Xie PMU_SCU_L_PWRDWN_ST, 250*6fba6e04STony Xie PMU_SCU_B_PWRDWN_ST, 251*6fba6e04STony Xie 252*6fba6e04STony Xie PMU_TCPD0_PWRDWN_ST, 253*6fba6e04STony Xie PMU_TCPD1_PWRDWN_ST, 254*6fba6e04STony Xie PMU_CCI_PWRDWN_ST, 255*6fba6e04STony Xie PMU_PERILP_PWRDWN_ST, 256*6fba6e04STony Xie 257*6fba6e04STony Xie PMU_PERIHP_PWRDWN_ST, 258*6fba6e04STony Xie PMU_CENTER_PWRDWN_ST, 259*6fba6e04STony Xie PMU_VIO_PWRDWN_ST, 260*6fba6e04STony Xie PMU_GPU_PWRDWN_ST, 261*6fba6e04STony Xie 262*6fba6e04STony Xie PMU_VCODEC_PWRDWN_ST, 263*6fba6e04STony Xie PMU_VDU_PWRDWN_ST, 264*6fba6e04STony Xie PMU_RGA_PWRDWN_ST, 265*6fba6e04STony Xie PMU_IEP_PWRDWN_ST, 266*6fba6e04STony Xie 267*6fba6e04STony Xie PMU_VO_PWRDWN_ST, 268*6fba6e04STony Xie PMU_ISP0_PWRDWN_ST = 22, 269*6fba6e04STony Xie PMU_ISP1_PWRDWN_ST, 270*6fba6e04STony Xie 271*6fba6e04STony Xie PMU_HDCP_PWRDWN_ST, 272*6fba6e04STony Xie PMU_GMAC_PWRDWN_ST, 273*6fba6e04STony Xie PMU_EMMC_PWRDWN_ST, 274*6fba6e04STony Xie PMU_USB3_PWRDWN_ST, 275*6fba6e04STony Xie 276*6fba6e04STony Xie PMU_EDP_PWRDWN_ST, 277*6fba6e04STony Xie PMU_GIC_PWRDWN_ST, 278*6fba6e04STony Xie PMU_SD_PWRDWN_ST, 279*6fba6e04STony Xie PMU_SDIOAUDIO_PWRDWN_ST, 280*6fba6e04STony Xie 281*6fba6e04STony Xie }; 282*6fba6e04STony Xie 283*6fba6e04STony Xie enum pmu_pll_con { 284*6fba6e04STony Xie PMU_PLL_PD_CFG = 0, 285*6fba6e04STony Xie PMU_SFT_PLL_PD = 8, 286*6fba6e04STony Xie }; 287*6fba6e04STony Xie 288*6fba6e04STony Xie enum pmu_pwermode_con { 289*6fba6e04STony Xie PMU_PWR_MODE_EN = 0, 290*6fba6e04STony Xie PMU_WKUP_RST_EN, 291*6fba6e04STony Xie PMU_INPUT_CLAMP_EN, 292*6fba6e04STony Xie PMU_OSC_DIS, 293*6fba6e04STony Xie 294*6fba6e04STony Xie PMU_ALIVE_USE_LF, 295*6fba6e04STony Xie PMU_PMU_USE_LF, 296*6fba6e04STony Xie PMU_POWER_OFF_REQ_CFG, 297*6fba6e04STony Xie PMU_CHIP_PD_EN, 298*6fba6e04STony Xie 299*6fba6e04STony Xie PMU_PLL_PD_EN, 300*6fba6e04STony Xie PMU_CPU0_PD_EN, 301*6fba6e04STony Xie PMU_L2_FLUSH_EN, 302*6fba6e04STony Xie PMU_L2_IDLE_EN, 303*6fba6e04STony Xie 304*6fba6e04STony Xie PMU_SCU_PD_EN, 305*6fba6e04STony Xie PMU_CCI_PD_EN, 306*6fba6e04STony Xie PMU_PERILP_PD_EN, 307*6fba6e04STony Xie PMU_CENTER_PD_EN, 308*6fba6e04STony Xie 309*6fba6e04STony Xie PMU_SREF0_ENTER_EN, 310*6fba6e04STony Xie PMU_DDRC0_GATING_EN, 311*6fba6e04STony Xie PMU_DDRIO0_RET_EN, 312*6fba6e04STony Xie PMU_DDRIO0_RET_DE_REQ, 313*6fba6e04STony Xie 314*6fba6e04STony Xie PMU_SREF1_ENTER_EN, 315*6fba6e04STony Xie PMU_DDRC1_GATING_EN, 316*6fba6e04STony Xie PMU_DDRIO1_RET_EN, 317*6fba6e04STony Xie PMU_DDRIO1_RET_DE_REQ, 318*6fba6e04STony Xie 319*6fba6e04STony Xie PMU_CLK_CENTER_SRC_GATE_EN = 26, 320*6fba6e04STony Xie PMU_CLK_PERILP_SRC_GATE_EN, 321*6fba6e04STony Xie 322*6fba6e04STony Xie PMU_CLK_CORE_SRC_GATE_EN, 323*6fba6e04STony Xie PMU_DDRIO_RET_HW_DE_REQ, 324*6fba6e04STony Xie PMU_SLP_OUTPUT_CFG, 325*6fba6e04STony Xie PMU_MAIN_CLUSTER, 326*6fba6e04STony Xie }; 327*6fba6e04STony Xie 328*6fba6e04STony Xie enum pmu_sft_con { 329*6fba6e04STony Xie PMU_WKUP_SFT = 0, 330*6fba6e04STony Xie PMU_INPUT_CLAMP_CFG, 331*6fba6e04STony Xie PMU_OSC_DIS_CFG, 332*6fba6e04STony Xie PMU_PMU_LF_EN_CFG, 333*6fba6e04STony Xie 334*6fba6e04STony Xie PMU_ALIVE_LF_EN_CFG, 335*6fba6e04STony Xie PMU_24M_EN_CFG, 336*6fba6e04STony Xie PMU_DBG_PWRUP_L0_CFG, 337*6fba6e04STony Xie PMU_WKUP_SFT_M0, 338*6fba6e04STony Xie 339*6fba6e04STony Xie PMU_DDRCTL0_C_SYSREQ_CFG, 340*6fba6e04STony Xie PMU_DDR0_IO_RET_CFG, 341*6fba6e04STony Xie 342*6fba6e04STony Xie PMU_DDRCTL1_C_SYSREQ_CFG = 12, 343*6fba6e04STony Xie PMU_DDR1_IO_RET_CFG, 344*6fba6e04STony Xie }; 345*6fba6e04STony Xie 346*6fba6e04STony Xie enum pmu_int_con { 347*6fba6e04STony Xie PMU_PMU_INT_EN = 0, 348*6fba6e04STony Xie PMU_PWRMD_WKUP_INT_EN, 349*6fba6e04STony Xie PMU_WKUP_GPIO0_NEG_INT_EN, 350*6fba6e04STony Xie PMU_WKUP_GPIO0_POS_INT_EN, 351*6fba6e04STony Xie PMU_WKUP_GPIO1_NEG_INT_EN, 352*6fba6e04STony Xie PMU_WKUP_GPIO1_POS_INT_EN, 353*6fba6e04STony Xie }; 354*6fba6e04STony Xie 355*6fba6e04STony Xie enum pmu_int_st { 356*6fba6e04STony Xie PMU_PWRMD_WKUP_INT_ST = 1, 357*6fba6e04STony Xie PMU_WKUP_GPIO0_NEG_INT_ST, 358*6fba6e04STony Xie PMU_WKUP_GPIO0_POS_INT_ST, 359*6fba6e04STony Xie PMU_WKUP_GPIO1_NEG_INT_ST, 360*6fba6e04STony Xie PMU_WKUP_GPIO1_POS_INT_ST, 361*6fba6e04STony Xie }; 362*6fba6e04STony Xie 363*6fba6e04STony Xie enum pmu_gpio0_pos_int_con { 364*6fba6e04STony Xie PMU_GPIO0A_POS_INT_EN = 0, 365*6fba6e04STony Xie PMU_GPIO0B_POS_INT_EN = 8, 366*6fba6e04STony Xie PMU_GPIO0C_POS_INT_EN = 16, 367*6fba6e04STony Xie PMU_GPIO0D_POS_INT_EN = 24, 368*6fba6e04STony Xie }; 369*6fba6e04STony Xie 370*6fba6e04STony Xie enum pmu_gpio0_neg_int_con { 371*6fba6e04STony Xie PMU_GPIO0A_NEG_INT_EN = 0, 372*6fba6e04STony Xie PMU_GPIO0B_NEG_INT_EN = 8, 373*6fba6e04STony Xie PMU_GPIO0C_NEG_INT_EN = 16, 374*6fba6e04STony Xie PMU_GPIO0D_NEG_INT_EN = 24, 375*6fba6e04STony Xie }; 376*6fba6e04STony Xie 377*6fba6e04STony Xie enum pmu_gpio1_pos_int_con { 378*6fba6e04STony Xie PMU_GPIO1A_POS_INT_EN = 0, 379*6fba6e04STony Xie PMU_GPIO1B_POS_INT_EN = 8, 380*6fba6e04STony Xie PMU_GPIO1C_POS_INT_EN = 16, 381*6fba6e04STony Xie PMU_GPIO1D_POS_INT_EN = 24, 382*6fba6e04STony Xie }; 383*6fba6e04STony Xie 384*6fba6e04STony Xie enum pmu_gpio1_neg_int_con { 385*6fba6e04STony Xie PMU_GPIO1A_NEG_INT_EN = 0, 386*6fba6e04STony Xie PMU_GPIO1B_NEG_INT_EN = 8, 387*6fba6e04STony Xie PMU_GPIO1C_NEG_INT_EN = 16, 388*6fba6e04STony Xie PMU_GPIO1D_NEG_INT_EN = 24, 389*6fba6e04STony Xie }; 390*6fba6e04STony Xie 391*6fba6e04STony Xie enum pmu_gpio0_pos_int_st { 392*6fba6e04STony Xie PMU_GPIO0A_POS_INT_ST = 0, 393*6fba6e04STony Xie PMU_GPIO0B_POS_INT_ST = 8, 394*6fba6e04STony Xie PMU_GPIO0C_POS_INT_ST = 16, 395*6fba6e04STony Xie PMU_GPIO0D_POS_INT_ST = 24, 396*6fba6e04STony Xie }; 397*6fba6e04STony Xie 398*6fba6e04STony Xie enum pmu_gpio0_neg_int_st { 399*6fba6e04STony Xie PMU_GPIO0A_NEG_INT_ST = 0, 400*6fba6e04STony Xie PMU_GPIO0B_NEG_INT_ST = 8, 401*6fba6e04STony Xie PMU_GPIO0C_NEG_INT_ST = 16, 402*6fba6e04STony Xie PMU_GPIO0D_NEG_INT_ST = 24, 403*6fba6e04STony Xie }; 404*6fba6e04STony Xie 405*6fba6e04STony Xie enum pmu_gpio1_pos_int_st { 406*6fba6e04STony Xie PMU_GPIO1A_POS_INT_ST = 0, 407*6fba6e04STony Xie PMU_GPIO1B_POS_INT_ST = 8, 408*6fba6e04STony Xie PMU_GPIO1C_POS_INT_ST = 16, 409*6fba6e04STony Xie PMU_GPIO1D_POS_INT_ST = 24, 410*6fba6e04STony Xie }; 411*6fba6e04STony Xie 412*6fba6e04STony Xie enum pmu_gpio1_neg_int_st { 413*6fba6e04STony Xie PMU_GPIO1A_NEG_INT_ST = 0, 414*6fba6e04STony Xie PMU_GPIO1B_NEG_INT_ST = 8, 415*6fba6e04STony Xie PMU_GPIO1C_NEG_INT_ST = 16, 416*6fba6e04STony Xie PMU_GPIO1D_NEG_INT_ST = 24, 417*6fba6e04STony Xie }; 418*6fba6e04STony Xie 419*6fba6e04STony Xie /* pmu power down configure register 0x0050 */ 420*6fba6e04STony Xie enum pmu_pwrdn_inten { 421*6fba6e04STony Xie PMU_A53_L0_PWR_SWITCH_INT_EN = 0, 422*6fba6e04STony Xie PMU_A53_L1_PWR_SWITCH_INT_EN, 423*6fba6e04STony Xie PMU_A53_L2_PWR_SWITCH_INT_EN, 424*6fba6e04STony Xie PMU_A53_L3_PWR_SWITCH_INT_EN, 425*6fba6e04STony Xie 426*6fba6e04STony Xie PMU_A72_B0_PWR_SWITCH_INT_EN, 427*6fba6e04STony Xie PMU_A72_B1_PWR_SWITCH_INT_EN, 428*6fba6e04STony Xie PMU_SCU_L_PWR_SWITCH_INT_EN, 429*6fba6e04STony Xie PMU_SCU_B_PWR_SWITCH_INT_EN, 430*6fba6e04STony Xie 431*6fba6e04STony Xie PMU_TCPD0_PWR_SWITCH_INT_EN, 432*6fba6e04STony Xie PMU_TCPD1_PWR_SWITCH_INT_EN, 433*6fba6e04STony Xie PMU_CCI_PWR_SWITCH_INT_EN, 434*6fba6e04STony Xie PMU_PERILP_PWR_SWITCH_INT_EN, 435*6fba6e04STony Xie 436*6fba6e04STony Xie PMU_PERIHP_PWR_SWITCH_INT_EN, 437*6fba6e04STony Xie PMU_CENTER_PWR_SWITCH_INT_EN, 438*6fba6e04STony Xie PMU_VIO_PWR_SWITCH_INT_EN, 439*6fba6e04STony Xie PMU_GPU_PWR_SWITCH_INT_EN, 440*6fba6e04STony Xie 441*6fba6e04STony Xie PMU_VCODEC_PWR_SWITCH_INT_EN, 442*6fba6e04STony Xie PMU_VDU_PWR_SWITCH_INT_EN, 443*6fba6e04STony Xie PMU_RGA_PWR_SWITCH_INT_EN, 444*6fba6e04STony Xie PMU_IEP_PWR_SWITCH_INT_EN, 445*6fba6e04STony Xie 446*6fba6e04STony Xie PMU_VO_PWR_SWITCH_INT_EN, 447*6fba6e04STony Xie PMU_ISP0_PWR_SWITCH_INT_EN = 22, 448*6fba6e04STony Xie PMU_ISP1_PWR_SWITCH_INT_EN, 449*6fba6e04STony Xie 450*6fba6e04STony Xie PMU_HDCP_PWR_SWITCH_INT_EN, 451*6fba6e04STony Xie PMU_GMAC_PWR_SWITCH_INT_EN, 452*6fba6e04STony Xie PMU_EMMC_PWR_SWITCH_INT_EN, 453*6fba6e04STony Xie PMU_USB3_PWR_SWITCH_INT_EN, 454*6fba6e04STony Xie 455*6fba6e04STony Xie PMU_EDP_PWR_SWITCH_INT_EN, 456*6fba6e04STony Xie PMU_GIC_PWR_SWITCH_INT_EN, 457*6fba6e04STony Xie PMU_SD_PWR_SWITCH_INT_EN, 458*6fba6e04STony Xie PMU_SDIOAUDIO_PWR_SWITCH_INT_EN, 459*6fba6e04STony Xie }; 460*6fba6e04STony Xie 461*6fba6e04STony Xie enum pmu_wkup_status { 462*6fba6e04STony Xie PMU_WKUP_BY_CLSTER_L_INT = 0, 463*6fba6e04STony Xie PMU_WKUP_BY_CLSTER_b_INT, 464*6fba6e04STony Xie PMU_WKUP_BY_GPIO_INT, 465*6fba6e04STony Xie PMU_WKUP_BY_SDIO_DET, 466*6fba6e04STony Xie 467*6fba6e04STony Xie PMU_WKUP_BY_SDMMC_DET, 468*6fba6e04STony Xie PMU_WKUP_BY_TIMER = 6, 469*6fba6e04STony Xie PMU_WKUP_BY_USBDEV_DET, 470*6fba6e04STony Xie 471*6fba6e04STony Xie PMU_WKUP_BY_M0_SFT, 472*6fba6e04STony Xie PMU_WKUP_BY_M0_WDT_INT, 473*6fba6e04STony Xie PMU_WKUP_BY_TIMEOUT, 474*6fba6e04STony Xie PMU_WKUP_BY_PWM, 475*6fba6e04STony Xie 476*6fba6e04STony Xie PMU_WKUP_BY_PCIE = 13, 477*6fba6e04STony Xie }; 478*6fba6e04STony Xie 479*6fba6e04STony Xie enum pmu_bus_clr { 480*6fba6e04STony Xie PMU_CLR_GPU = 0, 481*6fba6e04STony Xie PMU_CLR_PERILP, 482*6fba6e04STony Xie PMU_CLR_PERIHP, 483*6fba6e04STony Xie PMU_CLR_VCODEC, 484*6fba6e04STony Xie 485*6fba6e04STony Xie PMU_CLR_VDU, 486*6fba6e04STony Xie PMU_CLR_RGA, 487*6fba6e04STony Xie PMU_CLR_IEP, 488*6fba6e04STony Xie PMU_CLR_VOPB, 489*6fba6e04STony Xie 490*6fba6e04STony Xie PMU_CLR_VOPL, 491*6fba6e04STony Xie PMU_CLR_ISP0, 492*6fba6e04STony Xie PMU_CLR_ISP1, 493*6fba6e04STony Xie PMU_CLR_HDCP, 494*6fba6e04STony Xie 495*6fba6e04STony Xie PMU_CLR_USB3, 496*6fba6e04STony Xie PMU_CLR_PERILPM0, 497*6fba6e04STony Xie PMU_CLR_CENTER, 498*6fba6e04STony Xie PMU_CLR_CCIM1, 499*6fba6e04STony Xie 500*6fba6e04STony Xie PMU_CLR_CCIM0, 501*6fba6e04STony Xie PMU_CLR_VIO, 502*6fba6e04STony Xie PMU_CLR_MSCH0, 503*6fba6e04STony Xie PMU_CLR_MSCH1, 504*6fba6e04STony Xie 505*6fba6e04STony Xie PMU_CLR_ALIVE, 506*6fba6e04STony Xie PMU_CLR_PMU, 507*6fba6e04STony Xie PMU_CLR_EDP, 508*6fba6e04STony Xie PMU_CLR_GMAC, 509*6fba6e04STony Xie 510*6fba6e04STony Xie PMU_CLR_EMMC, 511*6fba6e04STony Xie PMU_CLR_CENTER1, 512*6fba6e04STony Xie PMU_CLR_PMUM0, 513*6fba6e04STony Xie PMU_CLR_GIC, 514*6fba6e04STony Xie 515*6fba6e04STony Xie PMU_CLR_SD, 516*6fba6e04STony Xie PMU_CLR_SDIOAUDIO, 517*6fba6e04STony Xie }; 518*6fba6e04STony Xie 519*6fba6e04STony Xie /* PMU bus idle request register */ 520*6fba6e04STony Xie enum pmu_bus_idle_req { 521*6fba6e04STony Xie PMU_IDLE_REQ_GPU = 0, 522*6fba6e04STony Xie PMU_IDLE_REQ_PERILP, 523*6fba6e04STony Xie PMU_IDLE_REQ_PERIHP, 524*6fba6e04STony Xie PMU_IDLE_REQ_VCODEC, 525*6fba6e04STony Xie 526*6fba6e04STony Xie PMU_IDLE_REQ_VDU, 527*6fba6e04STony Xie PMU_IDLE_REQ_RGA, 528*6fba6e04STony Xie PMU_IDLE_REQ_IEP, 529*6fba6e04STony Xie PMU_IDLE_REQ_VOPB, 530*6fba6e04STony Xie 531*6fba6e04STony Xie PMU_IDLE_REQ_VOPL, 532*6fba6e04STony Xie PMU_IDLE_REQ_ISP0, 533*6fba6e04STony Xie PMU_IDLE_REQ_ISP1, 534*6fba6e04STony Xie PMU_IDLE_REQ_HDCP, 535*6fba6e04STony Xie 536*6fba6e04STony Xie PMU_IDLE_REQ_USB3, 537*6fba6e04STony Xie PMU_IDLE_REQ_PERILPM0, 538*6fba6e04STony Xie PMU_IDLE_REQ_CENTER, 539*6fba6e04STony Xie PMU_IDLE_REQ_CCIM0, 540*6fba6e04STony Xie 541*6fba6e04STony Xie PMU_IDLE_REQ_CCIM1, 542*6fba6e04STony Xie PMU_IDLE_REQ_VIO, 543*6fba6e04STony Xie PMU_IDLE_REQ_MSCH0, 544*6fba6e04STony Xie PMU_IDLE_REQ_MSCH1, 545*6fba6e04STony Xie 546*6fba6e04STony Xie PMU_IDLE_REQ_ALIVE, 547*6fba6e04STony Xie PMU_IDLE_REQ_PMU, 548*6fba6e04STony Xie PMU_IDLE_REQ_EDP, 549*6fba6e04STony Xie PMU_IDLE_REQ_GMAC, 550*6fba6e04STony Xie 551*6fba6e04STony Xie PMU_IDLE_REQ_EMMC, 552*6fba6e04STony Xie PMU_IDLE_REQ_CENTER1, 553*6fba6e04STony Xie PMU_IDLE_REQ_PMUM0, 554*6fba6e04STony Xie PMU_IDLE_REQ_GIC, 555*6fba6e04STony Xie 556*6fba6e04STony Xie PMU_IDLE_REQ_SD, 557*6fba6e04STony Xie PMU_IDLE_REQ_SDIOAUDIO, 558*6fba6e04STony Xie }; 559*6fba6e04STony Xie 560*6fba6e04STony Xie /* pmu bus idle status register */ 561*6fba6e04STony Xie enum pmu_bus_idle_st { 562*6fba6e04STony Xie PMU_IDLE_ST_GPU = 0, 563*6fba6e04STony Xie PMU_IDLE_ST_PERILP, 564*6fba6e04STony Xie PMU_IDLE_ST_PERIHP, 565*6fba6e04STony Xie PMU_IDLE_ST_VCODEC, 566*6fba6e04STony Xie 567*6fba6e04STony Xie PMU_IDLE_ST_VDU, 568*6fba6e04STony Xie PMU_IDLE_ST_RGA, 569*6fba6e04STony Xie PMU_IDLE_ST_IEP, 570*6fba6e04STony Xie PMU_IDLE_ST_VOPB, 571*6fba6e04STony Xie 572*6fba6e04STony Xie PMU_IDLE_ST_VOPL, 573*6fba6e04STony Xie PMU_IDLE_ST_ISP0, 574*6fba6e04STony Xie PMU_IDLE_ST_ISP1, 575*6fba6e04STony Xie PMU_IDLE_ST_HDCP, 576*6fba6e04STony Xie 577*6fba6e04STony Xie PMU_IDLE_ST_USB3, 578*6fba6e04STony Xie PMU_IDLE_ST_PERILPM0, 579*6fba6e04STony Xie PMU_IDLE_ST_CENTER, 580*6fba6e04STony Xie PMU_IDLE_ST_CCIM0, 581*6fba6e04STony Xie 582*6fba6e04STony Xie PMU_IDLE_ST_CCIM1, 583*6fba6e04STony Xie PMU_IDLE_ST_VIO, 584*6fba6e04STony Xie PMU_IDLE_ST_MSCH0, 585*6fba6e04STony Xie PMU_IDLE_ST_MSCH1, 586*6fba6e04STony Xie 587*6fba6e04STony Xie PMU_IDLE_ST_ALIVE, 588*6fba6e04STony Xie PMU_IDLE_ST_PMU, 589*6fba6e04STony Xie PMU_IDLE_ST_EDP, 590*6fba6e04STony Xie PMU_IDLE_ST_GMAC, 591*6fba6e04STony Xie 592*6fba6e04STony Xie PMU_IDLE_ST_EMMC, 593*6fba6e04STony Xie PMU_IDLE_ST_CENTER1, 594*6fba6e04STony Xie PMU_IDLE_ST_PMUM0, 595*6fba6e04STony Xie PMU_IDLE_ST_GIC, 596*6fba6e04STony Xie 597*6fba6e04STony Xie PMU_IDLE_ST_SD, 598*6fba6e04STony Xie PMU_IDLE_ST_SDIOAUDIO, 599*6fba6e04STony Xie }; 600*6fba6e04STony Xie 601*6fba6e04STony Xie enum pmu_bus_idle_ack { 602*6fba6e04STony Xie PMU_IDLE_ACK_GPU = 0, 603*6fba6e04STony Xie PMU_IDLE_ACK_PERILP, 604*6fba6e04STony Xie PMU_IDLE_ACK_PERIHP, 605*6fba6e04STony Xie PMU_IDLE_ACK_VCODEC, 606*6fba6e04STony Xie 607*6fba6e04STony Xie PMU_IDLE_ACK_VDU, 608*6fba6e04STony Xie PMU_IDLE_ACK_RGA, 609*6fba6e04STony Xie PMU_IDLE_ACK_IEP, 610*6fba6e04STony Xie PMU_IDLE_ACK_VOPB, 611*6fba6e04STony Xie 612*6fba6e04STony Xie PMU_IDLE_ACK_VOPL, 613*6fba6e04STony Xie PMU_IDLE_ACK_ISP0, 614*6fba6e04STony Xie PMU_IDLE_ACK_ISP1, 615*6fba6e04STony Xie PMU_IDLE_ACK_HDCP, 616*6fba6e04STony Xie 617*6fba6e04STony Xie PMU_IDLE_ACK_USB3, 618*6fba6e04STony Xie PMU_IDLE_ACK_PERILPM0, 619*6fba6e04STony Xie PMU_IDLE_ACK_CENTER, 620*6fba6e04STony Xie PMU_IDLE_ACK_CCIM0, 621*6fba6e04STony Xie 622*6fba6e04STony Xie PMU_IDLE_ACK_CCIM1, 623*6fba6e04STony Xie PMU_IDLE_ACK_VIO, 624*6fba6e04STony Xie PMU_IDLE_ACK_MSCH0, 625*6fba6e04STony Xie PMU_IDLE_ACK_MSCH1, 626*6fba6e04STony Xie 627*6fba6e04STony Xie PMU_IDLE_ACK_ALIVE, 628*6fba6e04STony Xie PMU_IDLE_ACK_PMU, 629*6fba6e04STony Xie PMU_IDLE_ACK_EDP, 630*6fba6e04STony Xie PMU_IDLE_ACK_GMAC, 631*6fba6e04STony Xie 632*6fba6e04STony Xie PMU_IDLE_ACK_EMMC, 633*6fba6e04STony Xie PMU_IDLE_ACK_CENTER1, 634*6fba6e04STony Xie PMU_IDLE_ACK_PMUM0, 635*6fba6e04STony Xie PMU_IDLE_ACK_GIC, 636*6fba6e04STony Xie 637*6fba6e04STony Xie PMU_IDLE_ACK_SD, 638*6fba6e04STony Xie PMU_IDLE_ACK_SDIOAUDIO, 639*6fba6e04STony Xie }; 640*6fba6e04STony Xie 641*6fba6e04STony Xie enum pmu_pwrdn_con1 { 642*6fba6e04STony Xie PMU_VD_SCU_L_PWRDN_EN = 0, 643*6fba6e04STony Xie PMU_VD_SCU_B_PWRDN_EN, 644*6fba6e04STony Xie PMU_VD_CENTER_PWRDN_EN, 645*6fba6e04STony Xie }; 646*6fba6e04STony Xie 647*6fba6e04STony Xie #define PMU_WKUP_CFG0 0x00 648*6fba6e04STony Xie #define PMU_WKUP_CFG1 0x04 649*6fba6e04STony Xie #define PMU_WKUP_CFG2 0x08 650*6fba6e04STony Xie #define PMU_WKUP_CFG3 0x0c 651*6fba6e04STony Xie #define PMU_WKUP_CFG4 0x10 652*6fba6e04STony Xie #define PMU_PWRDN_CON 0x14 653*6fba6e04STony Xie #define PMU_PWRDN_ST 0x18 654*6fba6e04STony Xie #define PMU_PLL_CON 0x1c 655*6fba6e04STony Xie #define PMU_PWRMODE_CON 0x20 656*6fba6e04STony Xie #define PMU_SFT_CON 0x24 657*6fba6e04STony Xie #define PMU_INT_CON 0x28 658*6fba6e04STony Xie #define PMU_INT_ST 0x2c 659*6fba6e04STony Xie #define PMU_GPIO0_POS_INT_CON 0x30 660*6fba6e04STony Xie #define PMU_GPIO0_NEG_INT_CON 0x34 661*6fba6e04STony Xie #define PMU_GPIO1_POS_INT_CON 0x38 662*6fba6e04STony Xie #define PMU_GPIO1_NEG_INT_CON 0x3c 663*6fba6e04STony Xie #define PMU_GPIO0_POS_INT_ST 0x40 664*6fba6e04STony Xie #define PMU_GPIO0_NEG_INT_ST 0x44 665*6fba6e04STony Xie #define PMU_GPIO1_POS_INT_ST 0x48 666*6fba6e04STony Xie #define PMU_GPIO1_NEG_INT_ST 0x4c 667*6fba6e04STony Xie #define PMU_PWRDN_INTEN 0x50 668*6fba6e04STony Xie #define PMU_PWRDN_STATUS 0x54 669*6fba6e04STony Xie #define PMU_WAKEUP_STATUS 0x58 670*6fba6e04STony Xie #define PMU_BUS_CLR 0x5c 671*6fba6e04STony Xie #define PMU_BUS_IDLE_REQ 0x60 672*6fba6e04STony Xie #define PMU_BUS_IDLE_ST 0x64 673*6fba6e04STony Xie #define PMU_BUS_IDLE_ACK 0x68 674*6fba6e04STony Xie #define PMU_CCI500_CON 0x6c 675*6fba6e04STony Xie #define PMU_ADB400_CON 0x70 676*6fba6e04STony Xie #define PMU_ADB400_ST 0x74 677*6fba6e04STony Xie #define PMU_POWER_ST 0x78 678*6fba6e04STony Xie #define PMU_CORE_PWR_ST 0x7c 679*6fba6e04STony Xie #define PMU_OSC_CNT 0x80 680*6fba6e04STony Xie #define PMU_PLLLOCK_CNT 0x84 681*6fba6e04STony Xie #define PMU_PLLRST_CNT 0x88 682*6fba6e04STony Xie #define PMU_STABLE_CNT 0x8c 683*6fba6e04STony Xie #define PMU_DDRIO_PWRON_CNT 0x90 684*6fba6e04STony Xie #define PMU_WAKEUP_RST_CLR_CNT 0x94 685*6fba6e04STony Xie #define PMU_DDR_SREF_ST 0x98 686*6fba6e04STony Xie #define PMU_SCU_L_PWRDN_CNT 0x9c 687*6fba6e04STony Xie #define PMU_SCU_L_PWRUP_CNT 0xa0 688*6fba6e04STony Xie #define PMU_SCU_B_PWRDN_CNT 0xa4 689*6fba6e04STony Xie #define PMU_SCU_B_PWRUP_CNT 0xa8 690*6fba6e04STony Xie #define PMU_GPU_PWRDN_CNT 0xac 691*6fba6e04STony Xie #define PMU_GPU_PWRUP_CNT 0xb0 692*6fba6e04STony Xie #define PMU_CENTER_PWRDN_CNT 0xb4 693*6fba6e04STony Xie #define PMU_CENTER_PWRUP_CNT 0xb8 694*6fba6e04STony Xie #define PMU_TIMEOUT_CNT 0xbc 695*6fba6e04STony Xie #define PMU_CPU0APM_CON 0xc0 696*6fba6e04STony Xie #define PMU_CPU1APM_CON 0xc4 697*6fba6e04STony Xie #define PMU_CPU2APM_CON 0xc8 698*6fba6e04STony Xie #define PMU_CPU3APM_CON 0xcc 699*6fba6e04STony Xie #define PMU_CPU0BPM_CON 0xd0 700*6fba6e04STony Xie #define PMU_CPU1BPM_CON 0xd4 701*6fba6e04STony Xie #define PMU_NOC_AUTO_ENA 0xd8 702*6fba6e04STony Xie #define PMU_PWRDN_CON1 0xdc 703*6fba6e04STony Xie 704*6fba6e04STony Xie #define CORES_PM_DISABLE 0x0 705*6fba6e04STony Xie 706*6fba6e04STony Xie #define PD_CTR_LOOP 500 707*6fba6e04STony Xie #define CHK_CPU_LOOP 500 708*6fba6e04STony Xie 709*6fba6e04STony Xie #endif /* __PMU_H__ */ 710