]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
OMAP: wait for pwrdm transition after clk_enable()
authorTomi Valkeinen <tomi.valkeinen@nokia.com>
Fri, 12 Dec 2008 07:48:53 +0000 (09:48 +0200)
committerTony Lindgren <tony@atomide.com>
Mon, 15 Dec 2008 22:46:13 +0000 (14:46 -0800)
Enabling clock in a disabled power domain causes the power domain to be
turned on. However, the power transition is not always finished when
clk_enable() returns and this randomly crashes the kernel when an
interrupt happens right after the clk_enable, and the kernel tries to
read the irq status register for that domain.

Why the irq status register is inaccessible, I don't know. Also it
doesn't seem to be related to the module being not powered up, but to
the transition itself.

The same could perhaps happen after clk_disable also, but I have not
witnessed that.

The problem affects at least dss, cam and sgx clocks.

This change waits for the transition to be finished before returning
from omap2_clkdm_clk_enable().

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
Acked-by: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/clockdomain.c

index fa62f14de2a3a7f18ff51200aed3886eef877a51..f713d0b9cbc8243916f72ec5bb85394f3c34e002 100644 (file)
@@ -567,6 +567,8 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk)
        else
                omap2_clkdm_wakeup(clkdm);
 
+       pwrdm_wait_transition(clkdm->pwrdm.ptr);
+
        return 0;
 }