* Paul Walmsley <paul@xxxxxxxxx> [081114 09:46]: > > During _omap3_noncore_dpll_lock(), if a DPLL has no active downstream > clocks and DPLL autoidle is enabled, the DPLL may never lock, since it > will enter autoidle immediately. To resolve this, disable DPLL > autoidle while locking the DPLL, and unconditionally wait for the DPLL > to lock. This fixes some bugs where the kernel would hang when returning > from retention or return the wrong rate for the DPLL. > > This patch is a collaboration with Peter de Schrijver > <peter.de-schrijver@xxxxxxxxx> and Kevin Hilman > <khilman@xxxxxxxxxxxxxxxxxxx>. Pushing to l-o tree today. Tony > Signed-off-by: Paul Walmsley <paul@xxxxxxxxx> > Cc: Peter de Schrijver <peter.de-schrijver@xxxxxxxxx> > Cc: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> > --- > arch/arm/mach-omap2/clock34xx.c | 15 +++++---------- > 1 files changed, 5 insertions(+), 10 deletions(-) > > diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c > index 3a4e160..b8b4494 100644 > --- a/arch/arm/mach-omap2/clock34xx.c > +++ b/arch/arm/mach-omap2/clock34xx.c > @@ -163,19 +163,14 @@ static int _omap3_noncore_dpll_lock(struct clk *clk) > > ai = omap3_dpll_autoidle_read(clk); > > + omap3_dpll_deny_idle(clk); > + > _omap3_dpll_write_clken(clk, DPLL_LOCKED); > > - if (ai) { > - /* > - * If no downstream clocks are enabled, CM_IDLEST bit > - * may never become active, so don't wait for DPLL to lock. > - */ > - r = 0; > + r = _omap3_wait_dpll_status(clk, 1); > + > + if (ai) > omap3_dpll_allow_idle(clk); > - } else { > - r = _omap3_wait_dpll_status(clk, 1); > - omap3_dpll_deny_idle(clk); > - }; > > return r; > } > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html