From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tero Kristo Date: Mon, 16 Nov 2020 14:06:35 +0200 Subject: [PATCH 08/26] clk: add support for setting clk rate from cmdline In-Reply-To: <938917ef-06e1-832d-605b-43a2b2f9f07b@ti.com> References: <20201110090602.2255-1-t-kristo@ti.com> <20201110090602.2255-9-t-kristo@ti.com> <938917ef-06e1-832d-605b-43a2b2f9f07b@ti.com> Message-ID: <5842ea3d-be3e-7754-c394-6369d1f89147@ti.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 >> --- >> 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