1e9034789SMichal Meloun /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3e9034789SMichal Meloun * 4e9034789SMichal Meloun * Copyright 2020 Michal Meloun <mmel@FreeBSD.org> 5e9034789SMichal Meloun * 6e9034789SMichal Meloun * Redistribution and use in source and binary forms, with or without 7e9034789SMichal Meloun * modification, are permitted provided that the following conditions 8e9034789SMichal Meloun * are met: 9e9034789SMichal Meloun * 1. Redistributions of source code must retain the above copyright 10e9034789SMichal Meloun * notice, this list of conditions and the following disclaimer. 11e9034789SMichal Meloun * 2. Redistributions in binary form must reproduce the above copyright 12e9034789SMichal Meloun * notice, this list of conditions and the following disclaimer in the 13e9034789SMichal Meloun * documentation and/or other materials provided with the distribution. 14e9034789SMichal Meloun * 15e9034789SMichal Meloun * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16e9034789SMichal Meloun * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17e9034789SMichal Meloun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18e9034789SMichal Meloun * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19e9034789SMichal Meloun * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20e9034789SMichal Meloun * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21e9034789SMichal Meloun * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22e9034789SMichal Meloun * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23e9034789SMichal Meloun * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24e9034789SMichal Meloun * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25e9034789SMichal Meloun * SUCH DAMAGE. 26e9034789SMichal Meloun */ 27e9034789SMichal Meloun 28e9034789SMichal Meloun #ifndef _TEGRA210_CAR_ 29e9034789SMichal Meloun #define _TEGRA210_CAR_ 30e9034789SMichal Meloun 31e9034789SMichal Meloun #include "clkdev_if.h" 32e9034789SMichal Meloun 33e9034789SMichal Meloun #define RD4(sc, reg, val) CLKDEV_READ_4((sc)->clkdev, reg, val) 34e9034789SMichal Meloun #define WR4(sc, reg, val) CLKDEV_WRITE_4((sc)->clkdev, reg, val) 35e9034789SMichal Meloun #define MD4(sc, reg, mask, set) CLKDEV_MODIFY_4((sc)->clkdev, reg, mask, set) 36e9034789SMichal Meloun #define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) 37e9034789SMichal Meloun #define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) 38e9034789SMichal Meloun 39e9034789SMichal Meloun #define RST_SOURCE 0x000 40e9034789SMichal Meloun #define RST_DEVICES_L 0x004 41e9034789SMichal Meloun #define RST_DEVICES_H 0x008 42e9034789SMichal Meloun #define RST_DEVICES_U 0x00C 43e9034789SMichal Meloun #define CLK_OUT_ENB_L 0x010 44e9034789SMichal Meloun #define CLK_OUT_ENB_H 0x014 45e9034789SMichal Meloun #define CLK_OUT_ENB_U 0x018 46e9034789SMichal Meloun #define SUPER_CCLK_DIVIDER 0x024 47e9034789SMichal Meloun #define SCLK_BURST_POLICY 0x028 48e9034789SMichal Meloun #define SUPER_SCLK_DIVIDER 0x02c 49e9034789SMichal Meloun #define CLK_SYSTEM_RATE 0x030 50e9034789SMichal Meloun #define CLK_MASK_ARM 0x044 51e9034789SMichal Meloun #define MISC_CLK_ENB 0x048 52e9034789SMichal Meloun 53e9034789SMichal Meloun #define OSC_CTRL 0x050 54e9034789SMichal Meloun #define OSC_CTRL_OSC_FREQ_GET(x) (((x) >> 28) & 0x0F) 55e9034789SMichal Meloun #define OSC_CTRL_PLL_REF_DIV_GET(x) (((x) >> 26) & 0x03) 56e9034789SMichal Meloun 57e9034789SMichal Meloun #define OSC_FREQ_DET_STATUS 0x05c 58e9034789SMichal Meloun #define PLLE_SS_CNTL 0x068 59e9034789SMichal Meloun #define PLLE_SS_CNTL_INTEGOFFSET(x) (((x) & 0x03) << 30) 60e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCINCINTRV(x) (((x) & 0x3f) << 24) 61e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCINC(x) (((x) & 0xff) << 16) 62e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCINVERT (1 << 15) 63e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCCENTER (1 << 14) 64e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCPDMBYP (1 << 13) 65e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCBYP (1 << 12) 66e9034789SMichal Meloun #define PLLE_SS_CNTL_INTERP_RESET (1 << 11) 67e9034789SMichal Meloun #define PLLE_SS_CNTL_BYPASS_SS (1 << 10) 68e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCMAX(x) (((x) & 0x1ff) << 0) 69e9034789SMichal Meloun 70e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCINCINTRV_MASK (0x3f << 24) 71e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCINCINTRV_VAL (0x20 << 24) 72e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCINC_MASK (0xff << 16) 73e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCINC_VAL (0x1 << 16) 74e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCMAX_MASK 0x1ff 75e9034789SMichal Meloun #define PLLE_SS_CNTL_SSCMAX_VAL 0x25 76e9034789SMichal Meloun #define PLLE_SS_CNTL_DISABLE (PLLE_SS_CNTL_BYPASS_SS | \ 77e9034789SMichal Meloun PLLE_SS_CNTL_INTERP_RESET | \ 78e9034789SMichal Meloun PLLE_SS_CNTL_SSCBYP) 79e9034789SMichal Meloun #define PLLE_SS_CNTL_COEFFICIENTS_MASK (PLLE_SS_CNTL_SSCMAX_MASK | \ 80e9034789SMichal Meloun PLLE_SS_CNTL_SSCINC_MASK | \ 81e9034789SMichal Meloun PLLE_SS_CNTL_SSCINCINTRV_MASK) 82e9034789SMichal Meloun #define PLLE_SS_CNTL_COEFFICIENTS_VAL (PLLE_SS_CNTL_SSCMAX_VAL | \ 83e9034789SMichal Meloun PLLE_SS_CNTL_SSCINC_VAL | \ 84e9034789SMichal Meloun PLLE_SS_CNTL_SSCINCINTRV_VAL) 85e9034789SMichal Meloun 86e9034789SMichal Meloun #define PLLE_MISC1 0x06C 87e9034789SMichal Meloun #define PLLC_BASE 0x080 88e9034789SMichal Meloun #define PLLC_OUT 0x084 89e9034789SMichal Meloun #define PLLC_MISC_0 0x088 90e9034789SMichal Meloun #define PLLC_MISC_1 0x08c 91e9034789SMichal Meloun #define PLLM_BASE 0x090 92e9034789SMichal Meloun #define PLLM_MISC1 0x099 93e9034789SMichal Meloun #define PLLM_MISC2 0x09c 94e9034789SMichal Meloun #define PLLP_BASE 0x0a0 95e9034789SMichal Meloun #define PLLP_OUTA 0x0a4 96e9034789SMichal Meloun #define PLLP_OUTB 0x0a8 97e9034789SMichal Meloun #define PLLP_MISC 0x0ac 98e9034789SMichal Meloun #define PLLA_BASE 0x0b0 99e9034789SMichal Meloun #define PLLA_OUT 0x0b4 100e9034789SMichal Meloun #define PLLA_MISC1 0x0b8 101e9034789SMichal Meloun #define PLLA_MISC 0x0bc 102e9034789SMichal Meloun #define PLLU_BASE 0x0c0 103e9034789SMichal Meloun #define PLLU_OUTA 0x0c4 104e9034789SMichal Meloun #define PLLU_MISC1 0x0c8 105e9034789SMichal Meloun #define PLLU_MISC 0x0cc 106e9034789SMichal Meloun #define PLLD_BASE 0x0d0 107e9034789SMichal Meloun #define PLLD_MISC1 0x0d8 108e9034789SMichal Meloun #define PLLD_MISC 0x0dc 109e9034789SMichal Meloun #define PLLX_BASE 0x0e0 110e9034789SMichal Meloun #define PLLX_MISC 0x0e4 111e9034789SMichal Meloun #define PLLX_MISC_LOCK_ENABLE (1 << 18) 112e9034789SMichal Meloun 113e9034789SMichal Meloun #define PLLE_BASE 0x0e8 114e9034789SMichal Meloun #define PLLE_BASE_ENABLE (1U << 31) 115e9034789SMichal Meloun #define PLLE_BASE_LOCK_OVERRIDE (1 << 30) 116e9034789SMichal Meloun 117e9034789SMichal Meloun #define PLLE_MISC 0x0ec 118e9034789SMichal Meloun #define PLLE_MISC_SETUP_BASE(x) (((x) & 0xFFFF) << 16) 119e9034789SMichal Meloun #define PLLE_MISC_CLKENABLE (1 << 15) 120e9034789SMichal Meloun #define PLLE_MISC_IDDQ_SWCTL (1 << 14) 121e9034789SMichal Meloun #define PLLE_MISC_IDDQ_OVERRIDE_VALUE (1 << 13) 122e9034789SMichal Meloun #define PLLE_MISC_IDDQ_FREQLOCK (1 << 12) 123e9034789SMichal Meloun #define PLLE_MISC_LOCK (1 << 11) 124e9034789SMichal Meloun #define PLLE_MISC_REF_DIS (1 << 10) 125e9034789SMichal Meloun #define PLLE_MISC_LOCK_ENABLE (1 << 9) 126e9034789SMichal Meloun #define PLLE_MISC_PTS (1 << 8) 127e9034789SMichal Meloun #define PLLE_MISC_KCP(x) (((x) & 0x03) << 6) 128e9034789SMichal Meloun #define PLLE_MISC_VREG_BG_CTRL(x) (((x) & 0x03) << 4) 129e9034789SMichal Meloun #define PLLE_MISC_VREG_CTRL(x) (((x) & 0x03) << 2) 130e9034789SMichal Meloun #define PLLE_MISC_KVCO (1 << 0) 131e9034789SMichal Meloun 132e9034789SMichal Meloun #define PLLE_MISC_VREG_BG_CTRL_SHIFT 4 133e9034789SMichal Meloun #define PLLE_MISC_VREG_BG_CTRL_MASK (3 << PLLE_MISC_VREG_BG_CTRL_SHIFT) 134e9034789SMichal Meloun #define PLLE_MISC_VREG_CTRL_SHIFT 2 135e9034789SMichal Meloun #define PLLE_MISC_VREG_CTRL_MASK (2 << PLLE_MISC_VREG_CTRL_SHIFT) 136e9034789SMichal Meloun #define PLLE_MISC_SETUP_BASE_SHIFT 16 137e9034789SMichal Meloun #define PLLE_MISC_SETUP_BASE_MASK (0xffff << PLLE_MISC_SETUP_BASE_SHIFT) 138e9034789SMichal Meloun 139e9034789SMichal Meloun #define PLLE_SS_CNTL1 0x0f0 140e9034789SMichal Meloun #define PLLE_SS_CNTL2 0x0f4 141e9034789SMichal Meloun #define LVL2_CLK_GATE_OVRA 0x0f8 142e9034789SMichal Meloun #define LVL2_CLK_GATE_OVRB 0x0fc 143e9034789SMichal Meloun #define LVL2_CLK_GATE_OVRC 0x3a0 /* Misordered in TRM */ 144e9034789SMichal Meloun #define LVL2_CLK_GATE_OVRD 0x3a4 145e9034789SMichal Meloun #define LVL2_CLK_GATE_OVRE 0x554 146e9034789SMichal Meloun 147e9034789SMichal Meloun #define CLK_SOURCE_I2S2 0x100 148e9034789SMichal Meloun #define CLK_SOURCE_I2S3 0x104 149e9034789SMichal Meloun #define CLK_SOURCE_SPDIF_OUT 0x108 150e9034789SMichal Meloun #define CLK_SOURCE_SPDIF_IN 0x10c 151e9034789SMichal Meloun #define CLK_SOURCE_PWM 0x110 152e9034789SMichal Meloun #define CLK_SOURCE_SPI2 0x118 153e9034789SMichal Meloun #define CLK_SOURCE_SPI3 0x11c 154e9034789SMichal Meloun #define CLK_SOURCE_I2C1 0x124 155e9034789SMichal Meloun #define CLK_SOURCE_I2C5 0x128 156e9034789SMichal Meloun #define CLK_SOURCE_SPI1 0x134 157e9034789SMichal Meloun #define CLK_SOURCE_DISP1 0x138 158e9034789SMichal Meloun #define CLK_SOURCE_DISP2 0x13c 159e9034789SMichal Meloun #define CLK_SOURCE_ISP 0x144 160e9034789SMichal Meloun #define CLK_SOURCE_VI 0x148 161e9034789SMichal Meloun #define CLK_SOURCE_SDMMC1 0x150 162e9034789SMichal Meloun #define CLK_SOURCE_SDMMC2 0x154 163e9034789SMichal Meloun #define CLK_SOURCE_SDMMC4 0x164 164e9034789SMichal Meloun #define CLK_SOURCE_UARTA 0x178 165e9034789SMichal Meloun #define CLK_SOURCE_UARTB 0x17c 166e9034789SMichal Meloun #define CLK_SOURCE_HOST1X 0x180 167e9034789SMichal Meloun #define CLK_SOURCE_I2C2 0x198 168e9034789SMichal Meloun #define CLK_SOURCE_EMC 0x19c 169e9034789SMichal Meloun #define CLK_SOURCE_UARTC 0x1a0 170e9034789SMichal Meloun #define CLK_SOURCE_VI_SENSOR 0x1a8 171e9034789SMichal Meloun #define CLK_SOURCE_SPI4 0x1b4 172e9034789SMichal Meloun #define CLK_SOURCE_I2C3 0x1b8 173e9034789SMichal Meloun #define CLK_SOURCE_SDMMC3 0x1bc 174e9034789SMichal Meloun #define CLK_SOURCE_UARTD 0x1c0 175e9034789SMichal Meloun #define CLK_SOURCE_OWR 0x1cc 176e9034789SMichal Meloun #define CLK_SOURCE_CSITE 0x1d4 177e9034789SMichal Meloun #define CLK_SOURCE_I2S1 0x1d8 178e9034789SMichal Meloun #define CLK_SOURCE_DTV 0x1dc 179e9034789SMichal Meloun #define CLK_SOURCE_TSEC 0x1f4 180e9034789SMichal Meloun #define CLK_SOURCE_SPARE2 0x1f8 181e9034789SMichal Meloun 182e9034789SMichal Meloun #define CLK_OUT_ENB_X 0x280 183e9034789SMichal Meloun #define CLK_ENB_X_SET 0x284 184e9034789SMichal Meloun #define CLK_ENB_X_CLR 0x288 185e9034789SMichal Meloun #define RST_DEVICES_X 0x28C 186e9034789SMichal Meloun #define RST_DEV_X_SET 0x290 187e9034789SMichal Meloun #define RST_DEV_X_CLR 0x294 188e9034789SMichal Meloun #define CLK_OUT_ENB_Y 0x298 189e9034789SMichal Meloun #define CLK_ENB_Y_SET 0x29c 190e9034789SMichal Meloun #define CLK_ENB_Y_CLR 0x2a0 191e9034789SMichal Meloun #define RST_DEVICES_Y 0x2a4 192e9034789SMichal Meloun #define RST_DEV_Y_SET 0x2a8 193e9034789SMichal Meloun #define RST_DEV_Y_CLR 0x2ac 194e9034789SMichal Meloun #define DFLL_BASE 0x2f4 195e9034789SMichal Meloun #define DFLL_BASE_DVFS_DFLL_RESET (1 << 0) 196e9034789SMichal Meloun 197e9034789SMichal Meloun #define RST_DEV_L_SET 0x300 198e9034789SMichal Meloun #define RST_DEV_L_CLR 0x304 199e9034789SMichal Meloun #define RST_DEV_H_SET 0x308 200e9034789SMichal Meloun #define RST_DEV_H_CLR 0x30c 201e9034789SMichal Meloun #define RST_DEV_U_SET 0x310 202e9034789SMichal Meloun #define RST_DEV_U_CLR 0x314 203e9034789SMichal Meloun #define CLK_ENB_L_SET 0x320 204e9034789SMichal Meloun #define CLK_ENB_L_CLR 0x324 205e9034789SMichal Meloun #define CLK_ENB_H_SET 0x328 206e9034789SMichal Meloun #define CLK_ENB_H_CLR 0x32c 207e9034789SMichal Meloun #define CLK_ENB_U_SET 0x330 208e9034789SMichal Meloun #define CLK_ENB_U_CLR 0x334 209e9034789SMichal Meloun #define CCPLEX_PG_SM_OVRD 0x33c 210e9034789SMichal Meloun #define CPU_CMPLX_SET 0x340 211e9034789SMichal Meloun #define RST_DEVICES_V 0x358 212e9034789SMichal Meloun #define RST_DEVICES_W 0x35c 213e9034789SMichal Meloun #define CLK_OUT_ENB_V 0x360 214e9034789SMichal Meloun #define CLK_OUT_ENB_W 0x364 215e9034789SMichal Meloun #define CCLKG_BURST_POLICY 0x368 216e9034789SMichal Meloun #define SUPER_CCLKG_DIVIDER 0x36C 217e9034789SMichal Meloun #define CCLKLP_BURST_POLICY 0x370 218e9034789SMichal Meloun #define SUPER_CCLKLP_DIVIDER 0x374 219e9034789SMichal Meloun #define CLK_CPUG_CMPLX 0x378 220e9034789SMichal Meloun #define CPU_SOFTRST_CTRL 0x380 221e9034789SMichal Meloun #define CPU_SOFTRST_CTRL1 0x384 222e9034789SMichal Meloun #define CPU_SOFTRST_CTRL2 0x388 223e9034789SMichal Meloun #define CLK_SOURCE_MSELECT 0x3b4 224e9034789SMichal Meloun #define CLK_SOURCE_TSENSOR 0x3b8 225e9034789SMichal Meloun #define CLK_SOURCE_I2S4 0x3bc 226e9034789SMichal Meloun #define CLK_SOURCE_I2S5 0x3c0 227e9034789SMichal Meloun #define CLK_SOURCE_I2C4 0x3c4 228e9034789SMichal Meloun #define CLK_SOURCE_AHUB 0x3d0 229e9034789SMichal Meloun #define CLK_SOURCE_HDA2CODEC_2X 0x3e4 230e9034789SMichal Meloun #define CLK_SOURCE_ACTMON 0x3e8 231e9034789SMichal Meloun #define CLK_SOURCE_EXTPERIPH1 0x3ec 232e9034789SMichal Meloun #define CLK_SOURCE_EXTPERIPH2 0x3f0 233e9034789SMichal Meloun #define CLK_SOURCE_EXTPERIPH3 0x3f4 234e9034789SMichal Meloun #define CLK_SOURCE_I2C_SLOW 0x3fc 235e9034789SMichal Meloun 236e9034789SMichal Meloun #define CLK_SOURCE_SYS 0x400 237e9034789SMichal Meloun #define CLK_SOURCE_ISPB 0x404 238e9034789SMichal Meloun #define CLK_SOURCE_SOR1 0x410 239e9034789SMichal Meloun #define CLK_SOURCE_SOR0 0x414 240e9034789SMichal Meloun #define CLK_SOURCE_SATA_OOB 0x420 241e9034789SMichal Meloun #define CLK_SOURCE_SATA 0x424 242e9034789SMichal Meloun #define CLK_SOURCE_HDA 0x428 243e9034789SMichal Meloun #define RST_DEV_V_SET 0x430 244e9034789SMichal Meloun #define RST_DEV_V_CLR 0x434 245e9034789SMichal Meloun #define RST_DEV_W_SET 0x438 246e9034789SMichal Meloun #define RST_DEV_W_CLR 0x43c 247e9034789SMichal Meloun #define CLK_ENB_V_SET 0x440 248e9034789SMichal Meloun #define CLK_ENB_V_CLR 0x444 249e9034789SMichal Meloun #define CLK_ENB_W_SET 0x448 250e9034789SMichal Meloun #define CLK_ENB_W_CLR 0x44c 251e9034789SMichal Meloun #define RST_CPUG_CMPLX_SET 0x450 252e9034789SMichal Meloun #define RST_CPUG_CMPLX_CLR 0x454 253e9034789SMichal Meloun #define CLK_CPUG_CMPLX_SET 0x460 254e9034789SMichal Meloun #define CLK_CPUG_CMPLX_CLR 0x464 255e9034789SMichal Meloun #define CPU_CMPLX_STATUS 0x470 256e9034789SMichal Meloun #define INTSTATUS 0x478 257e9034789SMichal Meloun #define INTMASK 0x47c 258e9034789SMichal Meloun #define UTMIP_PLL_CFG0 0x480 259e9034789SMichal Meloun 260e9034789SMichal Meloun #define UTMIP_PLL_CFG1 0x484 261e9034789SMichal Meloun #define UTMIP_PLL_CFG1_FORCE_PLLU_POWERUP (1 << 17) 262e9034789SMichal Meloun #define UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN (1 << 16) 263e9034789SMichal Meloun #define UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP (1 << 15) 264e9034789SMichal Meloun #define UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN (1 << 14) 265e9034789SMichal Meloun #define UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN (1 << 12) 266e9034789SMichal Meloun #define UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(x) (((x) & 0x1f) << 6) 267e9034789SMichal Meloun #define UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(x) (((x) & 0xfff) << 0) 268e9034789SMichal Meloun 269e9034789SMichal Meloun #define UTMIP_PLL_CFG2 0x488 270e9034789SMichal Meloun #define UTMIP_PLL_CFG2_PHY_XTAL_CLOCKEN (1 << 30) 271e9034789SMichal Meloun #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERUP (1 << 25) 272e9034789SMichal Meloun #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERDOWN (1 << 24) 273e9034789SMichal Meloun #define UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(x) (((x) & 0x3f) << 18) 274e9034789SMichal Meloun #define UTMIP_PLL_CFG2_STABLE_COUNT(x) (((x) & 0xffff) << 6) 275e9034789SMichal Meloun #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERUP (1 << 5) 276e9034789SMichal Meloun #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERDOWN (1 << 4) 277e9034789SMichal Meloun #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERUP (1 << 3) 278e9034789SMichal Meloun #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN (1 << 2) 279e9034789SMichal Meloun #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERUP (1 << 1) 280e9034789SMichal Meloun #define UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN (1 << 0) 281e9034789SMichal Meloun 282e9034789SMichal Meloun #define PLLE_AUX 0x48c 283e9034789SMichal Meloun #define PLLE_AUX_SS_SEQ_INCLUDE (1U << 31) 284e9034789SMichal Meloun #define PLLE_AUX_REF_SEL_PLLREFE (1 << 28) 285e9034789SMichal Meloun #define PLLE_AUX_SEQ_STATE_GET(x) (((x) >> 26) & 0x03) 286e9034789SMichal Meloun #define PLLE_AUX_SEQ_STATE_OFF 0 287e9034789SMichal Meloun #define PLLE_AUX_SEQ_STATE_ON 1 288e9034789SMichal Meloun #define PLLE_AUX_SEQ_STATE_BUSY 2 289e9034789SMichal Meloun #define PLLE_AUX_SEQ_START_STATE (1 << 25) 290e9034789SMichal Meloun #define PLLE_AUX_SEQ_ENABLE (1 << 24) 291e9034789SMichal Meloun #define PLLE_AUX_SS_DLY(x) (((x) & 0xFF) << 16) 292e9034789SMichal Meloun #define PLLE_AUX_SS_LOCK_DLY(x) (((x) & 0xFF) << 8) 293e9034789SMichal Meloun #define PLLE_AUX_SS_TEST_FAST_PT (1 << 7) 294e9034789SMichal Meloun #define PLLE_AUX_SS_SWCTL (1 << 6) 295e9034789SMichal Meloun #define PLLE_AUX_CONFIG_SWCTL (1 << 6) 296e9034789SMichal Meloun #define PLLE_AUX_ENABLE_SWCTL (1 << 4) 297e9034789SMichal Meloun #define PLLE_AUX_USE_LOCKDET (1 << 3) 298e9034789SMichal Meloun #define PLLE_AUX_REF_SRC (1 << 2) 299e9034789SMichal Meloun #define PLLE_AUX_PLLP_CML1_OEN (1 << 1) 300e9034789SMichal Meloun #define PLLE_AUX_PLLP_CML0_OEN (1 << 0) 301e9034789SMichal Meloun 302e9034789SMichal Meloun #define SATA_PLL_CFG0 0x490 303e9034789SMichal Meloun #define SATA_PLL_CFG0_SEQ_START_STATE (1 << 25) 304e9034789SMichal Meloun #define SATA_PLL_CFG0_SEQ_ENABLE (1 << 24) 305e9034789SMichal Meloun #define SATA_PLL_CFG0_PADPLL_SLEEP_IDDQ (1 << 13) 306e9034789SMichal Meloun #define SATA_PLL_CFG0_SEQ_PADPLL_PD_INPUT_VALUE (1 << 7) 307e9034789SMichal Meloun #define SATA_PLL_CFG0_SEQ_LANE_PD_INPUT_VALUE (1 << 6) 308e9034789SMichal Meloun #define SATA_PLL_CFG0_SEQ_RESET_INPUT_VALUE (1 << 5) 309e9034789SMichal Meloun #define SATA_PLL_CFG0_SEQ_IN_SWCTL (1 << 4) 310e9034789SMichal Meloun #define SATA_PLL_CFG0_PADPLL_USE_LOCKDET (1 << 2) 311e9034789SMichal Meloun #define SATA_PLL_CFG0_PADPLL_RESET_OVERRIDE_VALUE (1 << 1) 312e9034789SMichal Meloun #define SATA_PLL_CFG0_PADPLL_RESET_SWCTL (1 << 0) 313e9034789SMichal Meloun 314e9034789SMichal Meloun #define SATA_PLL_CFG1 0x494 315e9034789SMichal Meloun #define PCIE_PLL_CFG 0x498 316e9034789SMichal Meloun #define PCIE_PLL_CFG_SEQ_START_STATE (1 << 25) 317e9034789SMichal Meloun #define PCIE_PLL_CFG_SEQ_ENABLE (1 << 24) 318e9034789SMichal Meloun 319e9034789SMichal Meloun #define PROG_AUDIO_DLY_CLK 0x49c 320e9034789SMichal Meloun #define AUDIO_SYNC_CLK_I2S1 0x4a0 321e9034789SMichal Meloun #define AUDIO_SYNC_CLK_I2S2 0x4a4 322e9034789SMichal Meloun #define AUDIO_SYNC_CLK_I2S3 0x4a8 323e9034789SMichal Meloun #define AUDIO_SYNC_CLK_I2S4 0x4ac 324e9034789SMichal Meloun #define AUDIO_SYNC_CLK_I2S5 0x4b0 325e9034789SMichal Meloun #define AUDIO_SYNC_CLK_SPDIF 0x4b4 326e9034789SMichal Meloun #define PLLD2_BASE 0x4b8 327e9034789SMichal Meloun #define PLLD2_MISC 0x4bc 328e9034789SMichal Meloun #define UTMIP_PLL_CFG3 0x4c0 329e9034789SMichal Meloun #define PLLREFE_BASE 0x4c4 330e9034789SMichal Meloun #define PLLREFE_MISC 0x4c8 331e9034789SMichal Meloun #define PLLREFE_OUT 0x4cc 332e9034789SMichal Meloun #define CPU_FINETRIM_BYP 0x4d0 333e9034789SMichal Meloun #define CPU_FINETRIM_SELECT 0x4d4 334e9034789SMichal Meloun #define CPU_FINETRIM_DR 0x4d8 335e9034789SMichal Meloun #define CPU_FINETRIM_DF 0x4dc 336e9034789SMichal Meloun #define CPU_FINETRIM_F 0x4e0 337e9034789SMichal Meloun #define CPU_FINETRIM_R 0x4e4 338e9034789SMichal Meloun #define PLLC2_BASE 0x4e8 339e9034789SMichal Meloun #define PLLC2_MISC_0 0x4ec 340e9034789SMichal Meloun #define PLLC2_MISC_1 0x4f0 341e9034789SMichal Meloun #define PLLC2_MISC_2 0x4f4 342e9034789SMichal Meloun #define PLLC2_MISC_3 0x4f8 343e9034789SMichal Meloun #define PLLC3_BASE 0x4fc 344e9034789SMichal Meloun 345e9034789SMichal Meloun #define PLLC3_MISC_0 0x500 346e9034789SMichal Meloun #define PLLC3_MISC_1 0x504 347e9034789SMichal Meloun #define PLLC3_MISC_2 0x508 348e9034789SMichal Meloun #define PLLC3_MISC_3 0x50c 349e9034789SMichal Meloun #define PLLX_MISC_2 0x514 350e9034789SMichal Meloun #define PLLX_MISC_2 0x514 351e9034789SMichal Meloun #define PLLX_MISC_2_DYNRAMP_STEPB(x) (((x) & 0xFF) << 24) 352e9034789SMichal Meloun #define PLLX_MISC_2_DYNRAMP_STEPA(x) (((x) & 0xFF) << 16) 353e9034789SMichal Meloun #define PLLX_MISC_2_NDIV_NEW(x) (((x) & 0xFF) << 8) 354e9034789SMichal Meloun #define PLLX_MISC_2_EN_FSTLCK (1 << 5) 355e9034789SMichal Meloun #define PLLX_MISC_2_LOCK_OVERRIDE (1 << 4) 356e9034789SMichal Meloun #define PLLX_MISC_2_PLL_FREQLOCK (1 << 3) 357e9034789SMichal Meloun #define PLLX_MISC_2_DYNRAMP_DONE (1 << 2) 358e9034789SMichal Meloun #define PLLX_MISC_2_EN_DYNRAMP (1 << 0) 359e9034789SMichal Meloun 360e9034789SMichal Meloun #define PLLX_MISC_3 0x518 361e9034789SMichal Meloun 362e9034789SMichal Meloun #define XUSBIO_PLL_CFG0 0x51c 363e9034789SMichal Meloun #define XUSBIO_PLL_CFG0_SEQ_START_STATE (1 << 25) 364e9034789SMichal Meloun #define XUSBIO_PLL_CFG0_SEQ_ENABLE (1 << 24) 365e9034789SMichal Meloun #define XUSBIO_PLL_CFG0_PADPLL_SLEEP_IDDQ (1 << 13) 366e9034789SMichal Meloun #define XUSBIO_PLL_CFG0_PADPLL_USE_LOCKDET (1 << 6) 367e9034789SMichal Meloun #define XUSBIO_PLL_CFG0_CLK_ENABLE_SWCTL (1 << 2) 368e9034789SMichal Meloun #define XUSBIO_PLL_CFG0_PADPLL_RESET_SWCTL (1 << 0) 369e9034789SMichal Meloun 370e9034789SMichal Meloun #define XUSBIO_PLL_CFG1 0x520 371e9034789SMichal Meloun #define PLLE_AUX1 0x524 372e9034789SMichal Meloun #define PLLP_RESHIFT 0x528 373e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0 0x52c 374e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_UTMIPLL_LOCK (1U << 31) 375e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_SEQ_START_STATE (1 << 25) 376e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_SEQ_ENABLE (1 << 24) 377e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_IDDQ_PD_INCLUDE (1 << 7) 378e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_USE_LOCKDET (1 << 6) 379e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_SEQ_RESET_INPUT_VALUE (1 << 5) 380e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_SEQ_IN_SWCTL (1 << 4) 381e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL (1 << 2) 382e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE (1 << 1) 383e9034789SMichal Meloun #define UTMIPLL_HW_PWRDN_CFG0_IDDQ_SWCTL (1 << 0) 384e9034789SMichal Meloun 385e9034789SMichal Meloun #define PLLU_HW_PWRDN_CFG0 0x530 386e9034789SMichal Meloun #define PLLU_HW_PWRDN_CFG0_IDDQ_PD_INCLUDE (1 << 28) 387e9034789SMichal Meloun #define PLLU_HW_PWRDN_CFG0_SEQ_ENABLE (1 << 24) 388e9034789SMichal Meloun #define PLLU_HW_PWRDN_CFG0_USE_SWITCH_DETECT (1 << 7) 389e9034789SMichal Meloun #define PLLU_HW_PWRDN_CFG0_USE_LOCKDET (1 << 6) 390e9034789SMichal Meloun #define PLLU_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL (1 << 2) 391e9034789SMichal Meloun #define PLLU_HW_PWRDN_CFG0_CLK_SWITCH_SWCTL (1 << 0) 392e9034789SMichal Meloun 393e9034789SMichal Meloun #define XUSB_PLL_CFG0 0x534 394e9034789SMichal Meloun #define XUSB_PLL_CFG0_UTMIPLL_LOCK_DLY 0x3ff 395e9034789SMichal Meloun #define XUSB_PLL_CFG0_PLLU_LOCK_DLY_MASK (0x3ff << 14) 396e9034789SMichal Meloun 397e9034789SMichal Meloun #define CLK_CPU_MISC 0x53c 398e9034789SMichal Meloun #define CLK_CPUG_MISC 0x540 399e9034789SMichal Meloun #define PLLX_HW_CTRL_CFG 0x548 400e9034789SMichal Meloun #define PLLX_SW_RAMP_CFG 0x54c 401e9034789SMichal Meloun #define PLLX_HW_CTRL_STATUS 0x550 402e9034789SMichal Meloun #define SPARE_REG0 0x55c 403e9034789SMichal Meloun #define SPARE_REG0_MDIV_GET(x) (((x) >> 2) & 0x03) 404e9034789SMichal Meloun 405e9034789SMichal Meloun #define AUDIO_SYNC_CLK_DMIC1 0x560 406e9034789SMichal Meloun #define AUDIO_SYNC_CLK_DMIC2 0x564 407e9034789SMichal Meloun #define PLLD2_SS_CFG 0x570 408e9034789SMichal Meloun #define PLLD2_SS_CTRL1 0x574 409e9034789SMichal Meloun #define PLLD2_SS_CTRL2 0x578 410e9034789SMichal Meloun #define PLLDP_BASE 0x590 411e9034789SMichal Meloun #define PLLDP_MISC 0x594 412e9034789SMichal Meloun #define PLLDP_SS_CFG 0x594 413e9034789SMichal Meloun #define PLLDP_SS_CTRL1 0x598 414e9034789SMichal Meloun #define PLLDP_SS_CTRL2 0x5a0 415e9034789SMichal Meloun #define PLLC4_BASE 0x5a4 416e9034789SMichal Meloun #define PLLC4_MISC 0x5a8 417e9034789SMichal Meloun #define SPARE0 0x5c4 418e9034789SMichal Meloun #define SPARE1 0x5c8 419e9034789SMichal Meloun #define GPU_ISOB_CTRL 0x5cc 420e9034789SMichal Meloun #define PLLC_MISC_2 0x5d0 421e9034789SMichal Meloun #define PLLC_MISC_3 0x5d4 422e9034789SMichal Meloun #define PLLA_MISC2 0x5d8 423e9034789SMichal Meloun #define PLLC4_OUT 0x5e4 424e9034789SMichal Meloun #define PLLMB_BASE 0x5e8 425e9034789SMichal Meloun #define PLLMB_MISC1 0x5ec 426e9034789SMichal Meloun #define PLLX_MISC_4 0x5f0 427e9034789SMichal Meloun #define PLLX_MISC_5 0x5f4 428e9034789SMichal Meloun 429e9034789SMichal Meloun #define CLK_SOURCE_XUSB_CORE_HOST 0x600 430e9034789SMichal Meloun #define CLK_SOURCE_XUSB_FALCON 0x604 431e9034789SMichal Meloun #define CLK_SOURCE_XUSB_FS 0x608 432e9034789SMichal Meloun #define CLK_SOURCE_XUSB_CORE_DEV 0x60c 433e9034789SMichal Meloun #define CLK_SOURCE_XUSB_SS 0x610 434e9034789SMichal Meloun #define CLK_SOURCE_CILAB 0x614 435e9034789SMichal Meloun #define CLK_SOURCE_CILCD 0x618 436e9034789SMichal Meloun #define CLK_SOURCE_CILEF 0x61c 437e9034789SMichal Meloun #define CLK_SOURCE_DSIA_LP 0x620 438e9034789SMichal Meloun #define CLK_SOURCE_DSIB_LP 0x624 439e9034789SMichal Meloun #define CLK_SOURCE_ENTROPY 0x628 440e9034789SMichal Meloun #define CLK_SOURCE_DVFS_REF 0x62c 441e9034789SMichal Meloun #define CLK_SOURCE_DVFS_SOC 0x630 442e9034789SMichal Meloun #define CLK_SOURCE_EMC_LATENCY 0x640 443e9034789SMichal Meloun #define CLK_SOURCE_SOC_THERM 0x644 444e9034789SMichal Meloun #define CLK_SOURCE_DMIC1 0x64c 445e9034789SMichal Meloun #define CLK_SOURCE_DMIC2 0x650 446e9034789SMichal Meloun #define CLK_SOURCE_VI_SENSOR2 0x658 447e9034789SMichal Meloun #define CLK_SOURCE_I2C6 0x65c 448e9034789SMichal Meloun #define CLK_SOURCE_MIPIBIF 0x660 449e9034789SMichal Meloun #define CLK_SOURCE_EMC_DLL 0x664 450e9034789SMichal Meloun #define CLK_SOURCE_UART_FST_MIPI_CAL 0x66c 451e9034789SMichal Meloun #define CLK_SOURCE_VIC 0x678 452e9034789SMichal Meloun #define PLLP_OUTC 0x67c 453e9034789SMichal Meloun #define PLLP_MISC1 0x680 454e9034789SMichal Meloun #define EMC_DIV_CLK_SHAPER_CTRL 0x68c 455e9034789SMichal Meloun #define EMC_PLLC_SHAPER_CTRL 0x690 456e9034789SMichal Meloun #define CLK_SOURCE_SDMMC_LEGACY_TM 0x694 457e9034789SMichal Meloun #define CLK_SOURCE_NVDEC 0x698 458e9034789SMichal Meloun #define CLK_SOURCE_NVJPG 0x69c 459e9034789SMichal Meloun #define CLK_SOURCE_NVENC 0x6a0 460e9034789SMichal Meloun #define PLLA1_BASE 0x6a4 461e9034789SMichal Meloun #define PLLA1_MISC_0 0x6a8 462e9034789SMichal Meloun #define PLLA1_MISC_1 0x6ac 463e9034789SMichal Meloun #define PLLA1_MISC_2 0x6b0 464e9034789SMichal Meloun #define PLLA1_MISC_3 0x6b4 465e9034789SMichal Meloun #define AUDIO_SYNC_CLK_DMIC3 0x6b8 466e9034789SMichal Meloun #define CLK_SOURCE_DMIC3 0x6bc 467e9034789SMichal Meloun #define CLK_SOURCE_APE 0x6c0 468e9034789SMichal Meloun #define CLK_SOURCE_QSPI 0x6c4 469e9034789SMichal Meloun #define CLK_SOURCE_VI_I2C 0x6c8 470e9034789SMichal Meloun #define CLK_SOURCE_USB2_HSIC_TRK 0x6cc 471e9034789SMichal Meloun #define CLK_SOURCE_PEX_SATA_USB_RX_BYP 0x6d0 472e9034789SMichal Meloun #define CLK_SOURCE_MAUD 0x6d4 473e9034789SMichal Meloun #define CLK_SOURCE_TSECB 0x6d8 474e9034789SMichal Meloun #define CLK_CPUG_MISC1 0x6d8 475e9034789SMichal Meloun #define ACLK_BURST_POLICY 0x6e0 476e9034789SMichal Meloun #define SUPER_ACLK_DIVIDER 0x6e4 477e9034789SMichal Meloun #define NVENC_SUPER_CLK_DIVIDER 0x6e8 478e9034789SMichal Meloun #define VI_SUPER_CLK_DIVIDER 0x6ec 479e9034789SMichal Meloun #define VIC_SUPER_CLK_DIVIDER 0x6f0 480e9034789SMichal Meloun #define NVDEC_SUPER_CLK_DIVIDER 0x6f4 481e9034789SMichal Meloun #define ISP_SUPER_CLK_DIVIDER 0x6f8 482e9034789SMichal Meloun #define ISPB_SUPER_CLK_DIVIDER 0x6fc 483e9034789SMichal Meloun 484e9034789SMichal Meloun #define NVJPG_SUPER_CLK_DIVIDER 0x700 485e9034789SMichal Meloun #define SE_SUPER_CLK_DIVIDER 0x704 486e9034789SMichal Meloun #define TSEC_SUPER_CLK_DIVIDER 0x708 487e9034789SMichal Meloun #define TSECB_SUPER_CLK_DIVIDER 0x70c 488e9034789SMichal Meloun #define CLK_SOURCE_UARTAPE 0x710 489e9034789SMichal Meloun #define CLK_CPUG_MISC2 0x714 490e9034789SMichal Meloun #define CLK_SOURCE_DBGAPB 0x718 491e9034789SMichal Meloun #define CLK_CCPLEX_CC4_RET_CLK_ENB 0x71c 492e9034789SMichal Meloun #define ACTMON_CPU_CLK 0x720 493e9034789SMichal Meloun #define CLK_SOURCE_EMC_SAFE 0x724 494e9034789SMichal Meloun #define SDMMC2_PLLC4_OUT0_SHAPER_CTRL 0x728 495e9034789SMichal Meloun #define SDMMC2_PLLC4_OUT1_SHAPER_CTRL 0x72c 496e9034789SMichal Meloun #define SDMMC2_PLLC4_OUT2_SHAPER_CTRL 0x730 497e9034789SMichal Meloun #define SDMMC2_DIV_CLK_SHAPER_CTRL 0x734 498e9034789SMichal Meloun #define SDMMC4_PLLC4_OUT0_SHAPER_CTRL 0x738 499e9034789SMichal Meloun #define SDMMC4_PLLC4_OUT1_SHAPER_CTRL 0x73c 500e9034789SMichal Meloun #define SDMMC4_PLLC4_OUT2_SHAPER_CTRL 0x740 501e9034789SMichal Meloun #define SDMMC4_DIV_CLK_SHAPER_CTRL 0x744 502e9034789SMichal Meloun 503e9034789SMichal Meloun struct tegra210_car_softc { 504e9034789SMichal Meloun device_t dev; 505e9034789SMichal Meloun struct resource * mem_res; 506e9034789SMichal Meloun struct mtx mtx; 507e9034789SMichal Meloun struct clkdom *clkdom; 508e9034789SMichal Meloun int type; 509e9034789SMichal Meloun }; 510e9034789SMichal Meloun 511e9034789SMichal Meloun struct tegra210_init_item { 512e9034789SMichal Meloun char *name; 513e9034789SMichal Meloun char *parent; 514e9034789SMichal Meloun uint64_t frequency; 515e9034789SMichal Meloun int enable; 516e9034789SMichal Meloun }; 517e9034789SMichal Meloun 518e9034789SMichal Meloun void tegra210_init_plls(struct tegra210_car_softc *sc); 519e9034789SMichal Meloun 520e9034789SMichal Meloun void tegra210_periph_clock(struct tegra210_car_softc *sc); 521e9034789SMichal Meloun void tegra210_super_mux_clock(struct tegra210_car_softc *sc); 522e9034789SMichal Meloun 523e9034789SMichal Meloun int tegra210_hwreset_by_idx(struct tegra210_car_softc *sc, intptr_t idx, 524e9034789SMichal Meloun bool reset); 525e9034789SMichal Meloun 526e9034789SMichal Meloun #endif /*_TEGRA210_CAR_*/