Message ID | 20201110090602.2255-9-t-kristo@ti.com |
---|---|
State | Changes Requested |
Delegated to: | Lokesh Vutla |
Headers | show |
Series | TI J7 SoC HSM Rearch support series | expand |
+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-kristo@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); >
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-kristo@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
Hi Tero, > 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-kristo@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 Acked-by: Lukasz Majewski <lukma@denx.de> Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
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);
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-kristo@ti.com> --- cmd/clk.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-)