Sebastian, Could you help Sanjay with verification of this feature?
Regards, Amit On Sun, May 5, 2013 at 1:57 AM, Sanjay Singh Rawat <sanjay.ra...@linaro.org> wrote: > - 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.ra...@linaro.org> > --- > 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 _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev