clk.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (C) 2013 Xilinx, Inc.
  4. */
  5. #include <common.h>
  6. #include <command.h>
  7. #include <clk.h>
  8. #if defined(CONFIG_DM) && defined(CONFIG_CLK)
  9. #include <dm.h>
  10. #include <dm/device-internal.h>
  11. #endif
  12. int __weak soc_clk_dump(void)
  13. {
  14. #if defined(CONFIG_DM) && defined(CONFIG_CLK)
  15. struct udevice *dev;
  16. struct uclass *uc;
  17. struct clk clk;
  18. int ret;
  19. /* Device addresses start at 1 */
  20. ret = uclass_get(UCLASS_CLK, &uc);
  21. if (ret)
  22. return ret;
  23. uclass_foreach_dev(dev, uc) {
  24. memset(&clk, 0, sizeof(clk));
  25. ret = device_probe(dev);
  26. if (ret) {
  27. printf("%-30.30s : ? Hz\n", dev->name);
  28. continue;
  29. }
  30. ret = clk_request(dev, &clk);
  31. if (ret) {
  32. printf("%-30.30s : ? Hz\n", dev->name);
  33. continue;
  34. }
  35. printf("%-30.30s : %lu Hz\n", dev->name, clk_get_rate(&clk));
  36. clk_free(&clk);
  37. }
  38. return 0;
  39. #else
  40. puts("Not implemented\n");
  41. return 1;
  42. #endif
  43. }
  44. static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
  45. char *const argv[])
  46. {
  47. int ret;
  48. ret = soc_clk_dump();
  49. if (ret < 0) {
  50. printf("Clock dump error %d\n", ret);
  51. ret = CMD_RET_FAILURE;
  52. }
  53. return ret;
  54. }
  55. static cmd_tbl_t cmd_clk_sub[] = {
  56. U_BOOT_CMD_MKENT(dump, 1, 1, do_clk_dump, "", ""),
  57. };
  58. static int do_clk(cmd_tbl_t *cmdtp, int flag, int argc,
  59. char *const argv[])
  60. {
  61. cmd_tbl_t *c;
  62. if (argc < 2)
  63. return CMD_RET_USAGE;
  64. /* Strip off leading 'clk' command argument */
  65. argc--;
  66. argv++;
  67. c = find_cmd_tbl(argv[0], &cmd_clk_sub[0], ARRAY_SIZE(cmd_clk_sub));
  68. if (c)
  69. return c->cmd(cmdtp, flag, argc, argv);
  70. else
  71. return CMD_RET_USAGE;
  72. }
  73. #ifdef CONFIG_SYS_LONGHELP
  74. static char clk_help_text[] =
  75. "dump - Print clock frequencies";
  76. #endif
  77. U_BOOT_CMD(clk, 2, 1, do_clk, "CLK sub-system", clk_help_text);