summaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-10-09 17:24:25 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2007-10-09 17:24:25 +0200
commitb1613059460b93dbc55adcc9d52895eb3ce721eb (patch)
treee5db5b57c275f0592aea8ea6867428b8b7835070 /arch/arm
parent8f29f6481e9073b85361d8395c1e5ba531761e75 (diff)
downloadbarebox-b1613059460b93dbc55adcc9d52895eb3ce721eb.tar.gz
barebox-b1613059460b93dbc55adcc9d52895eb3ce721eb.tar.xz
change imx clock functions so that they have the same name for
i.MX1 and i.MX27
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-imx/speed-imx1.c12
-rw-r--r--arch/arm/mach-imx/speed-imx27.c47
2 files changed, 47 insertions, 12 deletions
diff --git a/arch/arm/mach-imx/speed-imx1.c b/arch/arm/mach-imx/speed-imx1.c
index b55ca3a80e..f801f8f093 100644
--- a/arch/arm/mach-imx/speed-imx1.c
+++ b/arch/arm/mach-imx/speed-imx1.c
@@ -37,12 +37,12 @@
*/
/* ------------------------------------------------------------------------- */
-ulong imx_get_systemclk(void)
+ulong imx_get_spllclk(void)
{
return imx_decode_pll(SPCTL0, CONFIG_SYSPLL_CLK_FREQ);
}
-ulong imx_get_mcuclk(void)
+ulong imx_get_mpllclk(void)
{
return imx_decode_pll(MPCTL0, CONFIG_SYS_CLK_FREQ);
}
@@ -55,7 +55,7 @@ ulong imx_get_fclk(void)
ulong imx_get_hclk(void)
{
u32 bclkdiv = (( CSCR >> 10 ) & 0xf) + 1;
- return get_systemPLLCLK() / bclkdiv;
+ return imx_get_spllclk() / bclkdiv;
}
ulong imx_get_bclk(void)
@@ -65,17 +65,17 @@ ulong imx_get_bclk(void)
ulong imx_get_perclk1(void)
{
- return get_systemPLLCLK() / (((PCDR) & 0xf)+1);
+ return imx_get_spllclk() / (((PCDR) & 0xf)+1);
}
ulong imx_get_perclk2(void)
{
- return get_systemPLLCLK() / (((PCDR>>4) & 0xf)+1);
+ return imx_get_spllclk() / (((PCDR>>4) & 0xf)+1);
}
ulong imx_get_perclk3(void)
{
- return get_systemPLLCLK() / (((PCDR>>16) & 0x7f)+1);
+ return imx_get_spllclk() / (((PCDR>>16) & 0x7f)+1);
}
#if 0
diff --git a/arch/arm/mach-imx/speed-imx27.c b/arch/arm/mach-imx/speed-imx27.c
index ca90bea73b..5533dda44a 100644
--- a/arch/arm/mach-imx/speed-imx27.c
+++ b/arch/arm/mach-imx/speed-imx27.c
@@ -1,6 +1,7 @@
#include <common.h>
#include <asm/arch/imx-regs.h>
#include <asm/arch/clock.h>
+#include <init.h>
#ifndef CLK32
#define CLK32 32000
@@ -22,7 +23,7 @@ static ulong clk_in_26m(void)
}
}
-ulong imx_get_mcuclk(void)
+ulong imx_get_mpllclk(void)
{
ulong cscr = CSCR;
ulong fref;
@@ -35,7 +36,21 @@ ulong imx_get_mcuclk(void)
return imx_decode_pll(MPCTL0, fref);
}
-ulong imx_get_systemclk(void)
+ulong imx_get_armclk(void)
+{
+ ulong cscr = CSCR;
+ ulong fref = imx_get_mpllclk();
+ ulong div;
+
+ if (!(cscr & CSCR_ARM_SRC_MPLL))
+ fref = (fref * 2) / 3;
+
+ div = ((cscr >> 12) & 0x3) + 1;
+
+ return fref / div;
+}
+
+ulong imx_get_spllclk(void)
{
ulong cscr = CSCR;
ulong fref;
@@ -48,23 +63,43 @@ ulong imx_get_systemclk(void)
return imx_decode_pll(SPCTL0, fref);
}
+static ulong imx_decode_perclk(ulong div)
+{
+ return (imx_get_mpllclk() * 2) / (div * 3);
+}
+
ulong imx_get_perclk1(void)
{
- return imx_get_mcuclk() / ((PCDR1 & 0x3f) + 1);
+ return imx_decode_perclk((PCDR1 & 0x3f) + 1);
}
ulong imx_get_perclk2(void)
{
- return imx_get_mcuclk() / (((PCDR1 >> 8) & 0x3f) + 1);
+ return imx_decode_perclk(((PCDR1 >> 8) & 0x3f) + 1);
}
ulong imx_get_perclk3(void)
{
- return imx_get_mcuclk() / (((PCDR1 >> 16) & 0x3f) + 1);
+ return imx_decode_perclk(((PCDR1 >> 16) & 0x3f) + 1);
}
ulong imx_get_perclk4(void)
{
- return imx_get_mcuclk() / (((PCDR1 >> 24) & 0x3f) + 1);
+ return imx_decode_perclk(((PCDR1 >> 24) & 0x3f) + 1);
}
+int imx_dump_clocks(void)
+{
+ printf("mpll: %10d\n", imx_get_mpllclk());
+ printf("arm: %10d\n", imx_get_armclk());
+ printf("system: %10d\n", imx_get_spllclk());
+ printf("perclk1: %10d\n", imx_get_perclk1());
+ printf("perclk2: %10d\n", imx_get_perclk2());
+ printf("perclk3: %10d\n", imx_get_perclk3());
+ printf("perclk4: %10d\n", imx_get_perclk4());
+ printf("clkin26: %10d\n", clk_in_26m());
+ return 0;
+}
+
+late_initcall(imx_dump_clocks);
+