Blame view

cmd/clk.c 2.24 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
08d0d6f32   Michal Simek   common: Add new c...
2
3
  /*
   * Copyright (C) 2013 Xilinx, Inc.
08d0d6f32   Michal Simek   common: Add new c...
4
5
6
7
   */
  #include <common.h>
  #include <command.h>
  #include <clk.h>
ff8eee033   Marek Vasut   cmd: clk: Add tri...
8
9
  #if defined(CONFIG_DM) && defined(CONFIG_CLK)
  #include <dm.h>
aeeb2e6d9   Peng Fan   clk: support clk ...
10
11
  #include <dm/device.h>
  #include <dm/root.h>
ff8eee033   Marek Vasut   cmd: clk: Add tri...
12
  #include <dm/device-internal.h>
aeeb2e6d9   Peng Fan   clk: support clk ...
13
  #include <linux/clk-provider.h>
ff8eee033   Marek Vasut   cmd: clk: Add tri...
14
  #endif
08d0d6f32   Michal Simek   common: Add new c...
15

ff8eee033   Marek Vasut   cmd: clk: Add tri...
16
  #if defined(CONFIG_DM) && defined(CONFIG_CLK)
aeeb2e6d9   Peng Fan   clk: support clk ...
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  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("|-- ");
  		}
  	}
ff8eee033   Marek Vasut   cmd: clk: Add tri...
44

aeeb2e6d9   Peng Fan   clk: support clk ...
45
46
47
  	printf("%s
  ", dev->name);
  	}
ff8eee033   Marek Vasut   cmd: clk: Add tri...
48

aeeb2e6d9   Peng Fan   clk: support clk ...
49
50
51
52
53
  	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);
  	}
  }
80b44fb37   Ismael Luceno Cortes   cmd: clk: Handle ...
54

aeeb2e6d9   Peng Fan   clk: support clk ...
55
56
57
  int __weak soc_clk_dump(void)
  {
  	struct udevice *root;
80b44fb37   Ismael Luceno Cortes   cmd: clk: Handle ...
58

aeeb2e6d9   Peng Fan   clk: support clk ...
59
60
61
62
63
64
65
  	root = dm_root();
  	if (root) {
  		printf(" Rate               Usecnt      Name
  ");
  		printf("------------------------------------------
  ");
  		show_clks(root, -1, 0);
ff8eee033   Marek Vasut   cmd: clk: Add tri...
66
67
68
  	}
  
  	return 0;
aeeb2e6d9   Peng Fan   clk: support clk ...
69
  }
ff8eee033   Marek Vasut   cmd: clk: Add tri...
70
  #else
aeeb2e6d9   Peng Fan   clk: support clk ...
71
72
  int __weak soc_clk_dump(void)
  {
08d0d6f32   Michal Simek   common: Add new c...
73
74
75
76
  	puts("Not implemented
  ");
  	return 1;
  }
aeeb2e6d9   Peng Fan   clk: support clk ...
77
  #endif
08d0d6f32   Michal Simek   common: Add new c...
78
79
80
81
  
  static int do_clk_dump(cmd_tbl_t *cmdtp, int flag, int argc,
  		       char *const argv[])
  {
ebc675b98   Michal Simek   cmd: clk: Check r...
82
83
84
85
86
87
88
89
90
91
  	int ret;
  
  	ret = soc_clk_dump();
  	if (ret < 0) {
  		printf("Clock dump error %d
  ", ret);
  		ret = CMD_RET_FAILURE;
  	}
  
  	return ret;
08d0d6f32   Michal Simek   common: Add new c...
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
  }
  
  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);