From: Imre Kaloz Date: Tue, 7 Apr 2015 18:13:51 +0000 (+0000) Subject: Upstream commits 43b68879de27b1993518687fbc6013da80cdcbfe and ce6031c89a35cffd5a5992b... X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=f60fea192338c898305102581db4282d14a653bb;p=openwrt%2Fstaging%2Frobimarko.git Upstream commits 43b68879de27b1993518687fbc6013da80cdcbfe and ce6031c89a35cffd5a5992b08377b77f49a004b9 improve the cpuidle driver on Armada XP. The latter commit improves performance at the slight expense of power consumption. Signed-off-by: Claudio Leite Signed-off-by: Imre Kaloz SVN-Revision: 45294 --- diff --git a/target/linux/mvebu/patches-3.18/060-cpuidle-mvebu-Fix-the-CPU-PM-notifier-usage.patch b/target/linux/mvebu/patches-3.18/060-cpuidle-mvebu-Fix-the-CPU-PM-notifier-usage.patch new file mode 100644 index 0000000000..afd66179a4 --- /dev/null +++ b/target/linux/mvebu/patches-3.18/060-cpuidle-mvebu-Fix-the-CPU-PM-notifier-usage.patch @@ -0,0 +1,38 @@ +From 43b68879de27b1993518687fbc6013da80cdcbfe Mon Sep 17 00:00:00 2001 +From: Gregory CLEMENT +Date: Thu, 26 Feb 2015 18:20:48 +0100 +Subject: [PATCH] cpuidle: mvebu: Fix the CPU PM notifier usage + +As stated in kernel/cpu_pm.c, "Platform is responsible for ensuring +that cpu_pm_enter is not called twice on the same CPU before +cpu_pm_exit is called.". In the current code in case of failure when +calling mvebu_v7_cpu_suspend, the function cpu_pm_exit() is never +called whereas cpu_pm_enter() was called just before. + +This patch moves the cpu_pm_exit() in order to balance the +cpu_pm_enter() calls. + +Cc: stable@vger.kernel.org +Reported-by: Fulvio Benini +Signed-off-by: Gregory CLEMENT +Signed-off-by: Daniel Lezcano +--- + drivers/cpuidle/cpuidle-mvebu-v7.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/cpuidle/cpuidle-mvebu-v7.c ++++ b/drivers/cpuidle/cpuidle-mvebu-v7.c +@@ -37,11 +37,11 @@ static int mvebu_v7_enter_idle(struct cp + deepidle = true; + + ret = mvebu_v7_cpu_suspend(deepidle); ++ cpu_pm_exit(); ++ + if (ret) + return ret; + +- cpu_pm_exit(); +- + return index; + } + diff --git a/target/linux/mvebu/patches-3.18/061-cpuidle-mvebu-Update-cpuidle-thresholds-for-Armada-X.patch b/target/linux/mvebu/patches-3.18/061-cpuidle-mvebu-Update-cpuidle-thresholds-for-Armada-X.patch new file mode 100644 index 0000000000..bc0f1a6f5b --- /dev/null +++ b/target/linux/mvebu/patches-3.18/061-cpuidle-mvebu-Update-cpuidle-thresholds-for-Armada-X.patch @@ -0,0 +1,66 @@ +From ce6031c89a35cffd5a5992b08377b77f49a004b9 Mon Sep 17 00:00:00 2001 +From: Sebastien Rannou +Date: Fri, 13 Feb 2015 15:55:03 +0100 +Subject: [PATCH] cpuidle: mvebu: Update cpuidle thresholds for Armada XP SOCs + +Originally, the thresholds used in the cpuidle driver for Armada SOCs +were temporarily chosen, leaving room for improvements. + +This commit updates the thresholds for the Armada XP SOCs with values +that positively impact performances: + + without patch with patch vendor kernel + - iperf localhost (gbit/sec) ~3.7 ~6.4 ~5.4 + - ioping tmpfs (iops) ~163k ~206k ~179k + - ioping tmpfs (mib/s) ~636 ~805 ~699 + +The idle power consumption is negatively impacted (proportionally less +than the performance gain), and we are still performing better than +the vendor kernel here: + + without patch with patch vendor kernel + - power consumption idle (W) ~2.4 ~3.2 ~4.4 + - power consumption busy (W) ~8.6 ~8.3 ~8.6 + +There is still room for improvement regarding the value of these +thresholds, they were chosen to mimic the vendor kernel. + +This patch only impacts Armada XP SOCs and was tested on Online Labs +C1 boards. A similar approach can be taken to improve the performances +of the Armada 370 and Armada 38x SOCs. + +Thanks a lot to Thomas Petazzoni, Gregory Clement and Willy Tarreau +for the discussions and tips around this topic. + +Signed-off-by: Sebastien Rannou +Signed-off-by: Daniel Lezcano +Acked-by: Gregory CLEMENT +--- + drivers/cpuidle/cpuidle-mvebu-v7.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/cpuidle/cpuidle-mvebu-v7.c ++++ b/drivers/cpuidle/cpuidle-mvebu-v7.c +@@ -50,18 +50,18 @@ static struct cpuidle_driver armadaxp_id + .states[0] = ARM_CPUIDLE_WFI_STATE, + .states[1] = { + .enter = mvebu_v7_enter_idle, +- .exit_latency = 10, ++ .exit_latency = 100, + .power_usage = 50, +- .target_residency = 100, ++ .target_residency = 1000, + .flags = CPUIDLE_FLAG_TIME_VALID, + .name = "MV CPU IDLE", + .desc = "CPU power down", + }, + .states[2] = { + .enter = mvebu_v7_enter_idle, +- .exit_latency = 100, ++ .exit_latency = 1000, + .power_usage = 5, +- .target_residency = 1000, ++ .target_residency = 10000, + .flags = CPUIDLE_FLAG_TIME_VALID | + MVEBU_V7_FLAG_DEEP_IDLE, + .name = "MV CPU DEEP IDLE",