]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - arch/arm/cpu/arm920t/imx/speed.c
Add GPL-2.0+ SPDX-License-Identifier to source files
[karo-tx-uboot.git] / arch / arm / cpu / arm920t / imx / speed.c
1 /*
2  *
3  * (c) 2004 Sascha Hauer <sascha@saschahauer.de>
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8
9 #include <common.h>
10 #if defined (CONFIG_IMX)
11
12 #include <asm/arch/imx-regs.h>
13
14 /* ------------------------------------------------------------------------- */
15 /* NOTE: This describes the proper use of this file.
16  *
17  * CONFIG_SYS_CLK_FREQ should be defined as the input frequency of the PLL.
18  * SH FIXME: 16780000 in our case
19  * get_FCLK(), get_HCLK(), get_PCLK() and get_UCLK() return the clock of
20  * the specified bus in HZ.
21  */
22 /* ------------------------------------------------------------------------- */
23
24 ulong get_systemPLLCLK(void)
25 {
26         /* FIXME: We assume System_SEL = 0 here */
27         u32 spctl0 = SPCTL0;
28         u32 mfi = (spctl0 >> 10) & 0xf;
29         u32 mfn = spctl0 & 0x3f;
30         u32 mfd = (spctl0 >> 16) & 0x3f;
31         u32 pd =  (spctl0 >> 26) & 0xf;
32
33         mfi = mfi<=5 ? 5 : mfi;
34
35         return (2*(CONFIG_SYSPLL_CLK_FREQ>>10)*( (mfi<<10) + (mfn<<10)/(mfd+1)))/(pd+1);
36 }
37
38 ulong get_mcuPLLCLK(void)
39 {
40         /* FIXME: We assume System_SEL = 0 here */
41         u32 mpctl0 = MPCTL0;
42         u32 mfi = (mpctl0 >> 10) & 0xf;
43         u32 mfn = mpctl0 & 0x3f;
44         u32 mfd = (mpctl0 >> 16) & 0x3f;
45         u32 pd =  (mpctl0 >> 26) & 0xf;
46
47         mfi = mfi<=5 ? 5 : mfi;
48
49         return (2*(CONFIG_SYS_CLK_FREQ>>10)*( (mfi<<10) + (mfn<<10)/(mfd+1)))/(pd+1);
50 }
51
52 ulong get_FCLK(void)
53 {
54         return (( CSCR>>15)&1) ? get_mcuPLLCLK()>>1 : get_mcuPLLCLK();
55 }
56
57 /* return HCLK frequency */
58 ulong get_HCLK(void)
59 {
60         u32 bclkdiv = (( CSCR >> 10 ) & 0xf) + 1;
61         printf("bclkdiv: %d\n", bclkdiv);
62         return get_systemPLLCLK() / bclkdiv;
63 }
64
65 /* return BCLK frequency */
66 ulong get_BCLK(void)
67 {
68         return get_HCLK();
69 }
70
71 ulong get_PERCLK1(void)
72 {
73         return get_systemPLLCLK() / (((PCDR) & 0xf)+1);
74 }
75
76 ulong get_PERCLK2(void)
77 {
78         return get_systemPLLCLK() / (((PCDR>>4) & 0xf)+1);
79 }
80
81 ulong get_PERCLK3(void)
82 {
83         return get_systemPLLCLK() / (((PCDR>>16) & 0x7f)+1);
84 }
85
86 #endif /* defined (CONFIG_IMX) */