xref: /freebsd/sys/arm/nvidia/tegra124/tegra124_car.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1*ef2ee5d0SMichal Meloun /*-
2*ef2ee5d0SMichal Meloun  * Copyright (c) 2016 Michal Meloun <mmel@FreeBSD.org>
3*ef2ee5d0SMichal Meloun  * All rights reserved.
4*ef2ee5d0SMichal Meloun  *
5*ef2ee5d0SMichal Meloun  * Redistribution and use in source and binary forms, with or without
6*ef2ee5d0SMichal Meloun  * modification, are permitted provided that the following conditions
7*ef2ee5d0SMichal Meloun  * are met:
8*ef2ee5d0SMichal Meloun  * 1. Redistributions of source code must retain the above copyright
9*ef2ee5d0SMichal Meloun  *    notice, this list of conditions and the following disclaimer.
10*ef2ee5d0SMichal Meloun  * 2. Redistributions in binary form must reproduce the above copyright
11*ef2ee5d0SMichal Meloun  *    notice, this list of conditions and the following disclaimer in the
12*ef2ee5d0SMichal Meloun  *    documentation and/or other materials provided with the distribution.
13*ef2ee5d0SMichal Meloun  *
14*ef2ee5d0SMichal Meloun  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*ef2ee5d0SMichal Meloun  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*ef2ee5d0SMichal Meloun  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*ef2ee5d0SMichal Meloun  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*ef2ee5d0SMichal Meloun  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*ef2ee5d0SMichal Meloun  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*ef2ee5d0SMichal Meloun  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*ef2ee5d0SMichal Meloun  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*ef2ee5d0SMichal Meloun  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*ef2ee5d0SMichal Meloun  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*ef2ee5d0SMichal Meloun  * SUCH DAMAGE.
25*ef2ee5d0SMichal Meloun  */
26*ef2ee5d0SMichal Meloun 
27*ef2ee5d0SMichal Meloun #ifndef _TEGRA124_CAR_
28*ef2ee5d0SMichal Meloun #define	_TEGRA124_CAR_
29*ef2ee5d0SMichal Meloun 
30*ef2ee5d0SMichal Meloun #include "clkdev_if.h"
31*ef2ee5d0SMichal Meloun 
32*ef2ee5d0SMichal Meloun #define	RD4(sc, reg, val)	CLKDEV_READ_4((sc)->clkdev, reg, val)
33*ef2ee5d0SMichal Meloun #define	WR4(sc, reg, val)	CLKDEV_WRITE_4((sc)->clkdev, reg, val)
34*ef2ee5d0SMichal Meloun #define	MD4(sc, reg, mask, set)	CLKDEV_MODIFY_4((sc)->clkdev, reg, mask, set)
35*ef2ee5d0SMichal Meloun #define	DEVICE_LOCK(sc)		CLKDEV_DEVICE_LOCK((sc)->clkdev)
36*ef2ee5d0SMichal Meloun #define	DEVICE_UNLOCK(sc)	CLKDEV_DEVICE_UNLOCK((sc)->clkdev)
37*ef2ee5d0SMichal Meloun 
38*ef2ee5d0SMichal Meloun #define	RST_DEVICES_L			0x004
39*ef2ee5d0SMichal Meloun #define	RST_DEVICES_H			0x008
40*ef2ee5d0SMichal Meloun #define	RST_DEVICES_U			0x00C
41*ef2ee5d0SMichal Meloun #define	CLK_OUT_ENB_L			0x010
42*ef2ee5d0SMichal Meloun #define	CLK_OUT_ENB_H			0x014
43*ef2ee5d0SMichal Meloun #define	CLK_OUT_ENB_U			0x018
44*ef2ee5d0SMichal Meloun #define	CCLK_BURST_POLICY		0x020
45*ef2ee5d0SMichal Meloun #define	SUPER_CCLK_DIVIDER		0x024
46*ef2ee5d0SMichal Meloun #define	SCLK_BURST_POLICY		0x028
47*ef2ee5d0SMichal Meloun #define	SUPER_SCLK_DIVIDER		0x02c
48*ef2ee5d0SMichal Meloun #define	CLK_SYSTEM_RATE			0x030
49*ef2ee5d0SMichal Meloun 
50*ef2ee5d0SMichal Meloun #define	OSC_CTRL			0x050
51*ef2ee5d0SMichal Meloun  #define	OSC_CTRL_OSC_FREQ_SHIFT		28
52*ef2ee5d0SMichal Meloun  #define	OSC_CTRL_PLL_REF_DIV_SHIFT		26
53*ef2ee5d0SMichal Meloun 
54*ef2ee5d0SMichal Meloun #define	PLLE_SS_CNTL 			0x068
55*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_SSCINCINTRV_MASK		(0x3f << 24)
56*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_SSCINCINTRV_VAL 		(0x20 << 24)
57*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_SSCINC_MASK 		(0xff << 16)
58*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_SSCINC_VAL 		(0x1 << 16)
59*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_SSCINVERT 		(1 << 15)
60*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_SSCCENTER 		(1 << 14)
61*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_SSCBYP 			(1 << 12)
62*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_INTERP_RESET 		(1 << 11)
63*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_BYPASS_SS 		(1 << 10)
64*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_SSCMAX_MASK		0x1ff
65*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_SSCMAX_VAL 		0x25
66*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_DISABLE 			(PLLE_SS_CNTL_BYPASS_SS |    \
67*ef2ee5d0SMichal Meloun 						 PLLE_SS_CNTL_INTERP_RESET | \
68*ef2ee5d0SMichal Meloun 						 PLLE_SS_CNTL_SSCBYP)
69*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_COEFFICIENTS_MASK 	(PLLE_SS_CNTL_SSCMAX_MASK |  \
70*ef2ee5d0SMichal Meloun 						 PLLE_SS_CNTL_SSCINC_MASK |  \
71*ef2ee5d0SMichal Meloun 						 PLLE_SS_CNTL_SSCINCINTRV_MASK)
72*ef2ee5d0SMichal Meloun #define	 PLLE_SS_CNTL_COEFFICIENTS_VAL 		(PLLE_SS_CNTL_SSCMAX_VAL |   \
73*ef2ee5d0SMichal Meloun 						 PLLE_SS_CNTL_SSCINC_VAL |   \
74*ef2ee5d0SMichal Meloun 						 PLLE_SS_CNTL_SSCINCINTRV_VAL)
75*ef2ee5d0SMichal Meloun 
76*ef2ee5d0SMichal Meloun #define	PLLC_BASE			0x080
77*ef2ee5d0SMichal Meloun #define	PLLC_OUT			0x084
78*ef2ee5d0SMichal Meloun #define	PLLC_MISC2			0x088
79*ef2ee5d0SMichal Meloun #define	PLLC_MISC			0x08c
80*ef2ee5d0SMichal Meloun #define	PLLM_BASE			0x090
81*ef2ee5d0SMichal Meloun #define	PLLM_OUT			0x094
82*ef2ee5d0SMichal Meloun #define	PLLM_MISC			0x09c
83*ef2ee5d0SMichal Meloun #define	PLLP_BASE			0x0a0
84*ef2ee5d0SMichal Meloun #define	PLLP_MISC			0x0ac
85*ef2ee5d0SMichal Meloun #define	PLLP_OUTA			0x0a4
86*ef2ee5d0SMichal Meloun #define	PLLP_OUTB			0x0a8
87*ef2ee5d0SMichal Meloun #define	PLLA_BASE			0x0b0
88*ef2ee5d0SMichal Meloun #define	PLLA_OUT			0x0b4
89*ef2ee5d0SMichal Meloun #define	PLLA_MISC			0x0bc
90*ef2ee5d0SMichal Meloun #define	PLLU_BASE			0x0c0
91*ef2ee5d0SMichal Meloun #define	PLLU_MISC			0x0cc
92*ef2ee5d0SMichal Meloun #define	PLLD_BASE			0x0d0
93*ef2ee5d0SMichal Meloun #define	PLLD_MISC			0x0dc
94*ef2ee5d0SMichal Meloun #define	PLLX_BASE			0x0e0
95*ef2ee5d0SMichal Meloun #define	PLLX_MISC			0x0e4
96*ef2ee5d0SMichal Meloun #define	PLLE_BASE			0x0e8
97*ef2ee5d0SMichal Meloun #define	 PLLE_BASE_LOCK_OVERRIDE		(1 << 29)
98*ef2ee5d0SMichal Meloun #define	 PLLE_BASE_DIVCML_SHIFT 		24
99*ef2ee5d0SMichal Meloun #define	 PLLE_BASE_DIVCML_MASK 			0xf
100*ef2ee5d0SMichal Meloun 
101*ef2ee5d0SMichal Meloun #define	PLLE_MISC			0x0ec
102*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_SETUP_BASE_SHIFT 		16
103*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_SETUP_BASE_MASK 		(0xffff << PLLE_MISC_SETUP_BASE_SHIFT)
104*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_READY 			(1 << 15)
105*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_IDDQ_SWCTL			(1 << 14)
106*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_IDDQ_OVERRIDE_VALUE		(1 << 13)
107*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_LOCK 			(1 << 11)
108*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_REF_ENABLE 			(1 << 10)
109*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_LOCK_ENABLE 			(1 << 9)
110*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_PTS 				(1 << 8)
111*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_VREG_BG_CTRL_SHIFT		4
112*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_VREG_BG_CTRL_MASK		(3 << PLLE_MISC_VREG_BG_CTRL_SHIFT)
113*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_VREG_CTRL_SHIFT		2
114*ef2ee5d0SMichal Meloun #define	 PLLE_MISC_VREG_CTRL_MASK		(2 << PLLE_MISC_VREG_CTRL_SHIFT)
115*ef2ee5d0SMichal Meloun 
116*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2S1			0x100
117*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2S2			0x104
118*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SPDIF_OUT		0x108
119*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SPDIF_IN		0x10c
120*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_PWM			0x110
121*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SPI2			0x118
122*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SPI3			0x11c
123*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2C1			0x124
124*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2C5			0x128
125*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SPI1			0x134
126*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DISP1		0x138
127*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DISP2		0x13c
128*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_ISP			0x144
129*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_VI			0x148
130*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SDMMC1		0x150
131*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SDMMC2		0x154
132*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SDMMC4		0x164
133*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_VFIR			0x168
134*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_HSI			0x174
135*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_UARTA		0x178
136*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_UARTB		0x17c
137*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_HOST1X		0x180
138*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_HDMI			0x18c
139*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2C2			0x198
140*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_EMC			0x19c
141*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_UARTC		0x1a0
142*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_VI_SENSOR		0x1a8
143*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SPI4			0x1b4
144*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2C3			0x1b8
145*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SDMMC3		0x1bc
146*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_UARTD		0x1c0
147*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_VDE			0x1c8
148*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_OWR			0x1cc
149*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_NOR			0x1d0
150*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_CSITE		0x1d4
151*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2S0			0x1d8
152*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DTV			0x1dc
153*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_MSENC		0x1f0
154*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_TSEC			0x1f4
155*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SPARE2		0x1f8
156*ef2ee5d0SMichal Meloun 
157*ef2ee5d0SMichal Meloun #define	CLK_OUT_ENB_X			0x280
158*ef2ee5d0SMichal Meloun #define	RST_DEVICES_X			0x28C
159*ef2ee5d0SMichal Meloun 
160*ef2ee5d0SMichal Meloun #define	RST_DEVICES_V			0x358
161*ef2ee5d0SMichal Meloun #define	RST_DEVICES_W			0x35C
162*ef2ee5d0SMichal Meloun #define	CLK_OUT_ENB_V			0x360
163*ef2ee5d0SMichal Meloun #define	CLK_OUT_ENB_W			0x364
164*ef2ee5d0SMichal Meloun #define	CCLKG_BURST_POLICY		0x368
165*ef2ee5d0SMichal Meloun #define	SUPER_CCLKG_DIVIDER		0x36C
166*ef2ee5d0SMichal Meloun #define	CCLKLP_BURST_POLICY		0x370
167*ef2ee5d0SMichal Meloun #define	SUPER_CCLKLP_DIVIDER		0x374
168*ef2ee5d0SMichal Meloun 
169*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_MSELECT		0x3b4
170*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_TSENSOR		0x3b8
171*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2S3			0x3bc
172*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2S4			0x3c0
173*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2C4			0x3c4
174*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SPI5			0x3c8
175*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SPI6			0x3cc
176*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_AUDIO		0x3d0
177*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DAM0			0x3d8
178*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DAM1			0x3dc
179*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DAM2			0x3e0
180*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_HDA2CODEC_2X		0x3e4
181*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_ACTMON		0x3e8
182*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_EXTPERIPH1		0x3ec
183*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_EXTPERIPH2		0x3f0
184*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_EXTPERIPH3		0x3f4
185*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2C_SLOW		0x3fc
186*ef2ee5d0SMichal Meloun 
187*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SYS			0x400
188*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SOR0			0x414
189*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SATA_OOB		0x420
190*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SATA			0x424
191*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_HDA			0x428
192*ef2ee5d0SMichal Meloun #define	UTMIP_PLL_CFG0			0x480
193*ef2ee5d0SMichal Meloun #define	UTMIP_PLL_CFG1			0x484
194*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG1_FORCE_PLLU_POWERUP		(1 << 17)
195*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN		(1 << 16)
196*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP	(1 << 15)
197*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN	(1 << 14)
198*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN 	(1 << 12)
199*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(x)		(((x) & 0x1f) << 6)
200*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(x)		(((x) & 0xfff) << 0)
201*ef2ee5d0SMichal Meloun 
202*ef2ee5d0SMichal Meloun #define	UTMIP_PLL_CFG2			0x488
203*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(x)		(((x) & 0x3f) << 18)
204*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG2_STABLE_COUNT(x)			(((x) & 0xffff) << 6)
205*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERDOWN 	(1 << 4)
206*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN 	(1 << 2)
207*ef2ee5d0SMichal Meloun #define	 UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN	(1 << 0)
208*ef2ee5d0SMichal Meloun 
209*ef2ee5d0SMichal Meloun #define	PLLE_AUX			0x48c
210*ef2ee5d0SMichal Meloun #define	 PLLE_AUX_PLLRE_SEL				(1 << 28)
211*ef2ee5d0SMichal Meloun #define	 PLLE_AUX_SEQ_START_STATE 			(1 << 25)
212*ef2ee5d0SMichal Meloun #define	 PLLE_AUX_SEQ_ENABLE				(1 << 24)
213*ef2ee5d0SMichal Meloun #define	 PLLE_AUX_SS_SWCTL				(1 << 6)
214*ef2ee5d0SMichal Meloun #define	 PLLE_AUX_ENABLE_SWCTL				(1 << 4)
215*ef2ee5d0SMichal Meloun #define	 PLLE_AUX_USE_LOCKDET				(1 << 3)
216*ef2ee5d0SMichal Meloun #define	 PLLE_AUX_PLLP_SEL				(1 << 2)
217*ef2ee5d0SMichal Meloun 
218*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0			0x490
219*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0_SEQ_START_STATE			(1 << 25)
220*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0_SEQ_ENABLE			(1 << 24)
221*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0_SEQ_PADPLL_PD_INPUT_VALUE		(1 << 7)
222*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0_SEQ_LANE_PD_INPUT_VALUE		(1 << 6)
223*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0_SEQ_RESET_INPUT_VALUE		(1 << 5)
224*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0_SEQ_IN_SWCTL			(1 << 4)
225*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0_PADPLL_USE_LOCKDET		(1 << 2)
226*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0_PADPLL_RESET_OVERRIDE_VALUE	(1 << 1)
227*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG0_PADPLL_RESET_SWCTL		(1 << 0)
228*ef2ee5d0SMichal Meloun 
229*ef2ee5d0SMichal Meloun #define	SATA_PLL_CFG1			0x494
230*ef2ee5d0SMichal Meloun #define	PCIE_PLL_CFG0			0x498
231*ef2ee5d0SMichal Meloun #define	PCIE_PLL_CFG0_SEQ_START_STATE			(1 << 25)
232*ef2ee5d0SMichal Meloun #define	PCIE_PLL_CFG0_SEQ_ENABLE			(1 << 24)
233*ef2ee5d0SMichal Meloun 
234*ef2ee5d0SMichal Meloun #define	PLLD2_BASE			0x4b8
235*ef2ee5d0SMichal Meloun #define	PLLD2_MISC			0x4bc
236*ef2ee5d0SMichal Meloun #define	UTMIP_PLL_CFG3			0x4c0
237*ef2ee5d0SMichal Meloun #define	PLLRE_BASE			0x4c4
238*ef2ee5d0SMichal Meloun #define	PLLRE_MISC			0x4c8
239*ef2ee5d0SMichal Meloun #define	PLLC2_BASE			0x4e8
240*ef2ee5d0SMichal Meloun #define	PLLC2_MISC			0x4ec
241*ef2ee5d0SMichal Meloun #define	PLLC3_BASE			0x4fc
242*ef2ee5d0SMichal Meloun 
243*ef2ee5d0SMichal Meloun #define	PLLC3_MISC			0x500
244*ef2ee5d0SMichal Meloun #define	PLLX_MISC2			0x514
245*ef2ee5d0SMichal Meloun #define	PLLX_MISC2			0x514
246*ef2ee5d0SMichal Meloun #define	PLLX_MISC3			0x518
247*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_DYNRAMP_STEPB_MASK		0xFF
248*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_DYNRAMP_STEPB_SHIFT		24
249*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_DYNRAMP_STEPA_MASK		0xFF
250*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_DYNRAMP_STEPA_SHIFT		16
251*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_NDIV_NEW_MASK		0xFF
252*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_NDIV_NEW_SHIFT		8
253*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_EN_FSTLCK			(1 << 5)
254*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_LOCK_OVERRIDE		(1 << 4)
255*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_PLL_FREQLOCK		(1 << 3)
256*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_DYNRAMP_DONE		(1 << 2)
257*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_CLAMP_NDIV			(1 << 1)
258*ef2ee5d0SMichal Meloun #define	 PLLX_MISC3_EN_DYNRAMP			(1 << 0)
259*ef2ee5d0SMichal Meloun #define	XUSBIO_PLL_CFG0			0x51c
260*ef2ee5d0SMichal Meloun #define	 XUSBIO_PLL_CFG0_SEQ_START_STATE		(1 << 25)
261*ef2ee5d0SMichal Meloun #define	 XUSBIO_PLL_CFG0_SEQ_ENABLE			(1 << 24)
262*ef2ee5d0SMichal Meloun #define	 XUSBIO_PLL_CFG0_PADPLL_USE_LOCKDET		(1 << 6)
263*ef2ee5d0SMichal Meloun #define	 XUSBIO_PLL_CFG0_CLK_ENABLE_SWCTL		(1 << 2)
264*ef2ee5d0SMichal Meloun #define	 XUSBIO_PLL_CFG0_PADPLL_RESET_SWCTL		(1 << 0)
265*ef2ee5d0SMichal Meloun 
266*ef2ee5d0SMichal Meloun #define	PLLP_RESHIFT			0x528
267*ef2ee5d0SMichal Meloun #define	UTMIPLL_HW_PWRDN_CFG0		0x52c
268*ef2ee5d0SMichal Meloun #define	 UTMIPLL_HW_PWRDN_CFG0_SEQ_START_STATE		(1 << 25)
269*ef2ee5d0SMichal Meloun #define	 UTMIPLL_HW_PWRDN_CFG0_SEQ_ENABLE		(1 << 24)
270*ef2ee5d0SMichal Meloun #define	 UTMIPLL_HW_PWRDN_CFG0_USE_LOCKDET		(1 << 6)
271*ef2ee5d0SMichal Meloun #define	 UTMIPLL_HW_PWRDN_CFG0_SEQ_RESET_INPUT_VALUE	(1 << 5)
272*ef2ee5d0SMichal Meloun #define	 UTMIPLL_HW_PWRDN_CFG0_SEQ_IN_SWCTL		(1 << 4)
273*ef2ee5d0SMichal Meloun #define	 UTMIPLL_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL		(1 << 2)
274*ef2ee5d0SMichal Meloun #define	 UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE		(1 << 1)
275*ef2ee5d0SMichal Meloun #define	 UTMIPLL_HW_PWRDN_CFG0_IDDQ_SWCTL		(1 << 0)
276*ef2ee5d0SMichal Meloun 
277*ef2ee5d0SMichal Meloun #define	PLLDP_BASE			0x590
278*ef2ee5d0SMichal Meloun #define	PLLDP_MISC			0x594
279*ef2ee5d0SMichal Meloun #define	PLLC4_BASE			0x5a4
280*ef2ee5d0SMichal Meloun #define	PLLC4_MISC			0x5a8
281*ef2ee5d0SMichal Meloun 
282*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_XUSB_CORE_HOST	0x600
283*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_XUSB_FALCON		0x604
284*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_XUSB_FS		0x608
285*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_XUSB_CORE_DEV	0x60c
286*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_XUSB_SS		0x610
287*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_CILAB		0x614
288*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_CILCD		0x618
289*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_CILE			0x61c
290*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DSIA_LP		0x620
291*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DSIB_LP		0x624
292*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_ENTROPY		0x628
293*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DVFS_REF		0x62c
294*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_DVFS_SOC		0x630
295*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_TRACECLKIN		0x634
296*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_ADX			0x638
297*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_AMX			0x63c
298*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_EMC_LATENCY		0x640
299*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_SOC_THERM		0x644
300*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_VI_SENSOR2		0x658
301*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_I2C6			0x65c
302*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_EMC_DLL		0x664
303*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_HDMI_AUDIO		0x668
304*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_CLK72MHZ		0x66c
305*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_ADX1			0x670
306*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_AMX1			0x674
307*ef2ee5d0SMichal Meloun #define	CLK_SOURCE_VIC			0x678
308*ef2ee5d0SMichal Meloun #define	PLLP_OUTC			0x67c
309*ef2ee5d0SMichal Meloun #define	PLLP_MISC1			0x680
310*ef2ee5d0SMichal Meloun 
311*ef2ee5d0SMichal Meloun struct tegra124_car_softc {
312*ef2ee5d0SMichal Meloun 	device_t		dev;
313*ef2ee5d0SMichal Meloun 	struct resource *	mem_res;
314*ef2ee5d0SMichal Meloun 	struct mtx		mtx;
315*ef2ee5d0SMichal Meloun 	struct clkdom 		*clkdom;
316*ef2ee5d0SMichal Meloun 	int			type;
317*ef2ee5d0SMichal Meloun };
318*ef2ee5d0SMichal Meloun 
319*ef2ee5d0SMichal Meloun struct tegra124_init_item {
320*ef2ee5d0SMichal Meloun 	char 		*name;
321*ef2ee5d0SMichal Meloun 	char 		*parent;
322*ef2ee5d0SMichal Meloun 	uint64_t	frequency;
323*ef2ee5d0SMichal Meloun 	int 		enable;
324*ef2ee5d0SMichal Meloun };
325*ef2ee5d0SMichal Meloun 
326*ef2ee5d0SMichal Meloun void tegra124_init_plls(struct tegra124_car_softc *sc);
327*ef2ee5d0SMichal Meloun 
328*ef2ee5d0SMichal Meloun void tegra124_periph_clock(struct tegra124_car_softc *sc);
329*ef2ee5d0SMichal Meloun void tegra124_super_mux_clock(struct tegra124_car_softc *sc);
330*ef2ee5d0SMichal Meloun 
331*ef2ee5d0SMichal Meloun int tegra124_hwreset_by_idx(struct tegra124_car_softc *sc, intptr_t idx,
332*ef2ee5d0SMichal Meloun     bool reset);
333*ef2ee5d0SMichal Meloun 
334*ef2ee5d0SMichal Meloun #endif /*_TEGRA124_CAR_*/
335