diff mbox series

[08/26] clk: add support for setting clk rate from cmdline

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

Commit Message

Tero Kristo Nov. 10, 2020, 9:05 a.m. UTC
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(-)

Comments

Lokesh Vutla Nov. 15, 2020, 10:29 a.m. UTC | #1
+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);
>
Tero Kristo Nov. 16, 2020, 12:06 p.m. UTC | #2
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
Lukasz Majewski Nov. 16, 2020, 2:26 p.m. UTC | #3
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 mbox series

Patch

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