/* * Copyright (C) 2013 Xilinx, Inc. * * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include int __weak soc_clk_dump(void) { puts("Not implemented\n"); return 1; } static int do_clk_rate(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { struct clk clk; const char* name; ulong freq; int ret; name = argv[1]; ret = clk_get_by_output_name(name, &clk); if (ret < 0) { printf("clk output %s not found\n", name); return 1; } if (argc > 2) { freq = simple_strtoul(argv[2], NULL, 10); freq = clk_set_rate(&clk, freq); } else { freq = clk_get_rate(&clk); } printf("%s: %ld hz\n", name, freq); return 0; } 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, "", ""), U_BOOT_CMD_MKENT(rate, 2, 1, do_clk_rate, "", ""), }; 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\n" \ "clk rate clockname [freq] - get/set the rate of a named clock\n" \ ; #endif U_BOOT_CMD(clk, 4, 1, do_clk, "CLK sub-system", clk_help_text);