1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2021, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef APUPWR_CLKCTL_DEF_H 8*91f16700Schasinglulu #define APUPWR_CLKCTL_DEF_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <lib/mmio.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu enum dvfs_voltage_domain { 13*91f16700Schasinglulu V_VPU0 = 0, 14*91f16700Schasinglulu V_VPU1 = 1, 15*91f16700Schasinglulu V_MDLA0 = 2, 16*91f16700Schasinglulu V_MDLA1 = 3, 17*91f16700Schasinglulu V_APU_CONN = 4, 18*91f16700Schasinglulu V_TOP_IOMMU = 5, 19*91f16700Schasinglulu V_VCORE = 6, 20*91f16700Schasinglulu APUSYS_BUCK_DOMAIN_NUM = 7, 21*91f16700Schasinglulu }; 22*91f16700Schasinglulu 23*91f16700Schasinglulu enum dvfs_freq { 24*91f16700Schasinglulu DVFS_FREQ_NOT_SUPPORT = 0, 25*91f16700Schasinglulu DVFS_FREQ_ACC_26M = 1, 26*91f16700Schasinglulu DVFS_FREQ_ACC_PARKING = 2, 27*91f16700Schasinglulu DVFS_FREQ_ACC_SOC = 3, 28*91f16700Schasinglulu DVFS_FREQ_ACC_APUPLL = 4, 29*91f16700Schasinglulu DVFS_FREQ_00_026000_F = 26000, 30*91f16700Schasinglulu DVFS_FREQ_00_208000_F = 208000, 31*91f16700Schasinglulu DVFS_FREQ_00_238000_F = 238000, 32*91f16700Schasinglulu DVFS_FREQ_00_273000_F = 273000, 33*91f16700Schasinglulu DVFS_FREQ_00_312000_F = 312000, 34*91f16700Schasinglulu DVFS_FREQ_00_358000_F = 358000, 35*91f16700Schasinglulu DVFS_FREQ_00_385000_F = 385000, 36*91f16700Schasinglulu DVFS_FREQ_00_499200_F = 499200, 37*91f16700Schasinglulu DVFS_FREQ_00_500000_F = 500000, 38*91f16700Schasinglulu DVFS_FREQ_00_525000_F = 525000, 39*91f16700Schasinglulu DVFS_FREQ_00_546000_F = 546000, 40*91f16700Schasinglulu DVFS_FREQ_00_594000_F = 594000, 41*91f16700Schasinglulu DVFS_FREQ_00_624000_F = 624000, 42*91f16700Schasinglulu DVFS_FREQ_00_688000_F = 688000, 43*91f16700Schasinglulu DVFS_FREQ_00_687500_F = 687500, 44*91f16700Schasinglulu DVFS_FREQ_00_728000_F = 728000, 45*91f16700Schasinglulu DVFS_FREQ_00_800000_F = 800000, 46*91f16700Schasinglulu DVFS_FREQ_00_832000_F = 832000, 47*91f16700Schasinglulu DVFS_FREQ_00_960000_F = 960000, 48*91f16700Schasinglulu DVFS_FREQ_00_1100000_F = 1100000, 49*91f16700Schasinglulu }; 50*91f16700Schasinglulu #define DVFS_FREQ_MAX (DVFS_FREQ_00_1100000_F) 51*91f16700Schasinglulu 52*91f16700Schasinglulu enum pll_set_rate_mode { 53*91f16700Schasinglulu CON0_PCW = 0, 54*91f16700Schasinglulu FHCTL_SW = 1, 55*91f16700Schasinglulu FHCTL_HW = 2, 56*91f16700Schasinglulu PLL_SET_RATE_MODE_MAX = 3, 57*91f16700Schasinglulu }; 58*91f16700Schasinglulu 59*91f16700Schasinglulu enum apupll { 60*91f16700Schasinglulu APUPLL = 0, 61*91f16700Schasinglulu NPUPLL = 1, 62*91f16700Schasinglulu APUPLL1 = 2, 63*91f16700Schasinglulu APUPLL2 = 3, 64*91f16700Schasinglulu APUPLL_MAX = 4, 65*91f16700Schasinglulu }; 66*91f16700Schasinglulu 67*91f16700Schasinglulu #define BUCK_VVPU_DOMAIN_DEFAULT_FREQ (DVFS_FREQ_00_273000_F) 68*91f16700Schasinglulu #define BUCK_VMDLA_DOMAIN_DEFAULT_FREQ (DVFS_FREQ_00_312000_F) 69*91f16700Schasinglulu #define BUCK_VCONN_DOMAIN_DEFAULT_FREQ (DVFS_FREQ_00_208000_F) 70*91f16700Schasinglulu 71*91f16700Schasinglulu #define apupwr_writel(VAL, REG) mmio_write_32((uintptr_t)REG, VAL) 72*91f16700Schasinglulu #define apupwr_writel_relax(VAL, REG) mmio_write_32_relax((uintptr_t)REG, VAL) 73*91f16700Schasinglulu #define apupwr_readl(REG) mmio_read_32((uintptr_t)REG) 74*91f16700Schasinglulu #define apupwr_clrbits(VAL, REG) mmio_clrbits_32((uintptr_t)REG, VAL) 75*91f16700Schasinglulu #define apupwr_setbits(VAL, REG) mmio_setbits_32((uintptr_t)REG, VAL) 76*91f16700Schasinglulu #define apupwr_clrsetbits(CLR_VAL, SET_VAL, REG) \ 77*91f16700Schasinglulu mmio_clrsetbits_32((uintptr_t)REG, CLR_VAL, SET_VAL) 78*91f16700Schasinglulu 79*91f16700Schasinglulu /* PLL and related register */ 80*91f16700Schasinglulu #define APU_PLL_BASE (APUSYS_APU_PLL_BASE) 81*91f16700Schasinglulu #define APU_PLL4H_PLL1_CON0 (APU_PLL_BASE + 0x008) 82*91f16700Schasinglulu #define APU_PLL4H_PLL1_CON1 (APU_PLL_BASE + 0x00C) 83*91f16700Schasinglulu #define APU_PLL4H_PLL1_CON3 (APU_PLL_BASE + 0x014) 84*91f16700Schasinglulu 85*91f16700Schasinglulu #define APU_PLL4H_PLL2_CON0 (APU_PLL_BASE + 0x018) 86*91f16700Schasinglulu #define APU_PLL4H_PLL2_CON1 (APU_PLL_BASE + 0x01C) 87*91f16700Schasinglulu #define APU_PLL4H_PLL2_CON3 (APU_PLL_BASE + 0x024) 88*91f16700Schasinglulu 89*91f16700Schasinglulu #define APU_PLL4H_PLL3_CON0 (APU_PLL_BASE + 0x028) 90*91f16700Schasinglulu #define APU_PLL4H_PLL3_CON1 (APU_PLL_BASE + 0x02C) 91*91f16700Schasinglulu #define APU_PLL4H_PLL3_CON3 (APU_PLL_BASE + 0x034) 92*91f16700Schasinglulu 93*91f16700Schasinglulu #define APU_PLL4H_PLL4_CON0 (APU_PLL_BASE + 0x038) 94*91f16700Schasinglulu #define APU_PLL4H_PLL4_CON1 (APU_PLL_BASE + 0x03C) 95*91f16700Schasinglulu #define APU_PLL4H_PLL4_CON3 (APU_PLL_BASE + 0x044) 96*91f16700Schasinglulu 97*91f16700Schasinglulu #define APU_PLL4H_FHCTL_HP_EN (APU_PLL_BASE + 0x0E00) 98*91f16700Schasinglulu #define APU_PLL4H_FHCTL_UNITSLOPE_EN (APU_PLL_BASE + 0x0E04) 99*91f16700Schasinglulu #define APU_PLL4H_FHCTL_CLK_CON (APU_PLL_BASE + 0x0E08) 100*91f16700Schasinglulu #define APU_PLL4H_FHCTL_RST_CON (APU_PLL_BASE + 0x0E0C) 101*91f16700Schasinglulu #define APU_PLL4H_FHCTL_SLOPE0 (APU_PLL_BASE + 0x0E10) 102*91f16700Schasinglulu #define APU_PLL4H_FHCTL_SLOPE1 (APU_PLL_BASE + 0x0E14) 103*91f16700Schasinglulu #define APU_PLL4H_FHCTL_DSSC_CFG (APU_PLL_BASE + 0x0E18) 104*91f16700Schasinglulu #define APU_PLL4H_FHCTL_DSSC0_CON (APU_PLL_BASE + 0x0E1C) 105*91f16700Schasinglulu #define APU_PLL4H_FHCTL_DSSC1_CON (APU_PLL_BASE + 0x0E20) 106*91f16700Schasinglulu #define APU_PLL4H_FHCTL_DSSC2_CON (APU_PLL_BASE + 0x0E24) 107*91f16700Schasinglulu #define APU_PLL4H_FHCTL_DSSC3_CON (APU_PLL_BASE + 0x0E28) 108*91f16700Schasinglulu #define APU_PLL4H_FHCTL_DSSC4_CON (APU_PLL_BASE + 0x0E2C) 109*91f16700Schasinglulu #define APU_PLL4H_FHCTL_DSSC5_CON (APU_PLL_BASE + 0x0E30) 110*91f16700Schasinglulu #define APU_PLL4H_FHCTL_DSSC6_CON (APU_PLL_BASE + 0x0E34) 111*91f16700Schasinglulu #define APU_PLL4H_FHCTL_DSSC7_CON (APU_PLL_BASE + 0x0E38) 112*91f16700Schasinglulu #define APU_PLL4H_FHCTL0_CFG (APU_PLL_BASE + 0x0E3C) 113*91f16700Schasinglulu #define APU_PLL4H_FHCTL0_UPDNLMT (APU_PLL_BASE + 0x0E40) 114*91f16700Schasinglulu #define APU_PLL4H_FHCTL0_DDS (APU_PLL_BASE + 0x0E44) 115*91f16700Schasinglulu #define APU_PLL4H_FHCTL0_DVFS (APU_PLL_BASE + 0x0E48) 116*91f16700Schasinglulu #define APU_PLL4H_FHCTL0_MON (APU_PLL_BASE + 0x0E4C) 117*91f16700Schasinglulu #define APU_PLL4H_FHCTL1_CFG (APU_PLL_BASE + 0x0E50) 118*91f16700Schasinglulu #define APU_PLL4H_FHCTL1_UPDNLMT (APU_PLL_BASE + 0x0E54) 119*91f16700Schasinglulu #define APU_PLL4H_FHCTL1_DDS (APU_PLL_BASE + 0x0E58) 120*91f16700Schasinglulu #define APU_PLL4H_FHCTL1_DVFS (APU_PLL_BASE + 0x0E5C) 121*91f16700Schasinglulu #define APU_PLL4H_FHCTL1_MON (APU_PLL_BASE + 0x0E60) 122*91f16700Schasinglulu #define APU_PLL4H_FHCTL2_CFG (APU_PLL_BASE + 0x0E64) 123*91f16700Schasinglulu #define APU_PLL4H_FHCTL2_UPDNLMT (APU_PLL_BASE + 0x0E68) 124*91f16700Schasinglulu #define APU_PLL4H_FHCTL2_DDS (APU_PLL_BASE + 0x0E6C) 125*91f16700Schasinglulu #define APU_PLL4H_FHCTL2_DVFS (APU_PLL_BASE + 0x0E70) 126*91f16700Schasinglulu #define APU_PLL4H_FHCTL2_MON (APU_PLL_BASE + 0x0E74) 127*91f16700Schasinglulu #define APU_PLL4H_FHCTL3_CFG (APU_PLL_BASE + 0x0E78) 128*91f16700Schasinglulu #define APU_PLL4H_FHCTL3_UPDNLMT (APU_PLL_BASE + 0x0E7C) 129*91f16700Schasinglulu #define APU_PLL4H_FHCTL3_DDS (APU_PLL_BASE + 0x0E80) 130*91f16700Schasinglulu #define APU_PLL4H_FHCTL3_DVFS (APU_PLL_BASE + 0x0E84) 131*91f16700Schasinglulu #define APU_PLL4H_FHCTL3_MON (APU_PLL_BASE + 0x0E88) 132*91f16700Schasinglulu 133*91f16700Schasinglulu /* PLL4H_PLLx_CON0 */ 134*91f16700Schasinglulu #define RG_PLL_EN BIT(0) 135*91f16700Schasinglulu 136*91f16700Schasinglulu /* PLL4H_PLLx_CON1 */ 137*91f16700Schasinglulu #define RG_PLL_SDM_PCW_CHG BIT(31) 138*91f16700Schasinglulu #define POSDIV_SHIFT (24U) 139*91f16700Schasinglulu #define POSDIV_MASK (0x7) 140*91f16700Schasinglulu 141*91f16700Schasinglulu /* PLL4H_PLLx_CON3 */ 142*91f16700Schasinglulu #define DA_PLL_SDM_PWR_ON BIT(0) 143*91f16700Schasinglulu #define DA_PLL_SDM_ISO_EN BIT(1) 144*91f16700Schasinglulu 145*91f16700Schasinglulu /* FHCTLx_DDS */ 146*91f16700Schasinglulu #define DDS_MASK GENMASK_32(21, 0) 147*91f16700Schasinglulu #define PCW_FRACTIONAL_SHIFT 14U 148*91f16700Schasinglulu #define PLL_TGL_ORG BIT(31) 149*91f16700Schasinglulu 150*91f16700Schasinglulu #define PLL_READY_TIME_20US (20U) 151*91f16700Schasinglulu #define PLL_CMD_READY_TIME_1US (1U) 152*91f16700Schasinglulu 153*91f16700Schasinglulu #define FREQ_VCO_MIN (1500U) /* 1500MHz*/ 154*91f16700Schasinglulu #define FREQ_FIN (26U) /* 26M*/ 155*91f16700Schasinglulu 156*91f16700Schasinglulu /* ACC and related register */ 157*91f16700Schasinglulu #define APU_ACC_BASE (APUSYS_APU_ACC_BASE) 158*91f16700Schasinglulu #define APU_ACC_CONFG_SET0 (APU_ACC_BASE + 0x000) 159*91f16700Schasinglulu #define APU_ACC_CONFG_SET1 (APU_ACC_BASE + 0x004) 160*91f16700Schasinglulu #define APU_ACC_CONFG_SET2 (APU_ACC_BASE + 0x008) 161*91f16700Schasinglulu #define APU_ACC_CONFG_SET4 (APU_ACC_BASE + 0x010) 162*91f16700Schasinglulu #define APU_ACC_CONFG_SET5 (APU_ACC_BASE + 0x014) 163*91f16700Schasinglulu #define APU_ACC_CONFG_SET7 (APU_ACC_BASE + 0x01C) 164*91f16700Schasinglulu 165*91f16700Schasinglulu #define APU_ACC_CONFG_CLR0 (APU_ACC_BASE + 0x040) 166*91f16700Schasinglulu #define APU_ACC_CONFG_CLR1 (APU_ACC_BASE + 0x044) 167*91f16700Schasinglulu #define APU_ACC_CONFG_CLR2 (APU_ACC_BASE + 0x048) 168*91f16700Schasinglulu #define APU_ACC_CONFG_CLR4 (APU_ACC_BASE + 0x050) 169*91f16700Schasinglulu #define APU_ACC_CONFG_CLR5 (APU_ACC_BASE + 0x054) 170*91f16700Schasinglulu #define APU_ACC_CONFG_CLR7 (APU_ACC_BASE + 0x05C) 171*91f16700Schasinglulu 172*91f16700Schasinglulu #define APU_ACC_FM_CONFG_SET (APU_ACC_BASE + 0x0C0) 173*91f16700Schasinglulu #define APU_ACC_FM_CONFG_CLR (APU_ACC_BASE + 0x0C4) 174*91f16700Schasinglulu #define APU_ACC_FM_SEL (APU_ACC_BASE + 0x0C8) 175*91f16700Schasinglulu #define APU_ACC_FM_CNT (APU_ACC_BASE + 0x0CC) 176*91f16700Schasinglulu 177*91f16700Schasinglulu /* APU AO control */ 178*91f16700Schasinglulu #define APU_AO_CTRL_BASE (APUSYS_APU_S_S_4_BASE) 179*91f16700Schasinglulu #define APU_CSR_DUMMY_0 (APU_AO_CTRL_BASE + 0x24) 180*91f16700Schasinglulu 181*91f16700Schasinglulu #define AO_MD32_MNOC_MASK (BIT(1) | BIT(0)) 182*91f16700Schasinglulu 183*91f16700Schasinglulu #define BIT_CGEN_F26M (0) 184*91f16700Schasinglulu #define BIT_CGEN_PARK (1) 185*91f16700Schasinglulu #define BIT_CGEN_SOC (2) 186*91f16700Schasinglulu #define BIT_CGEN_APU (3) 187*91f16700Schasinglulu #define BIT_CGEN_OUT (4) 188*91f16700Schasinglulu #define BIT_SEL_PARK (8) 189*91f16700Schasinglulu #define BIT_SEL_F26M (9) 190*91f16700Schasinglulu #define BIT_SEL_APU_DIV2 (10) 191*91f16700Schasinglulu #define BIT_SEL_APU (11) 192*91f16700Schasinglulu #define BIT_SEL_PARK_SRC_OUT (12) 193*91f16700Schasinglulu #define BIT_INVEN_OUT (15) 194*91f16700Schasinglulu 195*91f16700Schasinglulu #endif /* APUPWR_CLKCTL_DEF_H*/ 196