1*81136819SBai Ping /* 2*81136819SBai Ping * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 3*81136819SBai Ping * 4*81136819SBai Ping * SPDX-License-Identifier: BSD-3-Clause 5*81136819SBai Ping */ 6*81136819SBai Ping 7*81136819SBai Ping #ifndef IMX8M_GPC_H 8*81136819SBai Ping #define IMX8M_GPC_H 9*81136819SBai Ping 10*81136819SBai Ping #define LPCR_A53_BSC 0x0 11*81136819SBai Ping #define LPCR_A53_BSC2 0x108 12*81136819SBai Ping #define LPCR_A53_AD 0x4 13*81136819SBai Ping #define LPCR_M4 0x8 14*81136819SBai Ping #define SLPCR 0x14 15*81136819SBai Ping #define MST_CPU_MAPPING 0x18 16*81136819SBai Ping #define MLPCR 0x20 17*81136819SBai Ping #define PGC_ACK_SEL_A53 0x24 18*81136819SBai Ping #define IMR1_CORE0_A53 0x30 19*81136819SBai Ping #define IMR1_CORE1_A53 0x40 20*81136819SBai Ping #define IMR1_CORE2_A53 0x1C0 21*81136819SBai Ping #define IMR1_CORE3_A53 0x1D0 22*81136819SBai Ping #define IMR1_CORE0_M4 0x50 23*81136819SBai Ping #define SLT0_CFG 0xB0 24*81136819SBai Ping #define GPC_PU_PWRHSK 0x1FC 25*81136819SBai Ping #define PGC_CPU_0_1_MAPPING 0xEC 26*81136819SBai Ping #define CPU_PGC_UP_TRG 0xF0 27*81136819SBai Ping #define PU_PGC_UP_TRG 0xF8 28*81136819SBai Ping #define CPU_PGC_DN_TRG 0xFC 29*81136819SBai Ping #define PU_PGC_DN_TRG 0x104 30*81136819SBai Ping #define A53_CORE0_PGC 0x800 31*81136819SBai Ping #define A53_PLAT_PGC 0x900 32*81136819SBai Ping #define PGC_SCU_TIMING 0x910 33*81136819SBai Ping 34*81136819SBai Ping #define MASK_DSM_TRIGGER_A53 BIT(31) 35*81136819SBai Ping #define IRQ_SRC_A53_WUP BIT(30) 36*81136819SBai Ping #define IRQ_SRC_C1 BIT(29) 37*81136819SBai Ping #define IRQ_SRC_C0 BIT(28) 38*81136819SBai Ping #define IRQ_SRC_C3 BIT(23) 39*81136819SBai Ping #define IRQ_SRC_C2 BIT(22) 40*81136819SBai Ping #define CPU_CLOCK_ON_LPM BIT(14) 41*81136819SBai Ping #define MASTER0_LPM_HSK BIT(6) 42*81136819SBai Ping 43*81136819SBai Ping #define L2PGE BIT(31) 44*81136819SBai Ping #define EN_L2_WFI_PDN BIT(5) 45*81136819SBai Ping #define EN_PLAT_PDN BIT(4) 46*81136819SBai Ping 47*81136819SBai Ping #define SLPCR_EN_DSM BIT(31) 48*81136819SBai Ping #define SLPCR_RBC_EN BIT(30) 49*81136819SBai Ping #define SLPCR_A53_FASTWUP_STOP_MODE BIT(17) 50*81136819SBai Ping #define SLPCR_A53_FASTWUP_WAIT_MODE BIT(16) 51*81136819SBai Ping #define SLPCR_VSTBY BIT(2) 52*81136819SBai Ping #define SLPCR_SBYOS BIT(1) 53*81136819SBai Ping #define SLPCR_BYPASS_PMIC_READY BIT(0) 54*81136819SBai Ping #define SLPCR_RBC_COUNT_SHIFT 24 55*81136819SBai Ping 56*81136819SBai Ping #define A53_DUMMY_PDN_ACK BIT(15) 57*81136819SBai Ping #define A53_DUMMY_PUP_ACK BIT(31) 58*81136819SBai Ping #define A53_PLAT_PDN_ACK BIT(2) 59*81136819SBai Ping #define A53_PLAT_PUP_ACK BIT(18) 60*81136819SBai Ping 61*81136819SBai Ping #define SLT_PLAT_PDN BIT(8) 62*81136819SBai Ping #define SLT_PLAT_PUP BIT(9) 63*81136819SBai Ping 64*81136819SBai Ping /* helper macro */ 65*81136819SBai Ping #define A53_LPM_MASK U(0xF) 66*81136819SBai Ping #define A53_LPM_WAIT U(0x5) 67*81136819SBai Ping #define A53_LPM_STOP U(0xA) 68*81136819SBai Ping 69*81136819SBai Ping #define DSM_MODE_MASK BIT(31) 70*81136819SBai Ping 71*81136819SBai Ping #define A53_CORE_WUP_SRC(core_id) (1 << ((core_id) < 2 ? 28 + (core_id) : 22 + (core_id) - 2)) 72*81136819SBai Ping #define COREx_PGC_PCR(core_id) (0x800 + (core_id) * 0x40) 73*81136819SBai Ping #define COREx_WFI_PDN(core_id) (1 << ((core_id) < 2 ? (core_id) * 2 : ((core_id) - 2) * 2 + 16)) 74*81136819SBai Ping #define COREx_IRQ_WUP(core_id) ((core_id) < 2 ? (1 << ((core_id) * 2 + 8)) : (1 << ((core_id) * 2 + 20))) 75*81136819SBai Ping #define COREx_LPM_PUP(core_id) ((core_id) < 2 ? (1 << ((core_id) * 2 + 9)) : (1 << ((core_id) * 2 + 21))) 76*81136819SBai Ping #define SLTx_CFG(n) ((SLT0_CFG + ((n) * 4))) 77*81136819SBai Ping #define SLT_COREx_PUP(core_id) (0x2 << ((core_id) * 2)) 78*81136819SBai Ping 79*81136819SBai Ping /* function declare */ 80*81136819SBai Ping void imx_gpc_init(void); 81*81136819SBai Ping void imx_set_cpu_secure_entry(unsigned int core_index, uintptr_t sec_entrypoint); 82*81136819SBai Ping void imx_set_cpu_pwr_off(unsigned int core_index); 83*81136819SBai Ping void imx_set_cpu_pwr_on(unsigned int core_index); 84*81136819SBai Ping void imx_set_cpu_lpm(unsigned int core_index, bool pdn); 85*81136819SBai Ping void imx_set_cluster_standby(bool retention); 86*81136819SBai Ping void imx_set_cluster_powerdown(unsigned int last_core, uint8_t power_state); 87*81136819SBai Ping void imx_set_sys_lpm(bool retention); 88*81136819SBai Ping void imx_set_rbc_count(void); 89*81136819SBai Ping void imx_clear_rbc_count(void); 90*81136819SBai Ping 91*81136819SBai Ping #endif /*IMX8M_GPC_H */ 92