+Lucasz
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); >