* Russell King - ARM Linux <[EMAIL PROTECTED]> [080407 16:49]:
> On Tue, Mar 18, 2008 at 04:02:03PM +0200, Tony Lindgren wrote:
> > From: Paul Walmsley <[EMAIL PROTECTED]>
> > 
> > This patch changes 24xx to use new register access, except for clock
> > framework. Clock framework register access will get updates in the
> > next patch.
> 
> Hmm...
> 
> > @@ -187,13 +189,40 @@ static inline void __init apollon_init_smc91x(void)
> >  {
> >     unsigned long base;
> >  
> > +   unsigned int rate;
> > +   struct clk *l3ck;
> > +   int eth_cs;
> > +
> > +   l3ck = clk_get(NULL, "core_l3_ck");
> > +   if (IS_ERR(l3ck))
> > +           rate = 100000000;
> > +   else
> > +           rate = clk_get_rate(l3ck);
> 
> Now read:
> 
> /**
>  * clk_get_rate - obtain the current clock rate (in Hz) for a clock source.
>  *                This is only valid once the clock source has been enabled.
>  * @clk: clock source
>  */
> unsigned long clk_get_rate(struct clk *clk);
> 
> And now tell me what's wrong with the above code.
> 
> > +   int eth_cs;
> > +   unsigned long cs_mem_base;
> > +   unsigned int muxed, rate;
> > +   struct clk *l3ck;
> > +
> > +   eth_cs  = H4_SMC91X_CS;
> > +
> > +   l3ck = clk_get(NULL, "core_l3_ck");
> > +   if (IS_ERR(l3ck))
> > +           rate = 100000000;
> > +   else
> > +           rate = clk_get_rate(l3ck);
> 
> Ditto.

This has been fixed with following changes:

- Use gpmc_fck instead of core_l3_ck as core_l3_ck is not the right
  clock to use (although the rates are the same as it's the parent).

- Mark gpmc_fck with ENABLE_ON_INIT so it's always on and autoidled

- Remove fixed rate setting on clk_get() error, it's not needed

Here's how it now looks:

@@ -302,15 +288,17 @@
        int eth_cs;
        unsigned long cs_mem_base;
        unsigned int muxed, rate;
-       struct clk *l3ck;
+       struct clk *gpmc_fck;
 
        eth_cs  = H4_SMC91X_CS;
 
-       l3ck = clk_get(NULL, "core_l3_ck");
-       if (IS_ERR(l3ck))
-               rate = 100000000;
-       else
-               rate = clk_get_rate(l3ck);
+       gpmc_fck = clk_get(NULL, "gpmc_fck");   /* Always on ENABLE_ON_INIT */
+       if (IS_ERR(gpmc_fck)) {
+               WARN_ON(1);
+               return;
+       }
+
+       rate = clk_get_rate(gpmc_fck);
 
        if (is_gpmc_muxed())
                muxed = 0x200;

Will repost the whole series.

Tony
--
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