linux/drivers/clk/mvebu
Gregory CLEMENT 61c40f35f5 clk: mvebu: armada-37xx-periph: Fix switching CPU rate from 300Mhz to 1.2GHz
Switching the CPU from the L2 or L3 frequencies (300 and 200 Mhz
respectively) to L0 frequency (1.2 Ghz) requires a significant amount
of time to let VDD stabilize to the appropriate voltage. This amount of
time is large enough that it cannot be covered by the hardware
countdown register. Due to this, the CPU might start operating at L0
before the voltage is stabilized, leading to CPU stalls.

To work around this problem, we prevent switching directly from the
L2/L3 frequencies to the L0 frequency, and instead switch to the L1
frequency in-between. The sequence therefore becomes:

1. First switch from L2/L3(200/300MHz) to L1(600MHZ)
2. Sleep 20ms for stabling VDD voltage
3. Then switch from L1(600MHZ) to L0(1200Mhz).

It is based on the work done by Ken Ma <make@marvell.com>

Cc: stable@vger.kernel.org
Fixes: 2089dc33ea ("clk: mvebu: armada-37xx-periph: add DVFS support for cpu clocks")
Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
2018-07-09 09:44:06 -07:00
..
ap806-system-controller.c clk: mvebu: ap806: introduce a new binding 2017-06-01 12:03:21 +09:00
armada-37xx-periph.c clk: mvebu: armada-37xx-periph: Fix switching CPU rate from 300Mhz to 1.2GHz 2018-07-09 09:44:06 -07:00
armada-37xx-tbg.c treewide: Use struct_size() for devm_kmalloc() and friends 2018-06-06 11:15:43 -07:00
armada-37xx-xtal.c clk: mvebu: Add the xtal clock for Armada 3700 SoC 2016-08-15 14:07:04 -07:00
armada-38x.c clk: mvebu: armada-38x: add support for missing clocks 2018-03-19 13:53:57 -07:00
armada-39x.c clk: mvebu: armada-39x: add clk description for supported interfaces 2016-08-12 18:20:01 -07:00
armada-370.c clk: mvebu: flag the crypto clk as CLK_IGNORE_UNUSED 2015-06-18 13:51:45 -07:00
armada-375.c clk: mvebu: armada-375: Fix the description of the SAR in the comment 2014-09-09 15:15:22 +00:00
armada-xp.c clk: mvebu: Expand mv98dx3236-core-clock support 2017-02-10 09:21:30 -08:00
clk-corediv.c clk: mvebu: use correct bit for 98DX3236 NAND 2018-06-01 12:46:33 -07:00
clk-cpu.c clk: mvebu: Use kcalloc() in of_cpu_clk_setup() 2017-04-21 19:49:13 -07:00
common.c clk: mvebu: Use kcalloc() in two functions 2017-04-21 19:49:34 -07:00
common.h clk: mvebu: extend common code to allow an optional refclk 2015-03-04 15:18:48 +01:00
cp110-system-controller.c clk: mvebu: cp110: Fix clock tree representation 2018-03-19 13:10:50 -07:00
dove-divider.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
dove-divider.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
dove.c clk: add Dove PLL divider support for GPU, VMeta and AXI clocks 2015-12-22 12:25:00 -08:00
Kconfig clk: mvebu: Add the xtal clock for Armada 3700 SoC 2016-08-15 14:07:04 -07:00
kirkwood.c clk: move the common clock's to_clk_*(_hw) macros to clk-provider.h 2016-01-29 12:59:50 -08:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
mv98dx3236.c clk: mvebu: Expand mv98dx3236-core-clock support 2017-02-10 09:21:30 -08:00
orion.c clk: mvebu: Add clk support for the orion5x SoC mv88f5181 2016-09-21 11:49:09 +02:00