common clock framework
Sascha Hauer
s.hauer at pengutronix.de
Sat May 5 04:28:40 EDT 2012
On Fri, May 04, 2012 at 04:08:20PM -0700, Turquette, Mike wrote:
>
> We are very close. I have been hacking on this in a private branch
> and have converted OMAP's CPUfreq driver over to using *only* the the
> clock framework for DVFS.
>
> Good news: it works! The CPUfreq driver's .target callback does the
> normal rate validation and table lookup to get a good rate for the
> CPU, then it simply calls clk_set_rate. The pre- and post-rate-change
> notifiers are then fired off. I have added notifier handlers to the
> OMAP regulator drivers which use a look-up-table (soon to be converted
> to the OPP library) to determine voltage and they simply call
> regulator_set_voltage either before or after the clock rate changes,
> depending on scaling direction.
>
> Bad news: lockdep gets cranky about possible deadlocks due to holding
> prepare_lock and then trying to hold it again in a rate-change
> notifier handler (from OMAP's regulator code). Specifically
> clk_set_rate holds prepare_lock, and then the i2c message sent to the
> PMIC to raise voltage calls clk_prepare as part of the standard
> messaging sequence. This is clearly a candidate for a deadlock.
>
> Having clk_set_rate and clk_prepare both hold the same prepare_lock
> mutex seems suboptimal, but it is easy. Having reentrant accesses to
> the clock tree is going to be hard... I've spent some time thinking
> of ways to solve this, but I would appreciate suggestions. I suspect
> the exact same case I'm describing above will affect many SoCs.
That's interesting. Here's another one: What will happen when Mark
attaches one of his i2c wolfson chips to a omap core and wants to test
his new clock driver? a clk_prepare on some clock on the wolfson chip
will trigger another clk_prepare inside the i2c driver.
So the reentrancy problem is not limited to prepare vs. set_rate.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the linux-arm-kernel
mailing list