1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2017 Rockchip Electronics Co., Ltd. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun #ifndef _ASM_ARCH_CRU_px30_H 7*4882a593Smuzhiyun #define _ASM_ARCH_CRU_px30_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <common.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define MHz 1000000 12*4882a593Smuzhiyun #define KHz 1000 13*4882a593Smuzhiyun #define OSC_HZ (24 * MHz) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define APLL_HZ (600 * MHz) 16*4882a593Smuzhiyun #define GPLL_HZ (1200 * MHz) 17*4882a593Smuzhiyun #define NPLL_HZ (1188 * MHz) 18*4882a593Smuzhiyun #define ACLK_BUS_HZ (200 * MHz) 19*4882a593Smuzhiyun #define HCLK_BUS_HZ (150 * MHz) 20*4882a593Smuzhiyun #define PCLK_BUS_HZ (100 * MHz) 21*4882a593Smuzhiyun #define ACLK_PERI_HZ (200 * MHz) 22*4882a593Smuzhiyun #define HCLK_PERI_HZ (150 * MHz) 23*4882a593Smuzhiyun #define PCLK_PMU_HZ (100 * MHz) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* PX30 pll id */ 26*4882a593Smuzhiyun enum px30_pll_id { 27*4882a593Smuzhiyun APLL, 28*4882a593Smuzhiyun DPLL, 29*4882a593Smuzhiyun CPLL, 30*4882a593Smuzhiyun NPLL, 31*4882a593Smuzhiyun GPLL, 32*4882a593Smuzhiyun PLL_COUNT, 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun struct px30_clk_info { 36*4882a593Smuzhiyun unsigned long id; 37*4882a593Smuzhiyun char *name; 38*4882a593Smuzhiyun bool is_cru; 39*4882a593Smuzhiyun }; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* Private data for the clock driver - used by rockchip_get_cru() */ 42*4882a593Smuzhiyun struct px30_clk_priv { 43*4882a593Smuzhiyun struct px30_cru *cru; 44*4882a593Smuzhiyun ulong gpll_hz; 45*4882a593Smuzhiyun ulong armclk_hz; 46*4882a593Smuzhiyun ulong armclk_enter_hz; 47*4882a593Smuzhiyun ulong armclk_init_hz; 48*4882a593Smuzhiyun bool sync_kernel; 49*4882a593Smuzhiyun bool set_armclk_rate; 50*4882a593Smuzhiyun }; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun struct px30_pmuclk_priv { 53*4882a593Smuzhiyun struct px30_pmucru *pmucru; 54*4882a593Smuzhiyun ulong gpll_hz; 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun struct px30_pll { 58*4882a593Smuzhiyun unsigned int con0; 59*4882a593Smuzhiyun unsigned int con1; 60*4882a593Smuzhiyun unsigned int con2; 61*4882a593Smuzhiyun unsigned int con3; 62*4882a593Smuzhiyun unsigned int con4; 63*4882a593Smuzhiyun unsigned int reserved0[3]; 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun struct px30_cru { 67*4882a593Smuzhiyun struct px30_pll pll[4]; 68*4882a593Smuzhiyun unsigned int reserved1[8]; 69*4882a593Smuzhiyun unsigned int mode; 70*4882a593Smuzhiyun unsigned int misc; 71*4882a593Smuzhiyun unsigned int reserved2[2]; 72*4882a593Smuzhiyun unsigned int glb_cnt_th; 73*4882a593Smuzhiyun unsigned int glb_rst_st; 74*4882a593Smuzhiyun unsigned int glb_srst_fst; 75*4882a593Smuzhiyun unsigned int glb_srst_snd; 76*4882a593Smuzhiyun unsigned int glb_rst_con; 77*4882a593Smuzhiyun unsigned int reserved3[7]; 78*4882a593Smuzhiyun unsigned int hwffc_con0; 79*4882a593Smuzhiyun unsigned int reserved4; 80*4882a593Smuzhiyun unsigned int hwffc_th; 81*4882a593Smuzhiyun unsigned int hwffc_intst; 82*4882a593Smuzhiyun unsigned int apll_con0_s; 83*4882a593Smuzhiyun unsigned int apll_con1_s; 84*4882a593Smuzhiyun unsigned int clksel_con0_s; 85*4882a593Smuzhiyun unsigned int reserved5; 86*4882a593Smuzhiyun unsigned int clksel_con[60]; 87*4882a593Smuzhiyun unsigned int reserved6[4]; 88*4882a593Smuzhiyun unsigned int clkgate_con[18]; 89*4882a593Smuzhiyun unsigned int reserved7[(0x280 - 0x244) / 4 - 1]; 90*4882a593Smuzhiyun unsigned int ssgtbl[32]; 91*4882a593Smuzhiyun unsigned int softrst_con[12]; 92*4882a593Smuzhiyun unsigned int reserved8[(0x380 - 0x32c) / 4 - 1]; 93*4882a593Smuzhiyun unsigned int sdmmc_con[2]; 94*4882a593Smuzhiyun unsigned int sdio_con[2]; 95*4882a593Smuzhiyun unsigned int emmc_con[2]; 96*4882a593Smuzhiyun unsigned int reserved9[(0x400 - 0x394) / 4 - 1]; 97*4882a593Smuzhiyun unsigned int autocs_con[8]; 98*4882a593Smuzhiyun }; 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun check_member(px30_cru, autocs_con[7], 0x41c); 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun struct px30_pmucru { 103*4882a593Smuzhiyun struct px30_pll pll; 104*4882a593Smuzhiyun unsigned int pmu_mode; 105*4882a593Smuzhiyun unsigned int reserved1[7]; 106*4882a593Smuzhiyun unsigned int pmu_clksel_con[6]; 107*4882a593Smuzhiyun unsigned int reserved2[10]; 108*4882a593Smuzhiyun unsigned int pmu_clkgate_con[2]; 109*4882a593Smuzhiyun unsigned int reserved3[14]; 110*4882a593Smuzhiyun unsigned int pmu_autocs_con[2]; 111*4882a593Smuzhiyun }; 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun check_member(px30_pmucru, pmu_autocs_con[1], 0xc4); 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun struct pll_rate_table { 116*4882a593Smuzhiyun unsigned long rate; 117*4882a593Smuzhiyun unsigned int fbdiv; 118*4882a593Smuzhiyun unsigned int postdiv1; 119*4882a593Smuzhiyun unsigned int refdiv; 120*4882a593Smuzhiyun unsigned int postdiv2; 121*4882a593Smuzhiyun unsigned int dsmpd; 122*4882a593Smuzhiyun unsigned int frac; 123*4882a593Smuzhiyun }; 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun struct cpu_rate_table { 126*4882a593Smuzhiyun unsigned long rate; 127*4882a593Smuzhiyun unsigned int aclk_div; 128*4882a593Smuzhiyun unsigned int pclk_div; 129*4882a593Smuzhiyun }; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun enum { 132*4882a593Smuzhiyun /* PLLCON0*/ 133*4882a593Smuzhiyun PLL_BP_SHIFT = 15, 134*4882a593Smuzhiyun PLL_POSTDIV1_SHIFT = 12, 135*4882a593Smuzhiyun PLL_POSTDIV1_MASK = 7 << PLL_POSTDIV1_SHIFT, 136*4882a593Smuzhiyun PLL_FBDIV_SHIFT = 0, 137*4882a593Smuzhiyun PLL_FBDIV_MASK = 0xfff, 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun /* PLLCON1 */ 140*4882a593Smuzhiyun PLL_PDSEL_SHIFT = 15, 141*4882a593Smuzhiyun PLL_PD1_SHIFT = 14, 142*4882a593Smuzhiyun PLL_PD_SHIFT = 13, 143*4882a593Smuzhiyun PLL_PD_MASK = 1 << PLL_PD_SHIFT, 144*4882a593Smuzhiyun PLL_DSMPD_SHIFT = 12, 145*4882a593Smuzhiyun PLL_DSMPD_MASK = 1 << PLL_DSMPD_SHIFT, 146*4882a593Smuzhiyun PLL_LOCK_STATUS_SHIFT = 10, 147*4882a593Smuzhiyun PLL_LOCK_STATUS_MASK = 1 << PLL_LOCK_STATUS_SHIFT, 148*4882a593Smuzhiyun PLL_POSTDIV2_SHIFT = 6, 149*4882a593Smuzhiyun PLL_POSTDIV2_MASK = 7 << PLL_POSTDIV2_SHIFT, 150*4882a593Smuzhiyun PLL_REFDIV_SHIFT = 0, 151*4882a593Smuzhiyun PLL_REFDIV_MASK = 0x3f, 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun /* PLLCON2 */ 154*4882a593Smuzhiyun PLL_FOUT4PHASEPD_SHIFT = 27, 155*4882a593Smuzhiyun PLL_FOUTVCOPD_SHIFT = 26, 156*4882a593Smuzhiyun PLL_FOUTPOSTDIVPD_SHIFT = 25, 157*4882a593Smuzhiyun PLL_DACPD_SHIFT = 24, 158*4882a593Smuzhiyun PLL_FRAC_DIV = 0xffffff, 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun /* CRU_MODE */ 161*4882a593Smuzhiyun PLLMUX_FROM_XIN24M = 0, 162*4882a593Smuzhiyun PLLMUX_FROM_PLL, 163*4882a593Smuzhiyun PLLMUX_FROM_RTC32K, 164*4882a593Smuzhiyun USBPHY480M_MODE_SHIFT = 8, 165*4882a593Smuzhiyun USBPHY480M_MODE_MASK = 3 << USBPHY480M_MODE_SHIFT, 166*4882a593Smuzhiyun NPLL_MODE_SHIFT = 6, 167*4882a593Smuzhiyun NPLL_MODE_MASK = 3 << NPLL_MODE_SHIFT, 168*4882a593Smuzhiyun DPLL_MODE_SHIFT = 4, 169*4882a593Smuzhiyun DPLL_MODE_MASK = 3 << DPLL_MODE_SHIFT, 170*4882a593Smuzhiyun CPLL_MODE_SHIFT = 2, 171*4882a593Smuzhiyun CPLL_MODE_MASK = 3 << CPLL_MODE_SHIFT, 172*4882a593Smuzhiyun APLL_MODE_SHIFT = 0, 173*4882a593Smuzhiyun APLL_MODE_MASK = 3 << APLL_MODE_SHIFT, 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun /* CRU_CLK_SEL0_CON */ 176*4882a593Smuzhiyun CORE_ACLK_DIV_SHIFT = 12, 177*4882a593Smuzhiyun CORE_ACLK_DIV_MASK = 0x07 << CORE_ACLK_DIV_SHIFT, 178*4882a593Smuzhiyun CORE_DBG_DIV_SHIFT = 8, 179*4882a593Smuzhiyun CORE_DBG_DIV_MASK = 0x03 << CORE_DBG_DIV_SHIFT, 180*4882a593Smuzhiyun CORE_CLK_PLL_SEL_SHIFT = 7, 181*4882a593Smuzhiyun CORE_CLK_PLL_SEL_MASK = 1 << CORE_CLK_PLL_SEL_SHIFT, 182*4882a593Smuzhiyun CORE_CLK_PLL_SEL_APLL = 0, 183*4882a593Smuzhiyun CORE_CLK_PLL_SEL_GPLL, 184*4882a593Smuzhiyun CORE_DIV_CON_SHIFT = 0, 185*4882a593Smuzhiyun CORE_DIV_CON_MASK = 0x0f << CORE_DIV_CON_SHIFT, 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun /* CRU_CLK_SEL3_CON */ 188*4882a593Smuzhiyun ACLK_VO_PLL_SHIFT = 6, 189*4882a593Smuzhiyun ACLK_VO_PLL_MASK = 0x3 << ACLK_VO_PLL_SHIFT, 190*4882a593Smuzhiyun ACLK_VO_SEL_GPLL = 0, 191*4882a593Smuzhiyun ACLK_VO_SEL_CPLL, 192*4882a593Smuzhiyun ACLK_VO_SEL_NPLL, 193*4882a593Smuzhiyun ACLK_VO_DIV_SHIFT = 0, 194*4882a593Smuzhiyun ACLK_VO_DIV_MASK = 0x1f << ACLK_VO_DIV_SHIFT, 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun /* CRU_CLK_SEL5_CON */ 197*4882a593Smuzhiyun DCLK_VOPB_SEL_SHIFT = 14, 198*4882a593Smuzhiyun DCLK_VOPB_SEL_MASK = 0x3 << DCLK_VOPB_SEL_SHIFT, 199*4882a593Smuzhiyun DCLK_VOPB_SEL_DIVOUT = 0, 200*4882a593Smuzhiyun DCLK_VOPB_SEL_FRACOUT, 201*4882a593Smuzhiyun DCLK_VOPB_SEL_24M, 202*4882a593Smuzhiyun DCLK_VOPB_PLL_SEL_SHIFT = 11, 203*4882a593Smuzhiyun DCLK_VOPB_PLL_SEL_MASK = 0x1 << DCLK_VOPB_PLL_SEL_SHIFT, 204*4882a593Smuzhiyun DCLK_VOPB_PLL_SEL_CPLL = 0, 205*4882a593Smuzhiyun DCLK_VOPB_PLL_SEL_NPLL, 206*4882a593Smuzhiyun DCLK_VOPB_DIV_SHIFT = 0, 207*4882a593Smuzhiyun DCLK_VOPB_DIV_MASK = 0xff, 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun /* CRU_CLK_SEL8_CON */ 210*4882a593Smuzhiyun DCLK_VOPL_SEL_SHIFT = 14, 211*4882a593Smuzhiyun DCLK_VOPL_SEL_MASK = 0x3 << DCLK_VOPL_SEL_SHIFT, 212*4882a593Smuzhiyun DCLK_VOPL_SEL_DIVOUT = 0, 213*4882a593Smuzhiyun DCLK_VOPL_SEL_FRACOUT, 214*4882a593Smuzhiyun DCLK_VOPL_SEL_24M, 215*4882a593Smuzhiyun DCLK_VOPL_PLL_SEL_SHIFT = 11, 216*4882a593Smuzhiyun DCLK_VOPL_PLL_SEL_MASK = 0x1 << DCLK_VOPL_PLL_SEL_SHIFT, 217*4882a593Smuzhiyun DCLK_VOPL_PLL_SEL_NPLL = 0, 218*4882a593Smuzhiyun DCLK_VOPL_PLL_SEL_CPLL, 219*4882a593Smuzhiyun DCLK_VOPL_DIV_SHIFT = 0, 220*4882a593Smuzhiyun DCLK_VOPL_DIV_MASK = 0xff, 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun /* CRU_CLK_SEL14_CON */ 223*4882a593Smuzhiyun PERI_PLL_SEL_SHIFT =15, 224*4882a593Smuzhiyun PERI_PLL_SEL_MASK = 3 << PERI_PLL_SEL_SHIFT, 225*4882a593Smuzhiyun PERI_PLL_GPLL = 0, 226*4882a593Smuzhiyun PERI_PLL_CPLL, 227*4882a593Smuzhiyun PERI_HCLK_DIV_SHIFT = 8, 228*4882a593Smuzhiyun PERI_HCLK_DIV_MASK = 0x1f << PERI_HCLK_DIV_SHIFT, 229*4882a593Smuzhiyun PERI_ACLK_DIV_SHIFT = 0, 230*4882a593Smuzhiyun PERI_ACLK_DIV_MASK = 0x1f << PERI_ACLK_DIV_SHIFT, 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun /* CRU_CLKSEL15_CON */ 233*4882a593Smuzhiyun NANDC_CLK_SEL_SHIFT = 15, 234*4882a593Smuzhiyun NANDC_CLK_SEL_MASK = 0x1 << NANDC_CLK_SEL_SHIFT, 235*4882a593Smuzhiyun NANDC_CLK_SEL_NANDC = 0, 236*4882a593Smuzhiyun NANDC_CLK_SEL_NANDC_DIV50, 237*4882a593Smuzhiyun NANDC_DIV50_SHIFT = 8, 238*4882a593Smuzhiyun NANDC_DIV50_MASK = 0x1f << NANDC_DIV50_SHIFT, 239*4882a593Smuzhiyun NANDC_PLL_SHIFT = 6, 240*4882a593Smuzhiyun NANDC_PLL_MASK = 0x3 << NANDC_PLL_SHIFT, 241*4882a593Smuzhiyun NANDC_SEL_GPLL = 0, 242*4882a593Smuzhiyun NANDC_SEL_CPLL, 243*4882a593Smuzhiyun NANDC_SEL_NPLL, 244*4882a593Smuzhiyun NANDC_DIV_SHIFT = 0, 245*4882a593Smuzhiyun NANDC_DIV_MASK = 0x1f << NANDC_DIV_SHIFT, 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun /* CRU_CLKSEL20_CON */ 248*4882a593Smuzhiyun EMMC_PLL_SHIFT = 14, 249*4882a593Smuzhiyun EMMC_PLL_MASK = 3 << EMMC_PLL_SHIFT, 250*4882a593Smuzhiyun EMMC_SEL_GPLL = 0, 251*4882a593Smuzhiyun EMMC_SEL_CPLL, 252*4882a593Smuzhiyun EMMC_SEL_NPLL, 253*4882a593Smuzhiyun EMMC_SEL_24M, 254*4882a593Smuzhiyun EMMC_DIV_SHIFT = 0, 255*4882a593Smuzhiyun EMMC_DIV_MASK = 0xff << EMMC_DIV_SHIFT, 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun /* CRU_CLKSEL21_CON */ 258*4882a593Smuzhiyun EMMC_CLK_SEL_SHIFT = 15, 259*4882a593Smuzhiyun EMMC_CLK_SEL_MASK = 1 << EMMC_CLK_SEL_SHIFT, 260*4882a593Smuzhiyun EMMC_CLK_SEL_EMMC = 0, 261*4882a593Smuzhiyun EMMC_CLK_SEL_EMMC_DIV50, 262*4882a593Smuzhiyun EMMC_DIV50_SHIFT = 0, 263*4882a593Smuzhiyun EMMC_DIV50_MASK = 0xff << EMMC_DIV_SHIFT, 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun /* CRU_CLKSEL22_CON */ 266*4882a593Smuzhiyun GMAC_PLL_SEL_SHIFT = 14, 267*4882a593Smuzhiyun GMAC_PLL_SEL_MASK = 3 << GMAC_PLL_SEL_SHIFT, 268*4882a593Smuzhiyun GMAC_PLL_SEL_GPLL = 0, 269*4882a593Smuzhiyun GMAC_PLL_SEL_CPLL, 270*4882a593Smuzhiyun GMAC_PLL_SEL_NPLL, 271*4882a593Smuzhiyun CLK_GMAC_DIV_SHIFT = 8, 272*4882a593Smuzhiyun CLK_GMAC_DIV_MASK = 0x1f << CLK_GMAC_DIV_SHIFT, 273*4882a593Smuzhiyun SFC_PLL_SEL_SHIFT = 7, 274*4882a593Smuzhiyun SFC_PLL_SEL_MASK = 1 << SFC_PLL_SEL_SHIFT, 275*4882a593Smuzhiyun SFC_DIV_CON_SHIFT = 0, 276*4882a593Smuzhiyun SFC_DIV_CON_MASK = 0x7f, 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun /* CRU_CLK_SEL23_CON */ 279*4882a593Smuzhiyun BUS_PLL_SEL_SHIFT =15, 280*4882a593Smuzhiyun BUS_PLL_SEL_MASK = 1 << BUS_PLL_SEL_SHIFT, 281*4882a593Smuzhiyun BUS_PLL_SEL_GPLL = 0, 282*4882a593Smuzhiyun BUS_PLL_SEL_CPLL, 283*4882a593Smuzhiyun BUS_ACLK_DIV_SHIFT = 8, 284*4882a593Smuzhiyun BUS_ACLK_DIV_MASK = 0x1f << BUS_ACLK_DIV_SHIFT, 285*4882a593Smuzhiyun RMII_CLK_SEL_SHIFT = 7, 286*4882a593Smuzhiyun RMII_CLK_SEL_MASK = 1 << RMII_CLK_SEL_SHIFT, 287*4882a593Smuzhiyun RMII_CLK_SEL_10M = 0, 288*4882a593Smuzhiyun RMII_CLK_SEL_100M, 289*4882a593Smuzhiyun RMII_EXTCLK_SEL_SHIFT = 6, 290*4882a593Smuzhiyun RMII_EXTCLK_SEL_MASK = 1 << RMII_EXTCLK_SEL_SHIFT, 291*4882a593Smuzhiyun RMII_EXTCLK_SEL_INT = 0, 292*4882a593Smuzhiyun RMII_EXTCLK_SEL_EXT, 293*4882a593Smuzhiyun PCLK_GMAC_DIV_SHIFT = 0, 294*4882a593Smuzhiyun PCLK_GMAC_DIV_MASK = 0x0f << PCLK_GMAC_DIV_SHIFT, 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun /* CRU_CLK_SEL24_CON */ 297*4882a593Smuzhiyun BUS_PCLK_DIV_SHIFT = 8, 298*4882a593Smuzhiyun BUS_PCLK_DIV_MASK = 3 << BUS_PCLK_DIV_SHIFT, 299*4882a593Smuzhiyun BUS_HCLK_DIV_SHIFT = 0, 300*4882a593Smuzhiyun BUS_HCLK_DIV_MASK = 0x1f << BUS_HCLK_DIV_SHIFT, 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun /* CRU_CLK_SEL25_CON */ 303*4882a593Smuzhiyun CRYPTO_APK_SEL_SHIFT = 14, 304*4882a593Smuzhiyun CRYPTO_APK_PLL_SEL_MASK = 3 << CRYPTO_APK_SEL_SHIFT, 305*4882a593Smuzhiyun CRYPTO_PLL_SEL_GPLL = 0, 306*4882a593Smuzhiyun CRYPTO_PLL_SEL_CPLL, 307*4882a593Smuzhiyun CRYPTO_PLL_SEL_NPLL = 0, 308*4882a593Smuzhiyun CRYPTO_APK_DIV_SHIFT = 8, 309*4882a593Smuzhiyun CRYPTO_APK_DIV_MASK = 0x1f << CRYPTO_APK_DIV_SHIFT, 310*4882a593Smuzhiyun CRYPTO_PLL_SEL_SHIFT = 6, 311*4882a593Smuzhiyun CRYPTO_PLL_SEL_MASK = 3 << CRYPTO_PLL_SEL_SHIFT, 312*4882a593Smuzhiyun CRYPTO_DIV_SHIFT = 0, 313*4882a593Smuzhiyun CRYPTO_DIV_MASK = 0x1f << CRYPTO_DIV_SHIFT, 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun /* CRU_CLK_SEL30_CON */ 316*4882a593Smuzhiyun CLK_I2S1_DIV_CON_MASK = 0x7f, 317*4882a593Smuzhiyun CLK_I2S1_PLL_SEL_MASK = 0X1 << 8, 318*4882a593Smuzhiyun CLK_I2S1_PLL_SEL_GPLL = 0X0 << 8, 319*4882a593Smuzhiyun CLK_I2S1_PLL_SEL_NPLL = 0X1 << 8, 320*4882a593Smuzhiyun CLK_I2S1_SEL_MASK = 0x3 << 10, 321*4882a593Smuzhiyun CLK_I2S1_SEL_I2S1 = 0x0 << 10, 322*4882a593Smuzhiyun CLK_I2S1_SEL_FRAC = 0x1 << 10, 323*4882a593Smuzhiyun CLK_I2S1_SEL_MCLK_IN = 0x2 << 10, 324*4882a593Smuzhiyun CLK_I2S1_SEL_OSC = 0x3 << 10, 325*4882a593Smuzhiyun CLK_I2S1_OUT_SEL_MASK = 0x1 << 15, 326*4882a593Smuzhiyun CLK_I2S1_OUT_SEL_I2S1 = 0x0 << 15, 327*4882a593Smuzhiyun CLK_I2S1_OUT_SEL_OSC = 0x1 << 15, 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun /* CRU_CLK_SEL31_CON */ 330*4882a593Smuzhiyun CLK_I2S1_FRAC_NUMERATOR_SHIFT = 16, 331*4882a593Smuzhiyun CLK_I2S1_FRAC_NUMERATOR_MASK = 0xffff << 16, 332*4882a593Smuzhiyun CLK_I2S1_FRAC_DENOMINATOR_SHIFT = 0, 333*4882a593Smuzhiyun CLK_I2S1_FRAC_DENOMINATOR_MASK = 0xffff, 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun /* CRU_CLK_SEL34_CON */ 336*4882a593Smuzhiyun UART1_PLL_SEL_SHIFT = 14, 337*4882a593Smuzhiyun UART1_PLL_SEL_MASK = 3 << UART1_PLL_SEL_SHIFT, 338*4882a593Smuzhiyun UART1_PLL_SEL_GPLL = 0, 339*4882a593Smuzhiyun UART1_PLL_SEL_24M, 340*4882a593Smuzhiyun UART1_PLL_SEL_480M, 341*4882a593Smuzhiyun UART1_PLL_SEL_NPLL, 342*4882a593Smuzhiyun UART1_DIV_CON_SHIFT = 0, 343*4882a593Smuzhiyun UART1_DIV_CON_MASK = 0x1f << UART1_DIV_CON_SHIFT, 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun /* CRU_CLK_SEL35_CON */ 346*4882a593Smuzhiyun UART1_CLK_SEL_SHIFT = 14, 347*4882a593Smuzhiyun UART1_CLK_SEL_MASK = 3 << UART1_PLL_SEL_SHIFT, 348*4882a593Smuzhiyun UART1_CLK_SEL_UART1 = 0, 349*4882a593Smuzhiyun UART1_CLK_SEL_UART1_NP5, 350*4882a593Smuzhiyun UART1_CLK_SEL_UART1_FRAC, 351*4882a593Smuzhiyun UART1_DIVNP5_SHIFT = 0, 352*4882a593Smuzhiyun UART1_DIVNP5_MASK = 0x1f << UART1_DIVNP5_SHIFT, 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun /* CRU_CLK_SEL37_CON */ 355*4882a593Smuzhiyun UART2_PLL_SEL_SHIFT = 14, 356*4882a593Smuzhiyun UART2_PLL_SEL_MASK = 3 << UART2_PLL_SEL_SHIFT, 357*4882a593Smuzhiyun UART2_PLL_SEL_GPLL = 0, 358*4882a593Smuzhiyun UART2_PLL_SEL_24M, 359*4882a593Smuzhiyun UART2_PLL_SEL_480M, 360*4882a593Smuzhiyun UART2_PLL_SEL_NPLL, 361*4882a593Smuzhiyun UART2_DIV_CON_SHIFT = 0, 362*4882a593Smuzhiyun UART2_DIV_CON_MASK = 0x1f << UART2_DIV_CON_SHIFT, 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun /* CRU_CLK_SEL38_CON */ 365*4882a593Smuzhiyun UART2_CLK_SEL_SHIFT = 14, 366*4882a593Smuzhiyun UART2_CLK_SEL_MASK = 3 << UART2_PLL_SEL_SHIFT, 367*4882a593Smuzhiyun UART2_CLK_SEL_UART2 = 0, 368*4882a593Smuzhiyun UART2_CLK_SEL_UART2_NP5, 369*4882a593Smuzhiyun UART2_CLK_SEL_UART2_FRAC, 370*4882a593Smuzhiyun UART2_DIVNP5_SHIFT = 0, 371*4882a593Smuzhiyun UART2_DIVNP5_MASK = 0x1f << UART2_DIVNP5_SHIFT, 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun /* CRU_CLK_SEL46_CON */ 374*4882a593Smuzhiyun UART5_PLL_SEL_SHIFT = 14, 375*4882a593Smuzhiyun UART5_PLL_SEL_MASK = 3 << UART5_PLL_SEL_SHIFT, 376*4882a593Smuzhiyun UART5_PLL_SEL_GPLL = 0, 377*4882a593Smuzhiyun UART5_PLL_SEL_24M, 378*4882a593Smuzhiyun UART5_PLL_SEL_480M, 379*4882a593Smuzhiyun UART5_PLL_SEL_NPLL, 380*4882a593Smuzhiyun UART5_DIV_CON_SHIFT = 0, 381*4882a593Smuzhiyun UART5_DIV_CON_MASK = 0x1f << UART5_DIV_CON_SHIFT, 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun /* CRU_CLK_SEL47_CON */ 384*4882a593Smuzhiyun UART5_CLK_SEL_SHIFT = 14, 385*4882a593Smuzhiyun UART5_CLK_SEL_MASK = 3 << UART5_PLL_SEL_SHIFT, 386*4882a593Smuzhiyun UART5_CLK_SEL_UART5 = 0, 387*4882a593Smuzhiyun UART5_CLK_SEL_UART5_NP5, 388*4882a593Smuzhiyun UART5_CLK_SEL_UART5_FRAC, 389*4882a593Smuzhiyun UART5_DIVNP5_SHIFT = 0, 390*4882a593Smuzhiyun UART5_DIVNP5_MASK = 0x1f << UART5_DIVNP5_SHIFT, 391*4882a593Smuzhiyun 392*4882a593Smuzhiyun /* CRU_CLK_SEL49_CON */ 393*4882a593Smuzhiyun CLK_I2C_PLL_SEL_GPLL = 0, 394*4882a593Smuzhiyun CLK_I2C_PLL_SEL_24M, 395*4882a593Smuzhiyun CLK_I2C_DIV_CON_MASK = 0x7f, 396*4882a593Smuzhiyun CLK_I2C_PLL_SEL_MASK = 1, 397*4882a593Smuzhiyun CLK_I2C1_PLL_SEL_SHIFT = 15, 398*4882a593Smuzhiyun CLK_I2C1_DIV_CON_SHIFT = 8, 399*4882a593Smuzhiyun CLK_I2C0_PLL_SEL_SHIFT = 7, 400*4882a593Smuzhiyun CLK_I2C0_DIV_CON_SHIFT = 0, 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun /* CRU_CLK_SEL50_CON */ 403*4882a593Smuzhiyun CLK_I2C3_PLL_SEL_SHIFT = 15, 404*4882a593Smuzhiyun CLK_I2C3_DIV_CON_SHIFT = 8, 405*4882a593Smuzhiyun CLK_I2C2_PLL_SEL_SHIFT = 7, 406*4882a593Smuzhiyun CLK_I2C2_DIV_CON_SHIFT = 0, 407*4882a593Smuzhiyun 408*4882a593Smuzhiyun /* CRU_CLK_SEL52_CON */ 409*4882a593Smuzhiyun CLK_PWM_PLL_SEL_GPLL = 0, 410*4882a593Smuzhiyun CLK_PWM_PLL_SEL_24M, 411*4882a593Smuzhiyun CLK_PWM_DIV_CON_MASK = 0x7f, 412*4882a593Smuzhiyun CLK_PWM_PLL_SEL_MASK = 1, 413*4882a593Smuzhiyun CLK_PWM1_PLL_SEL_SHIFT = 15, 414*4882a593Smuzhiyun CLK_PWM1_DIV_CON_SHIFT = 8, 415*4882a593Smuzhiyun CLK_PWM0_PLL_SEL_SHIFT = 7, 416*4882a593Smuzhiyun CLK_PWM0_DIV_CON_SHIFT = 0, 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun /* CRU_CLK_SEL53_CON */ 419*4882a593Smuzhiyun CLK_SPI_PLL_SEL_GPLL = 0, 420*4882a593Smuzhiyun CLK_SPI_PLL_SEL_24M, 421*4882a593Smuzhiyun CLK_SPI_DIV_CON_MASK = 0x7f, 422*4882a593Smuzhiyun CLK_SPI_PLL_SEL_MASK = 1, 423*4882a593Smuzhiyun CLK_SPI1_PLL_SEL_SHIFT = 15, 424*4882a593Smuzhiyun CLK_SPI1_DIV_CON_SHIFT = 8, 425*4882a593Smuzhiyun CLK_SPI0_PLL_SEL_SHIFT = 7, 426*4882a593Smuzhiyun CLK_SPI0_DIV_CON_SHIFT = 0, 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun /* CRU_CLK_SEL55_CON */ 429*4882a593Smuzhiyun CLK_SARADC_DIV_CON_SHIFT = 0, 430*4882a593Smuzhiyun CLK_SARADC_DIV_CON_MASK = 0x7ff, 431*4882a593Smuzhiyun 432*4882a593Smuzhiyun /* CRU_CLK_SEL56_CON */ 433*4882a593Smuzhiyun CLK_OTP_USR_DIV_CON_SHIFT = 4, 434*4882a593Smuzhiyun CLK_OTP_USR_DIV_CON_MASK = 0x3 << CLK_OTP_USR_DIV_CON_SHIFT, 435*4882a593Smuzhiyun CLK_OTP_DIV_CON_SHIFT = 0, 436*4882a593Smuzhiyun CLK_OTP_DIV_CON_MASK = 0x7, 437*4882a593Smuzhiyun CLK_OTP_S_SEL_SHIFT = 8, 438*4882a593Smuzhiyun CLK_OTP_S_SEL_MASK = 1 << CLK_OTP_S_SEL_SHIFT, 439*4882a593Smuzhiyun CLK_OTP_S_SEL_XIN24M = 0, 440*4882a593Smuzhiyun CLK_OTP_S_SEL_GPLL, 441*4882a593Smuzhiyun CLK_OTP_S_DIV_CON_SHIFT = 0, 442*4882a593Smuzhiyun CLK_OTP_S_DIV_CON_MASK = 0x1FF, 443*4882a593Smuzhiyun 444*4882a593Smuzhiyun /* CRU_CLK_GATE10_CON */ 445*4882a593Smuzhiyun CLK_I2S1_OUT_MCLK_PAD_MASK = 0x1 << 9, 446*4882a593Smuzhiyun CLK_I2S1_OUT_MCLK_PAD_ENABLE = 0x1 << 9, 447*4882a593Smuzhiyun CLK_I2S1_OUT_MCLK_PAD_DISABLE = 0x0 << 9, 448*4882a593Smuzhiyun 449*4882a593Smuzhiyun /* CRU_PMU_MODE */ 450*4882a593Smuzhiyun GPLL_MODE_SHIFT = 0, 451*4882a593Smuzhiyun GPLL_MODE_MASK = 3 << GPLL_MODE_SHIFT, 452*4882a593Smuzhiyun 453*4882a593Smuzhiyun /* CRU_PMU_CLK_SEL0_CON */ 454*4882a593Smuzhiyun CLK_PMU_PCLK_DIV_SHIFT = 0, 455*4882a593Smuzhiyun CLK_PMU_PCLK_DIV_MASK = 0x1f << CLK_PMU_PCLK_DIV_SHIFT, 456*4882a593Smuzhiyun }; 457*4882a593Smuzhiyun #endif 458