coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
clock.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef __SOC_NVIDIA_TEGRA210_CLOCK_H__
4 #define __SOC_NVIDIA_TEGRA210_CLOCK_H__
5 
6 #include <arch/hlt.h>
7 #include <console/console.h>
8 #include <device/mmio.h>
9 #include <soc/clk_rst.h>
10 #include <stdint.h>
11 
12 enum {
13  CLK_L_CPU = 0x1 << 0,
14  CLK_L_COP = 0x1 << 1,
15  CLK_L_TRIG_SYS = 0x1 << 2,
16  CLK_L_RTC = 0x1 << 4,
17  CLK_L_TMR = 0x1 << 5,
18  CLK_L_UARTA = 0x1 << 6,
19  CLK_L_UARTB = 0x1 << 7,
20  CLK_L_GPIO = 0x1 << 8,
21  CLK_L_SDMMC2 = 0x1 << 9,
22  CLK_L_SPDIF = 0x1 << 10,
23  CLK_L_I2S2 = 0x1 << 11,
24  CLK_L_I2C1 = 0x1 << 12,
25  CLK_L_NDFLASH = 0x1 << 13,
26  CLK_L_SDMMC1 = 0x1 << 14,
27  CLK_L_SDMMC4 = 0x1 << 15,
28  CLK_L_PWM = 0x1 << 17,
29  CLK_L_I2S3 = 0x1 << 18,
30  CLK_L_EPP = 0x1 << 19,
31  CLK_L_VI = 0x1 << 20,
32  CLK_L_2D = 0x1 << 21,
33  CLK_L_USBD = 0x1 << 22,
34  CLK_L_ISP = 0x1 << 23,
35  CLK_L_3D = 0x1 << 24,
36  CLK_L_DISP2 = 0x1 << 26,
37  CLK_L_DISP1 = 0x1 << 27,
38  CLK_L_HOST1X = 0x1 << 28,
39  CLK_L_VCP = 0x1 << 29,
40  CLK_L_I2S1 = 0x1 << 30,
41  CLK_L_CACHE2 = 0x1 << 31,
42 
43  CLK_H_MEM = 0x1 << 0,
44  CLK_H_AHBDMA = 0x1 << 1,
45  CLK_H_APBDMA = 0x1 << 2,
46  CLK_H_KBC = 0x1 << 4,
47  CLK_H_STAT_MON = 0x1 << 5,
48  CLK_H_PMC = 0x1 << 6,
49  CLK_H_FUSE = 0x1 << 7,
50  CLK_H_KFUSE = 0x1 << 8,
51  CLK_H_SBC1 = 0x1 << 9,
52  CLK_H_SNOR = 0x1 << 10,
53  CLK_H_JTAG2TBC = 0x1 << 11,
54  CLK_H_SBC2 = 0x1 << 12,
55  CLK_H_SBC3 = 0x1 << 14,
56  CLK_H_I2C5 = 0x1 << 15,
57  CLK_H_DSI = 0x1 << 16,
58  CLK_H_HSI = 0x1 << 18,
59  CLK_H_HDMI = 0x1 << 19,
60  CLK_H_CSI = 0x1 << 20,
61  CLK_H_I2C2 = 0x1 << 22,
62  CLK_H_UARTC = 0x1 << 23,
63  CLK_H_MIPI_CAL = 0x1 << 24,
64  CLK_H_EMC = 0x1 << 25,
65  CLK_H_USB2 = 0x1 << 26,
66  CLK_H_USB3 = 0x1 << 27,
67  CLK_H_MPE = 0x1 << 28,
68  CLK_H_VDE = 0x1 << 29,
69  CLK_H_BSEA = 0x1 << 30,
70  CLK_H_BSEV = 0x1 << 31,
71 
72  CLK_U_UARTD = 0x1 << 1,
73  CLK_U_UARTE = 0x1 << 2,
74  CLK_U_I2C3 = 0x1 << 3,
75  CLK_U_SBC4 = 0x1 << 4,
76  CLK_U_SDMMC3 = 0x1 << 5,
77  CLK_U_PCIE = 0x1 << 6,
78  CLK_U_OWR = 0x1 << 7,
79  CLK_U_AFI = 0x1 << 8,
80  CLK_U_CSITE = 0x1 << 9,
81  CLK_U_PCIEXCLK = 0x1 << 10,
82  CLK_U_AVPUCQ = 0x1 << 11,
83  CLK_U_TRACECLKIN = 0x1 << 13,
84  CLK_U_SOC_THERM = 0x1 << 14,
85  CLK_U_DTV = 0x1 << 15,
86  CLK_U_NAND_SPEED = 0x1 << 16,
87  CLK_U_I2C_SLOW = 0x1 << 17,
88  CLK_U_DSIB = 0x1 << 18,
89  CLK_U_TSEC = 0x1 << 19,
90  CLK_U_IRAMA = 0x1 << 20,
91  CLK_U_IRAMB = 0x1 << 21,
92  CLK_U_IRAMC = 0x1 << 22,
93 
94  // Clock reset.
95  CLK_U_EMUCIF = 0x1 << 23,
96  // Clock enable.
97  CLK_U_IRAMD = 0x1 << 23,
98 
99  CLK_U_CRAM2 = 0x2 << 24,
100  CLK_U_XUSB_HOST = 0x1 << 25,
101  CLK_U_MSENC = 0x1 << 27,
102  CLK_U_SUS_OUT = 0x1 << 28,
103  CLK_U_DEV2_OUT = 0x1 << 29,
104  CLK_U_DEV1_OUT = 0x1 << 30,
105  CLK_U_XUSB_DEV = 0x1 << 31,
106 
107  CLK_V_CPUG = 0x1 << 0,
108  CLK_V_CPULP = 0x1 << 1,
109  CLK_V_3D2 = 0x1 << 2,
110  CLK_V_MSELECT = 0x1 << 3,
111  CLK_V_I2S4 = 0x1 << 5,
112  CLK_V_I2S5 = 0x1 << 6,
113  CLK_V_I2C4 = 0x1 << 7,
114  CLK_V_SBC5 = 0x1 << 8,
115  CLK_V_SBC6 = 0x1 << 9,
116  CLK_V_AHUB = 0x1 << 10,
117  CLK_V_APB2APE = 0x1 << 11,
118  CLK_V_HDA2CODEC_2X = 0x1 << 15,
119  CLK_V_ATOMICS = 0x1 << 16,
120  CLK_V_ACTMON = 0x1 << 23,
121  CLK_V_EXTPERIPH1 = 0x1 << 24,
122  CLK_V_SATA = 0x1 << 28,
123  CLK_V_HDA = 0x1 << 29,
124 
126  CLK_W_SATACOLD = 0x1 << 1,
127  CLK_W_CEC = 0x1 << 8,
128  CLK_W_XUSB_PADCTL = 0x1 << 14,
129  CLK_W_ENTROPY = 0x1 << 21,
130  CLK_W_DVFS = 0x1 << 27,
131  CLK_W_XUSB_SS = 0x1 << 28,
132 
133  CLK_X_GPU = 0x1 << 24,
134  CLK_X_SOR1 = 0x1 << 23,
135  CLK_X_SOR0 = 0x1 << 22,
136  CLK_X_DPAUX = 0x1 << 21,
137  CLK_X_VIC = 0x1 << 18,
139  CLK_X_MIPIBIF = 0x1 << 13,
140  CLK_X_I2C6 = 0x1 << 6,
141  CLK_X_ETR = 0x1 << 3,
142  CLK_X_SPARE = 0x1 << 0,
143 
144  CLK_Y_APE = 0x1 << 6,
145  CLK_Y_DPAUX1 = 0x1 << 15,
146  CLK_Y_QSPI = 0x1 << 19,
147  CLK_Y_SOR_SAFE = 0x1 << 30,
148 };
149 
150 enum {
151  PLLP = 0,
152  PLLC2 = 1,
153  PLLC = 2,
155  PLLM = 4,
156  CLK_M = 5,
157  CLK_S = 6,
158  PLLE = 7,
159  PLLA = 8,
160  PLLD = 9,
161  PLLD2 = 10,
169  PLLD_OUT0 = 18,
170  PLLP_OUT3 = 19,
172  UNUSED0 = 100,
173  UNUSED1 = 101,
174  UNUSED2 = 102,
175  UNUSED3 = 103,
176  UNUSED4 = 104,
177  UNUSED5 = 105,
178  UNUSED6 = 106,
179  UNUSED7 = 107,
180 };
181 
182 #define CLK_SRC_DEV_ID(dev, src) CLK_SRC_##dev##_##src
183 #define CLK_SRC_FREQ_ID(dev, src) CLK_SRC_FREQ_##dev##_##src
184 
185 #define CLK_SRC_DEVICE(dev, a, b, c, d, e, f, g, h) \
186  CLK_SRC_DEV_ID(dev, a) = 0, \
187  CLK_SRC_DEV_ID(dev, b) = 1, \
188  CLK_SRC_DEV_ID(dev, c) = 2, \
189  CLK_SRC_DEV_ID(dev, d) = 3, \
190  CLK_SRC_DEV_ID(dev, e) = 4, \
191  CLK_SRC_DEV_ID(dev, f) = 5, \
192  CLK_SRC_DEV_ID(dev, g) = 6, \
193  CLK_SRC_DEV_ID(dev, h) = 7, \
194  CLK_SRC_FREQ_ID(dev, a) = a, \
195  CLK_SRC_FREQ_ID(dev, b) = b, \
196  CLK_SRC_FREQ_ID(dev, c) = c, \
197  CLK_SRC_FREQ_ID(dev, d) = d, \
198  CLK_SRC_FREQ_ID(dev, e) = e, \
199  CLK_SRC_FREQ_ID(dev, f) = f, \
200  CLK_SRC_FREQ_ID(dev, g) = g, \
201  CLK_SRC_FREQ_ID(dev, h) = h
202 
203 enum {
207  PLLA, PLLC4_OUT0),
209  CLK_M, PLLC4_OUT2),
211  CLK_M, PLLC4_OUT2),
213  CLK_M, PLLC4_OUT2),
215  CLK_M, PLLC4_OUT2),
217  CLK_M, PLLC4_OUT2),
219  CLK_M, UNUSED7),
223  CLK_M, PLLC4_OUT2),
225  CLK_M, PLLC4_OUT2),
227  PLLC4_OUT0),
241  CLK_M, UNUSED7),
242  CLK_SRC_DEVICE(extperiph1, PLLA, CLK_S, PLLP, CLK_M, PLLE, UNUSED5,
243  UNUSED6, UNUSED7),
246  CLK_SRC_DEVICE(uart_fst_mipi_cal, PLLP_OUT3, PLLP, PLLC, UNUSED3, PLLC2_OUT0,
247  UNUSED5, CLK_M, UNUSED7),
248 };
249 
250 /* PLL stabilization delay in usec */
251 #define CLOCK_PLL_STABLE_DELAY_US 300
252 
253 #define IO_STABILIZATION_DELAY (2)
254 #define LOGIC_STABILIZATION_DELAY (2)
255 
256 /* Calculate clock fractional divider value from ref and target frequencies.
257  * This is for a U7.1 format. This is not well written up in the book and
258  * there have been some questions about this macro, so here we go.
259  * U7.1 format is defined as (ddddddd+1) + (h*.5)
260  * The lowest order bit is actually a fractional bit.
261  * Hence, the divider can be thought of as 9 bits.
262  * So:
263  * divider = ((ref/freq) << 1 - 1) (upper 7 bits) |
264  * (ref/freq & 1) (low order half-bit)
265  * however we can't do fractional arithmetic ... these are integers!
266  * So we normalize by shifting the result left 1 bit, and extracting
267  * ddddddd and h directly to the returned u8.
268  * divider = 2*(ref/freq);
269  * We want to
270  * preserve 7 bits of divisor and one bit of fraction, in 8 bits, as well as
271  * subtract one from ddddddd. Since we computed ref*2, the dddddd is now nicely
272  * situated in the upper 7 bits, and the h is sitting there in the low order
273  * bit. To subtract 1 from ddddddd, just subtract 2 from the 8-bit number
274  * and voila, upper 7 bits are (ref/freq-1), and lowest bit is h. Since you
275  * will assign this to a u8, it gets nicely truncated for you.
276  */
277 #define CLK_DIVIDER(REF, FREQ) (DIV_ROUND_UP(((REF) * 2), (FREQ)) - 2)
278 
279 /* Calculate clock frequency value from reference and clock divider value
280  * The discussion in the book is pretty lacking.
281  * The idea is that we need to divide a ref clock by a divisor
282  * in U7.1 format, where 7 upper bits are the integer
283  * and lowest order bit is a fraction.
284  * from the book, U7.1 is (ddddddd+1) + (h*.5)
285  * To normalize to an actual number, we might do this:
286  * ((d>>7+1)&0x7f) + (d&1 >> 1)
287  * but as you might guess, the low order bit would be lost.
288  * Since we can't express the fractional bit, we need to multiply it all by 2.
289  * ((d + 2)&0xfe) + (d & 1)
290  * Since we're just adding +2, the lowest order bit is preserved. Hence
291  * (d+2) is the same as ((d + 2)&0xfe) + (d & 1)
292  *
293  * Since you multiply denominator * 2 (by NOT shifting it),
294  * you multiply numerator * 2 to cancel it out.
295  */
296 #define CLK_FREQUENCY(REF, REG) (((REF) * 2) / ((REG) + 2))
297 
298 static inline void _clock_set_div(u32 *reg, const char *name, u32 div,
299  u32 div_mask, u32 src)
300 {
301  // The I2C and UART divisors are 16 bit while all the others are 8 bit.
302  // The I2C clocks are handled by the specialized macro below, but the
303  // UART clocks aren't. Don't use this function on UART clocks.
304  if (div & ~div_mask) {
305  printk(BIOS_ERR, "%s clock divisor overflow!", name);
306  hlt();
307  }
309  src << CLK_SOURCE_SHIFT | div);
310 }
311 
312 #define get_i2c_clk_div(src, freq) \
313  (DIV_ROUND_UP(src, (freq) * (0x19 + 1) * 8) - 1)
314 #define get_clk_div(src,freq) CLK_DIVIDER(src,freq)
315 #define CLK_DIV_MASK 0xff
316 #define CLK_DIV_MASK_I2C 0xffff
317 
318 #define clock_configure_source(device, src, freq) \
319  _clock_set_div(CLK_RST_REG(clk_src_##device), #device, \
320  get_clk_div(TEGRA_##src##_KHZ, freq), CLK_DIV_MASK, \
321  CLK_SRC_DEV_ID(device, src))
322 
323 /* soc-specific */
324 #define TEGRA_CLK_M_KHZ (clock_get_osc_khz()/2)
325 #define TEGRA_PLLX_KHZ CONFIG_PLLX_KHZ
326 #define TEGRA_PLLP_KHZ (408000)
327 #define TEGRA_PLLP_OUT3_KHZ (68000)
328 #define TEGRA_PLLC_KHZ (600000)
329 #define TEGRA_PLLD_KHZ (925000)
330 #define TEGRA_PLLD_OUT0_KHZ (TEGRA_PLLD_KHZ/2)
331 #define TEGRA_PLLU_KHZ (960000)
332 
333 #define clock_enable(l, h, u, v, w, x, y) \
334  do { \
335  u32 bits[DEV_CONFIG_BLOCKS] = {l, h, u, v, w, x, y}; \
336  clock_enable_regs(bits); \
337  } while (0)
338 
339 #define clock_disable(l, h, u, v, w, x, y) \
340  do { \
341  u32 bits[DEV_CONFIG_BLOCKS] = {l, h, u, v, w, x, y}; \
342  clock_disable_regs(bits); \
343  } while (0)
344 
345 #define clock_set_reset(l, h, u, v, w, x, y) \
346  do { \
347  u32 bits[DEV_CONFIG_BLOCKS] = {l, h, u, v, w, x, y}; \
348  clock_set_reset_regs(bits); \
349  } while (0)
350 
351 #define clock_clr_reset(l, h, u, v, w, x, y) \
352  do { \
353  u32 bits[DEV_CONFIG_BLOCKS] = {l, h, u, v, w, x, y}; \
354  clock_clr_reset_regs(bits); \
355  } while (0)
356 
357 #define clock_enable_l(l) clock_enable(l, 0, 0, 0, 0, 0, 0)
358 #define clock_enable_h(h) clock_enable(0, h, 0, 0, 0, 0, 0)
359 #define clock_enable_u(u) clock_enable(0, 0, u, 0, 0, 0, 0)
360 #define clock_enable_v(v) clock_enable(0, 0, 0, v, 0, 0, 0)
361 #define clock_enable_w(w) clock_enable(0, 0, 0, 0, w, 0, 0)
362 #define clock_enable_x(x) clock_enable(0, 0, 0, 0, 0, x, 0)
363 #define clock_enable_y(y) clock_enable(0, 0, 0, 0, 0, 0, y)
364 
365 #define clock_disable_l(l) clock_disable(l, 0, 0, 0, 0, 0, 0)
366 #define clock_disable_h(h) clock_disable(0, h, 0, 0, 0, 0, 0)
367 #define clock_disable_u(u) clock_disable(0, 0, u, 0, 0, 0, 0)
368 #define clock_disable_v(v) clock_disable(0, 0, 0, v, 0, 0, 0)
369 #define clock_disable_w(w) clock_disable(0, 0, 0, 0, w, 0, 0)
370 #define clock_disable_x(x) clock_disable(0, 0, 0, 0, 0, x, 0)
371 #define clock_disable_y(y) clock_disable(0, 0, 0, 0, 0, 0, y)
372 
373 #define clock_set_reset_l(l) clock_set_reset(l, 0, 0, 0, 0, 0, 0)
374 #define clock_set_reset_h(h) clock_set_reset(0, h, 0, 0, 0, 0, 0)
375 #define clock_set_reset_u(u) clock_set_reset(0, 0, u, 0, 0, 0, 0)
376 #define clock_set_reset_v(v) clock_set_reset(0, 0, 0, v, 0, 0, 0)
377 #define clock_set_reset_w(w) clock_set_reset(0, 0, 0, 0, w, 0, 0)
378 #define clock_set_reset_x(x) clock_set_reset(0, 0, 0, 0, 0, x, 0)
379 #define clock_set_reset_y(x) clock_set_reset(0, 0, 0, 0, 0, y, 0)
380 
381 #define clock_clr_reset_l(l) clock_clr_reset(l, 0, 0, 0, 0, 0, 0)
382 #define clock_clr_reset_h(h) clock_clr_reset(0, h, 0, 0, 0, 0, 0)
383 #define clock_clr_reset_u(u) clock_clr_reset(0, 0, u, 0, 0, 0, 0)
384 #define clock_clr_reset_v(v) clock_clr_reset(0, 0, 0, v, 0, 0, 0)
385 #define clock_clr_reset_w(w) clock_clr_reset(0, 0, 0, 0, w, 0, 0)
386 #define clock_clr_reset_x(x) clock_clr_reset(0, 0, 0, 0, 0, x, 0)
387 #define clock_clr_reset_y(y) clock_clr_reset(0, 0, 0, 0, 0, 0, y)
388 
389 #define clock_enable_clear_reset_l(l) \
390  clock_enable_clear_reset(l, 0, 0, 0, 0, 0, 0)
391 #define clock_enable_clear_reset_h(h) \
392  clock_enable_clear_reset(0, h, 0, 0, 0, 0, 0)
393 #define clock_enable_clear_reset_u(u) \
394  clock_enable_clear_reset(0, 0, u, 0, 0, 0, 0)
395 #define clock_enable_clear_reset_v(v) \
396  clock_enable_clear_reset(0, 0, 0, v, 0, 0, 0)
397 #define clock_enable_clear_reset_w(w) \
398  clock_enable_clear_reset(0, 0, 0, 0, w, 0, 0)
399 #define clock_enable_clear_reset_x(x) \
400  clock_enable_clear_reset(0, 0, 0, 0, 0, x, 0)
401 #define clock_enable_clear_reset_y(y) \
402  clock_enable_clear_reset(0, 0, 0, 0, 0, 0, y)
403 
404 int clock_get_osc_khz(void);
405 int clock_get_pll_input_khz(void);
406 /*
407  * Configure PLLD to requested frequency. Returned value is closest match
408  * within the PLLD's constraints or 0 if an error.
409  */
410 u32 clock_configure_plld(u32 frequency);
411 void clock_early_uart(void);
412 void clock_external_output(int clk_id);
413 void clock_sdram(u32 m, u32 n, u32 p, u32 setup, u32 kvco, u32 kcp,
414  u32 stable_time, u32 emc_source, u32 same_freq);
415 void clock_cpu0_config(void);
416 void clock_halt_avp(void);
421 void clock_enable_clear_reset(u32 l, u32 h, u32 u, u32 v, u32 w, u32 x, u32 y);
422 void clock_grp_enable_clear_reset(u32 val, u32 *clk_enb_set_reg,
423  u32 *rst_dev_clr_reg);
424 void clock_reset_l(u32 l);
425 void clock_reset_h(u32 h);
426 void clock_reset_u(u32 u);
427 void clock_reset_v(u32 v);
428 void clock_reset_w(u32 w);
429 void clock_reset_x(u32 x);
430 void clock_reset_y(u32 y);
431 void clock_init(void);
433 void sor_clock_stop(void);
434 void sor_clock_start(void);
435 void clock_enable_audio(void);
436 
437 #endif /* __SOC_NVIDIA_TEGRA210_CLOCK_H__ */
const char * name
Definition: mmu.c:92
static __always_inline void hlt(void)
Definition: hlt.h:6
#define printk(level,...)
Definition: stdlib.h:16
#define clrsetbits32(addr, clear, set)
Definition: mmio.h:16
int y
Definition: edid.c:994
int x
Definition: edid.c:994
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
@ I2C5
Definition: i2c.h:55
@ I2C3
Definition: i2c.h:53
@ I2C2
Definition: i2c.h:52
@ I2C1
Definition: i2c.h:51
@ I2C6
Definition: i2c.h:56
int clock_get_pll_input_khz(void)
Definition: clock.c:160
void clock_reset_h(u32 h)
Definition: clock.c:627
void clock_external_output(int clk_id)
Definition: clock.c:396
@ CLK_L_I2S2
Definition: clock.h:29
@ CLK_U_DSIB
Definition: clock.h:88
@ CLK_L_UARTA
Definition: clock.h:18
@ CLK_V_I2S4
Definition: clock.h:112
@ CLK_H_PMC
Definition: clock.h:48
@ CLK_H_UARTC
Definition: clock.h:62
@ CLK_L_2D
Definition: clock.h:32
@ CLK_U_SOC_THERM
Definition: clock.h:84
@ CLK_L_USBD
Definition: clock.h:33
@ CLK_H_FUSE
Definition: clock.h:49
@ CLK_L_SDMMC1
Definition: clock.h:26
@ CLK_H_I2C2
Definition: clock.h:61
@ CLK_W_CEC
Definition: clock.h:130
@ CLK_U_DEV2_OUT
Definition: clock.h:103
@ CLK_L_CPU
Definition: clock.h:13
@ CLK_U_AVPUCQ
Definition: clock.h:82
@ CLK_U_TRACECLKIN
Definition: clock.h:83
@ CLK_H_I2C5
Definition: clock.h:56
@ CLK_U_DEV1_OUT
Definition: clock.h:104
@ CLK_V_SBC6
Definition: clock.h:115
@ CLK_U_EMUCIF
Definition: clock.h:95
@ CLK_U_I2C3
Definition: clock.h:74
@ CLK_V_ATOMICS
Definition: clock.h:122
@ CLK_U_CRAM2
Definition: clock.h:99
@ CLK_V_HDA2CODEC_2X
Definition: clock.h:121
@ CLK_U_AFI
Definition: clock.h:79
@ CLK_H_AHBDMA
Definition: clock.h:44
@ CLK_W_DVFS
Definition: clock.h:135
@ CLK_H_KFUSE
Definition: clock.h:50
@ CLK_L_GPIO
Definition: clock.h:20
@ CLK_W_XUSB_SS
Definition: clock.h:136
@ CLK_H_HSI
Definition: clock.h:58
@ CLK_U_SDMMC3
Definition: clock.h:76
@ CLK_X_GPU
Definition: clock.h:147
@ CLK_X_SOR0
Definition: clock.h:148
@ CLK_L_DISP2
Definition: clock.h:36
@ CLK_L_VI
Definition: clock.h:31
@ CLK_U_SUS_OUT
Definition: clock.h:102
@ CLK_U_XUSB_DEV
Definition: clock.h:105
@ CLK_H_KBC
Definition: clock.h:46
@ CLK_H_SBC3
Definition: clock.h:55
@ CLK_L_SDMMC4
Definition: clock.h:27
@ CLK_X_DPAUX
Definition: clock.h:149
@ CLK_U_MSENC
Definition: clock.h:101
@ CLK_H_STAT_MON
Definition: clock.h:47
@ CLK_L_3D
Definition: clock.h:35
@ CLK_V_SBC5
Definition: clock.h:114
@ CLK_H_USB2
Definition: clock.h:65
@ CLK_H_SBC1
Definition: clock.h:51
@ CLK_X_SPARE
Definition: clock.h:159
@ CLK_H_APBDMA
Definition: clock.h:45
@ CLK_L_PWM
Definition: clock.h:28
@ CLK_L_EPP
Definition: clock.h:30
@ CLK_L_HOST1X
Definition: clock.h:38
@ CLK_L_UARTB
Definition: clock.h:19
@ CLK_U_UARTE
Definition: clock.h:73
@ CLK_L_ISP
Definition: clock.h:34
@ CLK_W_XUSB_PADCTL
Definition: clock.h:131
@ CLK_H_EMC
Definition: clock.h:64
@ CLK_X_VIC
Definition: clock.h:151
@ CLK_L_I2S1
Definition: clock.h:23
@ CLK_L_SDMMC2
Definition: clock.h:21
@ CLK_L_VCP
Definition: clock.h:39
@ CLK_V_3D2
Definition: clock.h:109
@ CLK_W_ENTROPY
Definition: clock.h:132
@ CLK_L_NDFLASH
Definition: clock.h:25
@ CLK_L_TMR
Definition: clock.h:17
@ CLK_U_I2C_SLOW
Definition: clock.h:87
@ CLK_L_COP
Definition: clock.h:14
@ CLK_U_PCIEXCLK
Definition: clock.h:81
@ CLK_H_HDMI
Definition: clock.h:59
@ CLK_V_MSELECT
Definition: clock.h:110
@ CLK_V_ACTMON
Definition: clock.h:123
@ CLK_U_IRAMD
Definition: clock.h:97
@ CLK_L_CACHE2
Definition: clock.h:41
@ CLK_H_USB3
Definition: clock.h:66
@ CLK_L_I2C1
Definition: clock.h:24
@ CLK_U_XUSB_HOST
Definition: clock.h:100
@ CLK_U_PCIE
Definition: clock.h:77
@ CLK_U_IRAMA
Definition: clock.h:90
@ CLK_H_MIPI_CAL
Definition: clock.h:63
@ CLK_L_DISP1
Definition: clock.h:37
@ CLK_H_MPE
Definition: clock.h:67
@ CLK_V_HDA
Definition: clock.h:126
@ CLK_H_BSEV
Definition: clock.h:70
@ CLK_U_NAND_SPEED
Definition: clock.h:86
@ CLK_L_TRIG_SYS
Definition: clock.h:15
@ CLK_U_UARTD
Definition: clock.h:72
@ CLK_U_IRAMC
Definition: clock.h:92
@ CLK_H_BSEA
Definition: clock.h:69
@ CLK_U_DTV
Definition: clock.h:85
@ CLK_V_EXTPERIPH1
Definition: clock.h:124
@ CLK_H_MEM
Definition: clock.h:43
@ CLK_H_DSI
Definition: clock.h:57
@ CLK_V_CPUG
Definition: clock.h:107
@ CLK_H_SBC2
Definition: clock.h:54
@ CLK_U_IRAMB
Definition: clock.h:91
@ CLK_V_SATA
Definition: clock.h:125
@ CLK_V_I2C4
Definition: clock.h:113
@ CLK_L_SPDIF
Definition: clock.h:22
@ CLK_W_SATACOLD
Definition: clock.h:129
@ CLK_H_CSI
Definition: clock.h:60
@ CLK_H_SNOR
Definition: clock.h:52
@ CLK_H_VDE
Definition: clock.h:68
@ CLK_V_CPULP
Definition: clock.h:108
@ CLK_L_RTC
Definition: clock.h:16
@ CLK_X_I2C6
Definition: clock.h:156
@ CLK_H_JTAG2TBC
Definition: clock.h:53
@ CLK_U_OWR
Definition: clock.h:78
@ CLK_U_TSEC
Definition: clock.h:89
@ CLK_U_CSITE
Definition: clock.h:80
@ CLK_W_HDA2HDMICODEC
Definition: clock.h:128
@ CLK_U_SBC4
Definition: clock.h:75
void clock_halt_avp(void)
Definition: clock.c:530
void sor_clock_stop(void)
Definition: clock.c:185
void clock_reset_w(u32 w)
Definition: clock.c:648
int clock_get_osc_khz(void)
Definition: clock.c:155
void clock_early_uart(void)
Definition: clock.c:386
void clock_sdram(u32 m, u32 n, u32 p, u32 setup, u32 ph45, u32 ph90, u32 ph135, u32 kvco, u32 kcp, u32 stable_time, u32 emc_source, u32 same_freq)
Definition: clock.c:416
void clock_init(void)
Definition: clock.c:539
void clock_reset_x(u32 x)
Definition: clock.c:655
void sor_clock_start(void)
Definition: clock.c:195
void clock_cpu0_config(void *entry)
Definition: clock.c:472
void clock_reset_l(u32 l)
Definition: clock.c:620
void clock_enable_clear_reset(u32 l, u32 h, u32 u, u32 v, u32 w, u32 x)
Definition: clock.c:600
void clock_reset_u(u32 u)
Definition: clock.c:634
void clock_init_arm_generic_timer(void)
Definition: clock.c:168
void clock_reset_v(u32 v)
Definition: clock.c:641
@ PLLP
Definition: clock.h:245
@ PLLC2
Definition: clock.h:246
@ PLLD
Definition: clock.h:248
@ PLLC
Definition: clock.h:247
@ PLLM
Definition: clock.h:251
@ PLLD2
Definition: clock.h:252
@ PLLA
Definition: clock.h:250
@ CLK_M
Definition: clock.h:253
static void _clock_set_div(u32 *reg, const char *name, u32 div, u32 div_mask, u32 src)
Definition: clock.h:298
void clock_enable_audio(void)
Definition: clock.c:772
void clock_disable_regs(u32 bits[DEV_CONFIG_BLOCKS])
Definition: clock.c:697
void clock_set_reset_regs(u32 bits[DEV_CONFIG_BLOCKS])
Definition: clock.c:702
@ PLLP_OUT3
Definition: clock.h:170
@ PLLD_OUT0
Definition: clock.h:169
@ UNUSED5
Definition: clock.h:177
@ UNUSED2
Definition: clock.h:174
@ UNUSED3
Definition: clock.h:175
@ PLLC4_OUT0_L
Definition: clock.h:166
@ PLLC4_OUT2
Definition: clock.h:164
@ UNUSED6
Definition: clock.h:178
@ PLLC2_OUT0
Definition: clock.h:171
@ PLLC4_OUT3
Definition: clock.h:165
@ UNUSED4
Definition: clock.h:176
@ PLLC4_OUT1
Definition: clock.h:163
@ UNUSED7
Definition: clock.h:179
@ UNUSED0
Definition: clock.h:172
@ UNUSED1
Definition: clock.h:173
@ PLLC_OUT1
Definition: clock.h:154
@ PLLE
Definition: clock.h:158
@ PLLC4_OUT1_L
Definition: clock.h:167
@ PLLC4_OUT2_L
Definition: clock.h:168
@ PLLC4_OUT0
Definition: clock.h:162
@ CLK_S
Definition: clock.h:157
u32 clock_configure_plld(u32 frequency)
Definition: clock.c:385
void clock_clr_reset_regs(u32 bits[DEV_CONFIG_BLOCKS])
Definition: clock.c:707
#define CLK_SRC_DEVICE(dev, a, b, c, d, e, f, g, h)
Definition: clock.h:185
@ CLK_V_APB2APE
Definition: clock.h:117
@ CLK_X_ETR
Definition: clock.h:141
@ CLK_V_I2S5
Definition: clock.h:112
@ CLK_X_MIPIBIF
Definition: clock.h:139
@ CLK_L_I2S3
Definition: clock.h:29
@ CLK_Y_SOR_SAFE
Definition: clock.h:147
@ CLK_Y_APE
Definition: clock.h:144
@ CLK_Y_DPAUX1
Definition: clock.h:145
@ CLK_V_AHUB
Definition: clock.h:116
@ CLK_X_SOR1
Definition: clock.h:134
@ CLK_Y_QSPI
Definition: clock.h:146
@ CLK_X_UART_FST_MIPI_CAL
Definition: clock.h:138
void clock_reset_y(u32 y)
Definition: clock.c:765
void clock_grp_enable_clear_reset(u32 val, u32 *clk_enb_set_reg, u32 *rst_dev_clr_reg)
Definition: clock.c:634
void clock_enable_regs(u32 bits[DEV_CONFIG_BLOCKS])
Definition: clock.c:692
uint32_t u32
Definition: stdint.h:51
u8 val
Definition: sys.c:300
#define CLK_SOURCE_SHIFT
Definition: clk_rst.h:410
#define CLK_SOURCE_MASK
Definition: clk_rst.h:411
#define CLK_DIVISOR_MASK
Definition: clk_rst.h:408
#define m(clkreg, src_bits, pmcreg, dst_bits)
#define DEV_CONFIG_BLOCKS
Definition: clk_rst.h:307