mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-21 20:34:38 +00:00
clk: add support for setting clk rate from cmdline
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. Acked-by: Lukasz Majewski <lukma@denx.de> Signed-off-by: Tero Kristo <t-kristo@ti.com> Signed-off-by: Tero Kristo <kristo@kernel.org>
This commit is contained in:
parent
920ea5a7f8
commit
7ab418fbe6
1 changed files with 51 additions and 2 deletions
53
cmd/clk.c
53
cmd/clk.c
|
@ -98,8 +98,56 @@ static int do_clk_dump(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG_IS_ENABLED(DM) && CONFIG_IS_ENABLED(CLK)
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct cmd_tbl cmd_clk_sub[] = {
|
static struct cmd_tbl cmd_clk_sub[] = {
|
||||||
U_BOOT_CMD_MKENT(dump, 1, 1, do_clk_dump, "", ""),
|
U_BOOT_CMD_MKENT(dump, 1, 1, do_clk_dump, "", ""),
|
||||||
|
#if CONFIG_IS_ENABLED(DM) && CONFIG_IS_ENABLED(CLK)
|
||||||
|
U_BOOT_CMD_MKENT(setfreq, 3, 1, do_clk_setfreq, "", ""),
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static int do_clk(struct cmd_tbl *cmdtp, int flag, int argc,
|
static int do_clk(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
@ -124,7 +172,8 @@ static int do_clk(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_LONGHELP
|
#ifdef CONFIG_SYS_LONGHELP
|
||||||
static char clk_help_text[] =
|
static char clk_help_text[] =
|
||||||
"dump - Print clock frequencies";
|
"dump - Print clock frequencies\n"
|
||||||
|
"setfreq [clk] [freq] - Set clock frequency";
|
||||||
#endif
|
#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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue