On 15/11/2020 12:29, Lokesh Vutla wrote:
+Lucasz

This is just a nice to have patch. Found it quite useful while debugging the new drivers so decided to share.

-Tero


On 10/11/20 2:35 pm, Tero Kristo wrote:
Add new clk subcommand "clk setfreq", for setting up a clock rate
directly from u-boot cmdline. This is handy for any debugging purposes
towards clocks.

Signed-off-by: Tero Kristo <t-kri...@ti.com>
---
  cmd/clk.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
  1 file changed, 47 insertions(+), 2 deletions(-)

diff --git a/cmd/clk.c b/cmd/clk.c
index 0245b97136..fd7944c02e 100644
--- a/cmd/clk.c
+++ b/cmd/clk.c
@@ -98,8 +98,52 @@ static int do_clk_dump(struct cmd_tbl *cmdtp, int flag, int 
argc,
        return ret;
  }
+struct udevice *clk_lookup(const char *name)
+{
+       int i = 0;
+       struct udevice *dev;
+
+       do {
+               uclass_get_device(UCLASS_CLK, i++, &dev);
+               if (!strcmp(name, dev->name))
+                       return dev;
+       } while (dev);
+
+       return NULL;
+}
+
+static int do_clk_setfreq(struct cmd_tbl *cmdtp, int flag, int argc,
+                         char *const argv[])
+{
+       struct clk *clk = NULL;
+       s32 freq;
+       struct udevice *dev;
+
+       freq = simple_strtoul(argv[2], NULL, 10);
+
+       dev = clk_lookup(argv[1]);
+
+       if (dev)
+               clk = dev_get_clk_ptr(dev);
+
+       if (!clk) {
+               printf("clock '%s' not found.\n", argv[1]);
+               return -EINVAL;
+       }
+
+       freq = clk_set_rate(clk, freq);
+       if (freq < 0) {
+               printf("set_rate failed: %d\n", freq);
+               return CMD_RET_FAILURE;
+       }
+
+       printf("set_rate returns %u\n", freq);
+       return 0;
+}
+
  static struct cmd_tbl cmd_clk_sub[] = {
        U_BOOT_CMD_MKENT(dump, 1, 1, do_clk_dump, "", ""),
+       U_BOOT_CMD_MKENT(setfreq, 3, 1, do_clk_setfreq, "", ""),
  };
static int do_clk(struct cmd_tbl *cmdtp, int flag, int argc,
@@ -124,7 +168,8 @@ static int do_clk(struct cmd_tbl *cmdtp, int flag, int argc,
#ifdef CONFIG_SYS_LONGHELP
  static char clk_help_text[] =
-       "dump - Print clock frequencies";
+       "dump - Print clock frequencies\n"
+       "setfreq [clk] [freq] - Set clock frequency";
  #endif
-U_BOOT_CMD(clk, 2, 1, do_clk, "CLK sub-system", clk_help_text);
+U_BOOT_CMD(clk, 4, 1, do_clk, "CLK sub-system", clk_help_text);


--
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. 
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

Reply via email to