X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=cmd%2Fclk.c;h=74ad8685002461bb431c13dc32e41ef61c976b77;hb=ba742b839c524f7723799d750a540ad3fe70ca7f;hp=6d3d46a184474be04b4b50a101fe47b98251cbb6;hpb=d82477748d641e60ba3e1a0b55d98362aed70f80;p=oweals%2Fu-boot.git diff --git a/cmd/clk.c b/cmd/clk.c index 6d3d46a184..74ad868500 100644 --- a/cmd/clk.c +++ b/cmd/clk.c @@ -1,22 +1,89 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2013 Xilinx, Inc. - * - * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include +#if defined(CONFIG_DM) && defined(CONFIG_CLK) +#include +#include +#include +#include +#include +#endif + +#if defined(CONFIG_DM) && defined(CONFIG_CLK) +static void show_clks(struct udevice *dev, int depth, int last_flag) +{ + int i, is_last; + struct udevice *child; + struct clk *clkp; + u32 rate; + + clkp = dev_get_clk_ptr(dev); + if (device_get_uclass_id(dev) == UCLASS_CLK && clkp) { + rate = clk_get_rate(clkp); + + printf(" %-12u %8d ", rate, clkp->enable_count); + + for (i = depth; i >= 0; i--) { + is_last = (last_flag >> i) & 1; + if (i) { + if (is_last) + printf(" "); + else + printf("| "); + } else { + if (is_last) + printf("`-- "); + else + printf("|-- "); + } + } + + printf("%s\n", dev->name); + } + + list_for_each_entry(child, &dev->child_head, sibling_node) { + is_last = list_is_last(&child->sibling_node, &dev->child_head); + show_clks(child, depth + 1, (last_flag << 1) | is_last); + } +} +int __weak soc_clk_dump(void) +{ + struct udevice *root; + + root = dm_root(); + if (root) { + printf(" Rate Usecnt Name\n"); + printf("------------------------------------------\n"); + show_clks(root, -1, 0); + } + + return 0; +} +#else int __weak soc_clk_dump(void) { puts("Not implemented\n"); return 1; } +#endif static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { - return soc_clk_dump(); + int ret; + + ret = soc_clk_dump(); + if (ret < 0) { + printf("Clock dump error %d\n", ret); + ret = CMD_RET_FAILURE; + } + + return ret; } static cmd_tbl_t cmd_clk_sub[] = {