Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
CTCaer
GitHub Repository: CTCaer/hekate
Path: blob/master/bdk/soc/clock.h
3694 views
1
/*
2
* Copyright (c) 2018 naehrwert
3
* Copyright (c) 2018-2025 CTCaer
4
*
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms and conditions of the GNU General Public License,
7
* version 2, as published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
* more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
*/
17
18
#ifndef _CLOCK_H_
19
#define _CLOCK_H_
20
21
#include <utils/types.h>
22
23
/*! Clock registers. */
24
#define CLK_RST_CONTROLLER_RST_SOURCE 0x0
25
#define CLK_RST_CONTROLLER_RST_DEVICES_L 0x4
26
#define CLK_RST_CONTROLLER_RST_DEVICES_H 0x8
27
#define CLK_RST_CONTROLLER_RST_DEVICES_U 0xC
28
#define CLK_RST_CONTROLLER_CLK_OUT_ENB_L 0x10
29
#define CLK_RST_CONTROLLER_CLK_OUT_ENB_H 0x14
30
#define CLK_RST_CONTROLLER_CLK_OUT_ENB_U 0x18
31
#define CLK_RST_CONTROLLER_CCLK_BURST_POLICY 0x20
32
#define CLK_RST_CONTROLLER_SUPER_CCLK_DIVIDER 0x24
33
#define CLK_RST_CONTROLLER_SCLK_BURST_POLICY 0x28
34
#define CLK_RST_CONTROLLER_SUPER_SCLK_DIVIDER 0x2C
35
#define CLK_RST_CONTROLLER_CLK_SYSTEM_RATE 0x30
36
#define CLK_RST_CONTROLLER_MISC_CLK_ENB 0x48
37
#define CLK_RST_CONTROLLER_OSC_CTRL 0x50
38
#define CLK_RST_CONTROLLER_OSC_FREQ_DET 0x58
39
#define CLK_RST_CONTROLLER_OSC_FREQ_DET_STATUS 0x5C
40
#define CLK_RST_CONTROLLER_PTO_CLK_CNT_CNTL 0x60
41
#define CLK_RST_CONTROLLER_PTO_CLK_CNT_STATUS 0x64
42
#define CLK_RST_CONTROLLER_PLLC_BASE 0x80
43
#define CLK_RST_CONTROLLER_PLLC_OUT 0x84
44
#define CLK_RST_CONTROLLER_PLLC_MISC 0x88
45
#define CLK_RST_CONTROLLER_PLLC_MISC_1 0x8C
46
#define CLK_RST_CONTROLLER_PLLM_BASE 0x90
47
#define CLK_RST_CONTROLLER_PLLM_MISC1 0x98
48
#define CLK_RST_CONTROLLER_PLLM_MISC2 0x9C
49
#define CLK_RST_CONTROLLER_PLLP_BASE 0xA0
50
#define CLK_RST_CONTROLLER_PLLP_OUTB 0xA8
51
#define CLK_RST_CONTROLLER_PLLA_BASE 0xB0
52
#define CLK_RST_CONTROLLER_PLLA_OUT 0xB4
53
#define CLK_RST_CONTROLLER_PLLA_MISC1 0xB8
54
#define CLK_RST_CONTROLLER_PLLA_MISC 0xBC
55
#define CLK_RST_CONTROLLER_PLLU_BASE 0xC0
56
#define CLK_RST_CONTROLLER_PLLU_OUTA 0xC4
57
#define CLK_RST_CONTROLLER_PLLU_MISC 0xCC
58
#define CLK_RST_CONTROLLER_PLLD_BASE 0xD0
59
#define CLK_RST_CONTROLLER_PLLD_MISC1 0xD8
60
#define CLK_RST_CONTROLLER_PLLD_MISC 0xDC
61
#define CLK_RST_CONTROLLER_PLLX_BASE 0xE0
62
#define CLK_RST_CONTROLLER_PLLX_MISC 0xE4
63
#define CLK_RST_CONTROLLER_PLLE_BASE 0xE8
64
#define CLK_RST_CONTROLLER_PLLE_MISC 0xEC
65
#define CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRA 0xF8
66
#define CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRB 0xFC
67
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2S2 0x100
68
#define CLK_RST_CONTROLLER_CLK_SOURCE_PWM 0x110
69
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C1 0x124
70
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C5 0x128
71
#define CLK_RST_CONTROLLER_CLK_SOURCE_DISP1 0x138
72
#define CLK_RST_CONTROLLER_CLK_SOURCE_VI 0x148
73
#define CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC1 0x150
74
#define CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC2 0x154
75
#define CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC4 0x164
76
#define CLK_RST_CONTROLLER_CLK_SOURCE_UARTA 0x178
77
#define CLK_RST_CONTROLLER_CLK_SOURCE_UARTB 0x17C
78
#define CLK_RST_CONTROLLER_CLK_SOURCE_HOST1X 0x180
79
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C2 0x198
80
#define CLK_RST_CONTROLLER_CLK_SOURCE_EMC 0x19C
81
#define CLK_RST_CONTROLLER_CLK_SOURCE_UARTC 0x1A0
82
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C3 0x1B8
83
#define CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC3 0x1BC
84
#define CLK_RST_CONTROLLER_CLK_SOURCE_UARTD 0x1C0
85
#define CLK_RST_CONTROLLER_CLK_SOURCE_CSITE 0x1D4
86
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2S1 0x1D8
87
#define CLK_RST_CONTROLLER_CLK_SOURCE_TSEC 0x1F4
88
#define CLK_RST_CONTROLLER_CLK_OUT_ENB_X 0x280
89
#define CLK_RST_CONTROLLER_CLK_ENB_X_SET 0x284
90
#define CLK_RST_CONTROLLER_CLK_ENB_X_CLR 0x288
91
#define CLK_RST_CONTROLLER_RST_DEVICES_X 0x28C
92
#define CLK_RST_CONTROLLER_RST_DEV_X_SET 0x290
93
#define CLK_RST_CONTROLLER_RST_DEV_X_CLR 0x294
94
#define CLK_RST_CONTROLLER_CLK_OUT_ENB_Y 0x298
95
#define CLK_RST_CONTROLLER_CLK_ENB_Y_SET 0x29C
96
#define CLK_RST_CONTROLLER_CLK_ENB_Y_CLR 0x2A0
97
#define CLK_RST_CONTROLLER_RST_DEVICES_Y 0x2A4
98
#define CLK_RST_CONTROLLER_RST_DEV_Y_SET 0x2A8
99
#define CLK_RST_CONTROLLER_RST_DEV_Y_CLR 0x2AC
100
#define CLK_RST_CONTROLLER_RST_DEV_L_SET 0x300
101
#define CLK_RST_CONTROLLER_RST_DEV_L_CLR 0x304
102
#define CLK_RST_CONTROLLER_RST_DEV_H_SET 0x308
103
#define CLK_RST_CONTROLLER_RST_DEV_H_CLR 0x30C
104
#define CLK_RST_CONTROLLER_RST_DEV_U_SET 0x310
105
#define CLK_RST_CONTROLLER_RST_DEV_U_CLR 0x314
106
#define CLK_RST_CONTROLLER_CLK_ENB_L_SET 0x320
107
#define CLK_RST_CONTROLLER_CLK_ENB_L_CLR 0x324
108
#define CLK_RST_CONTROLLER_CLK_ENB_H_SET 0x328
109
#define CLK_RST_CONTROLLER_CLK_ENB_H_CLR 0x32C
110
#define CLK_RST_CONTROLLER_CLK_ENB_U_SET 0x330
111
#define CLK_RST_CONTROLLER_CLK_ENB_U_CLR 0x334
112
#define CLK_RST_CONTROLLER_RST_DEVICES_V 0x358
113
#define CLK_RST_CONTROLLER_RST_DEVICES_W 0x35C
114
#define CLK_RST_CONTROLLER_CLK_OUT_ENB_V 0x360
115
#define CLK_RST_CONTROLLER_CLK_OUT_ENB_W 0x364
116
#define CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2 0x388
117
#define CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRC 0x3A0
118
#define CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRD 0x3A4
119
#define CLK_RST_CONTROLLER_CLK_SOURCE_MSELECT 0x3B4
120
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C4 0x3C4
121
#define CLK_RST_CONTROLLER_CLK_SOURCE_AHUB 0x3D0
122
#define CLK_RST_CONTROLLER_CLK_SOURCE_ACTMON 0x3E8
123
#define CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH1 0x3EC
124
#define CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH2 0x3F0
125
#define CLK_RST_CONTROLLER_CLK_SOURCE_SYS 0x400
126
#define CLK_RST_CONTROLLER_CLK_SOURCE_SOR1 0x410
127
#define CLK_RST_CONTROLLER_CLK_SOURCE_SE 0x42C
128
#define CLK_RST_CONTROLLER_RST_DEV_V_SET 0x430
129
#define CLK_RST_CONTROLLER_RST_DEV_V_CLR 0x434
130
#define CLK_RST_CONTROLLER_RST_DEV_W_SET 0x438
131
#define CLK_RST_CONTROLLER_RST_DEV_W_CLR 0x43C
132
#define CLK_RST_CONTROLLER_CLK_ENB_V_SET 0x440
133
#define CLK_RST_CONTROLLER_CLK_ENB_V_CLR 0x444
134
#define CLK_RST_CONTROLLER_CLK_ENB_W_SET 0x448
135
#define CLK_RST_CONTROLLER_CLK_ENB_W_CLR 0x44C
136
#define CLK_RST_CONTROLLER_RST_CPUG_CMPLX_SET 0x450
137
#define CLK_RST_CONTROLLER_RST_CPUG_CMPLX_CLR 0x454
138
#define CLK_RST_CONTROLLER_UTMIP_PLL_CFG0 0x480
139
#define CLK_RST_CONTROLLER_UTMIP_PLL_CFG1 0x484
140
#define CLK_RST_CONTROLLER_UTMIP_PLL_CFG2 0x488
141
#define CLK_RST_CONTROLLER_PLLE_AUX 0x48C
142
#define CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S0 0x4A0
143
#define CLK_RST_CONTROLLER_UTMIP_PLL_CFG3 0x4C0
144
#define CLK_RST_CONTROLLER_PLLX_MISC_3 0x518
145
#define CLK_RST_CONTROLLER_UTMIPLL_HW_PWRDN_CFG0 0x52C
146
#define CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRE 0x554
147
#define CLK_RST_CONTROLLER_SPARE_REG0 0x55C
148
#define CLK_RST_CONTROLLER_PLLC4_BASE 0x5A4
149
#define CLK_RST_CONTROLLER_PLLC4_MISC 0x5A8
150
#define CLK_RST_CONTROLLER_PLLC_MISC_2 0x5D0
151
#define CLK_RST_CONTROLLER_PLLC4_OUT 0x5E4
152
#define CLK_RST_CONTROLLER_PLLMB_BASE 0x5E8
153
#define CLK_RST_CONTROLLER_PLLMB_MISC1 0x5EC
154
#define CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FS 0x608
155
#define CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_CORE_DEV 0x60C
156
#define CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_SS 0x610
157
#define CLK_RST_CONTROLLER_CLK_SOURCE_DSIA_LP 0x620
158
#define CLK_RST_CONTROLLER_CLK_SOURCE_I2C6 0x65C
159
#define CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL 0x664
160
#define CLK_RST_CONTROLLER_CLK_SOURCE_UART_FST_MIPI_CAL 0x66C
161
#define CLK_RST_CONTROLLER_CLK_SOURCE_VIC 0x678
162
#define CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC_LEGACY_TM 0x694
163
#define CLK_RST_CONTROLLER_CLK_SOURCE_NVDEC 0x698
164
#define CLK_RST_CONTROLLER_CLK_SOURCE_NVJPG 0x69C
165
#define CLK_RST_CONTROLLER_CLK_SOURCE_NVENC 0x6A0
166
#define CLK_RST_CONTROLLER_CLK_SOURCE_APE 0x6C0
167
#define CLK_RST_CONTROLLER_CLK_SOURCE_USB2_HSIC_TRK 0x6CC
168
#define CLK_RST_CONTROLLER_SE_SUPER_CLK_DIVIDER 0x704
169
#define CLK_RST_CONTROLLER_CLK_SOURCE_UARTAPE 0x710
170
171
#define CLK_NO_SOURCE 0x0
172
#define CLK_NOT_USED 0x0
173
174
#define CLK_CLR_OFFSET 0x4
175
176
/*! PLL control and status bits */
177
#define PLL_BASE_LOCK BIT(27)
178
#define PLL_BASE_REF_DIS BIT(29)
179
#define PLL_BASE_ENABLE BIT(30)
180
#define PLL_BASE_BYPASS BIT(31)
181
182
#define PLLX_MISC_LOCK_EN BIT(18)
183
#define PLLX_MISC3_IDDQ BIT(3)
184
185
#define PLLA_OUT0_RSTN_CLR BIT(0)
186
#define PLLA_OUT0_CLKEN BIT(1)
187
#define PLLA_BASE_IDDQ BIT(25)
188
189
#define PLLC_OUT1_RSTN_CLR BIT(0)
190
#define PLLC_OUT1_CLKEN BIT(1)
191
#define PLLC_MISC1_IDDQ BIT(27)
192
#define PLLC_MISC_RESET BIT(30)
193
194
#define PLLC4_OUT3_RSTN_CLR BIT(0)
195
#define PLLC4_OUT3_CLKEN BIT(1)
196
#define PLLC4_BASE_IDDQ BIT(18)
197
#define PLLC4_MISC_EN_LCKDET BIT(30)
198
199
#define UTMIPLL_LOCK BIT(31)
200
201
/*! Clock source */
202
#define CLK_SRC_DIV(d) ((d) ? ((u32)(((d) - 1) * 2)) : 0)
203
#define CLK_I2C_SRC_DIV(d) ((d) ? ((u32)(((d) - 1))) : 0)
204
205
/*! PTO_CLK_CNT */
206
#define PTO_REF_CLK_WIN_CFG_MASK 0xF
207
#define PTO_REF_CLK_WIN_CFG_16P 0xF
208
#define PTO_CNT_EN BIT(9)
209
#define PTO_CNT_RST BIT(10)
210
#define PTO_CLK_ENABLE BIT(13)
211
#define PTO_SRC_SEL_SHIFT 14
212
#define PTO_SRC_SEL_MASK 0x1FF
213
#define PTO_DIV_SEL_MASK (3 << 23)
214
#define PTO_DIV_SEL_GATED (0 << 23)
215
#define PTO_DIV_SEL_DIV1 (1 << 23)
216
#define PTO_DIV_SEL_DIV4_RISING (2 << 23)
217
#define PTO_DIV_SEL_DIV4_FALLING (3 << 23)
218
#define PTO_DIV_SEL_CPU_EARLY (0 << 23)
219
#define PTO_DIV_SEL_CPU_LATE (1 << 23)
220
221
#define PTO_CLK_CNT_BUSY BIT(31)
222
#define PTO_CLK_CNT 0xFFFFFF
223
224
/*! OSC_FREQ_DET */
225
#define OSC_REF_CLK_WIN_CFG_MASK 0xF
226
#define OSC_FREQ_DET_TRIG BIT(31)
227
228
#define OSC_FREQ_DET_BUSY BIT(31)
229
#define OSC_FREQ_DET_CNT 0xFFFF
230
231
/*! PTO IDs. */
232
typedef enum _clock_pto_id_t
233
{
234
CLK_PTO_PCLK_SYS = 0x06,
235
CLK_PTO_HCLK_SYS = 0x07,
236
CLK_PTO_DMIC1 = 0x08,
237
CLK_PTO_DMIC2 = 0x09,
238
CLK_PTO_HDMI_SLOWCLK_DIV2 = 0x0A,
239
CLK_PTO_JTAG_REG = 0x0B,
240
CLK_PTO_UTMIP_240_A = 0x0C,
241
CLK_PTO_UTMIP_240_B = 0x0D,
242
243
CLK_PTO_CCLK_G = 0x12,
244
CLK_PTO_CCLK_G_DIV2 = 0x13,
245
CLK_PTO_MIPIBIF = 0x14,
246
247
CLK_PTO_SPI1 = 0x17,
248
CLK_PTO_SPI2 = 0x18,
249
CLK_PTO_SPI3 = 0x19,
250
CLK_PTO_SPI4 = 0x1A,
251
CLK_PTO_MAUD = 0x1B,
252
CLK_PTO_SCLK = 0x1C,
253
254
CLK_PTO_SDMMC1 = 0x20,
255
CLK_PTO_SDMMC2 = 0x21,
256
CLK_PTO_SDMMC3 = 0x22,
257
CLK_PTO_SDMMC4 = 0x23,
258
CLK_PTO_EMC = 0x24,
259
260
CLK_PTO_DMIC3 = 0x2A,
261
CLK_PTO_CCLK_LP = 0x2B,
262
CLK_PTO_CCLK_LP_DIV2 = 0x2C,
263
264
CLK_PTO_MSELECT = 0x2F,
265
266
CLK_PTO_VI_SENSOR2 = 0x33,
267
CLK_PTO_VI_SENSOR = 0x34,
268
CLK_PTO_VIC = 0x35,
269
CLK_PTO_VIC_SKIP = 0x36,
270
CLK_PTO_ISP_SKIP = 0x37,
271
CLK_PTO_ISPB_SE2_SKIP = 0x38,
272
CLK_PTO_NVDEC_SKIP = 0x39,
273
CLK_PTO_NVENC_SKIP = 0x3A,
274
CLK_PTO_NVJPG_SKIP = 0x3B,
275
CLK_PTO_TSEC_SKIP = 0x3C,
276
CLK_PTO_TSECB_SKIP = 0x3D,
277
CLK_PTO_SE_SKIP = 0x3E,
278
CLK_PTO_VI_SKIP = 0x3F,
279
280
CLK_PTO_PLLX_OBS = 0x40,
281
CLK_PTO_PLLC_OBS = 0x41,
282
CLK_PTO_PLLM_OBS = 0x42,
283
CLK_PTO_PLLP_OBS = 0x43,
284
CLK_PTO_PLLA_OBS = 0x44,
285
CLK_PTO_PLLMB_OBS = 0x45,
286
CLK_PTO_SATA_OOB = 0x46,
287
288
CLK_PTO_FCPU_DVFS_DIV12_CPU = 0x48,
289
290
CLK_PTO_EQOS_AXI = 0x4C,
291
CLK_PTO_EQOS_PTP_REF = 0x4D,
292
CLK_PTO_EQOS_TX = 0x4E,
293
CLK_PTO_EQOS_RX = 0x4F,
294
295
CLK_PTO_CILAB = 0x52,
296
CLK_PTO_CILCD = 0x53,
297
298
CLK_PTO_CILEF = 0x55,
299
CLK_PTO_PLLA1_PTO_OBS = 0x56,
300
CLK_PTO_PLLC4_PTO_OBS = 0x57,
301
302
CLK_PTO_PLLC2_PTO_OBS = 0x59,
303
CLK_PTO_PLLC3_PTO_OBS = 0x5B,
304
305
CLK_PTO_DSIA_LP = 0x62,
306
CLK_PTO_DSIB_LP = 0x63,
307
CLK_PTO_ISP = 0x64,
308
CLK_PTO_PEX_PAD = 0x65,
309
310
CLK_PTO_MC = 0x6A,
311
312
CLK_PTO_ACTMON = 0x6B,
313
CLK_PTO_CSITE = 0x6C,
314
CLK_PTO_VI_I2C = 0x6D,
315
316
CLK_PTO_HOST1X = 0x6F,
317
318
CLK_PTO_QSPI_2X = 0x71,
319
CLK_PTO_NVDEC = 0x72,
320
CLK_PTO_NVJPG = 0x73,
321
CLK_PTO_SE = 0x74,
322
CLK_PTO_SOC_THERM = 0x75,
323
324
CLK_PTO_TSEC = 0x77,
325
CLK_PTO_TSECB = 0x78,
326
CLK_PTO_VI = 0x79,
327
CLK_PTO_LA = 0x7A,
328
CLK_PTO_SCLK_SKIP = 0x7B,
329
330
CLK_PTO_ADSP_SKIP = 0x7C,
331
CLK_PTO_QSPI = 0x7D,
332
333
CLK_PTO_SDMMC2_SHAPER = 0x7E,
334
CLK_PTO_SDMMC4_SHAPER = 0x7F,
335
CLK_PTO_I2S1 = 0x80,
336
CLK_PTO_I2S2 = 0x81,
337
CLK_PTO_I2S3 = 0x82,
338
CLK_PTO_I2S4 = 0x83,
339
CLK_PTO_I2S5 = 0x84,
340
CLK_PTO_AHUB = 0x85,
341
CLK_PTO_APE = 0x86,
342
343
CLK_PTO_DVFS_SOC = 0x88,
344
CLK_PTO_DVFS_REF = 0x89,
345
CLK_PTO_ADSP_CLK = 0x8A,
346
CLK_PTO_ADSP_DIV2_CLK = 0x8B,
347
348
CLK_PTO_SPDIF_OUT = 0x8F,
349
CLK_PTO_SPDIF_IN = 0x90,
350
CLK_PTO_UART_FST_MIPI_CAL = 0x91,
351
CLK_PTO_SYS2HSIO_SATA_CLK = 0x92,
352
CLK_PTO_PWM = 0x93,
353
CLK_PTO_I2C1 = 0x94,
354
CLK_PTO_I2C2 = 0x95,
355
CLK_PTO_I2C3 = 0x96,
356
CLK_PTO_I2C4 = 0x97,
357
CLK_PTO_I2C5 = 0x98,
358
CLK_PTO_I2C6 = 0x99,
359
CLK_PTO_I2C_SLOW = 0x9A,
360
CLK_PTO_UARTAPE = 0x9B,
361
362
CLK_PTO_EXTPERIPH1 = 0x9D,
363
CLK_PTO_EXTPERIPH2 = 0x9E,
364
CLK_PTO_EXTPERIPH3 = 0x9F,
365
CLK_PTO_ENTROPY = 0xA0,
366
CLK_PTO_UARTA = 0xA1,
367
CLK_PTO_UARTB = 0xA2,
368
CLK_PTO_UARTC = 0xA3,
369
CLK_PTO_UARTD = 0xA4,
370
CLK_PTO_OWR = 0xA5,
371
CLK_PTO_TSENSOR = 0xA6,
372
CLK_PTO_HDA2CODEC_2X = 0xA7,
373
CLK_PTO_HDA = 0xA8,
374
CLK_PTO_EMC_LATENCY = 0xA9,
375
CLK_PTO_EMC_DLL = 0xAA,
376
CLK_PTO_SDMMC_LEGACY_TM = 0xAB,
377
CLK_PTO_DBGAPB = 0xAC,
378
379
CLK_PTO_SOR0 = 0xC0,
380
CLK_PTO_SOR1 = 0xC1,
381
CLK_PTO_HDMI = 0xC2,
382
383
CLK_PTO_DISP2 = 0xC4,
384
CLK_PTO_DISP1 = 0xC5, // Branches: 0xD5, 0xE5, 0xF5.
385
386
CLK_PTO_PLLD_OBS = 0xCA, // Branches: 0xDA, 0xEA, 0xFA.
387
CLK_PTO_PLLD2_PTO_OBS = 0xCC,
388
CLK_PTO_PLLDP_OBS = 0xCE,
389
CLK_PTO_PLLE_OBS = 0x10A,
390
CLK_PTO_PLLU_OBS = 0x10C, // Branches: 0x14C 0x18C 0x1CC.
391
CLK_PTO_PLLREFE_OBS = 0x10E,
392
393
CLK_PTO_XUSB_FALCON = 0x110, // Branches: 0x150 0x190 0x1D0.
394
CLK_PTO_XUSB_CLK480M_HSIC = 0x111, // Branches: 0x151 0x191 0x1D1.
395
CLK_PTO_USB_L0_RX = 0x112,
396
CLK_PTO_USB_L3_RX = 0x113,
397
CLK_PTO_USB_RX = 0x114,
398
CLK_PTO_USB3_L0_TXCLKREF = 0x115,
399
CLK_PTO_PEX_TXCLKREF_SWITCH_TMS = 0x116,
400
CLK_PTO_PEX_TXCLKREF_SWITCH_GRP0 = 0x117,
401
CLK_PTO_PEX_TXCLKREF_SWITCH_GRP1 = 0x118,
402
CLK_PTO_PEX_TXCLKREF_SWITCH_GRP2 = 0x119,
403
CLK_PTO_PEX_L4_RX = 0x11A,
404
CLK_PTO_PEX_TXCLKREF = 0x11B,
405
CLK_PTO_PEX_TXCLKREF_DIV2 = 0x11C,
406
CLK_PTO_PEX_TXCLKREF2 = 0x11D,
407
CLK_PTO_PEX_L0_RX = 0x11E,
408
CLK_PTO_PEX_L1_RX = 0x11F,
409
CLK_PTO_PEX_L2_RX = 0x120,
410
CLK_PTO_PEX_L3_RX = 0x121,
411
CLK_PTO_SATA_TXCLKREF = 0x122,
412
CLK_PTO_SATA_TXCLKREF_DIV2 = 0x123,
413
CLK_PTO_USB_L5_RX = 0x124,
414
CLK_PTO_SATA_TX = 0x125,
415
CLK_PTO_SATA_L0_RX = 0x126,
416
417
CLK_PTO_USB3_L1_TXCLKREF = 0x129,
418
CLK_PTO_USB3_L7_TXCLKREF = 0x12A,
419
CLK_PTO_USB3_L7_RX = 0x12B,
420
CLK_PTO_USB3_TX = 0x12C,
421
CLK_PTO_UTMIP_PLL_PAD = 0x12D, // Branches: 0x16D 0x1AD 0x1ED.
422
423
CLK_PTO_XUSB_FS = 0x136, // Branches: 0x176 0x1B6 0x1F6.
424
CLK_PTO_XUSB_SS_HOST_DEV = 0x137, // Branches: 0x177 0x1B7 0x1F7.
425
CLK_PTO_XUSB_CORE_HOST = 0x138, // Branches: 0x178 0x1B8 0x1F8.
426
CLK_PTO_XUSB_CORE_DEV = 0x139, // Branches: 0x179 0x1B9 0x1F9.
427
428
CLK_PTO_USB3_L2_TXCLKREF = 0x13C,
429
CLK_PTO_USB3_L3_TXCLKREF = 0x13D,
430
CLK_PTO_USB_L4_RX = 0x13E,
431
CLK_PTO_USB_L6_RX = 0x13F,
432
433
/*
434
* PLL need PTO enabled in MISC registers.
435
* Normal div is 2 so result is multiplied with it.
436
*/
437
CLK_PTO_PLLC_DIV2 = 0x01,
438
CLK_PTO_PLLM_DIV2 = 0x02,
439
CLK_PTO_PLLP_DIV2 = 0x03,
440
CLK_PTO_PLLA_DIV2 = 0x04,
441
CLK_PTO_PLLX_DIV2 = 0x05,
442
443
CLK_PTO_PLLMB_DIV2 = 0x25,
444
445
CLK_PTO_PLLC4_DIV2 = 0x51,
446
447
CLK_PTO_PLLA1_DIV2 = 0x55,
448
CLK_PTO_PLLC2_DIV2 = 0x58,
449
CLK_PTO_PLLC3_DIV2 = 0x5A,
450
451
CLK_PTO_PLLD_DIV2 = 0xCB, // Branches: 0xDB, 0xEB, 0xFB.
452
CLK_PTO_PLLD2_DIV2 = 0xCD,
453
CLK_PTO_PLLDP_DIV2 = 0xCF,
454
455
CLK_PTO_PLLE_DIV2 = 0x10B,
456
457
CLK_PTO_PLLU_DIV2 = 0x10D, // Branches: 0x14D 0x18D 0x1CD.
458
459
CLK_PTO_PLLREFE_DIV2 = 0x10F,
460
} clock_pto_id_t;
461
462
/*
463
* CLOCK Peripherals:
464
* L 0 - 31
465
* H 32 - 63
466
* U 64 - 95
467
* V 96 - 127
468
* W 128 - 159
469
* X 160 - 191
470
* Y 192 - 223
471
*/
472
473
enum CLK_L_DEV
474
{
475
CLK_L_CPU = 0, // Deprecated.
476
CLK_L_BPMP = 1, // Only reset.
477
CLK_L_SYS = 2, // Only reset.
478
CLK_L_ISPB = 3,
479
CLK_L_RTC = 4, // Only enable.
480
CLK_L_TMR = 5,
481
CLK_L_UARTA = 6,
482
CLK_L_UARTB = 7,
483
CLK_L_GPIO = 8,
484
CLK_L_SDMMC2 = 9,
485
CLK_L_SPDIF = 10, // Only enable.
486
CLK_L_I2S2 = 11, // Only enable.
487
CLK_L_I2C1 = 12,
488
CLK_L_SDMMC1 = 14,
489
CLK_L_SDMMC4 = 15,
490
CLK_L_TWC = 16, // 3-Wire Controller. Deprecated.
491
CLK_L_PWM = 17,
492
CLK_L_I2S3 = 18, // Only enable.
493
CLK_L_VI = 20,
494
CLK_L_USBD = 22,
495
CLK_L_ISP = 23,
496
CLK_L_DISP2 = 26,
497
CLK_L_DISP1 = 27,
498
CLK_L_HOST1X = 28,
499
CLK_L_I2S1 = 30, // Only enable.
500
CLK_L_BPMP_CACHE_CTRL = 31, // Controller.
501
};
502
503
enum CLK_H_DEV
504
{
505
CLK_H_MEM = 0, // MC.
506
CLK_H_AHBDMA = 1,
507
CLK_H_APBDMA = 2,
508
CLK_H_STAT_MON = 5,
509
CLK_H_PMC = 6, // Only enable.
510
CLK_H_FUSE = 7,
511
CLK_H_KFUSE = 8,
512
CLK_H_SPI1 = 9,
513
CLK_H_SPI2 = 12,
514
CLK_H_XIO = 13, // Misc IO. Deprecated?
515
CLK_H_SPI3 = 14,
516
CLK_H_I2C5 = 15,
517
CLK_H_DSI = 16,
518
CLK_H_CSI = 20,
519
CLK_H_I2C2 = 22,
520
CLK_H_UARTC = 23,
521
CLK_H_MIPI_CAL = 24,
522
CLK_H_EMC = 25,
523
CLK_H_USB2 = 26,
524
CLK_H_BSEV = 31,
525
};
526
527
enum CLK_U_DEV
528
{
529
//CLK_U_SPEEDO = 0, // RESERVED. Old speedo ring oscillator.
530
CLK_U_UARTD = 1,
531
CLK_U_I2C3 = 3,
532
CLK_U_SPI4 = 4,
533
CLK_U_SDMMC3 = 5,
534
CLK_U_PCIE = 6,
535
CLK_U_OWR = 7, // 1-Wire Controller. Deprecated.
536
CLK_U_AFI = 8,
537
CLK_U_CSITE = 9,
538
CLK_U_PCIEXCLK = 10, // Only reset.
539
CLK_U_LA = 12, // DFD.
540
CLK_U_SOC_THERM = 14,
541
CLK_U_DTV = 15, // Deprecated.
542
CLK_U_I2C_SLOW = 17,
543
CLK_U_DSIB = 18,
544
CLK_U_TSEC = 19,
545
CLK_U_IRAMA = 20, // Only enable.
546
CLK_U_IRAMB = 21, // Only enable.
547
CLK_U_IRAMC = 22, // Only enable.
548
CLK_U_IRAMD = 23, // EMUCIF ON RESET
549
CLK_U_BPMP_CACHE_RAM = 24, // Only enable.
550
CLK_U_XUSB_HOST = 25,
551
CLK_U_SUS_OUT = 28, // Only enable. VI MCLK. Deprecated?
552
CLK_U_DEV2_OUT = 29, // Only enable. DAP MCLK. Deprecated?
553
CLK_U_DEV1_OUT = 30, // Only enable. DAP MCLK. Deprecated?
554
CLK_U_XUSB_DEV = 31,
555
};
556
557
enum CLK_V_DEV
558
{
559
CLK_V_CPUG = 0,
560
CLK_V_CPULP = 1, // Reserved.
561
CLK_V_MSELECT = 3,
562
CLK_V_TSENSOR = 4, // Only enable.
563
CLK_V_I2S4 = 5, // Only enable.
564
CLK_V_I2S5 = 6, // Only enable.
565
CLK_V_I2C4 = 7,
566
CLK_V_AHUB = 10, // AUDIO. Only enable.
567
CLK_V_APB2APE = 11, // APBIF. Only enable.
568
CLK_V_HDA2CODEC_2X = 15,
569
CLK_V_ATOMICS = 16,
570
CLK_V_SPDIF_DOUBLER = 22, // Only enable.
571
CLK_V_ACTMON = 23,
572
CLK_V_EXTPERIPH1 = 24,
573
CLK_V_EXTPERIPH2 = 25,
574
CLK_V_EXTPERIPH3 = 26,
575
CLK_V_SATA_OOB = 27, // Only on T210.
576
CLK_V_SATA = 28, // Only on T210.
577
CLK_V_HDA = 29,
578
CLK_V_TZRAM = 30,
579
CLK_V_SE = 31,
580
};
581
582
enum CLK_W_DEV
583
{
584
CLK_W_HDA2HDMICODEC = 0,
585
CLK_W_SATACOLD = 1, // Enable reserved. Unused.
586
CLK_W_PCIERX0 = 2, // Reset reserved.
587
CLK_W_PCIERX1 = 3, // Reset reserved.
588
CLK_W_PCIERX2 = 4, // Reset reserved.
589
CLK_W_PCIERX3 = 5, // Reset reserved.
590
CLK_W_PCIERX4 = 6, // Reset reserved.
591
CLK_W_PCIERX5 = 7, // Reset reserved.
592
CLK_W_CEC = 8,
593
CLK_W_PCIE2_IOBIST = 9, // Reset reserved.
594
CLK_W_EMC_IOBIST = 10, // Reset reserved.
595
CLK_W_SATA_IOBIST = 12, // Reset reserved.
596
CLK_W_MIPI_IOBIST = 13, // Reset reserved.
597
CLK_W_XUSB_PADCTL = 14, // Only reset.
598
CLK_W_XUSB = 15, // Only enable.
599
CLK_W_CILAB = 16, // Only enable.
600
CLK_W_CILCD = 17, // Only enable.
601
CLK_W_CILEF = 18, // Only enable.
602
CLK_W_DSIA_LP = 19, // Only enable.
603
CLK_W_DSIB_LP = 20, // Only enable.
604
CLK_W_ENTROPY = 21,
605
CLK_W_DP2 = 24, // HIDDEN.
606
CLK_W_DVFS = 27,
607
CLK_W_XUSB_SS = 28,
608
CLK_W_EMC_LATENCY = 29, // Only enable.
609
CLK_W_MC1 = 30, // Only enable.
610
};
611
612
enum CLK_X_DEV
613
{
614
CLK_X_SPARE = 0,
615
CLK_X_DMIC1 = 1, // Only enable.
616
CLK_X_DMIC2 = 2, // Only enable.
617
CLK_X_ETR = 3, // DFD.
618
CLK_X_CAM_MCLK = 4, // Only enable.
619
CLK_X_CAM_MCLK2 = 5, // Only enable.
620
CLK_X_I2C6 = 6,
621
CLK_X_MC_CAPA = 7, // MC Clients daisy chain 1. Only enable.
622
CLK_X_MC_CBPA = 8, // MC Clients daisy chain 2. Only enable.
623
CLK_X_MC_CPU = 9, // MC CPU. Only enable.
624
CLK_X_MC_BBC = 10, // MC Backbone. Only enable.
625
CLK_X_VIM2_CLK = 11, // Only enable.
626
CLK_X_MIPIBIF = 13,
627
CLK_X_EMC_DLL = 14, // Only enable.
628
CLK_X_UART_FST_MIPI_CAL = 17, // Only enable.
629
CLK_X_VIC = 18,
630
CLK_X_DPAUX = 21,
631
CLK_X_SOR0 = 22,
632
CLK_X_SOR1 = 23,
633
CLK_X_GPU = 24,
634
CLK_X_DBGAPB = 25, // Only enable.
635
CLK_X_HPLL_ADSP = 26, // Only enable.
636
CLK_X_PLLP_ADSP = 27, // Only enable.
637
CLK_X_PLLA_ADSP = 28, // Only enable.
638
CLK_X_PLLG_REF = 29, // Only enable.
639
CLK_X_EQOS = 30, // T210B01 only.
640
};
641
642
enum CLK_Y_DEV
643
{
644
CLK_Y_SPARE1 = 0,
645
CLK_Y_SDMMC_LEGACY_TM = 1, // Only enable.
646
CLK_Y_NVDEC = 2,
647
CLK_Y_NVJPG = 3,
648
CLK_Y_AXIAP = 4, // DFD.
649
CLK_Y_DMIC3 = 5, // Only enable.
650
CLK_Y_APE = 6,
651
CLK_Y_ADSP = 7,
652
CLK_Y_MC_CDPA = 8, // MC Clients daisy chain 4. Only enable.
653
CLK_Y_MC_CCPA = 9, // MC Clients daisy chain 3. Only enable.
654
CLK_Y_MAUD = 10, // Only enable.
655
CLK_Y_SATA_USB_UPHY = 12, // Only reset.
656
CLK_Y_PEX_USB_UPHY = 13, // Only reset.
657
CLK_Y_TSECB = 14,
658
CLK_Y_DPAUX1 = 15,
659
CLK_Y_VI_I2C = 16,
660
CLK_Y_HSIC_TRK = 17, // Only enable.
661
CLK_Y_USB2_TRK = 18, // Only enable.
662
CLK_Y_QSPI = 19,
663
CLK_Y_UARTAPE = 20, // Only enable.
664
CLK_Y_ADSPINTF = 21, // Only reset.
665
CLK_Y_ADSPPERIPH = 22, // Only reset.
666
CLK_Y_ADSPDBG = 23, // Only reset.
667
CLK_Y_ADSPWDT = 24, // Only reset.
668
CLK_Y_ADSPSCU = 25, // Only reset.
669
CLK_Y_ADSPNEON = 26,
670
CLK_Y_NVENC = 27,
671
CLK_Y_IQC2 = 28, // Only enable. (Audio.)
672
CLK_Y_IQC1 = 29, // Only enable. (Audio.)
673
CLK_Y_SOR_SAFE = 30, // Only enable.
674
CLK_Y_PLLP_OUT_CPU = 31, // Only enable.
675
};
676
677
/*! Generic clock descriptor. */
678
typedef struct _clk_rst_t
679
{
680
u16 reset; // Reset SET.
681
u16 enable; // Enable SET.
682
u16 source;
683
u8 index:5;
684
u8 clk_src:3;
685
u8 clk_div;
686
} clk_rst_t;
687
688
/*! Generic clock enable/disable. */
689
void clock_enable(const clk_rst_t *clk);
690
void clock_disable(const clk_rst_t *clk);
691
692
/*! Clock control for specific hardware portions. */
693
void clock_enable_fuse(bool enable);
694
void clock_enable_uart(u32 idx);
695
void clock_disable_uart(u32 idx);
696
int clock_uart_use_src_div(u32 idx, u32 baud);
697
void clock_enable_i2c(u32 idx);
698
void clock_disable_i2c(u32 idx);
699
void clock_enable_se();
700
void clock_enable_tzram();
701
void clock_enable_host1x();
702
void clock_disable_host1x();
703
void clock_enable_tsec();
704
void clock_disable_tsec();
705
void clock_enable_nvdec();
706
void clock_disable_nvdec();
707
void clock_enable_nvjpg();
708
void clock_disable_nvjpg();
709
void clock_enable_vic();
710
void clock_disable_vic();
711
void clock_enable_sor_safe();
712
void clock_disable_sor_safe();
713
void clock_enable_sor0();
714
void clock_disable_sor0();
715
void clock_enable_sor1();
716
void clock_disable_sor1();
717
void clock_enable_kfuse();
718
void clock_disable_kfuse();
719
void clock_enable_cl_dvfs();
720
void clock_disable_cl_dvfs();
721
void clock_enable_coresight();
722
void clock_disable_coresight();
723
void clock_enable_pwm();
724
void clock_disable_pwm();
725
void clock_enable_apbdma();
726
void clock_disable_apbdma();
727
void clock_enable_ahbdma();
728
void clock_disable_ahbdma();
729
void clock_enable_actmon();
730
void clock_disable_actmon();
731
void clock_enable_extperiph1();
732
void clock_disable_extperiph1();
733
void clock_enable_extperiph2();
734
void clock_disable_extperiph2();
735
736
void clock_enable_plld(u32 divp, u32 divn, bool lowpower, bool tegra_t210);
737
void clock_enable_pllx();
738
void clock_enable_pllc(u32 divn);
739
void clock_disable_pllc();
740
void clock_enable_pllu();
741
void clock_disable_pllu();
742
void clock_enable_utmipll();
743
744
void clock_sdmmc_config_clock_source(u32 *pclock, u32 id, u32 clock);
745
void clock_sdmmc_get_card_clock_div(u32 *pclock, u16 *pdivisor, u32 type);
746
int clock_sdmmc_is_active(u32 id);
747
void clock_sdmmc_enable(u32 id, u32 clock);
748
void clock_sdmmc_disable(u32 id);
749
750
u32 clock_get_osc_freq();
751
u32 clock_get_dev_freq(clock_pto_id_t id);
752
753
#endif
754
755