* Hiroshi DOYU <[EMAIL PROTECTED]> [080417 13:02]:
> From: "ext Paul Walmsley" <[EMAIL PROTECTED]>
> Subject: Re: [PATCH 1/2] ARM: OMAP: CLKFW: Initial debugfs support for omap 
> clock framework
> Date: Thu, 17 Apr 2008 13:44:04 -0600 (MDT)
> 
> > Hello Hiroshi, David,
> > 
> > On Thu, 17 Apr 2008, David Brownell wrote:
> > 
> > > On Thursday 17 April 2008, Hiroshi DOYU wrote:
> > > 
> > > > And if there will be a little possibility that sysfs attribute can be
> > > > used by userland in the future, keeping sysfs instead of debugfs
> > > > doesn't seem not so illegal, does it?
> > 
> > True, but if we can do a debugfs implementation first, then that seems 
> > like a good way to start, no?  Userspace PM implementations are probably 
> > some months in the future, and we can mandate that debugfs be mounted for 
> > those.
> 
> Agreed. Update ones attached. The diffs against the previous are:
> 
> diff -u b/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
> --- b/arch/arm/plat-omap/clock.c
> +++ b/arch/arm/plat-omap/clock.c
> @@ -524,7 +524,7 @@
>  
>       p += sprintf(p, "%s", c->name);
>       if (c->id != 0)
> -             sprintf(p, "%d", c->id);
> +             sprintf(p, ":%d", c->id);
>       d = debugfs_create_dir(s, pa ? pa->dent : clk_debugfs_root);
>       if (IS_ERR(d))
>               return PTR_ERR(d);
> diff -u b/include/asm-arm/arch-omap/clock.h 
> b/include/asm-arm/arch-omap/clock.h
> --- b/include/asm-arm/arch-omap/clock.h
> +++ b/include/asm-arm/arch-omap/clock.h
> @@ -86,7 +86,7 @@
>       __u8                    rate_offset;
>       __u8                    src_offset;
>  #endif
> -#ifdef CONFIG_DEBUG_FS
> +#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
>       struct dentry           *dent;  /* For visible tree hierarchy */
>  #endif
>  };

Pushing today.

Tony


> 
>  Hiroshi DOYU

> From fa06e7a21c08299eaa61e6c367ec8e737a8ff13b Mon Sep 17 00:00:00 2001
> From: Hiroshi DOYU <[EMAIL PROTECTED]>
> Date: Thu, 17 Apr 2008 16:51:41 +0300
> Subject: [PATCH 2/2] ARM: OMAP: CLKFW: Remove procfs entry for debugging 
> clock framework
> 
> This feature can be covered by debugfs for omap clock framework.
> 
> Signed-off-by: Hiroshi DOYU <[EMAIL PROTECTED]>
> ---
>  arch/arm/plat-omap/clock.c |   96 
> --------------------------------------------
>  1 files changed, 0 insertions(+), 96 deletions(-)
> 
> diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
> index 2ae87bf..714dbbf 100644
> --- a/arch/arm/plat-omap/clock.c
> +++ b/arch/arm/plat-omap/clock.c
> @@ -34,41 +34,6 @@ static DEFINE_SPINLOCK(clockfw_lock);
>  
>  static struct clk_functions *arch_clock;
>  
> -#ifdef CONFIG_PM_DEBUG
> -
> -static void print_parents(struct clk *clk)
> -{
> -     struct clk *p;
> -     int printed = 0;
> -
> -     list_for_each_entry(p, &clocks, node) {
> -             if (p->parent == clk && p->usecount) {
> -                     if (!clk->usecount && !printed) {
> -                             printk("MISMATCH: %s\n", clk->name);
> -                             printed = 1;
> -                     }
> -                     printk("\t%-15s\n", p->name);
> -             }
> -     }
> -}
> -
> -void clk_print_usecounts(void)
> -{
> -     unsigned long flags;
> -     struct clk *p;
> -
> -     spin_lock_irqsave(&clockfw_lock, flags);
> -     list_for_each_entry(p, &clocks, node) {
> -             if (p->usecount)
> -                     printk("%-15s: %d\n", p->name, p->usecount);
> -             print_parents(p);
> -
> -     }
> -     spin_unlock_irqrestore(&clockfw_lock, flags);
> -}
> -
> -#endif
> -
>  /*-------------------------------------------------------------------------
>   * Standard clock functions defined in include/linux/clk.h
>   *-------------------------------------------------------------------------*/
> @@ -447,67 +412,6 @@ int __init clk_init(struct clk_functions * custom_clocks)
>       return 0;
>  }
>  
> -#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_PROC_FS)
> -#include <linux/proc_fs.h>
> -#include <linux/seq_file.h>
> -
> -static void *omap_ck_start(struct seq_file *m, loff_t *pos)
> -{
> -     return *pos < 1 ? (void *)1 : NULL;
> -}
> -
> -static void *omap_ck_next(struct seq_file *m, void *v, loff_t *pos)
> -{
> -     ++*pos;
> -     return NULL;
> -}
> -
> -static void omap_ck_stop(struct seq_file *m, void *v)
> -{
> -}
> -
> -int omap_ck_show(struct seq_file *m, void *v)
> -{
> -     struct clk *cp;
> -
> -     list_for_each_entry(cp, &clocks, node)
> -             seq_printf(m,"%s %ld %d\n", cp->name, cp->rate, cp->usecount);
> -
> -     return 0;
> -}
> -
> -static struct seq_operations omap_ck_op = {
> -     .start =        omap_ck_start,
> -     .next =         omap_ck_next,
> -     .stop =         omap_ck_stop,
> -     .show =         omap_ck_show
> -};
> -
> -static int omap_ck_open(struct inode *inode, struct file *file)
> -{
> -     return seq_open(file, &omap_ck_op);
> -}
> -
> -static struct file_operations proc_omap_ck_operations = {
> -     .open           = omap_ck_open,
> -     .read           = seq_read,
> -     .llseek         = seq_lseek,
> -     .release        = seq_release,
> -};
> -
> -int __init omap_ck_init(void)
> -{
> -     struct proc_dir_entry *entry;
> -
> -     entry = create_proc_entry("omap_clocks", 0, NULL);
> -     if (entry)
> -             entry->proc_fops = &proc_omap_ck_operations;
> -     return 0;
> -
> -}
> -__initcall(omap_ck_init);
> -#endif
> -
>  #if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
>  /*
>   *   debugfs support to trace clock tree hierarchy and attributes
> -- 
> 1.5.5.rc2.6.gf58d
> 

> From d0c2ffa4d45ea686020959c9d7a68f1669806d22 Mon Sep 17 00:00:00 2001
> From: Hiroshi DOYU <[EMAIL PROTECTED]>
> Date: Thu, 17 Apr 2008 13:51:34 +0300
> Subject: [PATCH 1/2] ARM: OMAP: CLKFW: Initial debugfs support for omap clock 
> framework
> 
> debugfs can provide the infrastructure to trace the dependencies of
> clock tree hierarchy quite visibly. This patch enables to keep track
> of clock tree hierarchy and expose their attributes under each clock
> directry as below:
> 
>       omap:~# tree -d -L 2 /debug/clock/omap_32k_fck/
>       /debug/clock/omap_32k_fck/
>       |-- gpt10_fck
>       |-- gpt11_fck
>       |-- gpt1_fck
>       |-- per_32k_alwon_fck
>       |   |-- gpio2_fck
>       |   |-- gpio3_fck
>       |   |-- gpio4_fck
>       |   |-- gpio5_fck
>       |   |-- gpio6_fck
>       |   `-- wdt3_fck
>       |-- ts_fck
>       `-- wkup_32k_fck
>           |-- gpio1_fck
>           `-- wdt2_fck
> 
>       14 directories
>       omap:~# tree  /debug/clock/omap_32k_fck/gpt10_fck/
>       /debug/clock/omap_32k_fck/gpt10_fck/
>       |-- flags
>       |-- rate
>       `-- usecount
> 
>       0 directories, 3 files
> 
> Although, compared with David Brownell's small patch, this may look
> bit overkilling, I expect that this debugfs can deal with other PRCM
> complexities at the same time. For example, powerdomain dependencies
> can be expressed by using symbolic links of these clocks if
> powerdomain supports dubgfs as well.
> 
> Signed-off-by: Hiroshi DOYU <[EMAIL PROTECTED]>
> ---
>  arch/arm/plat-omap/clock.c        |   94 
> ++++++++++++++++++++++++++++++++++++-
>  include/asm-arm/arch-omap/clock.h |    3 +
>  2 files changed, 96 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
> index 1bd8781..2ae87bf 100644
> --- a/arch/arm/plat-omap/clock.c
> +++ b/arch/arm/plat-omap/clock.c
> @@ -1,7 +1,7 @@
>  /*
>   *  linux/arch/arm/plat-omap/clock.c
>   *
> - *  Copyright (C) 2004 - 2005 Nokia corporation
> + *  Copyright (C) 2004 - 2008 Nokia corporation
>   *  Written by Tuukka Tikkanen <[EMAIL PROTECTED]>
>   *
>   *  Modified for omap shared clock framework by Tony Lindgren <[EMAIL 
> PROTECTED]>
> @@ -21,6 +21,7 @@
>  #include <linux/clk.h>
>  #include <linux/mutex.h>
>  #include <linux/platform_device.h>
> +#include <linux/debugfs.h>
>  
>  #include <asm/io.h>
>  #include <asm/semaphore.h>
> @@ -506,3 +507,94 @@ int __init omap_ck_init(void)
>  }
>  __initcall(omap_ck_init);
>  #endif
> +
> +#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
> +/*
> + *   debugfs support to trace clock tree hierarchy and attributes
> + */
> +static struct dentry *clk_debugfs_root;
> +
> +static int clk_debugfs_register_one(struct clk *c)
> +{
> +     int err;
> +     struct dentry *d, *child;
> +     struct clk *pa = c->parent;
> +     char s[255];
> +     char *p = s;
> +
> +     p += sprintf(p, "%s", c->name);
> +     if (c->id != 0)
> +             sprintf(p, ":%d", c->id);
> +     d = debugfs_create_dir(s, pa ? pa->dent : clk_debugfs_root);
> +     if (IS_ERR(d))
> +             return PTR_ERR(d);
> +     c->dent = d;
> +
> +     d = debugfs_create_u8("usecount", S_IRUGO, c->dent, (u8 *)&c->usecount);
> +     if (IS_ERR(d)) {
> +             err = PTR_ERR(d);
> +             goto err_out;
> +     }
> +     d = debugfs_create_u32("rate", S_IRUGO, c->dent, (u32 *)&c->rate);
> +     if (IS_ERR(d)) {
> +             err = PTR_ERR(d);
> +             goto err_out;
> +     }
> +     d = debugfs_create_x32("flags", S_IRUGO, c->dent, (u32 *)&c->flags);
> +     if (IS_ERR(d)) {
> +             err = PTR_ERR(d);
> +             goto err_out;
> +     }
> +     return 0;
> +
> +err_out:
> +     d = c->dent;
> +     list_for_each_entry(child, &d->d_subdirs, d_u.d_child)
> +             debugfs_remove(child);
> +     debugfs_remove(c->dent);
> +     return err;
> +}
> +
> +static int clk_debugfs_register(struct clk *c)
> +{
> +     int err;
> +     struct clk *pa = c->parent;
> +
> +     if (pa && !pa->dent) {
> +             err = clk_debugfs_register(pa);
> +             if (err)
> +                     return err;
> +     }
> +
> +     if (!c->dent) {
> +             err = clk_debugfs_register_one(c);
> +             if (err)
> +                     return err;
> +     }
> +     return 0;
> +}
> +
> +static int __init clk_debugfs_init(void)
> +{
> +     struct clk *c;
> +     struct dentry *d;
> +     int err;
> +
> +     d = debugfs_create_dir("clock", NULL);
> +     if (IS_ERR(d))
> +             return PTR_ERR(d);
> +     clk_debugfs_root = d;
> +
> +     list_for_each_entry(c, &clocks, node) {
> +             err = clk_debugfs_register(c);
> +             if (err)
> +                     goto err_out;
> +     }
> +     return 0;
> +err_out:
> +     debugfs_remove(clk_debugfs_root); /* REVISIT: Cleanup correctly */
> +     return err;
> +}
> +late_initcall(clk_debugfs_init);
> +
> +#endif /* defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS) */
> diff --git a/include/asm-arm/arch-omap/clock.h 
> b/include/asm-arm/arch-omap/clock.h
> index cce55ba..811af84 100644
> --- a/include/asm-arm/arch-omap/clock.h
> +++ b/include/asm-arm/arch-omap/clock.h
> @@ -86,6 +86,9 @@ struct clk {
>       __u8                    rate_offset;
>       __u8                    src_offset;
>  #endif
> +#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
> +     struct dentry           *dent;  /* For visible tree hierarchy */
> +#endif
>  };
>  
>  struct clk_functions {
> -- 
> 1.5.5.rc2.6.gf58d
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to