From: kaloz Date: Tue, 7 Apr 2015 21:13:44 +0000 (+0000) Subject: mvebu: disable cpu idle on a38x X-Git-Url: https://git.archive.openwrt.org/?p=openwrt.git;a=commitdiff_plain;h=d2d23f270570b7aff98268a65cf9112519a07932 mvebu: disable cpu idle on a38x Signed-off-by: Imre Kaloz git-svn-id: svn://svn.openwrt.org/openwrt/trunk@45302 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- 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;