All of lore.kernel.org
 help / color / mirror / Atom feed
From: u.kleine-koenig@pengutronix.de (Uwe Kleine-König)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 08/13] ARM: LPC32XX: clock tree support
Date: Wed, 3 Feb 2010 21:20:47 +0100	[thread overview]
Message-ID: <20100203202047.GC20113@pengutronix.de> (raw)
In-Reply-To: <083DF309106F364B939360100EC290F805C8B78796@eu1rdcrdc1wx030.exi.nxp.com>

On Wed, Feb 03, 2010 at 07:51:36PM +0100, Kevin Wells wrote:
> > > +/*
> > > + * clk_get_rate - obtain the current clock rate (in Hz) for a clock
> > source
> > > + */
> > > +unsigned long clk_get_rate(struct clk *clk)
> > > +{
> > > +	if (clk->get_rate)
> > > +		return (clk->get_rate)(clk);
> > > +
> > > +	/* If a clocks rate is 0, it uses the parent's rate instead. */
> > > +	while (clk->rate == 0)
> > > +		clk = clk->parent;
> > > +
> > > +	return clk->rate;
> > > +}
> > > +EXPORT_SYMBOL(clk_get_rate);
> > doesn't that need locking to protect against a race with clk_set_rate?
> > Hmmm, you never need to call get_rate for a parent clock?
> > 
> 
> I'll add a lock for this, its needed. The get_rate() function will just
> continue to fall back to the first non-0Hz parent clock (all clocks
> eventually go to a non-0Hz parent clock). Most clocks don't even have
> a get_rate() function.
still, if a clock with a get_rate function has a child, clk_get_rate for
the child might return a wrong result.

Actually you need something like:

	while (!(rate = clk->rate) && !(clk->get_rate && (rate = clk->get_rate(clk)))) {
		clk = clk->parent;
		if (!clk)
			break;
	}	
	return rate;

Maybe with a nicer coding style by not using an assignment in the while
condition.

Best regards
Uwe

-- 
Pengutronix e.K.                              | Uwe Kleine-K?nig            |
Industrial Linux Solutions                    | http://www.pengutronix.de/  |

  reply	other threads:[~2010-02-03 20:20 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-28  1:43 LPC32XX architecture files (updated) wellsk40 at gmail.com
2010-01-28  1:43 ` [PATCH 01/13] i2c_pnx: Added Kconfig support for the LCP32XX wellsk40 at gmail.com
2010-01-28  1:43 ` [PATCH 02/13] pnx4008_wdt: Added Kconfig support for the LPC32XX wellsk40 at gmail.com
2010-01-28  1:43 ` [PATCH 03/13] amba clcd: Swapped CTRL/IENB registers for LCP32XX wellsk40 at gmail.com
2010-01-28  1:43 ` [PATCH 04/13] ARM: LPC32XX arch support in Kconfig and Makefile wellsk40 at gmail.com
2010-02-03 10:31   ` Uwe Kleine-König
2010-01-28  1:43 ` [PATCH 05/13] ARM: LPC32XX: arch Kconfig, plat Kconfig, and makefiles wellsk40 at gmail.com
2010-02-03 10:51   ` Uwe Kleine-König
2010-02-03 11:26     ` Russell King - ARM Linux
2010-02-03 13:57       ` Uwe Kleine-König
2010-02-03 15:02         ` Russell King - ARM Linux
2010-02-03 18:01     ` Kevin Wells
2010-02-03 18:56       ` Uwe Kleine-König
2010-01-28  1:43 ` [PATCH 06/13] ARM: LPC32XX: Core architecture files wellsk40 at gmail.com
2010-01-28 17:58   ` H Hartley Sweeten
2010-01-28 19:54     ` Kevin Wells
2010-02-03 10:54     ` Uwe Kleine-König
2010-02-03 18:05       ` Kevin Wells
2010-02-03 15:55   ` Uwe Kleine-König
2010-02-03 18:43     ` Kevin Wells
2010-02-03 20:40       ` Uwe Kleine-König
2010-02-03 21:58         ` Kevin Wells
2010-02-04  8:17           ` Uwe Kleine-König
2010-02-08  9:09     ` [PATCH 1/3] gpiolib: make names array and its values const Uwe Kleine-König
2010-02-08  9:09       ` Uwe Kleine-König
2010-02-08  9:37       ` Baruch Siach
2010-02-08  9:37         ` Baruch Siach
2010-02-08  9:43         ` Uwe Kleine-König
2010-02-08  9:43           ` Uwe Kleine-König
2010-02-24 10:35       ` Uwe Kleine-König
2010-02-24 10:35         ` Uwe Kleine-König
2010-03-22 20:47       ` Uwe Kleine-König
2010-03-22 20:47         ` Uwe Kleine-König
2010-03-23 10:24         ` Uwe Kleine-König
2010-03-23 10:24         ` [PATCH 2/3] gpiolib: a gpio is unsigned, so use %u to print it Uwe Kleine-König
2010-03-23 10:24         ` [PATCH 3/3] gpiolib: document that names can contain printk format specifiers Uwe Kleine-König
2010-02-08  9:09     ` [PATCH 2/3] gpiolib: a gpio is unsigned, so use %u to print it Uwe Kleine-König
2010-02-08  9:09       ` Uwe Kleine-König
2010-02-08  9:09     ` [PATCH 3/3] gpiolib: document that names can contain printk format specifiers Uwe Kleine-König
2010-02-08  9:09       ` Uwe Kleine-König
2010-02-08  9:16       ` Uwe Kleine-König
2010-02-08  9:16         ` Uwe Kleine-König
2010-01-28  1:43 ` [PATCH 07/13] ARM: LPC32XX: common architecture functions and structures wellsk40 at gmail.com
2010-02-03 16:01   ` Uwe Kleine-König
2010-01-28  1:43 ` [PATCH 08/13] ARM: LPC32XX: clock tree support wellsk40 at gmail.com
2010-01-28 17:07   ` Rabin Vincent
2010-01-28 19:51     ` Kevin Wells
2010-02-03 16:32   ` Uwe Kleine-König
2010-02-03 18:51     ` Kevin Wells
2010-02-03 20:20       ` Uwe Kleine-König [this message]
2010-02-05 16:48         ` Kevin Wells
2010-02-05 19:45           ` Russell King - ARM Linux
2010-01-28  1:43 ` [PATCH 09/13] ARM: LPC32XX: power and event management wellsk40 at gmail.com
2010-02-03 16:44   ` Uwe Kleine-König
2010-02-03 19:03     ` Kevin Wells
2010-01-28  1:43 ` [PATCH 10/13] ARM: LPC32XX: Phytec PHY3250 platform support file wellsk40 at gmail.com
2010-02-03 16:46   ` Uwe Kleine-König
2010-01-28  1:43 ` [PATCH 11/13] ARM: LPC32XX: printascii() output and irq support functions wellsk40 at gmail.com
2010-02-03 16:50   ` Uwe Kleine-König
2010-02-03 18:57     ` Kevin Wells
2010-02-03 20:49       ` Uwe Kleine-König
2010-01-28  1:43 ` [PATCH 12/13] ARM: LPC32XX: architecture header files wellsk40 at gmail.com
2010-02-03 17:07   ` Uwe Kleine-König
2010-02-03 19:20     ` Kevin Wells
2010-02-03 20:44       ` Uwe Kleine-König
2010-02-03 21:34       ` Russell King - ARM Linux
2010-02-03 22:06         ` Kevin Wells
2010-01-28  1:43 ` [PATCH 13/13] ARM: LPC32XX: Phytec PHY3250 default kernel config (ramdisk) wellsk40 at gmail.com
2010-01-28 11:16 ` LPC32XX architecture files (updated) Luotao Fu
2010-01-28 19:50   ` Kevin Wells
2010-01-28 19:06 ` Wolfram Sang
2010-01-28 19:58   ` Kevin Wells

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100203202047.GC20113@pengutronix.de \
    --to=u.kleine-koenig@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.