[U-Boot] [RFC PATCH 1/2] common: Add new clk command

Command provides just dump subcommand for showing clock frequencies in a soc.
Signed-off-by: Michal Simek michal.simek@xilinx.com ---
README | 1 + common/Makefile | 1 + common/cmd_clk.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ include/clk.h | 6 ++++++ include/config_cmd_all.h | 1 + 5 files changed, 60 insertions(+) create mode 100644 common/cmd_clk.c create mode 100644 include/clk.h
diff --git a/README b/README index aea82be..0087649 100644 --- a/README +++ b/README @@ -887,6 +887,7 @@ The following options need to be configured: CONFIG_CMD_BSP * Board specific commands CONFIG_CMD_BOOTD bootd CONFIG_CMD_CACHE * icache, dcache + CONFIG_CMD_CLK * clock command support CONFIG_CMD_CONSOLE coninfo CONFIG_CMD_CRC32 * crc32 CONFIG_CMD_DATE * support for RTC, date/time... diff --git a/common/Makefile b/common/Makefile index d12cba5..a000e7d 100644 --- a/common/Makefile +++ b/common/Makefile @@ -59,6 +59,7 @@ obj-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o obj-$(CONFIG_CMD_BOOTSTAGE) += cmd_bootstage.o obj-$(CONFIG_CMD_CACHE) += cmd_cache.o obj-$(CONFIG_CMD_CBFS) += cmd_cbfs.o +obj-$(CONFIG_CMD_CLK) += cmd_clk.o obj-$(CONFIG_CMD_CONSOLE) += cmd_console.o obj-$(CONFIG_CMD_CPLBINFO) += cmd_cplbinfo.o obj-$(CONFIG_DATAFLASH_MMC_SELECT) += cmd_dataflash_mmc_mux.o diff --git a/common/cmd_clk.c b/common/cmd_clk.c new file mode 100644 index 0000000..6d3d46a --- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2013 Xilinx, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include <common.h> +#include <command.h> +#include <clk.h> + +int __weak soc_clk_dump(void) +{ + puts("Not implemented\n"); + return 1; +} + +static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc, + char *const argv[]) +{ + return soc_clk_dump(); +} + +static cmd_tbl_t cmd_clk_sub[] = { + U_BOOT_CMD_MKENT(dump, 1, 1, do_clk_dump, "", ""), +}; + +static int do_clk(cmd_tbl_t *cmdtp, int flag, int argc, + char *const argv[]) +{ + cmd_tbl_t *c; + + if (argc < 2) + return CMD_RET_USAGE; + + /* Strip off leading 'clk' command argument */ + argc--; + argv++; + + c = find_cmd_tbl(argv[0], &cmd_clk_sub[0], ARRAY_SIZE(cmd_clk_sub)); + + if (c) + return c->cmd(cmdtp, flag, argc, argv); + else + return CMD_RET_USAGE; +} + +#ifdef CONFIG_SYS_LONGHELP +static char clk_help_text[] = + "dump - Print clock frequencies"; +#endif + +U_BOOT_CMD(clk, 2, 1, do_clk, "CLK sub-system", clk_help_text); diff --git a/include/clk.h b/include/clk.h new file mode 100644 index 0000000..df4570c --- /dev/null +++ b/include/clk.h @@ -0,0 +1,6 @@ +#ifndef _CLK_H_ +#define _CLK_H_ + +int soc_clk_dump(void); + +#endif /* _CLK_H_ */ diff --git a/include/config_cmd_all.h b/include/config_cmd_all.h index d847069..3e8983f 100644 --- a/include/config_cmd_all.h +++ b/include/config_cmd_all.h @@ -23,6 +23,7 @@ #define CONFIG_CMD_BSP /* Board Specific functions */ #define CONFIG_CMD_CACHE /* icache, dcache */ #define CONFIG_CMD_CDP /* Cisco Discovery Protocol */ +#define CONFIG_CMD_CLK /* Clock support */ #define CONFIG_CMD_CONSOLE /* coninfo */ #define CONFIG_CMD_DATE /* support for RTC, date/time...*/ #define CONFIG_CMD_DHCP /* DHCP Support */ -- 1.8.2.3

From: Soren Brinkmann soren.brinkmann@xilinx.com
Enable and implement dump clock command which shows soc frequencies.
Signed-off-by: Soren Brinkmann soren.brinkmann@xilinx.com Signed-off-by: Michal Simek michal.simek@xilinx.com --- On the top of Zynq clk patches I have sent.
All paches available for testing here git://git.denx.de/u-boot-microblaze.git xnext/clk-cmd branch.
For example: zynq-uboot> clk dump clk frequency armpll 1333333320 ddrpll 1066666656 iopll 999999990 cpu_6or4x 666666660 cpu_3or2x 333333330 cpu_2x 222222220 cpu_1x 111111110 ddr_2x 355555552 ddr_3x 533333328 dci 10158730 lqspi 199999998 smc 22222222 pcap 199999998 gem0 25000000 gem1 16666667 fclk0 50000000 fclk1 50000000 fclk2 50000000 fclk3 50000000 sdio0 50000000 sdio1 50000000 uart0 50000000 uart1 50000000 spi0 15873016 spi1 15873016 usb0_aper 111111110 usb1_aper 111111110 gem0_aper 111111110 gem1_aper 111111110 sdio0_aper 111111110 sdio1_aper 111111110 spi0_aper 111111110 spi1_aper 111111110 can0_aper 111111110 can1_aper 111111110 i2c0_aper 111111110 i2c1_aper 111111110 uart0_aper 111111110 uart1_aper 111111110 gpio_aper 111111110 lqspi_aper 111111110 smc_aper 111111110 dbg_trc 66666666 dbg_apb 66666666
arch/arm/cpu/armv7/zynq/clk.c | 21 +++++++++++++++++++++ include/configs/zynq-common.h | 1 + 2 files changed, 22 insertions(+)
diff --git a/arch/arm/cpu/armv7/zynq/clk.c b/arch/arm/cpu/armv7/zynq/clk.c index ea7a677..6a759a1 100644 --- a/arch/arm/cpu/armv7/zynq/clk.c +++ b/arch/arm/cpu/armv7/zynq/clk.c @@ -6,6 +6,7 @@ */ #include <common.h> #include <errno.h> +#include <clk.h> #include <asm/io.h> #include <asm/arch/hardware.h> #include <asm/arch/clk.h> @@ -641,3 +642,23 @@ const char *zynq_clk_get_name(enum zynq_clk clk) { return clks[clk].name; } + +/** + * soc_clk_dump() - Print clock frequencies + * Returns zero on success + * + * Implementation for the clk dump command. + */ +int soc_clk_dump(void) +{ + int i; + + printf("clk\t\tfrequency\n"); + for (i = 0; i < clk_max; i++) { + const char *name = zynq_clk_get_name(i); + if (name) + printf("%10s%20lu\n", name, zynq_clk_get_rate(i)); + } + + return 0; +} diff --git a/include/configs/zynq-common.h b/include/configs/zynq-common.h index 9666f88..52f1c66 100644 --- a/include/configs/zynq-common.h +++ b/include/configs/zynq-common.h @@ -164,6 +164,7 @@ #define CONFIG_BOARD_LATE_INIT #define CONFIG_SYS_LONGHELP #define CONFIG_CLOCKS +#define CONFIG_CMD_CLK #define CONFIG_SYS_MAXARGS 15 /* max number of command args */ #define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */ #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ -- 1.8.2.3

Hi Michal,
On 22/01/2014 12:02, Michal Simek wrote:
Command provides just dump subcommand for showing clock frequencies in a soc.
i.MXes has already an own command for this functionality - see command "clocks" in arch/arm. However, I like that we can have a common command for all SOCs.
Signed-off-by: Michal Simek michal.simek@xilinx.com ---
README | 1 + common/Makefile | 1 + common/cmd_clk.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ include/clk.h | 6 ++++++ include/config_cmd_all.h | 1 + 5 files changed, 60 insertions(+) create mode 100644 common/cmd_clk.c create mode 100644 include/clk.h
diff --git a/README b/README index aea82be..0087649 100644 --- a/README +++ b/README @@ -887,6 +887,7 @@ The following options need to be configured: CONFIG_CMD_BSP * Board specific commands CONFIG_CMD_BOOTD bootd CONFIG_CMD_CACHE * icache, dcache + CONFIG_CMD_CLK * clock command support CONFIG_CMD_CONSOLE coninfo CONFIG_CMD_CRC32 * crc32 CONFIG_CMD_DATE * support for RTC, date/time... diff --git a/common/Makefile b/common/Makefile index d12cba5..a000e7d 100644 --- a/common/Makefile +++ b/common/Makefile @@ -59,6 +59,7 @@ obj-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o obj-$(CONFIG_CMD_BOOTSTAGE) += cmd_bootstage.o obj-$(CONFIG_CMD_CACHE) += cmd_cache.o obj-$(CONFIG_CMD_CBFS) += cmd_cbfs.o +obj-$(CONFIG_CMD_CLK) += cmd_clk.o obj-$(CONFIG_CMD_CONSOLE) += cmd_console.o obj-$(CONFIG_CMD_CPLBINFO) += cmd_cplbinfo.o obj-$(CONFIG_DATAFLASH_MMC_SELECT) += cmd_dataflash_mmc_mux.o diff --git a/common/cmd_clk.c b/common/cmd_clk.c new file mode 100644 index 0000000..6d3d46a --- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2013 Xilinx, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include <common.h> +#include <command.h> +#include <clk.h> + +int __weak soc_clk_dump(void) +{ + puts("Not implemented\n"); + return 1; +}
- +static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc, +
char *const argv[]) +{ + return soc_clk_dump(); +} + +static cmd_tbl_t cmd_clk_sub[] = { + U_BOOT_CMD_MKENT(dump, 1, 1, do_clk_dump, "", ""), +}; +
Do you plan to extend the list with new functionalities ? IMHO we should do it when we really need, that is when we will need at least a second subcommand.
Best regards, Stefano Babic

Hi Stefano,
On 01/22/2014 01:46 PM, Stefano Babic wrote:
Hi Michal,
On 22/01/2014 12:02, Michal Simek wrote:
Command provides just dump subcommand for showing clock frequencies in a soc.
i.MXes has already an own command for this functionality - see command "clocks" in arch/arm. However, I like that we can have a common command for all SOCs.
Ah good to know. It seems to me better to have clock like command name and then subcommand. Unification will be good to have.
Signed-off-by: Michal Simek michal.simek@xilinx.com ---
README | 1 + common/Makefile | 1 + common/cmd_clk.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ include/clk.h | 6 ++++++ include/config_cmd_all.h | 1 + 5 files changed, 60 insertions(+) create mode 100644 common/cmd_clk.c create mode 100644 include/clk.h
diff --git a/README b/README index aea82be..0087649 100644 --- a/README +++ b/README @@ -887,6 +887,7 @@ The following options need to be configured: CONFIG_CMD_BSP * Board specific commands CONFIG_CMD_BOOTD bootd CONFIG_CMD_CACHE * icache, dcache + CONFIG_CMD_CLK * clock command support CONFIG_CMD_CONSOLE coninfo CONFIG_CMD_CRC32 * crc32 CONFIG_CMD_DATE * support for RTC, date/time... diff --git a/common/Makefile b/common/Makefile index d12cba5..a000e7d 100644 --- a/common/Makefile +++ b/common/Makefile @@ -59,6 +59,7 @@ obj-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o obj-$(CONFIG_CMD_BOOTSTAGE) += cmd_bootstage.o obj-$(CONFIG_CMD_CACHE) += cmd_cache.o obj-$(CONFIG_CMD_CBFS) += cmd_cbfs.o +obj-$(CONFIG_CMD_CLK) += cmd_clk.o obj-$(CONFIG_CMD_CONSOLE) += cmd_console.o obj-$(CONFIG_CMD_CPLBINFO) += cmd_cplbinfo.o obj-$(CONFIG_DATAFLASH_MMC_SELECT) += cmd_dataflash_mmc_mux.o diff --git a/common/cmd_clk.c b/common/cmd_clk.c new file mode 100644 index 0000000..6d3d46a --- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2013 Xilinx, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include <common.h> +#include <command.h> +#include <clk.h> + +int __weak soc_clk_dump(void) +{ + puts("Not implemented\n"); + return 1; +}
- +static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc, +
char *const argv[]) +{ + return soc_clk_dump(); +} + +static cmd_tbl_t cmd_clk_sub[] = { + U_BOOT_CMD_MKENT(dump, 1, 1, do_clk_dump, "", ""), +}; +
Do you plan to extend the list with new functionalities ? IMHO we should do it when we really need, that is when we will need at least a second subcommand.
I tried to write it as generic as possible and currently we don't need any special clock functionality but it can happen in future.
Will be great if we can add all the clock handling to the one command, Currently we just use clock dump.
Thanks, Michal

On Wed, Jan 22, 2014 at 12:02 +0100, Michal Simek wrote:
--- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/*
- Copyright (C) 2013 Xilinx, Inc.
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <command.h> +#include <clk.h>
+int __weak soc_clk_dump(void) +{
- puts("Not implemented\n");
- return 1;
+}
+static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
char *const argv[])
+{
- return soc_clk_dump();
+}
Is there a specific reason to not pass on the remaining (not yet consumed) command line arguments? Future implementations may want to take a clock item's name, or a clock group's name, or options related to the format or verbosity of the dump, et al.
virtually yours Gerhard Sittig

On 01/22/2014 08:44 PM, Gerhard Sittig wrote:
On Wed, Jan 22, 2014 at 12:02 +0100, Michal Simek wrote:
--- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/*
- Copyright (C) 2013 Xilinx, Inc.
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <command.h> +#include <clk.h>
+int __weak soc_clk_dump(void) +{
- puts("Not implemented\n");
- return 1;
+}
+static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
char *const argv[])
+{
- return soc_clk_dump();
+}
Is there a specific reason to not pass on the remaining (not yet consumed) command line arguments? Future implementations may want to take a clock item's name, or a clock group's name, or options related to the format or verbosity of the dump, et al.
Only one reason is that I don't need it for my zynq implementation. If this is necessary there is no problem to pass them because it is internal API. Also I prefer to pass just arguments which I need.
I have looked at i.MXes cases and they do in general what my zynq implementation. They can just include clk.h and change do_mx6_showclocks to soc_clk_dump.
Thanks, Michal

On 01/23/2014 08:53 AM, Michal Simek wrote:
On 01/22/2014 08:44 PM, Gerhard Sittig wrote:
On Wed, Jan 22, 2014 at 12:02 +0100, Michal Simek wrote:
--- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/*
- Copyright (C) 2013 Xilinx, Inc.
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <command.h> +#include <clk.h>
+int __weak soc_clk_dump(void) +{
- puts("Not implemented\n");
- return 1;
+}
+static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
char *const argv[])
+{
- return soc_clk_dump();
+}
Is there a specific reason to not pass on the remaining (not yet consumed) command line arguments? Future implementations may want to take a clock item's name, or a clock group's name, or options related to the format or verbosity of the dump, et al.
Only one reason is that I don't need it for my zynq implementation. If this is necessary there is no problem to pass them because it is internal API. Also I prefer to pass just arguments which I need.
I have looked at i.MXes cases and they do in general what my zynq implementation. They can just include clk.h and change do_mx6_showclocks to soc_clk_dump.
Stefano: Can you give me your ACK?
Tom: Do you have any problem with this new clk command?
Thanks, Michal

Hi Michal,
On 30/01/2014 08:38, Michal Simek wrote:
On 01/23/2014 08:53 AM, Michal Simek wrote:
On 01/22/2014 08:44 PM, Gerhard Sittig wrote:
On Wed, Jan 22, 2014 at 12:02 +0100, Michal Simek wrote:
--- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/* +
- Copyright (C) 2013 Xilinx, Inc. + * + *
SPDX-License-Identifier: GPL-2.0+ + */ +#include <common.h> +#include <command.h> +#include <clk.h> + +int __weak soc_clk_dump(void) +{ + puts("Not implemented\n"); + return 1; +} + +static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc, + char *const argv[]) +{ + return soc_clk_dump(); +}
Is there a specific reason to not pass on the remaining (not yet consumed) command line arguments? Future implementations may want to take a clock item's name, or a clock group's name, or options related to the format or verbosity of the dump, et al.
Only one reason is that I don't need it for my zynq implementation. If this is necessary there is no problem to pass them because it is internal API. Also I prefer to pass just arguments which I need.
I have looked at i.MXes cases and they do in general what my zynq implementation. They can just include clk.h and change do_mx6_showclocks to soc_clk_dump.
Agree.
Stefano: Can you give me your ACK?
Sure, go on. !
Regards, Stefano

Hi Michal,
On 22 January 2014 at 04:02, Michal Simek michal.simek@xilinx.com wrote:
Command provides just dump subcommand for showing clock frequencies in a soc.
Signed-off-by: Michal Simek michal.simek@xilinx.com
README | 1 + common/Makefile | 1 + common/cmd_clk.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ include/clk.h | 6 ++++++ include/config_cmd_all.h | 1 + 5 files changed, 60 insertions(+) create mode 100644 common/cmd_clk.c create mode 100644 include/clk.h
diff --git a/README b/README index aea82be..0087649 100644 --- a/README +++ b/README @@ -887,6 +887,7 @@ The following options need to be configured: CONFIG_CMD_BSP * Board specific commands CONFIG_CMD_BOOTD bootd CONFIG_CMD_CACHE * icache, dcache
CONFIG_CMD_CLK * clock command support CONFIG_CMD_CONSOLE coninfo CONFIG_CMD_CRC32 * crc32 CONFIG_CMD_DATE * support for RTC, date/time...
diff --git a/common/Makefile b/common/Makefile index d12cba5..a000e7d 100644 --- a/common/Makefile +++ b/common/Makefile @@ -59,6 +59,7 @@ obj-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o obj-$(CONFIG_CMD_BOOTSTAGE) += cmd_bootstage.o obj-$(CONFIG_CMD_CACHE) += cmd_cache.o obj-$(CONFIG_CMD_CBFS) += cmd_cbfs.o +obj-$(CONFIG_CMD_CLK) += cmd_clk.o obj-$(CONFIG_CMD_CONSOLE) += cmd_console.o obj-$(CONFIG_CMD_CPLBINFO) += cmd_cplbinfo.o obj-$(CONFIG_DATAFLASH_MMC_SELECT) += cmd_dataflash_mmc_mux.o diff --git a/common/cmd_clk.c b/common/cmd_clk.c new file mode 100644 index 0000000..6d3d46a --- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/*
- Copyright (C) 2013 Xilinx, Inc.
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <command.h> +#include <clk.h>
+int __weak soc_clk_dump(void) +{
puts("Not implemented\n");
return 1;
+}
+static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
char *const argv[])
+{
return soc_clk_dump();
This is not the way things should work in driver model. See how the gpio command works for an example. I suggest it iterates through the available clocks and then calls a driver function to obtain information about each clock, then prints it out. We should avoid weak functions as a method of connecting things together.
[snip]
Regards, Simon

Hi Simon,
On 22.12.2015 05:21, Simon Glass wrote:
Hi Michal,
On 22 January 2014 at 04:02, Michal Simek michal.simek@xilinx.com wrote:
Command provides just dump subcommand for showing clock frequencies in a soc.
Signed-off-by: Michal Simek michal.simek@xilinx.com
README | 1 + common/Makefile | 1 + common/cmd_clk.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ include/clk.h | 6 ++++++ include/config_cmd_all.h | 1 + 5 files changed, 60 insertions(+) create mode 100644 common/cmd_clk.c create mode 100644 include/clk.h
diff --git a/README b/README index aea82be..0087649 100644 --- a/README +++ b/README @@ -887,6 +887,7 @@ The following options need to be configured: CONFIG_CMD_BSP * Board specific commands CONFIG_CMD_BOOTD bootd CONFIG_CMD_CACHE * icache, dcache
CONFIG_CMD_CLK * clock command support CONFIG_CMD_CONSOLE coninfo CONFIG_CMD_CRC32 * crc32 CONFIG_CMD_DATE * support for RTC, date/time...
diff --git a/common/Makefile b/common/Makefile index d12cba5..a000e7d 100644 --- a/common/Makefile +++ b/common/Makefile @@ -59,6 +59,7 @@ obj-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o obj-$(CONFIG_CMD_BOOTSTAGE) += cmd_bootstage.o obj-$(CONFIG_CMD_CACHE) += cmd_cache.o obj-$(CONFIG_CMD_CBFS) += cmd_cbfs.o +obj-$(CONFIG_CMD_CLK) += cmd_clk.o obj-$(CONFIG_CMD_CONSOLE) += cmd_console.o obj-$(CONFIG_CMD_CPLBINFO) += cmd_cplbinfo.o obj-$(CONFIG_DATAFLASH_MMC_SELECT) += cmd_dataflash_mmc_mux.o diff --git a/common/cmd_clk.c b/common/cmd_clk.c new file mode 100644 index 0000000..6d3d46a --- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/*
- Copyright (C) 2013 Xilinx, Inc.
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <command.h> +#include <clk.h>
+int __weak soc_clk_dump(void) +{
puts("Not implemented\n");
return 1;
+}
+static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
char *const argv[])
+{
return soc_clk_dump();
This is not the way things should work in driver model. See how the gpio command works for an example. I suggest it iterates through the available clocks and then calls a driver function to obtain information about each clock, then prints it out. We should avoid weak functions as a method of connecting things together.
This is patch which was sent in 2014. What are you trying to suggest?
Cheers, Michal

Hi Michal,
On 29 December 2015 at 01:33, Michal Simek michal.simek@xilinx.com wrote:
Hi Simon,
On 22.12.2015 05:21, Simon Glass wrote:
Hi Michal,
On 22 January 2014 at 04:02, Michal Simek michal.simek@xilinx.com wrote:
Command provides just dump subcommand for showing clock frequencies in a soc.
Signed-off-by: Michal Simek michal.simek@xilinx.com
README | 1 + common/Makefile | 1 + common/cmd_clk.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ include/clk.h | 6 ++++++ include/config_cmd_all.h | 1 + 5 files changed, 60 insertions(+) create mode 100644 common/cmd_clk.c create mode 100644 include/clk.h
diff --git a/README b/README index aea82be..0087649 100644 --- a/README +++ b/README @@ -887,6 +887,7 @@ The following options need to be configured: CONFIG_CMD_BSP * Board specific commands CONFIG_CMD_BOOTD bootd CONFIG_CMD_CACHE * icache, dcache
CONFIG_CMD_CLK * clock command support CONFIG_CMD_CONSOLE coninfo CONFIG_CMD_CRC32 * crc32 CONFIG_CMD_DATE * support for RTC, date/time...
diff --git a/common/Makefile b/common/Makefile index d12cba5..a000e7d 100644 --- a/common/Makefile +++ b/common/Makefile @@ -59,6 +59,7 @@ obj-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o obj-$(CONFIG_CMD_BOOTSTAGE) += cmd_bootstage.o obj-$(CONFIG_CMD_CACHE) += cmd_cache.o obj-$(CONFIG_CMD_CBFS) += cmd_cbfs.o +obj-$(CONFIG_CMD_CLK) += cmd_clk.o obj-$(CONFIG_CMD_CONSOLE) += cmd_console.o obj-$(CONFIG_CMD_CPLBINFO) += cmd_cplbinfo.o obj-$(CONFIG_DATAFLASH_MMC_SELECT) += cmd_dataflash_mmc_mux.o diff --git a/common/cmd_clk.c b/common/cmd_clk.c new file mode 100644 index 0000000..6d3d46a --- /dev/null +++ b/common/cmd_clk.c @@ -0,0 +1,51 @@ +/*
- Copyright (C) 2013 Xilinx, Inc.
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <command.h> +#include <clk.h>
+int __weak soc_clk_dump(void) +{
puts("Not implemented\n");
return 1;
+}
+static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
char *const argv[])
+{
return soc_clk_dump();
This is not the way things should work in driver model. See how the gpio command works for an example. I suggest it iterates through the available clocks and then calls a driver function to obtain information about each clock, then prints it out. We should avoid weak functions as a method of connecting things together.
This is patch which was sent in 2014. What are you trying to suggest?
Sorry, I only just noticed it. I'll see if I can create a patch to get the clock info from an API call instead of using a weak function.
Regards, Simon

Dear Simon,
In message CAPnjgZ0AxfXOiBwrjEPgs_Kd2A1x7qZ_z9gn_QAiprUS+48E_Q@mail.gmail.com you wrote:
create mode 100644 common/cmd_clk.c create mode 100644 include/clk.h
...
Sorry, I only just noticed it. I'll see if I can create a patch to get the clock info from an API call instead of using a weak function.
I don't get it. This patch appears to be identical (?) to commit 08d0d6f: "common: Add new clk command" which was applied in Nov 2013.
Best regards,
Wolfgang Denk

Hi Wolfgang,
On 29 December 2015 at 07:23, Wolfgang Denk wd@denx.de wrote:
Dear Simon,
In message CAPnjgZ0AxfXOiBwrjEPgs_Kd2A1x7qZ_z9gn_QAiprUS+48E_Q@mail.gmail.com you wrote:
create mode 100644 common/cmd_clk.c create mode 100644 include/clk.h
...
Sorry, I only just noticed it. I'll see if I can create a patch to get the clock info from an API call instead of using a weak function.
I don't get it. This patch appears to be identical (?) to commit 08d0d6f: "common: Add new clk command" which was applied in Nov 2013.
Yes, I did not realise how old this patch was, sorry. It was applied long ago. I'm going to create a vendor-specific command which uses driver model for now. We can revisit this if it becomes a problem. My idea is that we should have a command which displays the current clocks, no matter what the board type. But that can come later.
Regards, Simon
participants (6)
-
Gerhard Sittig
-
Michal Simek
-
Michal Simek
-
Simon Glass
-
Stefano Babic
-
Wolfgang Denk