summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx/clko.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2009-03-19 17:46:48 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2009-03-19 18:23:57 +0100
commit8b75c20a41504824f911a1e75f60a586acc587fc (patch)
treef98f05aacbbb8d5442809e3bd34e75dcd244d89c /arch/arm/mach-imx/clko.c
parent7166742b04ff7e56e816c6d14df1906ad31f1334 (diff)
downloadbarebox-8b75c20a41504824f911a1e75f60a586acc587fc.tar.gz
barebox-8b75c20a41504824f911a1e75f60a586acc587fc.tar.xz
add clko support for i.mx35
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-imx/clko.c')
-rw-r--r--arch/arm/mach-imx/clko.c59
1 files changed, 44 insertions, 15 deletions
diff --git a/arch/arm/mach-imx/clko.c b/arch/arm/mach-imx/clko.c
index 4eaf3691ef..bee1ce20f2 100644
--- a/arch/arm/mach-imx/clko.c
+++ b/arch/arm/mach-imx/clko.c
@@ -2,10 +2,11 @@
#include <command.h>
#include <getopt.h>
#include <asm/arch/imx-regs.h>
+#include <asm/arch/clock.h>
static int do_clko (cmd_tbl_t *cmdtp, int argc, char *argv[])
{
- int opt, div = 0, src = -2;
+ int opt, div = 0, src = -2, ret;
getopt_reset();
@@ -26,33 +27,26 @@ static int do_clko (cmd_tbl_t *cmdtp, int argc, char *argv[])
}
if (src == -1) {
- PCDR0 &= ~(1 << 25);
+ imx_clko_set_src(-1);
return 0;
}
- if (src != -2) {
- ulong ccsr;
- ccsr = CCSR & ~0x1f;
- ccsr |= src & 0x1f;
- CCSR = ccsr;
- }
+ if (src != -2)
+ imx_clko_set_src(src);
if (div != 0) {
- ulong pcdr;
- div--;
- pcdr = PCDR0 & ~(7 << 22);
- pcdr |= (div & 0x7) << 22;
- PCDR0 = pcdr;
+ ret = imx_clko_set_div(div);
+ if (ret != div)
+ printf("limited divider to %d\n", ret);
}
- PCDR0 |= (1 << 25);
return 0;
}
static __maybe_unused char cmd_clko_help[] =
"Usage: clko [OPTION]...\n"
"Route different signals to the i.MX clko pin\n"
-" -d <div> Divider (1..8)\n"
+" -d <div> Divider\n"
" -s <source> Clock select. See Ref. Manual for valid sources. Use -1\n"
" for disabling clock output\n";
@@ -63,3 +57,38 @@ U_BOOT_CMD_START(clko)
U_BOOT_CMD_HELP(cmd_clko_help)
U_BOOT_CMD_END
+
+static int do_mcpy_test (cmd_tbl_t *cmdtp, int argc, char *argv[])
+{
+ unsigned long src, dest, count, end;
+
+ if (argc < 4)
+ return 1;
+
+ dest = simple_strtoul(argv[1], NULL, 0);
+ src = simple_strtoul(argv[2], NULL, 0);
+ count = simple_strtoul(argv[3], NULL, 0);
+
+ printf("copying from 0x%08x to 0x%08x (size %d)\n", src, dest, count);
+
+ end = src + count;
+
+ __asm__ __volatile__(
+ "copy_loop:\n"
+ "ldmia %1!, {r3-r10}\n"
+ "stmia %0!, {r3-r10}\n"
+ "cmp %1, %2\n"
+ "ble copy_loop\n"
+ :
+ : "r" (dest), "r" (src), "r" (end)
+ : "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10");
+
+ return 0;
+}
+
+U_BOOT_CMD_START(mcpy_test)
+ .maxargs = CONFIG_MAXARGS,
+ .cmd = do_mcpy_test,
+ .usage = "Adjust CLKO setting",
+U_BOOT_CMD_END
+