1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2020 Rockchip Electronics Co. Ltd. 4*4882a593Smuzhiyun * Author: Elaine Zhang <zhangqing@rock-chips.com> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _ASM_ARCH_CRU_RK3568_H 8*4882a593Smuzhiyun #define _ASM_ARCH_CRU_RK3568_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #define MHz 1000000 11*4882a593Smuzhiyun #define KHz 1000 12*4882a593Smuzhiyun #define OSC_HZ (24 * MHz) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define APLL_HZ (816 * MHz) 15*4882a593Smuzhiyun #define GPLL_HZ (1188 * MHz) 16*4882a593Smuzhiyun #define CPLL_HZ (1000 * MHz) 17*4882a593Smuzhiyun #define PPLL_HZ (200 * MHz) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* RK3568 pll id */ 20*4882a593Smuzhiyun enum rk3568_pll_id { 21*4882a593Smuzhiyun APLL, 22*4882a593Smuzhiyun DPLL, 23*4882a593Smuzhiyun CPLL, 24*4882a593Smuzhiyun GPLL, 25*4882a593Smuzhiyun NPLL, 26*4882a593Smuzhiyun VPLL, 27*4882a593Smuzhiyun PPLL, 28*4882a593Smuzhiyun HPLL, 29*4882a593Smuzhiyun PLL_COUNT, 30*4882a593Smuzhiyun }; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun struct rk3568_clk_info { 33*4882a593Smuzhiyun unsigned long id; 34*4882a593Smuzhiyun char *name; 35*4882a593Smuzhiyun bool is_cru; 36*4882a593Smuzhiyun }; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* Private data for the clock driver - used by rockchip_get_cru() */ 39*4882a593Smuzhiyun struct rk3568_pmuclk_priv { 40*4882a593Smuzhiyun struct rk3568_pmucru *pmucru; 41*4882a593Smuzhiyun ulong ppll_hz; 42*4882a593Smuzhiyun ulong hpll_hz; 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun struct rk3568_clk_priv { 46*4882a593Smuzhiyun struct rk3568_cru *cru; 47*4882a593Smuzhiyun struct rk3568_grf *grf; 48*4882a593Smuzhiyun ulong ppll_hz; 49*4882a593Smuzhiyun ulong hpll_hz; 50*4882a593Smuzhiyun ulong gpll_hz; 51*4882a593Smuzhiyun ulong cpll_hz; 52*4882a593Smuzhiyun ulong npll_hz; 53*4882a593Smuzhiyun ulong vpll_hz; 54*4882a593Smuzhiyun ulong armclk_hz; 55*4882a593Smuzhiyun ulong armclk_enter_hz; 56*4882a593Smuzhiyun ulong armclk_init_hz; 57*4882a593Smuzhiyun bool sync_kernel; 58*4882a593Smuzhiyun bool set_armclk_rate; 59*4882a593Smuzhiyun }; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun struct rk3568_pll { 62*4882a593Smuzhiyun unsigned int con0; 63*4882a593Smuzhiyun unsigned int con1; 64*4882a593Smuzhiyun unsigned int con2; 65*4882a593Smuzhiyun unsigned int con3; 66*4882a593Smuzhiyun unsigned int con4; 67*4882a593Smuzhiyun unsigned int reserved0[3]; 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun struct rk3568_pmucru { 71*4882a593Smuzhiyun struct rk3568_pll pll[2];/* Address Offset: 0x0000 */ 72*4882a593Smuzhiyun unsigned int reserved0[16];/* Address Offset: 0x0040 */ 73*4882a593Smuzhiyun unsigned int mode_con00;/* Address Offset: 0x0080 */ 74*4882a593Smuzhiyun unsigned int reserved1[31];/* Address Offset: 0x0084 */ 75*4882a593Smuzhiyun unsigned int pmu_clksel_con[10];/* Address Offset: 0x0100 */ 76*4882a593Smuzhiyun unsigned int reserved2[22];/* Address Offset: 0x0128 */ 77*4882a593Smuzhiyun unsigned int pmu_clkgate_con[3];/* Address Offset: 0x0180 */ 78*4882a593Smuzhiyun unsigned int reserved3[29];/* Address Offset: 0x018C */ 79*4882a593Smuzhiyun unsigned int pmu_softrst_con[1];/* Address Offset: 0x0200 */ 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun check_member(rk3568_pmucru, mode_con00, 0x80); 83*4882a593Smuzhiyun check_member(rk3568_pmucru, pmu_softrst_con[0], 0x200); 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun struct rk3568_cru { 86*4882a593Smuzhiyun struct rk3568_pll pll[6]; 87*4882a593Smuzhiyun unsigned int mode_con00;/* Address Offset: 0x00C0 */ 88*4882a593Smuzhiyun unsigned int misc_con[3];/* Address Offset: 0x00C4 */ 89*4882a593Smuzhiyun unsigned int glb_cnt_th;/* Address Offset: 0x00D0 */ 90*4882a593Smuzhiyun unsigned int glb_srst_fst;/* Address Offset: 0x00D4 */ 91*4882a593Smuzhiyun unsigned int glb_srsr_snd; /* Address Offset: 0x00D8 */ 92*4882a593Smuzhiyun unsigned int glb_rst_con;/* Address Offset: 0x00DC */ 93*4882a593Smuzhiyun unsigned int glb_rst_st;/* Address Offset: 0x00E0 */ 94*4882a593Smuzhiyun unsigned int reserved0[7];/* Address Offset: 0x00E4 */ 95*4882a593Smuzhiyun unsigned int clksel_con[85]; /* Address Offset: 0x0100 */ 96*4882a593Smuzhiyun unsigned int reserved1[43];/* Address Offset: 0x0254 */ 97*4882a593Smuzhiyun unsigned int clkgate_con[36];/* Address Offset: 0x0300 */ 98*4882a593Smuzhiyun unsigned int reserved2[28]; /* Address Offset: 0x0390 */ 99*4882a593Smuzhiyun unsigned int softrst_con[30];/* Address Offset: 0x0400 */ 100*4882a593Smuzhiyun unsigned int reserved3[2];/* Address Offset: 0x0478 */ 101*4882a593Smuzhiyun unsigned int ssgtbl[32];/* Address Offset: 0x0480 */ 102*4882a593Smuzhiyun unsigned int reserved4[32];/* Address Offset: 0x0500 */ 103*4882a593Smuzhiyun unsigned int sdmmc0_con[2];/* Address Offset: 0x0580 */ 104*4882a593Smuzhiyun unsigned int sdmmc1_con[2];/* Address Offset: 0x058C */ 105*4882a593Smuzhiyun unsigned int sdmmc2_con[2];/* Address Offset: 0x0590 */ 106*4882a593Smuzhiyun unsigned int emmc_con[2];/* Address Offset: 0x0598 */ 107*4882a593Smuzhiyun }; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun check_member(rk3568_cru, mode_con00, 0xc0); 110*4882a593Smuzhiyun check_member(rk3568_cru, softrst_con[0], 0x400); 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun struct pll_rate_table { 113*4882a593Smuzhiyun unsigned long rate; 114*4882a593Smuzhiyun unsigned int fbdiv; 115*4882a593Smuzhiyun unsigned int postdiv1; 116*4882a593Smuzhiyun unsigned int refdiv; 117*4882a593Smuzhiyun unsigned int postdiv2; 118*4882a593Smuzhiyun unsigned int dsmpd; 119*4882a593Smuzhiyun unsigned int frac; 120*4882a593Smuzhiyun }; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun #define RK3568_PMU_MODE 0x80 123*4882a593Smuzhiyun #define RK3568_PMU_PLL_CON(x) ((x) * 0x4) 124*4882a593Smuzhiyun #define RK3568_PLL_CON(x) ((x) * 0x4) 125*4882a593Smuzhiyun #define RK3568_MODE_CON 0xc0 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun enum { 128*4882a593Smuzhiyun /* CRU_PMU_CLK_SEL0_CON */ 129*4882a593Smuzhiyun RTC32K_SEL_SHIFT = 6, 130*4882a593Smuzhiyun RTC32K_SEL_MASK = 0x3 << RTC32K_SEL_SHIFT, 131*4882a593Smuzhiyun RTC32K_SEL_PMUPVTM = 0, 132*4882a593Smuzhiyun RTC32K_SEL_OSC1_32K, 133*4882a593Smuzhiyun RTC32K_SEL_OSC0_DIV32K, 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun /* CRU_PMU_CLK_SEL1_CON */ 136*4882a593Smuzhiyun RTC32K_FRAC_NUMERATOR_SHIFT = 16, 137*4882a593Smuzhiyun RTC32K_FRAC_NUMERATOR_MASK = 0xffff << 16, 138*4882a593Smuzhiyun RTC32K_FRAC_DENOMINATOR_SHIFT = 0, 139*4882a593Smuzhiyun RTC32K_FRAC_DENOMINATOR_MASK = 0xffff, 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun /* CRU_PMU_CLK_SEL2_CON */ 142*4882a593Smuzhiyun PCLK_PDPMU_SEL_SHIFT = 15, 143*4882a593Smuzhiyun PCLK_PDPMU_SEL_MASK = 1 << PCLK_PDPMU_SEL_SHIFT, 144*4882a593Smuzhiyun PCLK_PDPMU_SEL_PPLL = 0, 145*4882a593Smuzhiyun PCLK_PDPMU_SEL_GPLL, 146*4882a593Smuzhiyun PCLK_PDPMU_DIV_SHIFT = 0, 147*4882a593Smuzhiyun PCLK_PDPMU_DIV_MASK = 0x1f, 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun /* CRU_PMU_CLK_SEL3_CON */ 150*4882a593Smuzhiyun CLK_I2C0_DIV_SHIFT = 0, 151*4882a593Smuzhiyun CLK_I2C0_DIV_MASK = 0x7f, 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun /* CRU_PMU_CLK_SEL6_CON */ 154*4882a593Smuzhiyun CLK_PWM0_SEL_SHIFT = 7, 155*4882a593Smuzhiyun CLK_PWM0_SEL_MASK = 1 << CLK_PWM0_SEL_SHIFT, 156*4882a593Smuzhiyun CLK_PWM0_SEL_XIN24M = 0, 157*4882a593Smuzhiyun CLK_PWM0_SEL_PPLL, 158*4882a593Smuzhiyun CLK_PWM0_DIV_SHIFT = 0, 159*4882a593Smuzhiyun CLK_PWM0_DIV_MASK = 0x7f, 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun /* CRU_CLK_SEL0_CON */ 162*4882a593Smuzhiyun CLK_CORE_PRE_SEL_SHIFT = 7, 163*4882a593Smuzhiyun CLK_CORE_PRE_SEL_MASK = 1 << CLK_CORE_PRE_SEL_SHIFT, 164*4882a593Smuzhiyun CLK_CORE_PRE_SEL_SRC = 0, 165*4882a593Smuzhiyun CLK_CORE_PRE_SEL_APLL, 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun /* CRU_CLK_SEL2_CON */ 168*4882a593Smuzhiyun SCLK_CORE_PRE_SEL_SHIFT = 15, 169*4882a593Smuzhiyun SCLK_CORE_PRE_SEL_MASK = 1 << SCLK_CORE_PRE_SEL_SHIFT, 170*4882a593Smuzhiyun SCLK_CORE_PRE_SEL_SRC = 0, 171*4882a593Smuzhiyun SCLK_CORE_PRE_SEL_NPLL, 172*4882a593Smuzhiyun SCLK_CORE_SRC_SEL_SHIFT = 8, 173*4882a593Smuzhiyun SCLK_CORE_SRC_SEL_MASK = 3 << SCLK_CORE_SRC_SEL_SHIFT, 174*4882a593Smuzhiyun SCLK_CORE_SRC_SEL_APLL = 0, 175*4882a593Smuzhiyun SCLK_CORE_SRC_SEL_GPLL, 176*4882a593Smuzhiyun SCLK_CORE_SRC_SEL_NPLL, 177*4882a593Smuzhiyun SCLK_CORE_SRC_DIV_SHIFT = 0, 178*4882a593Smuzhiyun SCLK_CORE_SRC_DIV_MASK = 0x1f << SCLK_CORE_SRC_DIV_SHIFT, 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun /* CRU_CLK_SEL3_CON */ 181*4882a593Smuzhiyun GICCLK_CORE_DIV_SHIFT = 8, 182*4882a593Smuzhiyun GICCLK_CORE_DIV_MASK = 0x1f << GICCLK_CORE_DIV_SHIFT, 183*4882a593Smuzhiyun ATCLK_CORE_DIV_SHIFT = 0, 184*4882a593Smuzhiyun ATCLK_CORE_DIV_MASK = 0x1f << ATCLK_CORE_DIV_SHIFT, 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun /* CRU_CLK_SEL4_CON */ 187*4882a593Smuzhiyun PERIPHCLK_CORE_PRE_DIV_SHIFT = 8, 188*4882a593Smuzhiyun PERIPHCLK_CORE_PRE_DIV_MASK = 0x1f << PERIPHCLK_CORE_PRE_DIV_SHIFT, 189*4882a593Smuzhiyun PCLK_CORE_PRE_DIV_SHIFT = 0, 190*4882a593Smuzhiyun PCLK_CORE_PRE_DIV_MASK = 0x1f << PCLK_CORE_PRE_DIV_SHIFT, 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun /* CRU_CLK_SEL5_CON */ 193*4882a593Smuzhiyun ACLK_CORE_NIU2BUS_SEL_SHIFT = 14, 194*4882a593Smuzhiyun ACLK_CORE_NIU2BUS_SEL_MASK = 0x3 << ACLK_CORE_NIU2BUS_SEL_SHIFT, 195*4882a593Smuzhiyun ACLK_CORE_NDFT_DIV_SHIFT = 8, 196*4882a593Smuzhiyun ACLK_CORE_NDFT_DIV_MASK = 0x1f << ACLK_CORE_NDFT_DIV_SHIFT, 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun /* CRU_CLK_SEL10_CON */ 199*4882a593Smuzhiyun HCLK_PERIMID_SEL_SHIFT = 6, 200*4882a593Smuzhiyun HCLK_PERIMID_SEL_MASK = 3 << HCLK_PERIMID_SEL_SHIFT, 201*4882a593Smuzhiyun HCLK_PERIMID_SEL_150M = 0, 202*4882a593Smuzhiyun HCLK_PERIMID_SEL_100M, 203*4882a593Smuzhiyun HCLK_PERIMID_SEL_75M, 204*4882a593Smuzhiyun HCLK_PERIMID_SEL_24M, 205*4882a593Smuzhiyun ACLK_PERIMID_SEL_SHIFT = 4, 206*4882a593Smuzhiyun ACLK_PERIMID_SEL_MASK = 3 << ACLK_PERIMID_SEL_SHIFT, 207*4882a593Smuzhiyun ACLK_PERIMID_SEL_300M = 0, 208*4882a593Smuzhiyun ACLK_PERIMID_SEL_200M, 209*4882a593Smuzhiyun ACLK_PERIMID_SEL_100M, 210*4882a593Smuzhiyun ACLK_PERIMID_SEL_24M, 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun /* CRU_CLK_SEL21_CON */ 213*4882a593Smuzhiyun I2S3_MCLKOUT_TX_SEL_SHIFT = 15, 214*4882a593Smuzhiyun I2S3_MCLKOUT_TX_SEL_MASK = 1 << I2S3_MCLKOUT_TX_SEL_SHIFT, 215*4882a593Smuzhiyun I2S3_MCLKOUT_TX_SEL_MCLK = 0, 216*4882a593Smuzhiyun I2S3_MCLKOUT_TX_SEL_12M, 217*4882a593Smuzhiyun CLK_I2S3_SEL_SHIFT = 10, 218*4882a593Smuzhiyun CLK_I2S3_SEL_MASK = 0x3 << CLK_I2S3_SEL_SHIFT, 219*4882a593Smuzhiyun CLK_I2S3_SEL_SRC = 0, 220*4882a593Smuzhiyun CLK_I2S3_SEL_FRAC, 221*4882a593Smuzhiyun CLK_I2S3_SEL_CLKIN, 222*4882a593Smuzhiyun CLK_I2S3_SEL_XIN12M, 223*4882a593Smuzhiyun CLK_I2S3_SRC_SEL_SHIFT = 8, 224*4882a593Smuzhiyun CLK_I2S3_SRC_SEL_MASK = 0x3 << CLK_I2S3_SRC_SEL_SHIFT, 225*4882a593Smuzhiyun CLK_I2S3_SRC_SEL_GPLL = 0, 226*4882a593Smuzhiyun CLK_I2S3_SRC_SEL_CPLL, 227*4882a593Smuzhiyun CLK_I2S3_SRC_SEL_NPLL, 228*4882a593Smuzhiyun CLK_I2S3_SRC_DIV_SHIFT = 0, 229*4882a593Smuzhiyun CLK_I2S3_SRC_DIV_MASK = 0x7f << CLK_I2S3_SRC_DIV_SHIFT, 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun /* CRU_CLK_SEL22_CON */ 232*4882a593Smuzhiyun CLK_I2S3_FRAC_NUMERATOR_SHIFT = 16, 233*4882a593Smuzhiyun CLK_I2S3_FRAC_NUMERATOR_MASK = 0xffff << 16, 234*4882a593Smuzhiyun CLK_I2S3_FRAC_DENOMINATOR_SHIFT = 0, 235*4882a593Smuzhiyun CLK_I2S3_FRAC_DENOMINATOR_MASK = 0xffff, 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun /* CRU_CLK_SEL27_CON */ 238*4882a593Smuzhiyun CLK_CRYPTO_PKA_SEL_SHIFT = 6, 239*4882a593Smuzhiyun CLK_CRYPTO_PKA_SEL_MASK = 3 << CLK_CRYPTO_PKA_SEL_SHIFT, 240*4882a593Smuzhiyun CLK_CRYPTO_PKA_SEL_300M = 0, 241*4882a593Smuzhiyun CLK_CRYPTO_PKA_SEL_200M, 242*4882a593Smuzhiyun CLK_CRYPTO_PKA_SEL_100M, 243*4882a593Smuzhiyun CLK_CRYPTO_CORE_SEL_SHIFT = 4, 244*4882a593Smuzhiyun CLK_CRYPTO_CORE_SEL_MASK = 3 << CLK_CRYPTO_CORE_SEL_SHIFT, 245*4882a593Smuzhiyun CLK_CRYPTO_CORE_SEL_200M = 0, 246*4882a593Smuzhiyun CLK_CRYPTO_CORE_SEL_150M, 247*4882a593Smuzhiyun CLK_CRYPTO_CORE_SEL_100M, 248*4882a593Smuzhiyun HCLK_SECURE_FLASH_SEL_SHIFT = 2, 249*4882a593Smuzhiyun HCLK_SECURE_FLASH_SEL_MASK = 3 << HCLK_SECURE_FLASH_SEL_SHIFT, 250*4882a593Smuzhiyun HCLK_SECURE_FLASH_SEL_150M = 0, 251*4882a593Smuzhiyun HCLK_SECURE_FLASH_SEL_100M, 252*4882a593Smuzhiyun HCLK_SECURE_FLASH_SEL_75M, 253*4882a593Smuzhiyun HCLK_SECURE_FLASH_SEL_24M, 254*4882a593Smuzhiyun ACLK_SECURE_FLASH_SEL_SHIFT = 0, 255*4882a593Smuzhiyun ACLK_SECURE_FLASH_SEL_MASK = 3 << ACLK_SECURE_FLASH_SEL_SHIFT, 256*4882a593Smuzhiyun ACLK_SECURE_FLASH_SEL_200M = 0, 257*4882a593Smuzhiyun ACLK_SECURE_FLASH_SEL_150M, 258*4882a593Smuzhiyun ACLK_SECURE_FLASH_SEL_100M, 259*4882a593Smuzhiyun ACLK_SECURE_FLASH_SEL_24M, 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun /* CRU_CLK_SEL28_CON */ 262*4882a593Smuzhiyun CCLK_EMMC_SEL_SHIFT = 12, 263*4882a593Smuzhiyun CCLK_EMMC_SEL_MASK = 7 << CCLK_EMMC_SEL_SHIFT, 264*4882a593Smuzhiyun CCLK_EMMC_SEL_24M = 0, 265*4882a593Smuzhiyun CCLK_EMMC_SEL_200M, 266*4882a593Smuzhiyun CCLK_EMMC_SEL_150M, 267*4882a593Smuzhiyun CCLK_EMMC_SEL_100M, 268*4882a593Smuzhiyun CCLK_EMMC_SEL_50M, 269*4882a593Smuzhiyun CCLK_EMMC_SEL_375K, 270*4882a593Smuzhiyun BCLK_EMMC_SEL_SHIFT = 8, 271*4882a593Smuzhiyun BCLK_EMMC_SEL_MASK = 3 << BCLK_EMMC_SEL_SHIFT, 272*4882a593Smuzhiyun BCLK_EMMC_SEL_200M = 0, 273*4882a593Smuzhiyun BCLK_EMMC_SEL_150M, 274*4882a593Smuzhiyun BCLK_EMMC_SEL_125M, 275*4882a593Smuzhiyun SCLK_SFC_SEL_SHIFT = 4, 276*4882a593Smuzhiyun SCLK_SFC_SEL_MASK = 7 << SCLK_SFC_SEL_SHIFT, 277*4882a593Smuzhiyun SCLK_SFC_SEL_24M = 0, 278*4882a593Smuzhiyun SCLK_SFC_SEL_50M, 279*4882a593Smuzhiyun SCLK_SFC_SEL_75M, 280*4882a593Smuzhiyun SCLK_SFC_SEL_100M, 281*4882a593Smuzhiyun SCLK_SFC_SEL_125M, 282*4882a593Smuzhiyun SCLK_SFC_SEL_150M, 283*4882a593Smuzhiyun NCLK_NANDC_SEL_SHIFT = 0, 284*4882a593Smuzhiyun NCLK_NANDC_SEL_MASK = 3 << NCLK_NANDC_SEL_SHIFT, 285*4882a593Smuzhiyun NCLK_NANDC_SEL_200M = 0, 286*4882a593Smuzhiyun NCLK_NANDC_SEL_150M, 287*4882a593Smuzhiyun NCLK_NANDC_SEL_100M, 288*4882a593Smuzhiyun NCLK_NANDC_SEL_24M, 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun /* CRU_CLK_SEL30_CON */ 291*4882a593Smuzhiyun CLK_SDMMC1_SEL_SHIFT = 12, 292*4882a593Smuzhiyun CLK_SDMMC1_SEL_MASK = 7 << CLK_SDMMC1_SEL_SHIFT, 293*4882a593Smuzhiyun CLK_SDMMC0_SEL_SHIFT = 8, 294*4882a593Smuzhiyun CLK_SDMMC0_SEL_MASK = 7 << CLK_SDMMC0_SEL_SHIFT, 295*4882a593Smuzhiyun CLK_SDMMC_SEL_24M = 0, 296*4882a593Smuzhiyun CLK_SDMMC_SEL_400M, 297*4882a593Smuzhiyun CLK_SDMMC_SEL_300M, 298*4882a593Smuzhiyun CLK_SDMMC_SEL_100M, 299*4882a593Smuzhiyun CLK_SDMMC_SEL_50M, 300*4882a593Smuzhiyun CLK_SDMMC_SEL_750K, 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun /* CRU_CLK_SEL31_CON */ 303*4882a593Smuzhiyun CLK_MAC0_OUT_SEL_SHIFT = 14, 304*4882a593Smuzhiyun CLK_MAC0_OUT_SEL_MASK = 3 << CLK_MAC0_OUT_SEL_SHIFT, 305*4882a593Smuzhiyun CLK_MAC0_OUT_SEL_125M = 0, 306*4882a593Smuzhiyun CLK_MAC0_OUT_SEL_50M, 307*4882a593Smuzhiyun CLK_MAC0_OUT_SEL_25M, 308*4882a593Smuzhiyun CLK_MAC0_OUT_SEL_24M, 309*4882a593Smuzhiyun CLK_GMAC0_PTP_REF_SEL_SHIFT = 12, 310*4882a593Smuzhiyun CLK_GMAC0_PTP_REF_SEL_MASK = 3 << CLK_GMAC0_PTP_REF_SEL_SHIFT, 311*4882a593Smuzhiyun CLK_GMAC0_PTP_REF_SEL_62_5M = 0, 312*4882a593Smuzhiyun CLK_GMAC0_PTP_REF_SEL_100M, 313*4882a593Smuzhiyun CLK_GMAC0_PTP_REF_SEL_50M, 314*4882a593Smuzhiyun CLK_GMAC0_PTP_REF_SEL_24M, 315*4882a593Smuzhiyun CLK_MAC0_2TOP_SEL_SHIFT = 8, 316*4882a593Smuzhiyun CLK_MAC0_2TOP_SEL_MASK = 3 << CLK_MAC0_2TOP_SEL_SHIFT, 317*4882a593Smuzhiyun CLK_MAC0_2TOP_SEL_125M = 0, 318*4882a593Smuzhiyun CLK_MAC0_2TOP_SEL_50M, 319*4882a593Smuzhiyun CLK_MAC0_2TOP_SEL_25M, 320*4882a593Smuzhiyun CLK_MAC0_2TOP_SEL_PPLL, 321*4882a593Smuzhiyun RGMII0_CLK_SEL_SHIFT = 4, 322*4882a593Smuzhiyun RGMII0_CLK_SEL_MASK = 3 << RGMII0_CLK_SEL_SHIFT, 323*4882a593Smuzhiyun RGMII0_CLK_SEL_125M = 0, 324*4882a593Smuzhiyun RGMII0_CLK_SEL_125M_1, 325*4882a593Smuzhiyun RGMII0_CLK_SEL_2_5M, 326*4882a593Smuzhiyun RGMII0_CLK_SEL_25M, 327*4882a593Smuzhiyun RMII0_CLK_SEL_SHIFT = 3, 328*4882a593Smuzhiyun RMII0_CLK_SEL_MASK = 1 << RMII0_CLK_SEL_SHIFT, 329*4882a593Smuzhiyun RMII0_CLK_SEL_2_5M = 0, 330*4882a593Smuzhiyun RMII0_CLK_SEL_25M, 331*4882a593Smuzhiyun RMII0_EXTCLK_SEL_SHIFT = 2, 332*4882a593Smuzhiyun RMII0_EXTCLK_SEL_MASK = 1 << RMII0_EXTCLK_SEL_SHIFT, 333*4882a593Smuzhiyun RMII0_EXTCLK_SEL_MAC0_TOP = 0, 334*4882a593Smuzhiyun RMII0_EXTCLK_SEL_IO, 335*4882a593Smuzhiyun RMII0_MODE_SHIFT = 0, 336*4882a593Smuzhiyun RMII0_MODE_MASK = 3 << RMII0_MODE_SHIFT, 337*4882a593Smuzhiyun RMII0_MODE_SEL_RGMII = 0, 338*4882a593Smuzhiyun RMII0_MODE_SEL_RMII, 339*4882a593Smuzhiyun RMII0_MODE_SEL_GMII, 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun /* CRU_CLK_SEL32_CON */ 342*4882a593Smuzhiyun CLK_SDMMC2_SEL_SHIFT = 8, 343*4882a593Smuzhiyun CLK_SDMMC2_SEL_MASK = 7 << CLK_SDMMC2_SEL_SHIFT, 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun /* CRU_CLK_SEL38_CON */ 346*4882a593Smuzhiyun ACLK_VOP_PRE_SEL_SHIFT = 6, 347*4882a593Smuzhiyun ACLK_VOP_PRE_SEL_MASK = 3 << ACLK_VOP_PRE_SEL_SHIFT, 348*4882a593Smuzhiyun ACLK_VOP_PRE_SEL_CPLL = 0, 349*4882a593Smuzhiyun ACLK_VOP_PRE_SEL_GPLL, 350*4882a593Smuzhiyun ACLK_VOP_PRE_SEL_HPLL, 351*4882a593Smuzhiyun ACLK_VOP_PRE_SEL_VPLL, 352*4882a593Smuzhiyun ACLK_VOP_PRE_DIV_SHIFT = 0, 353*4882a593Smuzhiyun ACLK_VOP_PRE_DIV_MASK = 0x1f << ACLK_VOP_PRE_DIV_SHIFT, 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun /* CRU_CLK_SEL39_CON */ 356*4882a593Smuzhiyun DCLK0_VOP_SEL_SHIFT = 10, 357*4882a593Smuzhiyun DCLK0_VOP_SEL_MASK = 3 << DCLK0_VOP_SEL_SHIFT, 358*4882a593Smuzhiyun DCLK_VOP_SEL_HPLL = 0, 359*4882a593Smuzhiyun DCLK_VOP_SEL_VPLL, 360*4882a593Smuzhiyun DCLK_VOP_SEL_GPLL, 361*4882a593Smuzhiyun DCLK_VOP_SEL_CPLL, 362*4882a593Smuzhiyun DCLK0_VOP_DIV_SHIFT = 0, 363*4882a593Smuzhiyun DCLK0_VOP_DIV_MASK = 0xff << DCLK0_VOP_DIV_SHIFT, 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun /* CRU_CLK_SEL40_CON */ 366*4882a593Smuzhiyun DCLK1_VOP_SEL_SHIFT = 10, 367*4882a593Smuzhiyun DCLK1_VOP_SEL_MASK = 3 << DCLK1_VOP_SEL_SHIFT, 368*4882a593Smuzhiyun DCLK1_VOP_DIV_SHIFT = 0, 369*4882a593Smuzhiyun DCLK1_VOP_DIV_MASK = 0xff << DCLK1_VOP_DIV_SHIFT, 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun /* CRU_CLK_SEL41_CON */ 372*4882a593Smuzhiyun DCLK2_VOP_SEL_SHIFT = 10, 373*4882a593Smuzhiyun DCLK2_VOP_SEL_MASK = 3 << DCLK2_VOP_SEL_SHIFT, 374*4882a593Smuzhiyun DCLK2_VOP_DIV_SHIFT = 0, 375*4882a593Smuzhiyun DCLK2_VOP_DIV_MASK = 0xff << DCLK2_VOP_DIV_SHIFT, 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun /* CRU_CLK_SEL43_CON */ 378*4882a593Smuzhiyun DCLK_EBC_SEL_SHIFT = 6, 379*4882a593Smuzhiyun DCLK_EBC_SEL_MASK = 3 << DCLK_EBC_SEL_SHIFT, 380*4882a593Smuzhiyun DCLK_EBC_SEL_GPLL_400M = 0, 381*4882a593Smuzhiyun DCLK_EBC_SEL_CPLL_333M, 382*4882a593Smuzhiyun DCLK_EBC_SEL_GPLL_200M, 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun /* CRU_CLK_SEL47_CON */ 385*4882a593Smuzhiyun ACLK_RKVDEC_SEL_SHIFT = 7, 386*4882a593Smuzhiyun ACLK_RKVDEC_SEL_MASK = 1 << ACLK_RKVDEC_SEL_SHIFT, 387*4882a593Smuzhiyun ACLK_RKVDEC_SEL_GPLL = 0, 388*4882a593Smuzhiyun ACLK_RKVDEC_SEL_CPLL, 389*4882a593Smuzhiyun ACLK_RKVDEC_DIV_SHIFT = 0, 390*4882a593Smuzhiyun ACLK_RKVDEC_DIV_MASK = 0x1f << ACLK_RKVDEC_DIV_SHIFT, 391*4882a593Smuzhiyun 392*4882a593Smuzhiyun /* CRU_CLK_SEL49_CON */ 393*4882a593Smuzhiyun CLK_RKVDEC_CORE_SEL_SHIFT = 14, 394*4882a593Smuzhiyun CLK_RKVDEC_CORE_SEL_MASK = 0x3 << CLK_RKVDEC_CORE_SEL_SHIFT, 395*4882a593Smuzhiyun CLK_RKVDEC_CORE_SEL_GPLL = 0, 396*4882a593Smuzhiyun CLK_RKVDEC_CORE_SEL_CPLL, 397*4882a593Smuzhiyun CLK_RKVDEC_CORE_SEL_NPLL, 398*4882a593Smuzhiyun CLK_RKVDEC_CORE_SEL_VPLL, 399*4882a593Smuzhiyun CLK_RKVDEC_CORE_DIV_SHIFT = 8, 400*4882a593Smuzhiyun CLK_RKVDEC_CORE_DIV_MASK = 0x1f << CLK_RKVDEC_CORE_DIV_SHIFT, 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun /* CRU_CLK_SEL50_CON */ 403*4882a593Smuzhiyun PCLK_BUS_SEL_SHIFT = 4, 404*4882a593Smuzhiyun PCLK_BUS_SEL_MASK = 3 << PCLK_BUS_SEL_SHIFT, 405*4882a593Smuzhiyun PCLK_BUS_SEL_100M = 0, 406*4882a593Smuzhiyun PCLK_BUS_SEL_75M, 407*4882a593Smuzhiyun PCLK_BUS_SEL_50M, 408*4882a593Smuzhiyun PCLK_BUS_SEL_24M, 409*4882a593Smuzhiyun ACLK_BUS_SEL_SHIFT = 0, 410*4882a593Smuzhiyun ACLK_BUS_SEL_MASK = 3 << ACLK_BUS_SEL_SHIFT, 411*4882a593Smuzhiyun ACLK_BUS_SEL_200M = 0, 412*4882a593Smuzhiyun ACLK_BUS_SEL_150M, 413*4882a593Smuzhiyun ACLK_BUS_SEL_100M, 414*4882a593Smuzhiyun ACLK_BUS_SEL_24M, 415*4882a593Smuzhiyun 416*4882a593Smuzhiyun /* CRU_CLK_SEL51_CON */ 417*4882a593Smuzhiyun CLK_TSADC_DIV_SHIFT = 8, 418*4882a593Smuzhiyun CLK_TSADC_DIV_MASK = 0x7f << CLK_TSADC_DIV_SHIFT, 419*4882a593Smuzhiyun CLK_TSADC_TSEN_SEL_SHIFT = 4, 420*4882a593Smuzhiyun CLK_TSADC_TSEN_SEL_MASK = 0x3 << CLK_TSADC_TSEN_SEL_SHIFT, 421*4882a593Smuzhiyun CLK_TSADC_TSEN_SEL_24M = 0, 422*4882a593Smuzhiyun CLK_TSADC_TSEN_SEL_100M, 423*4882a593Smuzhiyun CLK_TSADC_TSEN_SEL_CPLL_100M, 424*4882a593Smuzhiyun CLK_TSADC_TSEN_DIV_SHIFT = 0, 425*4882a593Smuzhiyun CLK_TSADC_TSEN_DIV_MASK = 0x7 << CLK_TSADC_TSEN_DIV_SHIFT, 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun /* CRU_CLK_SEL52_CON */ 428*4882a593Smuzhiyun CLK_UART_SEL_SHIFT = 12, 429*4882a593Smuzhiyun CLK_UART_SEL_MASK = 0x3 << CLK_UART_SEL_SHIFT, 430*4882a593Smuzhiyun CLK_UART_SEL_SRC = 0, 431*4882a593Smuzhiyun CLK_UART_SEL_FRAC, 432*4882a593Smuzhiyun CLK_UART_SEL_XIN24M, 433*4882a593Smuzhiyun CLK_UART_SRC_SEL_SHIFT = 8, 434*4882a593Smuzhiyun CLK_UART_SRC_SEL_MASK = 0x3 << CLK_UART_SRC_SEL_SHIFT, 435*4882a593Smuzhiyun CLK_UART_SRC_SEL_GPLL = 0, 436*4882a593Smuzhiyun CLK_UART_SRC_SEL_CPLL, 437*4882a593Smuzhiyun CLK_UART_SRC_SEL_480M, 438*4882a593Smuzhiyun CLK_UART_SRC_DIV_SHIFT = 0, 439*4882a593Smuzhiyun CLK_UART_SRC_DIV_MASK = 0x3f << CLK_UART_SRC_DIV_SHIFT, 440*4882a593Smuzhiyun 441*4882a593Smuzhiyun /* CRU_CLK_SEL53_CON */ 442*4882a593Smuzhiyun CLK_UART_FRAC_NUMERATOR_SHIFT = 16, 443*4882a593Smuzhiyun CLK_UART_FRAC_NUMERATOR_MASK = 0xffff << 16, 444*4882a593Smuzhiyun CLK_UART_FRAC_DENOMINATOR_SHIFT = 0, 445*4882a593Smuzhiyun CLK_UART_FRAC_DENOMINATOR_MASK = 0xffff, 446*4882a593Smuzhiyun 447*4882a593Smuzhiyun /* CRU_CLK_SEL71_CON */ 448*4882a593Smuzhiyun CLK_I2C_SEL_SHIFT = 8, 449*4882a593Smuzhiyun CLK_I2C_SEL_MASK = 3 << CLK_I2C_SEL_SHIFT, 450*4882a593Smuzhiyun CLK_I2C_SEL_200M = 0, 451*4882a593Smuzhiyun CLK_I2C_SEL_100M, 452*4882a593Smuzhiyun CLK_I2C_SEL_24M, 453*4882a593Smuzhiyun CLK_I2C_SEL_CPLL_100M, 454*4882a593Smuzhiyun 455*4882a593Smuzhiyun /* CRU_CLK_SEL72_CON */ 456*4882a593Smuzhiyun CLK_PWM3_SEL_SHIFT = 12, 457*4882a593Smuzhiyun CLK_PWM3_SEL_MASK = 3 << CLK_PWM3_SEL_SHIFT, 458*4882a593Smuzhiyun CLK_PWM2_SEL_SHIFT = 10, 459*4882a593Smuzhiyun CLK_PWM2_SEL_MASK = 3 << CLK_PWM2_SEL_SHIFT, 460*4882a593Smuzhiyun CLK_PWM1_SEL_SHIFT = 8, 461*4882a593Smuzhiyun CLK_PWM1_SEL_MASK = 3 << CLK_PWM1_SEL_SHIFT, 462*4882a593Smuzhiyun CLK_PWM_SEL_100M = 0, 463*4882a593Smuzhiyun CLK_PWM_SEL_24M, 464*4882a593Smuzhiyun CLK_PWM_SEL_CPLL_100M, 465*4882a593Smuzhiyun CLK_SPI3_SEL_SHIFT = 6, 466*4882a593Smuzhiyun CLK_SPI3_SEL_MASK = 3 << CLK_SPI3_SEL_SHIFT, 467*4882a593Smuzhiyun CLK_SPI2_SEL_SHIFT = 4, 468*4882a593Smuzhiyun CLK_SPI2_SEL_MASK = 3 << CLK_SPI2_SEL_SHIFT, 469*4882a593Smuzhiyun CLK_SPI1_SEL_SHIFT = 2, 470*4882a593Smuzhiyun CLK_SPI1_SEL_MASK = 3 << CLK_SPI1_SEL_SHIFT, 471*4882a593Smuzhiyun CLK_SPI0_SEL_SHIFT = 0, 472*4882a593Smuzhiyun CLK_SPI0_SEL_MASK = 3 << CLK_SPI0_SEL_SHIFT, 473*4882a593Smuzhiyun CLK_SPI_SEL_200M = 0, 474*4882a593Smuzhiyun CLK_SPI_SEL_24M, 475*4882a593Smuzhiyun CLK_SPI_SEL_CPLL_100M, 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun /* CRU_CLK_SEL73_CON */ 478*4882a593Smuzhiyun PCLK_TOP_SEL_SHIFT = 12, 479*4882a593Smuzhiyun PCLK_TOP_SEL_MASK = 3 << PCLK_TOP_SEL_SHIFT, 480*4882a593Smuzhiyun PCLK_TOP_SEL_100M = 0, 481*4882a593Smuzhiyun PCLK_TOP_SEL_75M, 482*4882a593Smuzhiyun PCLK_TOP_SEL_50M, 483*4882a593Smuzhiyun PCLK_TOP_SEL_24M, 484*4882a593Smuzhiyun HCLK_TOP_SEL_SHIFT = 8, 485*4882a593Smuzhiyun HCLK_TOP_SEL_MASK = 3 << HCLK_TOP_SEL_SHIFT, 486*4882a593Smuzhiyun HCLK_TOP_SEL_150M = 0, 487*4882a593Smuzhiyun HCLK_TOP_SEL_100M, 488*4882a593Smuzhiyun HCLK_TOP_SEL_75M, 489*4882a593Smuzhiyun HCLK_TOP_SEL_24M, 490*4882a593Smuzhiyun ACLK_TOP_LOW_SEL_SHIFT = 4, 491*4882a593Smuzhiyun ACLK_TOP_LOW_SEL_MASK = 3 << ACLK_TOP_LOW_SEL_SHIFT, 492*4882a593Smuzhiyun ACLK_TOP_LOW_SEL_400M = 0, 493*4882a593Smuzhiyun ACLK_TOP_LOW_SEL_300M, 494*4882a593Smuzhiyun ACLK_TOP_LOW_SEL_200M, 495*4882a593Smuzhiyun ACLK_TOP_LOW_SEL_24M, 496*4882a593Smuzhiyun ACLK_TOP_HIGH_SEL_SHIFT = 0, 497*4882a593Smuzhiyun ACLK_TOP_HIGH_SEL_MASK = 3 << ACLK_TOP_HIGH_SEL_SHIFT, 498*4882a593Smuzhiyun ACLK_TOP_HIGH_SEL_500M = 0, 499*4882a593Smuzhiyun ACLK_TOP_HIGH_SEL_400M, 500*4882a593Smuzhiyun ACLK_TOP_HIGH_SEL_300M, 501*4882a593Smuzhiyun ACLK_TOP_HIGH_SEL_24M, 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun /* CRU_CLK_SEL78_CON */ 504*4882a593Smuzhiyun CPLL_500M_DIV_SHIFT = 8, 505*4882a593Smuzhiyun CPLL_500M_DIV_MASK = 0x1f << CPLL_500M_DIV_SHIFT, 506*4882a593Smuzhiyun 507*4882a593Smuzhiyun /* CRU_CLK_SEL79_CON */ 508*4882a593Smuzhiyun CPLL_250M_DIV_SHIFT = 8, 509*4882a593Smuzhiyun CPLL_250M_DIV_MASK = 0x1f << CPLL_250M_DIV_SHIFT, 510*4882a593Smuzhiyun CPLL_333M_DIV_SHIFT = 0, 511*4882a593Smuzhiyun CPLL_333M_DIV_MASK = 0x1f << CPLL_333M_DIV_SHIFT, 512*4882a593Smuzhiyun 513*4882a593Smuzhiyun /* CRU_CLK_SEL80_CON */ 514*4882a593Smuzhiyun CPLL_62P5M_DIV_SHIFT = 8, 515*4882a593Smuzhiyun CPLL_62P5M_DIV_MASK = 0x1f << CPLL_62P5M_DIV_SHIFT, 516*4882a593Smuzhiyun CPLL_125M_DIV_SHIFT = 0, 517*4882a593Smuzhiyun CPLL_125M_DIV_MASK = 0x1f << CPLL_125M_DIV_SHIFT, 518*4882a593Smuzhiyun 519*4882a593Smuzhiyun /* CRU_CLK_SEL81_CON */ 520*4882a593Smuzhiyun CPLL_25M_DIV_SHIFT = 8, 521*4882a593Smuzhiyun CPLL_25M_DIV_MASK = 0x1f << CPLL_25M_DIV_SHIFT, 522*4882a593Smuzhiyun CPLL_50M_DIV_SHIFT = 0, 523*4882a593Smuzhiyun CPLL_50M_DIV_MASK = 0x1f << CPLL_50M_DIV_SHIFT, 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun /* CRU_CLK_SEL82_CON */ 526*4882a593Smuzhiyun CPLL_100M_DIV_SHIFT = 0, 527*4882a593Smuzhiyun CPLL_100M_DIV_MASK = 0x1f << CPLL_100M_DIV_SHIFT, 528*4882a593Smuzhiyun 529*4882a593Smuzhiyun /* GRF_SOC_CON2 */ 530*4882a593Smuzhiyun I2S3_MCLKOUT_SEL_SHIFT = 15, 531*4882a593Smuzhiyun I2S3_MCLKOUT_SEL_MASK = 0x1 << I2S3_MCLKOUT_SEL_SHIFT, 532*4882a593Smuzhiyun I2S3_MCLKOUT_SEL_RX = 0, 533*4882a593Smuzhiyun I2S3_MCLKOUT_SEL_TX, 534*4882a593Smuzhiyun I2S3_MCLK_IOE_SEL_SHIFT = 3, 535*4882a593Smuzhiyun I2S3_MCLK_IOE_SEL_MASK = 0x1 << I2S3_MCLK_IOE_SEL_SHIFT, 536*4882a593Smuzhiyun I2S3_MCLK_IOE_SEL_CLKIN = 0, 537*4882a593Smuzhiyun I2S3_MCLK_IOE_SEL_CLKOUT, 538*4882a593Smuzhiyun 539*4882a593Smuzhiyun }; 540*4882a593Smuzhiyun #endif 541