Hi Sanjay, Also, clock tree dump (using powerdebug -dc) does not show the clock info anymore with this change.
Thanks, Sebastian On 7 May 2013 15:05, Sebastian Capella <sebastian.cape...@linaro.org> wrote: > The original clock display in powerdebug would expand and collapse > subtrees in the clock heirarchy using the enter key. If we continue along > the lines you're following, you'll want to override the actions in > clock_select to do nothing as they're currently trying to expand the > subtree which is causing the segfault we see now. > > You may instead want to change it so that the new active clock display > works as you've done, but the unfiltered display works like the original > version with expanded and collapsed subtrees. This will require a bit more > rework, but as it stands, the addition of the active clock view > substantially changes the behavior of the full clock view. Was this > intentional? > > Thanks, > > Sebastian > > > > On 7 May 2013 10:19, Sanjay Singh Rawat <sanjay.ra...@linaro.org> wrote: > >> On Monday 06 May 2013 09:36 PM, Mike Turquette wrote: >> >>> 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.ra...@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 >>> >> thanks Mike >> - The way the clocks are displayed with this patch, the alignment takes >> care of the parent/child relationship. >> - The format of the content doesn't matter here IIUC, as anyway we have >> to parse the content and show it in the clock window. >> >> >>> --- >>>> 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<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<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