Re: [PATCH 1/2] ARM: OMAP: CLKFW: Initial debugfs support for omap clock framework

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* Hiroshi DOYU <Hiroshi.DOYU@xxxxxxxxx> [080417 13:02]:
> From: "ext Paul Walmsley" <paul@xxxxxxxxx>
> 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 <Hiroshi.DOYU@xxxxxxxxx>
> 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 <Hiroshi.DOYU@xxxxxxxxx>
> ---
>  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 <Hiroshi.DOYU@xxxxxxxxx>
> 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 <Hiroshi.DOYU@xxxxxxxxx>
> ---
>  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 <tuukka.tikkanen@xxxxxxxxxxxxxx>
>   *
>   *  Modified for omap shared clock framework by Tony Lindgren <tony@xxxxxxxxxxx>
> @@ -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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux