In that case, please see my few comments inline.<div><br></div><div>Yong<br><br><div class="gmail_quote">On Tue, Nov 16, 2010 at 8:40 PM, Amit Kucheria <span dir="ltr">&lt;<a href="mailto:amit.kucheria@linaro.org">amit.kucheria@linaro.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Yong,<br>
<br>
No. The work that you&#39;re doing is long-term. It will take time for platforms<br>
to move to the common struct clk - almost unlikely for the next Linaro release.<br>
<br>
In the short-term, we still need all partner platforms to expose this debug<br>
information for our tools in a consistent way - OMAP already does it this<br>
way.  So we want this patch applied to the Samsung platform after review and<br>
similar ones for other SoC kernels.<br>
<font color="#888888"><br>
/Amit<br>
</font><div><div></div><div class="h5"><br>
On 10 Nov 16, Yong Shen wrote:<br>
&gt; Hi Amit,<br>
&gt;<br>
&gt; We are trying to make this clock debug interface generic, so every platform<br>
&gt; can benefit from it. Maybe it is better to wait for a while until the common<br>
&gt; interface comes out.<br>
&gt;<br>
&gt; Yong<br>
&gt;<br>
&gt; On Tue, Nov 16, 2010 at 6:54 PM, &lt;<a href="mailto:amit.daniel@samsung.com">amit.daniel@samsung.com</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; From: Amit Daniel Kachhap &lt;<a href="mailto:amit.daniel@samsung.com">amit.daniel@samsung.com</a>&gt;<br>
&gt; &gt;<br>
&gt; &gt; This patch adds support for clock information exposed to debug-fs<br>
&gt; &gt; interface.<br>
&gt; &gt;<br>
&gt; &gt; Signed-off-by: Amit Daniel Kachhap &lt;<a href="mailto:amit.daniel@samsung.com">amit.daniel@samsung.com</a>&gt;<br>
&gt; &gt; ---<br>
&gt; &gt;  arch/arm/plat-samsung/clock.c              |   92<br>
&gt; &gt; ++++++++++++++++++++++++++++<br>
&gt; &gt;  arch/arm/plat-samsung/include/plat/clock.h |    3 +<br>
&gt; &gt;  2 files changed, 95 insertions(+), 0 deletions(-)<br>
&gt; &gt;<br>
&gt; &gt; diff --git a/arch/arm/plat-samsung/clock.c b/arch/arm/plat-samsung/clock.c<br>
&gt; &gt; index e8d20b0..0ba209d 100644<br>
&gt; &gt; --- a/arch/arm/plat-samsung/clock.c<br>
&gt; &gt; +++ b/arch/arm/plat-samsung/clock.c<br>
&gt; &gt; @@ -39,6 +39,7 @@<br>
&gt; &gt;  #include &lt;linux/clk.h&gt;<br>
&gt; &gt;  #include &lt;linux/spinlock.h&gt;<br>
&gt; &gt;  #include &lt;linux/io.h&gt;<br>
&gt; &gt; +#include &lt;linux/debugfs.h&gt;<br></div></div></blockquote><div>Also enclose this head in macro  CONFIG_DEBUG_FS</div><div>And you may also want to use CONFIG_PM_DEBUG combined with CONFIG_DEBUG_FS, and this may apply to below cases.</div>
<meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div class="h5">
&gt; &gt;<br>
&gt; &gt;  #include &lt;mach/hardware.h&gt;<br>
&gt; &gt;  #include &lt;asm/irq.h&gt;<br>
&gt; &gt; @@ -447,3 +448,94 @@ int __init s3c24xx_register_baseclocks(unsigned long<br>
&gt; &gt; xtal)<br>
&gt; &gt;        return 0;<br>
&gt; &gt;  }<br>
&gt; &gt;<br>
&gt; &gt; +#if defined(CONFIG_DEBUG_FS)</div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div class="h5">
&gt; &gt; +/*<br>
&gt; &gt; + *     debugfs support to trace clock tree hierarchy and attributes<br>
&gt; &gt; + */<br>
&gt; &gt; +static struct dentry *clk_debugfs_root;<br>
&gt; &gt; +<br>
&gt; &gt; +static int clk_debugfs_register_one(struct clk *c)<br>
&gt; &gt; +{<br>
&gt; &gt; +       int err;<br>
&gt; &gt; +       struct dentry *d, *child, *child_tmp;<br>
&gt; &gt; +       struct clk *pa = c-&gt;parent;<br>
&gt; &gt; +       char s[255];<br>
&gt; &gt; +       char *p = s;<br>
&gt; &gt; +<br>
&gt; &gt; +       p += sprintf(p, &quot;%s&quot;, c-&gt;name);<br>
&gt; &gt; +#ifdef CONFIG_PLAT_SAMSUNG<br>
&gt; &gt; +       /*Append id field with name also*/<br>
&gt; &gt; +       if (c-&gt;id &gt;= 0)<br>
&gt; &gt; +               p += sprintf(p, &quot;:%d&quot;, c-&gt;id);<br>
&gt; &gt; +#endif<br>
&gt; &gt; +<br>
&gt; &gt; +       d = debugfs_create_dir(s, pa ? pa-&gt;dent : clk_debugfs_root);<br>
&gt; &gt; +       if (!d)<br>
&gt; &gt; +               return -ENOMEM;<br>
&gt; &gt; +<br>
&gt; &gt; +       c-&gt;dent = d;<br>
&gt; &gt; +<br>
&gt; &gt; +       d = debugfs_create_u8(&quot;usecount&quot;, S_IRUGO, c-&gt;dent, (u8<br>
&gt; &gt; *)&amp;c-&gt;usage);<br>
&gt; &gt; +       if (!d) {<br>
&gt; &gt; +               err = -ENOMEM;<br>
&gt; &gt; +               goto err_out;<br>
&gt; &gt; +       }<br>
&gt; &gt; +       d = debugfs_create_u32(&quot;rate&quot;, S_IRUGO, c-&gt;dent, (u32 *)&amp;c-&gt;rate);<br>
&gt; &gt; +       if (!d) {<br>
&gt; &gt; +               err = -ENOMEM;<br>
&gt; &gt; +               goto err_out;<br>
&gt; &gt; +       }<br>
&gt; &gt; +       return 0;<br>
&gt; &gt; +<br>
&gt; &gt; +err_out:<br>
&gt; &gt; +       d = c-&gt;dent;<br>
&gt; &gt; +       list_for_each_entry_safe(child, child_tmp, &amp;d-&gt;d_subdirs,<br>
&gt; &gt; d_u.d_child)<br>
&gt; &gt; +               debugfs_remove(child);<br>
&gt; &gt; +       debugfs_remove(c-&gt;dent);<br>
&gt; &gt; +       return err;<br>
&gt; &gt; +}<br>
&gt; &gt; +<br>
&gt; &gt; +static int clk_debugfs_register(struct clk *c)<br>
&gt; &gt; +{<br>
&gt; &gt; +       int err;<br>
&gt; &gt; +       struct clk *pa = c-&gt;parent;<br>
&gt; &gt; +<br>
&gt; &gt; +       if (pa &amp;&amp; !pa-&gt;dent) {<br>
&gt; &gt; +               err = clk_debugfs_register(pa);<br>
&gt; &gt; +               if (err)<br>
&gt; &gt; +                       return err;<br>
&gt; &gt; +       }<br>
&gt; &gt; +<br>
&gt; &gt; +       if (!c-&gt;dent) {<br>
&gt; &gt; +               err = clk_debugfs_register_one(c);<br>
&gt; &gt; +               if (err)<br>
&gt; &gt; +                       return err;<br>
&gt; &gt; +       }<br>
&gt; &gt; +       return 0;<br>
&gt; &gt; +}<br>
&gt; &gt; +<br>
&gt; &gt; +static int __init clk_debugfs_init(void)<br>
&gt; &gt; +{<br>
&gt; &gt; +       struct clk *c;<br>
&gt; &gt; +       struct dentry *d;<br>
&gt; &gt; +       int err;<br>
&gt; &gt; +<br>
&gt; &gt; +       d = debugfs_create_dir(&quot;clock&quot;, NULL);<br>
&gt; &gt; +       if (!d)<br>
&gt; &gt; +               return -ENOMEM;<br>
&gt; &gt; +       clk_debugfs_root = d;<br>
&gt; &gt; +<br>
&gt; &gt; +       list_for_each_entry(c, &amp;clocks, list) {<br>
&gt; &gt; +               err = clk_debugfs_register(c);<br>
&gt; &gt; +               if (err)<br>
&gt; &gt; +                       goto err_out;<br>
&gt; &gt; +       }<br>
&gt; &gt; +       return 0;<br>
&gt; &gt; +err_out:<br>
&gt; &gt; +       debugfs_remove_recursive(clk_debugfs_root);<br>
&gt; &gt; +       return err;<br>
&gt; &gt; +}<br>
&gt; &gt; +late_initcall(clk_debugfs_init);<br>
&gt; &gt; +<br>
&gt; &gt; +#endif /* defined(CONFIG_DEBUG_FS) */<br>
&gt; &gt; +<br>
&gt; &gt; diff --git a/arch/arm/plat-samsung/include/plat/clock.h<br>
&gt; &gt; b/arch/arm/plat-samsung/include/plat/clock.h<br>
&gt; &gt; index 0fbcd0e..f6180ab 100644<br>
&gt; &gt; --- a/arch/arm/plat-samsung/include/plat/clock.h<br>
&gt; &gt; +++ b/arch/arm/plat-samsung/include/plat/clock.h<br>
&gt; &gt; @@ -47,6 +47,9 @@ struct clk {<br>
&gt; &gt;<br>
&gt; &gt;        struct clk_ops          *ops;<br>
&gt; &gt;        int                 (*enable)(struct clk *, int enable);<br>
&gt; &gt; +#if defined(CONFIG_DEBUG_FS)<br>
&gt; &gt; +       struct dentry           *dent;  /* For visible tree hierarchy */<br>
&gt; &gt; +#endif<br>
&gt; &gt;  };<br>
&gt; &gt;<br>
&gt; &gt;  /* other clocks which may be registered by board support */<br>
&gt; &gt; --<br>
&gt; &gt; 1.6.0.6<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; linaro-dev mailing list<br>
&gt; &gt; <a href="mailto:linaro-dev@lists.linaro.org">linaro-dev@lists.linaro.org</a><br>
&gt; &gt; <a href="http://lists.linaro.org/mailman/listinfo/linaro-dev" target="_blank">http://lists.linaro.org/mailman/listinfo/linaro-dev</a><br>
&gt; &gt;<br>
<br>
&gt; _______________________________________________<br>
&gt; linaro-dev mailing list<br>
&gt; <a href="mailto:linaro-dev@lists.linaro.org">linaro-dev@lists.linaro.org</a><br>
&gt; <a href="http://lists.linaro.org/mailman/listinfo/linaro-dev" target="_blank">http://lists.linaro.org/mailman/listinfo/linaro-dev</a><br>
<br>
</div></div></blockquote></div><br></div>