xref: /rk3399_rockchip-uboot/arch/arm/mach-at91/include/mach/clk.h (revision dc557e9a1fe00ca9d884bd88feef5bebf23fede4)
1af930827SMasahiro Yamada /*
2af930827SMasahiro Yamada  * (C) Copyright 2007
3af930827SMasahiro Yamada  * Stelian Pop <stelian@popies.net>
4af930827SMasahiro Yamada  * Lead Tech Design <www.leadtechdesign.com>
5af930827SMasahiro Yamada  * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
6af930827SMasahiro Yamada  *
7af930827SMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
8af930827SMasahiro Yamada  */
9af930827SMasahiro Yamada #ifndef __ASM_ARM_ARCH_CLK_H__
10af930827SMasahiro Yamada #define __ASM_ARM_ARCH_CLK_H__
11af930827SMasahiro Yamada 
12af930827SMasahiro Yamada #include <asm/arch/hardware.h>
13af930827SMasahiro Yamada #include <asm/arch/at91_pmc.h>
14af930827SMasahiro Yamada #include <asm/global_data.h>
15af930827SMasahiro Yamada 
16c1900055SWenyou Yang #define GCK_CSS_SLOW_CLK	0
17c1900055SWenyou Yang #define GCK_CSS_MAIN_CLK	1
18c1900055SWenyou Yang #define GCK_CSS_PLLA_CLK	2
19c1900055SWenyou Yang #define GCK_CSS_UPLL_CLK	3
20c1900055SWenyou Yang #define GCK_CSS_MCK_CLK		4
21c1900055SWenyou Yang #define GCK_CSS_AUDIO_CLK	5
22c1900055SWenyou Yang 
23*7a91e1a3SWenyou Yang #define AT91_UTMI_PLL_CLK_FREQ	480000000
24*7a91e1a3SWenyou Yang 
get_cpu_clk_rate(void)25af930827SMasahiro Yamada static inline unsigned long get_cpu_clk_rate(void)
26af930827SMasahiro Yamada {
27af930827SMasahiro Yamada 	DECLARE_GLOBAL_DATA_PTR;
28af930827SMasahiro Yamada 	return gd->arch.cpu_clk_rate_hz;
29af930827SMasahiro Yamada }
30af930827SMasahiro Yamada 
get_main_clk_rate(void)31af930827SMasahiro Yamada static inline unsigned long get_main_clk_rate(void)
32af930827SMasahiro Yamada {
33af930827SMasahiro Yamada 	DECLARE_GLOBAL_DATA_PTR;
34af930827SMasahiro Yamada 	return gd->arch.main_clk_rate_hz;
35af930827SMasahiro Yamada }
36af930827SMasahiro Yamada 
get_mck_clk_rate(void)37af930827SMasahiro Yamada static inline unsigned long get_mck_clk_rate(void)
38af930827SMasahiro Yamada {
39af930827SMasahiro Yamada 	DECLARE_GLOBAL_DATA_PTR;
40af930827SMasahiro Yamada 	return gd->arch.mck_rate_hz;
41af930827SMasahiro Yamada }
42af930827SMasahiro Yamada 
get_plla_clk_rate(void)43af930827SMasahiro Yamada static inline unsigned long get_plla_clk_rate(void)
44af930827SMasahiro Yamada {
45af930827SMasahiro Yamada 	DECLARE_GLOBAL_DATA_PTR;
46af930827SMasahiro Yamada 	return gd->arch.plla_rate_hz;
47af930827SMasahiro Yamada }
48af930827SMasahiro Yamada 
get_pllb_clk_rate(void)49af930827SMasahiro Yamada static inline unsigned long get_pllb_clk_rate(void)
50af930827SMasahiro Yamada {
51af930827SMasahiro Yamada 	DECLARE_GLOBAL_DATA_PTR;
52af930827SMasahiro Yamada 	return gd->arch.pllb_rate_hz;
53af930827SMasahiro Yamada }
54af930827SMasahiro Yamada 
get_pllb_init(void)55af930827SMasahiro Yamada static inline u32 get_pllb_init(void)
56af930827SMasahiro Yamada {
57af930827SMasahiro Yamada 	DECLARE_GLOBAL_DATA_PTR;
58af930827SMasahiro Yamada 	return gd->arch.at91_pllb_usb_init;
59af930827SMasahiro Yamada }
60af930827SMasahiro Yamada 
61af930827SMasahiro Yamada #ifdef CPU_HAS_H32MXDIV
get_h32mxdiv(void)62af930827SMasahiro Yamada static inline unsigned int get_h32mxdiv(void)
63af930827SMasahiro Yamada {
64af930827SMasahiro Yamada 	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
65af930827SMasahiro Yamada 
66af930827SMasahiro Yamada 	return readl(&pmc->mckr) & AT91_PMC_MCKR_H32MXDIV;
67af930827SMasahiro Yamada }
68af930827SMasahiro Yamada #else
get_h32mxdiv(void)69af930827SMasahiro Yamada static inline unsigned int get_h32mxdiv(void)
70af930827SMasahiro Yamada {
71af930827SMasahiro Yamada 	return 0;
72af930827SMasahiro Yamada }
73af930827SMasahiro Yamada #endif
74af930827SMasahiro Yamada 
get_macb_pclk_rate(unsigned int dev_id)75af930827SMasahiro Yamada static inline unsigned long get_macb_pclk_rate(unsigned int dev_id)
76af930827SMasahiro Yamada {
77af930827SMasahiro Yamada 	if (get_h32mxdiv())
78af930827SMasahiro Yamada 		return get_mck_clk_rate() / 2;
79af930827SMasahiro Yamada 	else
80af930827SMasahiro Yamada 		return get_mck_clk_rate();
81af930827SMasahiro Yamada }
82af930827SMasahiro Yamada 
get_usart_clk_rate(unsigned int dev_id)83af930827SMasahiro Yamada static inline unsigned long get_usart_clk_rate(unsigned int dev_id)
84af930827SMasahiro Yamada {
85af930827SMasahiro Yamada 	if (get_h32mxdiv())
86af930827SMasahiro Yamada 		return get_mck_clk_rate() / 2;
87af930827SMasahiro Yamada 	else
88af930827SMasahiro Yamada 		return get_mck_clk_rate();
89af930827SMasahiro Yamada }
90af930827SMasahiro Yamada 
get_lcdc_clk_rate(unsigned int dev_id)91af930827SMasahiro Yamada static inline unsigned long get_lcdc_clk_rate(unsigned int dev_id)
92af930827SMasahiro Yamada {
93af930827SMasahiro Yamada 	return get_mck_clk_rate();
94af930827SMasahiro Yamada }
95af930827SMasahiro Yamada 
get_spi_clk_rate(unsigned int dev_id)96af930827SMasahiro Yamada static inline unsigned long get_spi_clk_rate(unsigned int dev_id)
97af930827SMasahiro Yamada {
98af930827SMasahiro Yamada 	if (get_h32mxdiv())
99af930827SMasahiro Yamada 		return get_mck_clk_rate() / 2;
100af930827SMasahiro Yamada 	else
101af930827SMasahiro Yamada 		return get_mck_clk_rate();
102af930827SMasahiro Yamada }
103af930827SMasahiro Yamada 
get_twi_clk_rate(unsigned int dev_id)104af930827SMasahiro Yamada static inline unsigned long get_twi_clk_rate(unsigned int dev_id)
105af930827SMasahiro Yamada {
106af930827SMasahiro Yamada 	if (get_h32mxdiv())
107af930827SMasahiro Yamada 		return get_mck_clk_rate() / 2;
108af930827SMasahiro Yamada 	else
109af930827SMasahiro Yamada 		return get_mck_clk_rate();
110af930827SMasahiro Yamada }
111af930827SMasahiro Yamada 
get_mci_clk_rate(void)112af930827SMasahiro Yamada static inline unsigned long get_mci_clk_rate(void)
113af930827SMasahiro Yamada {
114af930827SMasahiro Yamada 	if (get_h32mxdiv())
115af930827SMasahiro Yamada 		return get_mck_clk_rate() / 2;
116af930827SMasahiro Yamada 	else
117af930827SMasahiro Yamada 		return get_mck_clk_rate();
118af930827SMasahiro Yamada }
119af930827SMasahiro Yamada 
get_pit_clk_rate(void)120af930827SMasahiro Yamada static inline unsigned long get_pit_clk_rate(void)
121af930827SMasahiro Yamada {
122af930827SMasahiro Yamada 	if (get_h32mxdiv())
123af930827SMasahiro Yamada 		return get_mck_clk_rate() / 2;
124af930827SMasahiro Yamada 	else
125af930827SMasahiro Yamada 		return get_mck_clk_rate();
126af930827SMasahiro Yamada }
127af930827SMasahiro Yamada 
128af930827SMasahiro Yamada int at91_clock_init(unsigned long main_clock);
129af930827SMasahiro Yamada void at91_periph_clk_enable(int id);
130af930827SMasahiro Yamada void at91_periph_clk_disable(int id);
131c1900055SWenyou Yang int at91_enable_periph_generated_clk(u32 id, u32 clk_source, u32 div);
132c1900055SWenyou Yang u32 at91_get_periph_generated_clk(u32 id);
13341bf25c2SWenyou Yang void at91_system_clk_enable(int sys_clk);
13441bf25c2SWenyou Yang void at91_system_clk_disable(int sys_clk);
1351e70b373SWenyou Yang int at91_upll_clk_enable(void);
1361e70b373SWenyou Yang int at91_upll_clk_disable(void);
1371e70b373SWenyou Yang void at91_usb_clk_init(u32 value);
138be5e485cSWenyou Yang int at91_pllb_clk_enable(u32 pllbr);
139be5e485cSWenyou Yang int at91_pllb_clk_disable(void);
140c0b868c0SWenyou Yang void at91_pllicpr_init(u32 icpr);
141c1900055SWenyou Yang 
142af930827SMasahiro Yamada #endif /* __ASM_ARM_ARCH_CLK_H__ */
143