aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory CLEMENT <gregory.clement@free-electrons.com>2015-01-30 06:34:25 -0500
committerGregory CLEMENT <gregory.clement@free-electrons.com>2015-03-31 12:47:33 -0400
commit548ae94c1cc7fc120848757249b9a542b1080ffb (patch)
tree13ea3f7cd4dc14e191456e8273e573d36686e356
parentc517d838eb7d07bbe9507871fab3931deccff539 (diff)
ARM: mvebu: Disable CPU Idle on Armada 38x
On Armada 38x SoCs, under heavy I/O load, the system hangs when CPU Idle is enabled. Waiting for a solution to this issue, this patch disables the CPU Idle support for this SoC. As CPU Hot plug support also uses some of the CPU Idle functions it is also affected by the same issue. This patch disables it also for the Armada 38x SoCs. Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Cc: <stable@vger.kernel.org> # v3.17 +
-rw-r--r--arch/arm/mach-mvebu/pmsu.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/arm/mach-mvebu/pmsu.c b/arch/arm/mach-mvebu/pmsu.c
index 8b9f5e202ccf..4f4e22206ae5 100644
--- a/arch/arm/mach-mvebu/pmsu.c
+++ b/arch/arm/mach-mvebu/pmsu.c
@@ -415,6 +415,9 @@ static __init int armada_38x_cpuidle_init(void)
415 void __iomem *mpsoc_base; 415 void __iomem *mpsoc_base;
416 u32 reg; 416 u32 reg;
417 417
418 pr_warn("CPU idle is currently broken on Armada 38x: disabling");
419 return 0;
420
418 np = of_find_compatible_node(NULL, NULL, 421 np = of_find_compatible_node(NULL, NULL,
419 "marvell,armada-380-coherency-fabric"); 422 "marvell,armada-380-coherency-fabric");
420 if (!np) 423 if (!np)
@@ -476,6 +479,16 @@ static int __init mvebu_v7_cpu_pm_init(void)
476 return 0; 479 return 0;
477 of_node_put(np); 480 of_node_put(np);
478 481
482 /*
483 * Currently the CPU idle support for Armada 38x is broken, as
484 * the CPU hotplug uses some of the CPU idle functions it is
485 * broken too, so let's disable it
486 */
487 if (of_machine_is_compatible("marvell,armada380")) {
488 cpu_hotplug_disable();
489 pr_warn("CPU hotplug support is currently broken on Armada 38x: disabling");
490 }
491
479 if (of_machine_is_compatible("marvell,armadaxp")) 492 if (of_machine_is_compatible("marvell,armadaxp"))
480 ret = armada_xp_cpuidle_init(); 493 ret = armada_xp_cpuidle_init();
481 else if (of_machine_is_compatible("marvell,armada370")) 494 else if (of_machine_is_compatible("marvell,armada370"))
@@ -489,7 +502,8 @@ static int __init mvebu_v7_cpu_pm_init(void)
489 return ret; 502 return ret;
490 503
491 mvebu_v7_pmsu_enable_l2_powerdown_onidle(); 504 mvebu_v7_pmsu_enable_l2_powerdown_onidle();
492 platform_device_register(&mvebu_v7_cpuidle_device); 505 if (mvebu_v7_cpuidle_device.name)
506 platform_device_register(&mvebu_v7_cpuidle_device);
493 cpu_pm_register_notifier(&mvebu_v7_cpu_pm_notifier); 507 cpu_pm_register_notifier(&mvebu_v7_cpu_pm_notifier);
494 508
495 return 0; 509 return 0;