Quoting Sanjay Singh Rawat (2013-05-04 13:27:58)
- use the clk_summary file of CCF for showing clocks
- add option to show active or all clocks
Signed-off-by: Sanjay Singh Rawat sanjay.rawat@linaro.org
clk_dump gives a JSON-formatted description of the clock tree, so it is a bit more machine readable than clk_summary. Also if you wanted to actually represent a tree structure then clk_dump would be a better starting point than using clk_summary, which does not include parent-child relationship information.
Regards, Mike
clocks.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++------------ display.c | 3 +++ display.h | 1 + 3 files changed, 54 insertions(+), 12 deletions(-)
diff --git a/clocks.c b/clocks.c index 95acf57..a0510b4 100644 --- a/clocks.c +++ b/clocks.c @@ -287,9 +287,8 @@ static int clock_print_header(void) int ret; if(clock_fw == CCF) {
if (asprintf(&buf, "%-35s %-10s %-12s %-10s %-11s %-15s %-14s %-14s",
"Name", "Flags", "Rate", "Usecount", "Children", "Prepare_Count",
"Enable_Count", "Notifier_Count") < 0)
if (asprintf(&buf, "%-30s %-10s %-12s %-10s (clock toggle key-'c')",
"Name", "Enable_Count", "Prepare_Count", "Rate") < 0) return -1; } else {
@@ -297,23 +296,57 @@ static int clock_print_header(void) "Name", "Flags", "Rate", "Usecount", "Children") < 0) return -1; }
ret = display_column_name(buf);
free(buf);
return ret; } +/*
- Display clocks by refering the clk_summary file of CCF
- */
+static int display_clk_summary() +{
FILE *fp;
char line[256];
int afterheader;
char clock[30];
int enable_cnt,prepare_cnt,rate;
afterheader = 0;
fp = fopen("/sys/kernel/debug/clk/clk_summary","r");
if (fp == NULL) {
printf("error: failed to open clock tree file\n");
return -1;
}
while (NULL != fgets(line,256,fp)) {
if (afterheader > 1) {
sscanf(line,"%s %d %d %d",clock,&enable_cnt,&prepare_cnt,&rate);
if (active_clks) {
if (enable_cnt)
display_print_line(CLOCK,afterheader,
line,0,clock_tree);
}
else
display_print_line(CLOCK,afterheader,line,1,clock_tree);
}
afterheader++;
}
return 0;
+}
static int clock_print_info(struct tree *tree) { int ret, line = 0; display_reset_cursor(CLOCK);
clock_print_header();
ret = tree_for_each(tree, clock_print_info_cb, &line);
if (clock_fw == CCF)
ret = display_clk_summary();
else
ret = tree_for_each(tree, clock_print_info_cb, &line);
display_refresh_pad(CLOCK); @@ -426,8 +459,10 @@ int clock_init(void) sprintf(clk_dir_path[CCF], "%s/clk", clk_dir_path[CCF]); sprintf(clk_dir_path[OCF], "%s/clock", clk_dir_path[OCF]);
if (!access(clk_dir_path[CCF], F_OK)) { clock_fw = CCF;
active_clks = true; strcpy(clk_dir_path[MAX],clk_dir_path[CCF]); } else if(!access(clk_dir_path[OCF], F_OK)) {
@@ -437,12 +472,15 @@ int clock_init(void) else return -1;
clock_tree = tree_load(clk_dir_path[MAX], NULL, false);
if (!clock_tree)
return -1;
/* Not preparing tree for CCF, will use the clk_summary file */
if(clock_fw != CCF) {
clock_tree = tree_load(clk_dir_path[MAX], NULL, false);
if (!clock_tree)
return -1;
if (fill_clock_tree())
return -1;
if (fill_clock_tree())
return -1;
}
return display_register(CLOCK, &clock_ops); } diff --git a/display.c b/display.c index e9f4bf6..98544e6 100644 --- a/display.c +++ b/display.c @@ -416,6 +416,9 @@ static int display_keystroke(int fd, void *data) case 'r': case 'R': return display_refresh(current_win, true);
case 'c':
active_clks = active_clks ? false : true;
return display_refresh(current_win, true); default: return 0; }
diff --git a/display.h b/display.h index 6362a48..24c9d59 100644 --- a/display.h +++ b/display.h @@ -33,4 +33,5 @@ extern int display_init(int wdefault); extern int display_register(int win, struct display_ops *ops); extern int display_column_name(const char *line); +bool active_clks;
#define NAME_MAX 255
1.7.9.5
linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev