16fba6e04STony Xie /* 26fba6e04STony Xie * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 36fba6e04STony Xie * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 56fba6e04STony Xie */ 66fba6e04STony Xie 7*c3cf06f1SAntonio Nino Diaz #ifndef PMU_H 8*c3cf06f1SAntonio Nino Diaz #define PMU_H 96fba6e04STony Xie 106fba6e04STony Xie /* Allocate sp reginon in pmusram */ 116fba6e04STony Xie #define PSRAM_SP_SIZE 0x80 126fba6e04STony Xie #define PSRAM_SP_BOTTOM (PSRAM_SP_TOP - PSRAM_SP_SIZE) 136fba6e04STony Xie 146fba6e04STony Xie /***************************************************************************** 156fba6e04STony Xie * pmu con,reg 166fba6e04STony Xie *****************************************************************************/ 176fba6e04STony Xie #define PMU_WKUP_CFG0 0x0 186fba6e04STony Xie #define PMU_WKUP_CFG1 0x4 196fba6e04STony Xie #define PMU_WKUP_CFG2 0x8 206fba6e04STony Xie #define PMU_TIMEOUT_CNT 0x7c 216fba6e04STony Xie #define PMU_PWRDN_CON 0xc 226fba6e04STony Xie #define PMU_PWRDN_ST 0x10 236fba6e04STony Xie #define PMU_CORE_PWR_ST 0x38 246fba6e04STony Xie 256fba6e04STony Xie #define PMU_PWRMD_CORE 0x14 266fba6e04STony Xie #define PMU_PWRMD_COM 0x18 276fba6e04STony Xie #define PMU_SFT_CON 0x1c 286fba6e04STony Xie #define PMU_BUS_IDE_REQ 0x3c 296fba6e04STony Xie #define PMU_BUS_IDE_ST 0x40 306fba6e04STony Xie #define PMU_OSC_CNT 0x48 316fba6e04STony Xie #define PMU_PLLLOCK_CNT 0x4c 326fba6e04STony Xie #define PMU_PLLRST_CNT 0x50 336fba6e04STony Xie #define PMU_STABLE_CNT 0x54 346fba6e04STony Xie #define PMU_DDRIO_PWR_CNT 0x58 356fba6e04STony Xie #define PMU_WKUPRST_CNT 0x5c 366fba6e04STony Xie 376fba6e04STony Xie enum pmu_powermode_core { 386fba6e04STony Xie pmu_mdcr_global_int_dis = 0, 396fba6e04STony Xie pmu_mdcr_core_src_gt, 406fba6e04STony Xie pmu_mdcr_clr_cci, 416fba6e04STony Xie pmu_mdcr_cpu0_pd, 426fba6e04STony Xie pmu_mdcr_clr_clst_l = 4, 436fba6e04STony Xie pmu_mdcr_clr_core, 446fba6e04STony Xie pmu_mdcr_scu_l_pd, 456fba6e04STony Xie pmu_mdcr_core_pd, 466fba6e04STony Xie pmu_mdcr_l2_idle = 8, 476fba6e04STony Xie pmu_mdcr_l2_flush 486fba6e04STony Xie }; 496fba6e04STony Xie 506fba6e04STony Xie /* 516fba6e04STony Xie * the shift of bits for cores status 526fba6e04STony Xie */ 536fba6e04STony Xie enum pmu_core_pwrst_shift { 546fba6e04STony Xie clstl_cpu_wfe = 2, 556fba6e04STony Xie clstl_cpu_wfi = 6, 566fba6e04STony Xie clstb_cpu_wfe = 12, 576fba6e04STony Xie clstb_cpu_wfi = 16 586fba6e04STony Xie }; 596fba6e04STony Xie 606fba6e04STony Xie enum pmu_pdid { 616fba6e04STony Xie PD_CPUL0 = 0, 626fba6e04STony Xie PD_CPUL1, 636fba6e04STony Xie PD_CPUL2, 646fba6e04STony Xie PD_CPUL3, 656fba6e04STony Xie PD_SCUL, 666fba6e04STony Xie PD_CPUB0 = 5, 676fba6e04STony Xie PD_CPUB1, 686fba6e04STony Xie PD_CPUB2, 696fba6e04STony Xie PD_CPUB3, 706fba6e04STony Xie PD_SCUB = 9, 716fba6e04STony Xie PD_PERI = 13, 726fba6e04STony Xie PD_VIDEO, 736fba6e04STony Xie PD_VIO, 746fba6e04STony Xie PD_GPU0, 756fba6e04STony Xie PD_GPU1, 766fba6e04STony Xie PD_END 776fba6e04STony Xie }; 786fba6e04STony Xie 796fba6e04STony Xie enum pmu_bus_ide { 806fba6e04STony Xie bus_ide_req_clst_l = 0, 816fba6e04STony Xie bus_ide_req_clst_b, 826fba6e04STony Xie bus_ide_req_gpu, 836fba6e04STony Xie bus_ide_req_core, 846fba6e04STony Xie bus_ide_req_bus = 4, 856fba6e04STony Xie bus_ide_req_dma, 866fba6e04STony Xie bus_ide_req_peri, 876fba6e04STony Xie bus_ide_req_video, 886fba6e04STony Xie bus_ide_req_vio = 8, 896fba6e04STony Xie bus_ide_req_res0, 906fba6e04STony Xie bus_ide_req_cxcs, 916fba6e04STony Xie bus_ide_req_alive, 926fba6e04STony Xie bus_ide_req_pmu = 12, 936fba6e04STony Xie bus_ide_req_msch, 946fba6e04STony Xie bus_ide_req_cci, 956fba6e04STony Xie bus_ide_req_cci400 = 15, 966fba6e04STony Xie bus_ide_req_end 976fba6e04STony Xie }; 986fba6e04STony Xie 996fba6e04STony Xie enum pmu_powermode_common { 1006fba6e04STony Xie pmu_mode_en = 0, 1016fba6e04STony Xie pmu_mode_res0, 1026fba6e04STony Xie pmu_mode_bus_pd, 1036fba6e04STony Xie pmu_mode_wkup_rst, 1046fba6e04STony Xie pmu_mode_pll_pd = 4, 1056fba6e04STony Xie pmu_mode_pwr_off, 1066fba6e04STony Xie pmu_mode_pmu_use_if, 1076fba6e04STony Xie pmu_mode_pmu_alive_use_if, 1086fba6e04STony Xie pmu_mode_osc_dis = 8, 1096fba6e04STony Xie pmu_mode_input_clamp, 1106fba6e04STony Xie pmu_mode_sref_enter, 1116fba6e04STony Xie pmu_mode_ddrc_gt, 1126fba6e04STony Xie pmu_mode_ddrio_ret = 12, 1136fba6e04STony Xie pmu_mode_ddrio_ret_deq, 1146fba6e04STony Xie pmu_mode_clr_pmu, 1156fba6e04STony Xie pmu_mode_clr_alive, 1166fba6e04STony Xie pmu_mode_clr_bus = 16, 1176fba6e04STony Xie pmu_mode_clr_dma, 1186fba6e04STony Xie pmu_mode_clr_msch, 1196fba6e04STony Xie pmu_mode_clr_peri, 1206fba6e04STony Xie pmu_mode_clr_video = 20, 1216fba6e04STony Xie pmu_mode_clr_vio, 1226fba6e04STony Xie pmu_mode_clr_gpu, 1236fba6e04STony Xie pmu_mode_clr_mcu, 1246fba6e04STony Xie pmu_mode_clr_cxcs = 24, 1256fba6e04STony Xie pmu_mode_clr_cci400, 1266fba6e04STony Xie pmu_mode_res1, 1276fba6e04STony Xie pmu_mode_res2, 1286fba6e04STony Xie pmu_mode_res3 = 28, 1296fba6e04STony Xie pmu_mode_mclst 1306fba6e04STony Xie }; 1316fba6e04STony Xie 1326fba6e04STony Xie enum pmu_core_power_st { 1336fba6e04STony Xie clst_l_cpu_wfe = 2, 1346fba6e04STony Xie clst_l_cpu_wfi = 6, 1356fba6e04STony Xie clst_b_l2_flsh_done = 10, 1366fba6e04STony Xie clst_b_l2_wfi = 11, 1376fba6e04STony Xie clst_b_cpu_wfe = 12, 1386fba6e04STony Xie clst_b_cpu_wfi = 16, 1396fba6e04STony Xie mcu_sleeping = 20, 1406fba6e04STony Xie }; 1416fba6e04STony Xie 1426fba6e04STony Xie enum pmu_sft_con { 1436fba6e04STony Xie pmu_sft_acinactm_clst_b = 5, 1446fba6e04STony Xie pmu_sft_l2flsh_clst_b, 1456fba6e04STony Xie pmu_sft_glbl_int_dis_b = 9, 1466fba6e04STony Xie pmu_sft_ddrio_ret_cfg = 11, 1476fba6e04STony Xie }; 1486fba6e04STony Xie 1496fba6e04STony Xie enum pmu_wkup_cfg2 { 1506fba6e04STony Xie pmu_cluster_l_wkup_en = 0, 1516fba6e04STony Xie pmu_cluster_b_wkup_en, 1526fba6e04STony Xie pmu_gpio_wkup_en, 1536fba6e04STony Xie pmu_sdio_wkup_en, 1546fba6e04STony Xie pmu_sdmmc_wkup_en, 1556fba6e04STony Xie pmu_sim_wkup_en, 1566fba6e04STony Xie pmu_timer_wkup_en, 1576fba6e04STony Xie pmu_usbdev_wkup_en, 1586fba6e04STony Xie pmu_sft_wkup_en, 1596fba6e04STony Xie pmu_wdt_mcu_wkup_en, 1606fba6e04STony Xie pmu_timeout_wkup_en, 1616fba6e04STony Xie }; 1626fba6e04STony Xie 1636fba6e04STony Xie enum pmu_bus_idle_st { 1646fba6e04STony Xie pmu_idle_ack_cluster_l = 0, 1656fba6e04STony Xie pmu_idle_ack_cluster_b, 1666fba6e04STony Xie pmu_idle_ack_gpu, 1676fba6e04STony Xie pmu_idle_ack_core, 1686fba6e04STony Xie pmu_idle_ack_bus, 1696fba6e04STony Xie pmu_idle_ack_dma, 1706fba6e04STony Xie pmu_idle_ack_peri, 1716fba6e04STony Xie pmu_idle_ack_video, 1726fba6e04STony Xie pmu_idle_ack_vio, 1736fba6e04STony Xie pmu_idle_ack_cci = 10, 1746fba6e04STony Xie pmu_idle_ack_msch, 1756fba6e04STony Xie pmu_idle_ack_alive, 1766fba6e04STony Xie pmu_idle_ack_pmu, 1776fba6e04STony Xie pmu_idle_ack_cxcs, 1786fba6e04STony Xie pmu_idle_ack_cci400, 1796fba6e04STony Xie pmu_inactive_cluster_l, 1806fba6e04STony Xie pmu_inactive_cluster_b, 1816fba6e04STony Xie pmu_idle_gpu, 1826fba6e04STony Xie pmu_idle_core, 1836fba6e04STony Xie pmu_idle_bus, 1846fba6e04STony Xie pmu_idle_dma, 1856fba6e04STony Xie pmu_idle_peri, 1866fba6e04STony Xie pmu_idle_video, 1876fba6e04STony Xie pmu_idle_vio, 1886fba6e04STony Xie pmu_idle_cci = 26, 1896fba6e04STony Xie pmu_idle_msch, 1906fba6e04STony Xie pmu_idle_alive, 1916fba6e04STony Xie pmu_idle_pmu, 1926fba6e04STony Xie pmu_active_cxcs, 1936fba6e04STony Xie pmu_active_cci, 1946fba6e04STony Xie }; 1956fba6e04STony Xie 1966fba6e04STony Xie #define PM_PWRDM_CPUSB_MSK (0xf << 5) 1976fba6e04STony Xie 1986fba6e04STony Xie #define CKECK_WFE_MSK 0x1 1996fba6e04STony Xie #define CKECK_WFI_MSK 0x10 2006fba6e04STony Xie #define CKECK_WFEI_MSK 0x11 2016fba6e04STony Xie 2026fba6e04STony Xie #define PD_CTR_LOOP 500 2036fba6e04STony Xie #define CHK_CPU_LOOP 500 2046fba6e04STony Xie 2056fba6e04STony Xie #define MAX_WAIT_CONUT 1000 2066fba6e04STony Xie 207*c3cf06f1SAntonio Nino Diaz #endif /* PMU_H */ 208