clk: rockchip: change pll rate without a clk-notifier
authorDoug Anderson <dianders@chromium.org>
Tue, 16 Sep 2014 04:07:57 +0000 (21:07 -0700)
committerHeiko Stuebner <heiko@sntech.de>
Sat, 27 Sep 2014 15:57:04 +0000 (17:57 +0200)
commit9c030ea70b6a7eb2f7ee273b1ddd2282b053724f
tree561c3d46d28366d13c0f20112afaa34793e193ac
parentf79c3c015485374b4f453932c45fbcb80a75a1a9
clk: rockchip: change pll rate without a clk-notifier

The Rockchip PLL code switches into slow mode (AKA bypass more AKA
24MHz mode) before actually changing the PLL.  This keeps anyone from
using the PLL while it's changing.  However, in all known Rockchip
SoCs nobody should ever see the 24MHz when changing the PLL supplying
the armclk because we should reparent children to an alternate
(faster than 24MHz) PLL.

One problem is that the code to switch to an alternate parent was
running in PRE_RATE_CHANGE.  ...and the code to switch to slow mode
was _also_ running in PRE_RATE_CHANGE.  That meant there was no real
guarantee that we would switch to an alternate parent before switching
to 24MHz mode.

Let's move the switch to "slow mode" straight into
rockchip_rk3066_pll_set_rate().  That means we're guaranteed that the
24MHz is really a last-resort.

Note that without this change on real systems we were the code to
switch to an alternate parent at 24MHz.  In some older versions of
that code we'd appy a (temporary) / 5 to the 24MHz causing us to run
at 4.8MHz.  That wasn't enough to service USB interrupts in some cases
and could lead to a system hang.

Signed-off-by: Doug Anderson <dianders@chromium.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
drivers/clk/rockchip/clk-pll.c