From be2d60465d587504618f5e81ee80e21849e09b5c Mon Sep 17 00:00:00 2001 From: Imre Kaloz Date: Tue, 7 Apr 2015 21:13:44 +0000 Subject: [PATCH] mvebu: disable cpu idle on a38x Signed-off-by: Imre Kaloz SVN-Revision: 45302 --- .../031-disable_cpu_idle_on_armada_38x.patch | 62 +++++++++++++++++++ .../031-disable_cpu_idle_on_armada_38x.patch | 62 +++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 target/linux/mvebu/patches-3.18/031-disable_cpu_idle_on_armada_38x.patch create mode 100644 target/linux/mvebu/patches-4.0/031-disable_cpu_idle_on_armada_38x.patch diff --git a/target/linux/mvebu/patches-3.18/031-disable_cpu_idle_on_armada_38x.patch b/target/linux/mvebu/patches-3.18/031-disable_cpu_idle_on_armada_38x.patch new file mode 100644 index 0000000000..31a73a504c --- /dev/null +++ b/target/linux/mvebu/patches-3.18/031-disable_cpu_idle_on_armada_38x.patch @@ -0,0 +1,62 @@ +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 +Tested-by: Thomas Petazzoni +Cc: # v3.17 + +--- +Hi, + +In this version I removed the unneeded initialization of the ret +variable, I also fixed the warning message, and finally I added the +Tested-by from Thomas. + +Gregory + + arch/arm/mach-mvebu/pmsu.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +--- a/arch/arm/mach-mvebu/pmsu.c ++++ b/arch/arm/mach-mvebu/pmsu.c +@@ -415,6 +415,9 @@ static __init int armada_38x_cpuidle_ini + void __iomem *mpsoc_base; + u32 reg; + ++ pr_warn("CPU idle is currently broken on Armada 38x: disabling"); ++ return 0; ++ + np = of_find_compatible_node(NULL, NULL, + "marvell,armada-380-coherency-fabric"); + if (!np) +@@ -476,6 +479,16 @@ static int __init mvebu_v7_cpu_pm_init(v + return 0; + of_node_put(np); + ++ /* ++ * Currently the CPU idle support for Armada 38x is broken, as ++ * the CPU hotplug uses some of the CPU idle functions it is ++ * broken too, so let's disable it ++ */ ++ if (of_machine_is_compatible("marvell,armada380")) { ++ cpu_hotplug_disable(); ++ pr_warn("CPU hotplug support is currently broken on Armada 38x: disabling"); ++ } ++ + if (of_machine_is_compatible("marvell,armadaxp")) + ret = armada_xp_cpuidle_init(); + else if (of_machine_is_compatible("marvell,armada370")) +@@ -489,7 +502,8 @@ static int __init mvebu_v7_cpu_pm_init(v + return ret; + + mvebu_v7_pmsu_enable_l2_powerdown_onidle(); +- platform_device_register(&mvebu_v7_cpuidle_device); ++ if (mvebu_v7_cpuidle_device.name) ++ platform_device_register(&mvebu_v7_cpuidle_device); + cpu_pm_register_notifier(&mvebu_v7_cpu_pm_notifier); + + return 0; diff --git a/target/linux/mvebu/patches-4.0/031-disable_cpu_idle_on_armada_38x.patch b/target/linux/mvebu/patches-4.0/031-disable_cpu_idle_on_armada_38x.patch new file mode 100644 index 0000000000..31a73a504c --- /dev/null +++ b/target/linux/mvebu/patches-4.0/031-disable_cpu_idle_on_armada_38x.patch @@ -0,0 +1,62 @@ +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 +Tested-by: Thomas Petazzoni +Cc: # v3.17 + +--- +Hi, + +In this version I removed the unneeded initialization of the ret +variable, I also fixed the warning message, and finally I added the +Tested-by from Thomas. + +Gregory + + arch/arm/mach-mvebu/pmsu.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +--- a/arch/arm/mach-mvebu/pmsu.c ++++ b/arch/arm/mach-mvebu/pmsu.c +@@ -415,6 +415,9 @@ static __init int armada_38x_cpuidle_ini + void __iomem *mpsoc_base; + u32 reg; + ++ pr_warn("CPU idle is currently broken on Armada 38x: disabling"); ++ return 0; ++ + np = of_find_compatible_node(NULL, NULL, + "marvell,armada-380-coherency-fabric"); + if (!np) +@@ -476,6 +479,16 @@ static int __init mvebu_v7_cpu_pm_init(v + return 0; + of_node_put(np); + ++ /* ++ * Currently the CPU idle support for Armada 38x is broken, as ++ * the CPU hotplug uses some of the CPU idle functions it is ++ * broken too, so let's disable it ++ */ ++ if (of_machine_is_compatible("marvell,armada380")) { ++ cpu_hotplug_disable(); ++ pr_warn("CPU hotplug support is currently broken on Armada 38x: disabling"); ++ } ++ + if (of_machine_is_compatible("marvell,armadaxp")) + ret = armada_xp_cpuidle_init(); + else if (of_machine_is_compatible("marvell,armada370")) +@@ -489,7 +502,8 @@ static int __init mvebu_v7_cpu_pm_init(v + return ret; + + mvebu_v7_pmsu_enable_l2_powerdown_onidle(); +- platform_device_register(&mvebu_v7_cpuidle_device); ++ if (mvebu_v7_cpuidle_device.name) ++ platform_device_register(&mvebu_v7_cpuidle_device); + cpu_pm_register_notifier(&mvebu_v7_cpu_pm_notifier); + + return 0; -- 2.25.1