X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=cmd%2Fclk.c;h=5402c87de7295ca8bd5f374a788b360dcc1e5a7e;hb=52cbac9b06bf247dda8ff261b15e3c13f88188db;hp=6d3d46a184474be04b4b50a101fe47b98251cbb6;hpb=2e192b245ed36a63bab0ef576999a95e23f60ecd;p=oweals%2Fu-boot.git diff --git a/cmd/clk.c b/cmd/clk.c index 6d3d46a184..5402c87de7 100644 --- a/cmd/clk.c +++ b/cmd/clk.c @@ -1,22 +1,70 @@ +// 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 +#endif int __weak soc_clk_dump(void) { +#if defined(CONFIG_DM) && defined(CONFIG_CLK) + struct udevice *dev; + struct uclass *uc; + struct clk clk; + int ret; + ulong rate; + + /* Device addresses start at 1 */ + ret = uclass_get(UCLASS_CLK, &uc); + if (ret) + return ret; + + uclass_foreach_dev(dev, uc) { + memset(&clk, 0, sizeof(clk)); + ret = device_probe(dev); + if (ret) + goto noclk; + + ret = clk_request(dev, &clk); + if (ret) + goto noclk; + + rate = clk_get_rate(&clk); + clk_free(&clk); + + if (rate == -ENODEV) + goto noclk; + + printf("%-30.30s : %lu Hz\n", dev->name, rate); + continue; + noclk: + printf("%-30.30s : ? Hz\n", dev->name); + } + + return 0; +#else 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[] = {