]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - arch/arm/mach-rockchip/board.c
clk: convert API to match reset/mailbox style
[karo-tx-uboot.git] / arch / arm / mach-rockchip / board.c
index 688bc0ffded2e2de2e3f5a5e0903eb449fce1cad..816540e5821459fbfff4b5d953f3ee2e70cf2cf7 100644 (file)
@@ -5,8 +5,11 @@
  */
 
 #include <common.h>
+#include <clk.h>
 #include <dm.h>
 #include <ram.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -44,3 +47,58 @@ void enable_caches(void)
        dcache_enable();
 }
 #endif
+
+void lowlevel_init(void)
+{
+}
+
+static int do_clock(cmd_tbl_t *cmdtp, int flag, int argc,
+                      char * const argv[])
+{
+       static const struct {
+               char *name;
+               int id;
+       } clks[] = {
+               { "osc", CLK_OSC },
+               { "apll", CLK_ARM },
+               { "dpll", CLK_DDR },
+               { "cpll", CLK_CODEC },
+               { "gpll", CLK_GENERAL },
+#ifdef CONFIG_ROCKCHIP_RK3036
+               { "mpll", CLK_NEW },
+#else
+               { "npll", CLK_NEW },
+#endif
+       };
+       int ret, i;
+       struct udevice *dev;
+
+       ret = uclass_get_device(UCLASS_CLK, 0, &dev);
+       if (ret) {
+               printf("clk-uclass not found\n");
+               return 0;
+       }
+
+       for (i = 0; i < ARRAY_SIZE(clks); i++) {
+               struct clk clk;
+               ulong rate;
+
+               clk.id = clks[i].id;
+               ret = clk_request(dev, &clk);
+               if (ret < 0)
+                       continue;
+
+               rate = clk_get_rate(&clk);
+               printf("%s: %lu\n", clks[i].name, rate);
+
+               clk_free(&clk);
+       }
+
+       return 0;
+}
+
+U_BOOT_CMD(
+       clock, 2, 1, do_clock,
+       "display information about clocks",
+       ""
+);