summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorIvo Clarysse <ivo.clarysse@gmail.com>2009-04-07 11:01:15 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2009-04-07 11:01:15 +0200
commite404e46b326eb6a648377103c9d9b8b6c2d8c3b8 (patch)
treef0d5c1c5e367d9030eee91217de4a6ef207812dc /arch
parent3ccfdfd9b97506638baf960f8c0bcdca740f7845 (diff)
downloadbarebox-e404e46b326eb6a648377103c9d9b8b6c2d8c3b8.tar.gz
barebox-e404e46b326eb6a648377103c9d9b8b6c2d8c3b8.tar.xz
i.MX21: Fixes HCLK decoding for i.MX21, reports NFC clock
Signed-off-by: Ivo Clarysse <ivo.clarysse@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-imx/speed-imx21.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/speed-imx21.c b/arch/arm/mach-imx/speed-imx21.c
index ff5278a3a1..536e9ce71f 100644
--- a/arch/arm/mach-imx/speed-imx21.c
+++ b/arch/arm/mach-imx/speed-imx21.c
@@ -54,13 +54,25 @@ ulong imx_get_mpllclk(void)
return imx_decode_pll(MPCTL0, fref);
}
+ulong imx_get_fclk(void)
+{
+ ulong cscr = CSCR;
+ ulong fref = imx_get_mpllclk();
+ ulong div;
+
+ div = ((cscr >> 29) & 0x7) + 1;
+
+ return fref / div;
+}
+
+/* HCLK */
ulong imx_get_armclk(void)
{
ulong cscr = CSCR;
ulong fref = imx_get_mpllclk();
ulong div;
- div = ((cscr >> 10) & 0x7) + 1;
+ div = ((cscr >> 10) & 0xF) + 1;
return fref / div;
}
@@ -86,6 +98,13 @@ static ulong imx_decode_perclk(ulong div)
return imx_get_mpllclk() / div;
}
+static ulong imx_get_nfcclk(void)
+{
+ ulong fref = imx_get_fclk();
+ ulong div = ((PCDR0 >> 12) & 0xF) + 1;
+ return fref / div;
+}
+
ulong imx_get_perclk1(void)
{
return imx_decode_perclk((PCDR1 & 0x3f) + 1);
@@ -124,6 +143,8 @@ int imx_dump_clocks(void)
printf("mpll: %10d Hz\n", imx_get_mpllclk());
printf("spll: %10d Hz\n", imx_get_spllclk());
printf("arm: %10d Hz\n", imx_get_armclk());
+ printf("fclk: %10d Hz\n", imx_get_fclk());
+ printf("nfcclk: %10d Hz\n", imx_get_nfcclk());
printf("perclk1: %10d Hz\n", imx_get_perclk1());
printf("perclk2: %10d Hz\n", imx_get_perclk2());
printf("perclk3: %10d Hz\n", imx_get_perclk3());