1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2010-2014 3*4882a593Smuzhiyun * NVIDIA Corporation <www.nvidia.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef _TEGRA_CLK_RST_H_ 9*4882a593Smuzhiyun #define _TEGRA_CLK_RST_H_ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* PLL registers - there are several PLLs in the clock controller */ 12*4882a593Smuzhiyun struct clk_pll { 13*4882a593Smuzhiyun uint pll_base; /* the control register */ 14*4882a593Smuzhiyun /* pll_out[0] is output A control, pll_out[1] is output B control */ 15*4882a593Smuzhiyun uint pll_out[2]; 16*4882a593Smuzhiyun uint pll_misc; /* other misc things */ 17*4882a593Smuzhiyun }; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* PLL registers - there are several PLLs in the clock controller */ 20*4882a593Smuzhiyun struct clk_pll_simple { 21*4882a593Smuzhiyun uint pll_base; /* the control register */ 22*4882a593Smuzhiyun uint pll_misc; /* other misc things */ 23*4882a593Smuzhiyun }; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun struct clk_pllm { 26*4882a593Smuzhiyun uint pllm_base; /* the control register */ 27*4882a593Smuzhiyun uint pllm_out; /* output control */ 28*4882a593Smuzhiyun uint pllm_misc1; /* misc1 */ 29*4882a593Smuzhiyun uint pllm_misc2; /* misc2 */ 30*4882a593Smuzhiyun }; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* RST_DEV_(L,H,U,V,W)_(SET,CLR) and CLK_ENB_(L,H,U,V,W)_(SET,CLR) */ 33*4882a593Smuzhiyun struct clk_set_clr { 34*4882a593Smuzhiyun uint set; 35*4882a593Smuzhiyun uint clr; 36*4882a593Smuzhiyun }; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* 39*4882a593Smuzhiyun * Most PLLs use the clk_pll structure, but some have a simpler two-member 40*4882a593Smuzhiyun * structure for which we use clk_pll_simple. The reason for this non- 41*4882a593Smuzhiyun * othogonal setup is not stated. 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun enum { 44*4882a593Smuzhiyun TEGRA_CLK_PLLS = 6, /* Number of normal PLLs */ 45*4882a593Smuzhiyun TEGRA_CLK_SIMPLE_PLLS = 3, /* Number of simple PLLs */ 46*4882a593Smuzhiyun TEGRA_CLK_REGS = 3, /* Number of clock enable regs L/H/U */ 47*4882a593Smuzhiyun TEGRA_CLK_SOURCES = 64, /* Number of ppl clock sources L/H/U */ 48*4882a593Smuzhiyun TEGRA_CLK_REGS_VW = 2, /* Number of clock enable regs V/W */ 49*4882a593Smuzhiyun TEGRA_CLK_SOURCES_VW = 32, /* Number of ppl clock sources V/W */ 50*4882a593Smuzhiyun TEGRA_CLK_SOURCES_X = 32, /* Number of ppl clock sources X */ 51*4882a593Smuzhiyun TEGRA_CLK_SOURCES_Y = 18, /* Number of ppl clock sources Y */ 52*4882a593Smuzhiyun }; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* Clock/Reset Controller (CLK_RST_CONTROLLER_) regs */ 55*4882a593Smuzhiyun struct clk_rst_ctlr { 56*4882a593Smuzhiyun uint crc_rst_src; /* _RST_SOURCE_0,0x00 */ 57*4882a593Smuzhiyun uint crc_rst_dev[TEGRA_CLK_REGS]; /* _RST_DEVICES_L/H/U_0 */ 58*4882a593Smuzhiyun uint crc_clk_out_enb[TEGRA_CLK_REGS]; /* _CLK_OUT_ENB_L/H/U_0 */ 59*4882a593Smuzhiyun uint crc_reserved0; /* reserved_0, 0x1C */ 60*4882a593Smuzhiyun uint crc_cclk_brst_pol; /* _CCLK_BURST_POLICY_0, 0x20 */ 61*4882a593Smuzhiyun uint crc_super_cclk_div; /* _SUPER_CCLK_DIVIDER_0,0x24 */ 62*4882a593Smuzhiyun uint crc_sclk_brst_pol; /* _SCLK_BURST_POLICY_0, 0x28 */ 63*4882a593Smuzhiyun uint crc_super_sclk_div; /* _SUPER_SCLK_DIVIDER_0,0x2C */ 64*4882a593Smuzhiyun uint crc_clk_sys_rate; /* _CLK_SYSTEM_RATE_0, 0x30 */ 65*4882a593Smuzhiyun uint crc_prog_dly_clk; /* _PROG_DLY_CLK_0, 0x34 */ 66*4882a593Smuzhiyun uint crc_aud_sync_clk_rate; /* _AUDIO_SYNC_CLK_RATE_0,0x38 */ 67*4882a593Smuzhiyun uint crc_reserved1; /* reserved_1, 0x3C */ 68*4882a593Smuzhiyun uint crc_cop_clk_skip_plcy; /* _COP_CLK_SKIP_POLICY_0,0x40 */ 69*4882a593Smuzhiyun uint crc_clk_mask_arm; /* _CLK_MASK_ARM_0, 0x44 */ 70*4882a593Smuzhiyun uint crc_misc_clk_enb; /* _MISC_CLK_ENB_0, 0x48 */ 71*4882a593Smuzhiyun uint crc_clk_cpu_cmplx; /* _CLK_CPU_CMPLX_0, 0x4C */ 72*4882a593Smuzhiyun uint crc_osc_ctrl; /* _OSC_CTRL_0, 0x50 */ 73*4882a593Smuzhiyun uint crc_pll_lfsr; /* _PLL_LFSR_0, 0x54 */ 74*4882a593Smuzhiyun uint crc_osc_freq_det; /* _OSC_FREQ_DET_0, 0x58 */ 75*4882a593Smuzhiyun uint crc_osc_freq_det_stat; /* _OSC_FREQ_DET_STATUS_0,0x5C */ 76*4882a593Smuzhiyun uint crc_reserved2[8]; /* reserved_2[8], 0x60-7C */ 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun struct clk_pll crc_pll[TEGRA_CLK_PLLS]; /* PLLs from 0x80 to 0xdc */ 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun /* PLLs from 0xe0 to 0xf4 */ 81*4882a593Smuzhiyun struct clk_pll_simple crc_pll_simple[TEGRA_CLK_SIMPLE_PLLS]; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun uint crc_reserved10; /* _reserved_10, 0xF8 */ 84*4882a593Smuzhiyun uint crc_reserved11; /* _reserved_11, 0xFC */ 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun uint crc_clk_src[TEGRA_CLK_SOURCES]; /*_I2S1_0... 0x100-1fc */ 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun uint crc_reserved20[32]; /* _reserved_20, 0x200-27c */ 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun uint crc_clk_out_enb_x; /* _CLK_OUT_ENB_X_0, 0x280 */ 91*4882a593Smuzhiyun uint crc_clk_enb_x_set; /* _CLK_ENB_X_SET_0, 0x284 */ 92*4882a593Smuzhiyun uint crc_clk_enb_x_clr; /* _CLK_ENB_X_CLR_0, 0x288 */ 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun uint crc_rst_devices_x; /* _RST_DEVICES_X_0, 0x28c */ 95*4882a593Smuzhiyun uint crc_rst_dev_x_set; /* _RST_DEV_X_SET_0, 0x290 */ 96*4882a593Smuzhiyun uint crc_rst_dev_x_clr; /* _RST_DEV_X_CLR_0, 0x294 */ 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun uint crc_clk_out_enb_y; /* _CLK_OUT_ENB_Y_0, 0x298 */ 99*4882a593Smuzhiyun uint crc_clk_enb_y_set; /* _CLK_ENB_Y_SET_0, 0x29c */ 100*4882a593Smuzhiyun uint crc_clk_enb_y_clr; /* _CLK_ENB_Y_CLR_0, 0x2a0 */ 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun uint crc_rst_devices_y; /* _RST_DEVICES_Y_0, 0x2a4 */ 103*4882a593Smuzhiyun uint crc_rst_dev_y_set; /* _RST_DEV_Y_SET_0, 0x2a8 */ 104*4882a593Smuzhiyun uint crc_rst_dev_y_clr; /* _RST_DEV_Y_CLR_0, 0x2ac */ 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun uint crc_reserved21[17]; /* _reserved_21, 0x2b0-2f0 */ 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun uint crc_dfll_base; /* _DFLL_BASE_0, 0x2f4 */ 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun uint crc_reserved22[2]; /* _reserved_22, 0x2f8-2fc */ 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun /* _RST_DEV_L/H/U_SET_0 0x300 ~ 0x314 */ 113*4882a593Smuzhiyun struct clk_set_clr crc_rst_dev_ex[TEGRA_CLK_REGS]; 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun uint crc_reserved30[2]; /* _reserved_30, 0x318, 0x31c */ 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun /* _CLK_ENB_L/H/U_CLR_0 0x320 ~ 0x334 */ 118*4882a593Smuzhiyun struct clk_set_clr crc_clk_enb_ex[TEGRA_CLK_REGS]; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun uint crc_reserved31[2]; /* _reserved_31, 0x338, 0x33c */ 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun uint crc_cpu_cmplx_set; /* _RST_CPU_CMPLX_SET_0, 0x340 */ 123*4882a593Smuzhiyun uint crc_cpu_cmplx_clr; /* _RST_CPU_CMPLX_CLR_0, 0x344 */ 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* Additional (T30) registers */ 126*4882a593Smuzhiyun uint crc_clk_cpu_cmplx_set; /* _CLK_CPU_CMPLX_SET_0, 0x348 */ 127*4882a593Smuzhiyun uint crc_clk_cpu_cmplx_clr; /* _CLK_CPU_CMPLX_SET_0, 0x34c */ 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun uint crc_reserved32[2]; /* _reserved_32, 0x350,0x354 */ 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun uint crc_rst_dev_vw[TEGRA_CLK_REGS_VW]; /* _RST_DEVICES_V/W_0 */ 132*4882a593Smuzhiyun uint crc_clk_out_enb_vw[TEGRA_CLK_REGS_VW]; /* _CLK_OUT_ENB_V/W_0 */ 133*4882a593Smuzhiyun uint crc_cclkg_brst_pol; /* _CCLKG_BURST_POLICY_0, 0x368 */ 134*4882a593Smuzhiyun uint crc_super_cclkg_div; /* _SUPER_CCLKG_DIVIDER_0, 0x36C */ 135*4882a593Smuzhiyun uint crc_cclklp_brst_pol; /* _CCLKLP_BURST_POLICY_0, 0x370 */ 136*4882a593Smuzhiyun uint crc_super_cclkp_div; /* _SUPER_CCLKLP_DIVIDER_0, 0x374 */ 137*4882a593Smuzhiyun uint crc_clk_cpug_cmplx; /* _CLK_CPUG_CMPLX_0, 0x378 */ 138*4882a593Smuzhiyun uint crc_clk_cpulp_cmplx; /* _CLK_CPULP_CMPLX_0, 0x37C */ 139*4882a593Smuzhiyun uint crc_cpu_softrst_ctrl; /* _CPU_SOFTRST_CTRL_0, 0x380 */ 140*4882a593Smuzhiyun uint crc_cpu_softrst_ctrl1; /* _CPU_SOFTRST_CTRL1_0, 0x384 */ 141*4882a593Smuzhiyun uint crc_cpu_softrst_ctrl2; /* _CPU_SOFTRST_CTRL2_0, 0x388 */ 142*4882a593Smuzhiyun uint crc_reserved33[9]; /* _reserved_33, 0x38c-3ac */ 143*4882a593Smuzhiyun uint crc_clk_src_vw[TEGRA_CLK_SOURCES_VW]; /* 0x3B0-0x42C */ 144*4882a593Smuzhiyun /* _RST_DEV_V/W_SET_0 0x430 ~ 0x43c */ 145*4882a593Smuzhiyun struct clk_set_clr crc_rst_dev_ex_vw[TEGRA_CLK_REGS_VW]; 146*4882a593Smuzhiyun /* _CLK_ENB_V/W_CLR_0 0x440 ~ 0x44c */ 147*4882a593Smuzhiyun struct clk_set_clr crc_clk_enb_ex_vw[TEGRA_CLK_REGS_VW]; 148*4882a593Smuzhiyun /* Additional (T114+) registers */ 149*4882a593Smuzhiyun uint crc_rst_cpug_cmplx_set; /* _RST_CPUG_CMPLX_SET_0, 0x450 */ 150*4882a593Smuzhiyun uint crc_rst_cpug_cmplx_clr; /* _RST_CPUG_CMPLX_CLR_0, 0x454 */ 151*4882a593Smuzhiyun uint crc_rst_cpulp_cmplx_set; /* _RST_CPULP_CMPLX_SET_0, 0x458 */ 152*4882a593Smuzhiyun uint crc_rst_cpulp_cmplx_clr; /* _RST_CPULP_CMPLX_CLR_0, 0x45C */ 153*4882a593Smuzhiyun uint crc_clk_cpug_cmplx_set; /* _CLK_CPUG_CMPLX_SET_0, 0x460 */ 154*4882a593Smuzhiyun uint crc_clk_cpug_cmplx_clr; /* _CLK_CPUG_CMPLX_CLR_0, 0x464 */ 155*4882a593Smuzhiyun uint crc_clk_cpulp_cmplx_set; /* _CLK_CPULP_CMPLX_SET_0, 0x468 */ 156*4882a593Smuzhiyun uint crc_clk_cpulp_cmplx_clr; /* _CLK_CPULP_CMPLX_CLR_0, 0x46C */ 157*4882a593Smuzhiyun uint crc_cpu_cmplx_status; /* _CPU_CMPLX_STATUS_0, 0x470 */ 158*4882a593Smuzhiyun uint crc_reserved40[1]; /* _reserved_40, 0x474 */ 159*4882a593Smuzhiyun uint crc_intstatus; /* __INTSTATUS_0, 0x478 */ 160*4882a593Smuzhiyun uint crc_intmask; /* __INTMASK_0, 0x47C */ 161*4882a593Smuzhiyun uint crc_utmip_pll_cfg0; /* _UTMIP_PLL_CFG0_0, 0x480 */ 162*4882a593Smuzhiyun uint crc_utmip_pll_cfg1; /* _UTMIP_PLL_CFG1_0, 0x484 */ 163*4882a593Smuzhiyun uint crc_utmip_pll_cfg2; /* _UTMIP_PLL_CFG2_0, 0x488 */ 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun uint crc_plle_aux; /* _PLLE_AUX_0, 0x48C */ 166*4882a593Smuzhiyun uint crc_sata_pll_cfg0; /* _SATA_PLL_CFG0_0, 0x490 */ 167*4882a593Smuzhiyun uint crc_sata_pll_cfg1; /* _SATA_PLL_CFG1_0, 0x494 */ 168*4882a593Smuzhiyun uint crc_pcie_pll_cfg0; /* _PCIE_PLL_CFG0_0, 0x498 */ 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun uint crc_prog_audio_dly_clk; /* _PROG_AUDIO_DLY_CLK_0, 0x49C */ 171*4882a593Smuzhiyun uint crc_audio_sync_clk_i2s0; /* _AUDIO_SYNC_CLK_I2S0_0, 0x4A0 */ 172*4882a593Smuzhiyun uint crc_audio_sync_clk_i2s1; /* _AUDIO_SYNC_CLK_I2S1_0, 0x4A4 */ 173*4882a593Smuzhiyun uint crc_audio_sync_clk_i2s2; /* _AUDIO_SYNC_CLK_I2S2_0, 0x4A8 */ 174*4882a593Smuzhiyun uint crc_audio_sync_clk_i2s3; /* _AUDIO_SYNC_CLK_I2S3_0, 0x4AC */ 175*4882a593Smuzhiyun uint crc_audio_sync_clk_i2s4; /* _AUDIO_SYNC_CLK_I2S4_0, 0x4B0 */ 176*4882a593Smuzhiyun uint crc_audio_sync_clk_spdif; /* _AUDIO_SYNC_CLK_SPDIF_0, 0x4B4 */ 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun uint crc_plld2_base; /* _PLLD2_BASE_0, 0x4B8 */ 179*4882a593Smuzhiyun uint crc_plld2_misc; /* _PLLD2_MISC_0, 0x4BC */ 180*4882a593Smuzhiyun uint crc_utmip_pll_cfg3; /* _UTMIP_PLL_CFG3_0, 0x4C0 */ 181*4882a593Smuzhiyun uint crc_pllrefe_base; /* _PLLREFE_BASE_0, 0x4C4 */ 182*4882a593Smuzhiyun uint crc_pllrefe_misc; /* _PLLREFE_MISC_0, 0x4C8 */ 183*4882a593Smuzhiyun uint crs_reserved_50[7]; /* _reserved_50, 0x4CC-0x4E4 */ 184*4882a593Smuzhiyun uint crc_pllc2_base; /* _PLLC2_BASE_0, 0x4E8 */ 185*4882a593Smuzhiyun uint crc_pllc2_misc0; /* _PLLC2_MISC_0_0, 0x4EC */ 186*4882a593Smuzhiyun uint crc_pllc2_misc1; /* _PLLC2_MISC_1_0, 0x4F0 */ 187*4882a593Smuzhiyun uint crc_pllc2_misc2; /* _PLLC2_MISC_2_0, 0x4F4 */ 188*4882a593Smuzhiyun uint crc_pllc2_misc3; /* _PLLC2_MISC_3_0, 0x4F8 */ 189*4882a593Smuzhiyun uint crc_pllc3_base; /* _PLLC3_BASE_0, 0x4FC */ 190*4882a593Smuzhiyun uint crc_pllc3_misc0; /* _PLLC3_MISC_0_0, 0x500 */ 191*4882a593Smuzhiyun uint crc_pllc3_misc1; /* _PLLC3_MISC_1_0, 0x504 */ 192*4882a593Smuzhiyun uint crc_pllc3_misc2; /* _PLLC3_MISC_2_0, 0x508 */ 193*4882a593Smuzhiyun uint crc_pllc3_misc3; /* _PLLC3_MISC_3_0, 0x50C */ 194*4882a593Smuzhiyun uint crc_pllx_misc1; /* _PLLX_MISC_1_0, 0x510 */ 195*4882a593Smuzhiyun uint crc_pllx_misc2; /* _PLLX_MISC_2_0, 0x514 */ 196*4882a593Smuzhiyun uint crc_pllx_misc3; /* _PLLX_MISC_3_0, 0x518 */ 197*4882a593Smuzhiyun uint crc_xusbio_pll_cfg0; /* _XUSBIO_PLL_CFG0_0, 0x51C */ 198*4882a593Smuzhiyun uint crc_xusbio_pll_cfg1; /* _XUSBIO_PLL_CFG0_1, 0x520 */ 199*4882a593Smuzhiyun uint crc_plle_aux1; /* _PLLE_AUX1_0, 0x524 */ 200*4882a593Smuzhiyun uint crc_pllp_reshift; /* _PLLP_RESHIFT_0, 0x528 */ 201*4882a593Smuzhiyun uint crc_utmipll_hw_pwrdn_cfg0; /* _UTMIPLL_HW_PWRDN_CFG0_0, 0x52C */ 202*4882a593Smuzhiyun uint crc_pllu_hw_pwrdn_cfg0; /* _PLLU_HW_PWRDN_CFG0_0, 0x530 */ 203*4882a593Smuzhiyun uint crc_xusb_pll_cfg0; /* _XUSB_PLL_CFG0_0, 0x534 */ 204*4882a593Smuzhiyun uint crc_reserved51[1]; /* _reserved_51, 0x538 */ 205*4882a593Smuzhiyun uint crc_clk_cpu_misc; /* _CLK_CPU_MISC_0, 0x53C */ 206*4882a593Smuzhiyun uint crc_clk_cpug_misc; /* _CLK_CPUG_MISC_0, 0x540 */ 207*4882a593Smuzhiyun uint crc_clk_cpulp_misc; /* _CLK_CPULP_MISC_0, 0x544 */ 208*4882a593Smuzhiyun uint crc_pllx_hw_ctrl_cfg; /* _PLLX_HW_CTRL_CFG_0, 0x548 */ 209*4882a593Smuzhiyun uint crc_pllx_sw_ramp_cfg; /* _PLLX_SW_RAMP_CFG_0, 0x54C */ 210*4882a593Smuzhiyun uint crc_pllx_hw_ctrl_status; /* _PLLX_HW_CTRL_STATUS_0, 0x550 */ 211*4882a593Smuzhiyun uint crc_reserved52[1]; /* _reserved_52, 0x554 */ 212*4882a593Smuzhiyun uint crc_super_gr3d_clk_div; /* _SUPER_GR3D_CLK_DIVIDER_0, 0x558 */ 213*4882a593Smuzhiyun uint crc_spare_reg0; /* _SPARE_REG0_0, 0x55C */ 214*4882a593Smuzhiyun u32 _rsv32[4]; /* 0x560-0x56c */ 215*4882a593Smuzhiyun u32 crc_plld2_ss_cfg; /* _PLLD2_SS_CFG 0x570 */ 216*4882a593Smuzhiyun u32 _rsv32_1[7]; /* 0x574-58c */ 217*4882a593Smuzhiyun struct clk_pll_simple plldp; /* _PLLDP_BASE, 0x590 _PLLDP_MISC */ 218*4882a593Smuzhiyun u32 crc_plldp_ss_cfg; /* _PLLDP_SS_CFG, 0x598 */ 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /* Tegra124+ - skip to 0x600 here for new CLK_SOURCE_ regs */ 221*4882a593Smuzhiyun uint _rsrv32_2[25]; /* _0x59C - 0x5FC */ 222*4882a593Smuzhiyun uint crc_clk_src_x[TEGRA_CLK_SOURCES_X]; /* XUSB, etc, 0x600-0x67C */ 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun /* Tegra210 - skip to 0x694 here for new CLK_SOURCE_ regs */ 225*4882a593Smuzhiyun uint crc_reserved61[5]; /* _reserved_61, 0x680 - 0x690 */ 226*4882a593Smuzhiyun /* 227*4882a593Smuzhiyun * NOTE: PLLA1 regs are in the middle of this Y region. Break this in 228*4882a593Smuzhiyun * two later if PLLA1 is needed, but for now this is cleaner. 229*4882a593Smuzhiyun */ 230*4882a593Smuzhiyun uint crc_clk_src_y[TEGRA_CLK_SOURCES_Y]; /* SPARE1, etc, 0x694-0x6D8 */ 231*4882a593Smuzhiyun }; 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0 */ 234*4882a593Smuzhiyun #define CPU3_CLK_STP_SHIFT 11 235*4882a593Smuzhiyun #define CPU2_CLK_STP_SHIFT 10 236*4882a593Smuzhiyun #define CPU1_CLK_STP_SHIFT 9 237*4882a593Smuzhiyun #define CPU0_CLK_STP_SHIFT 8 238*4882a593Smuzhiyun #define CPU0_CLK_STP_MASK (1U << CPU0_CLK_STP_SHIFT) 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_PLLx_BASE_0 */ 241*4882a593Smuzhiyun #define PLL_BYPASS_SHIFT 31 242*4882a593Smuzhiyun #define PLL_BYPASS_MASK (1U << PLL_BYPASS_SHIFT) 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun #define PLL_ENABLE_SHIFT 30 245*4882a593Smuzhiyun #define PLL_ENABLE_MASK (1U << PLL_ENABLE_SHIFT) 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun #define PLL_BASE_OVRRIDE_MASK (1U << 28) 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun #define PLL_LOCK_SHIFT 27 250*4882a593Smuzhiyun #define PLL_LOCK_MASK (1U << PLL_LOCK_SHIFT) 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_PLLx_OUTx_0 */ 253*4882a593Smuzhiyun #define PLL_OUT_RSTN (1 << 0) 254*4882a593Smuzhiyun #define PLL_OUT_CLKEN (1 << 1) 255*4882a593Smuzhiyun #define PLL_OUT_OVRRIDE (1 << 2) 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun #define PLL_OUT_RATIO_SHIFT 8 258*4882a593Smuzhiyun #define PLL_OUT_RATIO_MASK (0xffU << PLL_OUT_RATIO_SHIFT) 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_PLLx_MISC_0 */ 261*4882a593Smuzhiyun #define PLL_DCCON_SHIFT 20 262*4882a593Smuzhiyun #define PLL_DCCON_MASK (1U << PLL_DCCON_SHIFT) 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun #define PLLP_OUT1_OVR (1 << 2) 265*4882a593Smuzhiyun #define PLLP_OUT2_OVR (1 << 18) 266*4882a593Smuzhiyun #define PLLP_OUT3_OVR (1 << 2) 267*4882a593Smuzhiyun #define PLLP_OUT4_OVR (1 << 18) 268*4882a593Smuzhiyun #define PLLP_OUT1_RATIO 8 269*4882a593Smuzhiyun #define PLLP_OUT2_RATIO 24 270*4882a593Smuzhiyun #define PLLP_OUT3_RATIO 8 271*4882a593Smuzhiyun #define PLLP_OUT4_RATIO 24 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun enum { 274*4882a593Smuzhiyun IN_408_OUT_204_DIVISOR = 2, 275*4882a593Smuzhiyun IN_408_OUT_102_DIVISOR = 6, 276*4882a593Smuzhiyun IN_408_OUT_48_DIVISOR = 15, 277*4882a593Smuzhiyun IN_408_OUT_9_6_DIVISOR = 83, 278*4882a593Smuzhiyun }; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun #define PLLP_OUT1_RSTN_DIS (1 << 0) 281*4882a593Smuzhiyun #define PLLP_OUT1_RSTN_EN (0 << 0) 282*4882a593Smuzhiyun #define PLLP_OUT1_CLKEN (1 << 1) 283*4882a593Smuzhiyun #define PLLP_OUT2_RSTN_DIS (1 << 16) 284*4882a593Smuzhiyun #define PLLP_OUT2_RSTN_EN (0 << 16) 285*4882a593Smuzhiyun #define PLLP_OUT2_CLKEN (1 << 17) 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun #define PLLP_OUT3_RSTN_DIS (1 << 0) 288*4882a593Smuzhiyun #define PLLP_OUT3_RSTN_EN (0 << 0) 289*4882a593Smuzhiyun #define PLLP_OUT3_CLKEN (1 << 1) 290*4882a593Smuzhiyun #define PLLP_OUT4_RSTN_DIS (1 << 16) 291*4882a593Smuzhiyun #define PLLP_OUT4_RSTN_EN (0 << 16) 292*4882a593Smuzhiyun #define PLLP_OUT4_CLKEN (1 << 17) 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_UTMIP_PLL_CFG1_0 */ 295*4882a593Smuzhiyun #define PLLU_POWERDOWN (1 << 16) 296*4882a593Smuzhiyun #define PLL_ENABLE_POWERDOWN (1 << 14) 297*4882a593Smuzhiyun #define PLL_ACTIVE_POWERDOWN (1 << 12) 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_UTMIP_PLL_CFG2_0 */ 300*4882a593Smuzhiyun #define UTMIP_FORCE_PD_SAMP_C_POWERDOWN (1 << 4) 301*4882a593Smuzhiyun #define UTMIP_FORCE_PD_SAMP_B_POWERDOWN (1 << 2) 302*4882a593Smuzhiyun #define UTMIP_FORCE_PD_SAMP_A_POWERDOWN (1 << 0) 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_OSC_CTRL_0 0x50 */ 305*4882a593Smuzhiyun #define OSC_XOE_SHIFT 0 306*4882a593Smuzhiyun #define OSC_XOE_MASK (1 << OSC_XOE_SHIFT) 307*4882a593Smuzhiyun #define OSC_XOE_ENABLE (1 << OSC_XOE_SHIFT) 308*4882a593Smuzhiyun #define OSC_XOBP_SHIFT 1 309*4882a593Smuzhiyun #define OSC_XOBP_MASK (1U << OSC_XOBP_SHIFT) 310*4882a593Smuzhiyun #define OSC_XOFS_SHIFT 4 311*4882a593Smuzhiyun #define OSC_XOFS_MASK (0x3F << OSC_XOFS_SHIFT) 312*4882a593Smuzhiyun #define OSC_DRIVE_STRENGTH 7 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun /* 315*4882a593Smuzhiyun * CLK_RST_CONTROLLER_CLK_SOURCE_x_OUT_0 - the mask here is normally 8 bits 316*4882a593Smuzhiyun * but can be 16. We could use knowledge we have to restrict the mask in 317*4882a593Smuzhiyun * the 8-bit cases (the divider_bits value returned by 318*4882a593Smuzhiyun * get_periph_clock_source()) but it does not seem worth it since the code 319*4882a593Smuzhiyun * already checks the ranges of values it is writing, in clk_get_divider(). 320*4882a593Smuzhiyun */ 321*4882a593Smuzhiyun #define OUT_CLK_DIVISOR_SHIFT 0 322*4882a593Smuzhiyun #define OUT_CLK_DIVISOR_MASK (0xffff << OUT_CLK_DIVISOR_SHIFT) 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun #define OUT_CLK_SOURCE_31_30_SHIFT 30 325*4882a593Smuzhiyun #define OUT_CLK_SOURCE_31_30_MASK (3U << OUT_CLK_SOURCE_31_30_SHIFT) 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun #define OUT_CLK_SOURCE_31_29_SHIFT 29 328*4882a593Smuzhiyun #define OUT_CLK_SOURCE_31_29_MASK (7U << OUT_CLK_SOURCE_31_29_SHIFT) 329*4882a593Smuzhiyun 330*4882a593Smuzhiyun /* Note: See comment for MASK_BITS_31_28 in arch-tegra/clock.h */ 331*4882a593Smuzhiyun #define OUT_CLK_SOURCE_31_28_SHIFT 28 332*4882a593Smuzhiyun #define OUT_CLK_SOURCE_31_28_MASK (15U << OUT_CLK_SOURCE_31_28_SHIFT) 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_SCLK_BURST_POLICY */ 335*4882a593Smuzhiyun #define SCLK_SYS_STATE_SHIFT 28U 336*4882a593Smuzhiyun #define SCLK_SYS_STATE_MASK (15U << SCLK_SYS_STATE_SHIFT) 337*4882a593Smuzhiyun enum { 338*4882a593Smuzhiyun SCLK_SYS_STATE_STDBY, 339*4882a593Smuzhiyun SCLK_SYS_STATE_IDLE, 340*4882a593Smuzhiyun SCLK_SYS_STATE_RUN, 341*4882a593Smuzhiyun SCLK_SYS_STATE_IRQ = 4U, 342*4882a593Smuzhiyun SCLK_SYS_STATE_FIQ = 8U, 343*4882a593Smuzhiyun }; 344*4882a593Smuzhiyun #define SCLK_COP_FIQ_MASK (1 << 27) 345*4882a593Smuzhiyun #define SCLK_CPU_FIQ_MASK (1 << 26) 346*4882a593Smuzhiyun #define SCLK_COP_IRQ_MASK (1 << 25) 347*4882a593Smuzhiyun #define SCLK_CPU_IRQ_MASK (1 << 24) 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun #define SCLK_SWAKEUP_FIQ_SOURCE_SHIFT 12 350*4882a593Smuzhiyun #define SCLK_SWAKEUP_FIQ_SOURCE_MASK \ 351*4882a593Smuzhiyun (7 << SCLK_SWAKEUP_FIQ_SOURCE_SHIFT) 352*4882a593Smuzhiyun #define SCLK_SWAKEUP_IRQ_SOURCE_SHIFT 8 353*4882a593Smuzhiyun #define SCLK_SWAKEUP_IRQ_SOURCE_MASK \ 354*4882a593Smuzhiyun (7 << SCLK_SWAKEUP_FIQ_SOURCE_SHIFT) 355*4882a593Smuzhiyun #define SCLK_SWAKEUP_RUN_SOURCE_SHIFT 4 356*4882a593Smuzhiyun #define SCLK_SWAKEUP_RUN_SOURCE_MASK \ 357*4882a593Smuzhiyun (7 << SCLK_SWAKEUP_FIQ_SOURCE_SHIFT) 358*4882a593Smuzhiyun #define SCLK_SWAKEUP_IDLE_SOURCE_SHIFT 0 359*4882a593Smuzhiyun 360*4882a593Smuzhiyun #define SCLK_SWAKEUP_IDLE_SOURCE_MASK \ 361*4882a593Smuzhiyun (7 << SCLK_SWAKEUP_FIQ_SOURCE_SHIFT) 362*4882a593Smuzhiyun enum { 363*4882a593Smuzhiyun SCLK_SOURCE_CLKM, 364*4882a593Smuzhiyun SCLK_SOURCE_PLLC_OUT1, 365*4882a593Smuzhiyun SCLK_SOURCE_PLLP_OUT4, 366*4882a593Smuzhiyun SCLK_SOURCE_PLLP_OUT3, 367*4882a593Smuzhiyun SCLK_SOURCE_PLLP_OUT2, 368*4882a593Smuzhiyun SCLK_SOURCE_CLKD, 369*4882a593Smuzhiyun SCLK_SOURCE_CLKS, 370*4882a593Smuzhiyun SCLK_SOURCE_PLLM_OUT1, 371*4882a593Smuzhiyun }; 372*4882a593Smuzhiyun #define SCLK_SWAKE_FIQ_SRC_PLLM_OUT1 (7 << 12) 373*4882a593Smuzhiyun #define SCLK_SWAKE_IRQ_SRC_PLLM_OUT1 (7 << 8) 374*4882a593Smuzhiyun #define SCLK_SWAKE_RUN_SRC_PLLM_OUT1 (7 << 4) 375*4882a593Smuzhiyun #define SCLK_SWAKE_IDLE_SRC_PLLM_OUT1 (7 << 0) 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_SUPER_SCLK_DIVIDER */ 378*4882a593Smuzhiyun #define SUPER_SCLK_ENB_SHIFT 31U 379*4882a593Smuzhiyun #define SUPER_SCLK_ENB_MASK (1U << 31) 380*4882a593Smuzhiyun #define SUPER_SCLK_DIVIDEND_SHIFT 8 381*4882a593Smuzhiyun #define SUPER_SCLK_DIVIDEND_MASK (0xff << SUPER_SCLK_DIVIDEND_SHIFT) 382*4882a593Smuzhiyun #define SUPER_SCLK_DIVISOR_SHIFT 0 383*4882a593Smuzhiyun #define SUPER_SCLK_DIVISOR_MASK (0xff << SUPER_SCLK_DIVISOR_SHIFT) 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_CLK_SYSTEM_RATE 0x30 */ 386*4882a593Smuzhiyun #define CLK_SYS_RATE_HCLK_DISABLE_SHIFT 7 387*4882a593Smuzhiyun #define CLK_SYS_RATE_HCLK_DISABLE_MASK (1 << CLK_SYS_RATE_HCLK_DISABLE_SHIFT) 388*4882a593Smuzhiyun #define CLK_SYS_RATE_AHB_RATE_SHIFT 4 389*4882a593Smuzhiyun #define CLK_SYS_RATE_AHB_RATE_MASK (3 << CLK_SYS_RATE_AHB_RATE_SHIFT) 390*4882a593Smuzhiyun #define CLK_SYS_RATE_PCLK_DISABLE_SHIFT 3 391*4882a593Smuzhiyun #define CLK_SYS_RATE_PCLK_DISABLE_MASK (1 << CLK_SYS_RATE_PCLK_DISABLE_SHIFT) 392*4882a593Smuzhiyun #define CLK_SYS_RATE_APB_RATE_SHIFT 0 393*4882a593Smuzhiyun #define CLK_SYS_RATE_APB_RATE_MASK (3 << CLK_SYS_RATE_AHB_RATE_SHIFT) 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_RST_CPUxx_CMPLX_CLR 0x344 */ 396*4882a593Smuzhiyun #define CLR_CPURESET0 (1 << 0) 397*4882a593Smuzhiyun #define CLR_CPURESET1 (1 << 1) 398*4882a593Smuzhiyun #define CLR_CPURESET2 (1 << 2) 399*4882a593Smuzhiyun #define CLR_CPURESET3 (1 << 3) 400*4882a593Smuzhiyun #define CLR_DBGRESET0 (1 << 12) 401*4882a593Smuzhiyun #define CLR_DBGRESET1 (1 << 13) 402*4882a593Smuzhiyun #define CLR_DBGRESET2 (1 << 14) 403*4882a593Smuzhiyun #define CLR_DBGRESET3 (1 << 15) 404*4882a593Smuzhiyun #define CLR_CORERESET0 (1 << 16) 405*4882a593Smuzhiyun #define CLR_CORERESET1 (1 << 17) 406*4882a593Smuzhiyun #define CLR_CORERESET2 (1 << 18) 407*4882a593Smuzhiyun #define CLR_CORERESET3 (1 << 19) 408*4882a593Smuzhiyun #define CLR_CXRESET0 (1 << 20) 409*4882a593Smuzhiyun #define CLR_CXRESET1 (1 << 21) 410*4882a593Smuzhiyun #define CLR_CXRESET2 (1 << 22) 411*4882a593Smuzhiyun #define CLR_CXRESET3 (1 << 23) 412*4882a593Smuzhiyun #define CLR_L2RESET (1 << 24) 413*4882a593Smuzhiyun #define CLR_NONCPURESET (1 << 29) 414*4882a593Smuzhiyun #define CLR_PRESETDBG (1 << 30) 415*4882a593Smuzhiyun 416*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_CLK_CPU_CMPLX_CLR 0x34c */ 417*4882a593Smuzhiyun #define CLR_CPU0_CLK_STP (1 << 8) 418*4882a593Smuzhiyun #define CLR_CPU1_CLK_STP (1 << 9) 419*4882a593Smuzhiyun #define CLR_CPU2_CLK_STP (1 << 10) 420*4882a593Smuzhiyun #define CLR_CPU3_CLK_STP (1 << 11) 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun /* CRC_CLK_SOURCE_MSELECT_0 0x3b4 */ 423*4882a593Smuzhiyun #define MSELECT_CLK_SRC_PLLP_OUT0 (0 << 29) 424*4882a593Smuzhiyun 425*4882a593Smuzhiyun /* CRC_CLK_ENB_V_SET_0 0x440 */ 426*4882a593Smuzhiyun #define SET_CLK_ENB_CPUG_ENABLE (1 << 0) 427*4882a593Smuzhiyun #define SET_CLK_ENB_CPULP_ENABLE (1 << 1) 428*4882a593Smuzhiyun #define SET_CLK_ENB_MSELECT_ENABLE (1 << 3) 429*4882a593Smuzhiyun 430*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_UTMIP_PLL_CFG1_0 0x484 */ 431*4882a593Smuzhiyun #define PLL_ACTIVE_POWERDOWN (1 << 12) 432*4882a593Smuzhiyun #define PLL_ENABLE_POWERDOWN (1 << 14) 433*4882a593Smuzhiyun #define PLLU_POWERDOWN (1 << 16) 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_UTMIP_PLL_CFG2_0 0x488 */ 436*4882a593Smuzhiyun #define UTMIP_FORCE_PD_SAMP_A_POWERDOWN (1 << 0) 437*4882a593Smuzhiyun #define UTMIP_FORCE_PD_SAMP_B_POWERDOWN (1 << 2) 438*4882a593Smuzhiyun #define UTMIP_FORCE_PD_SAMP_C_POWERDOWN (1 << 4) 439*4882a593Smuzhiyun 440*4882a593Smuzhiyun /* CLK_RST_CONTROLLER_PLLX_MISC_3 */ 441*4882a593Smuzhiyun #define PLLX_IDDQ_SHIFT 3 442*4882a593Smuzhiyun #define PLLX_IDDQ_MASK (1U << PLLX_IDDQ_SHIFT) 443*4882a593Smuzhiyun 444*4882a593Smuzhiyun /* CLK_RST_PLLDP_SS_CFG */ 445*4882a593Smuzhiyun #define PLLDP_SS_CFG_CLAMP (1 << 22) 446*4882a593Smuzhiyun #define PLLDP_SS_CFG_UNDOCUMENTED (1 << 24) 447*4882a593Smuzhiyun #define PLLDP_SS_CFG_DITHER (1 << 28) 448*4882a593Smuzhiyun 449*4882a593Smuzhiyun /* CLK_RST_PLLD_MISC */ 450*4882a593Smuzhiyun #define PLLD_CLKENABLE 30 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun #endif /* _TEGRA_CLK_RST_H_ */ 453