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 <leitec@staticky.com> Signed-off-by: Imre Kaloz <kaloz@openwrt.org> SVN-Revision: 45294master
parent
503d845522
commit
f60fea1923
@ -0,0 +1,38 @@ |
|||||||
|
From 43b68879de27b1993518687fbc6013da80cdcbfe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gregory CLEMENT <gregory.clement@free-electrons.com>
|
||||||
|
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 <fbf@libero.it>
|
||||||
|
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
|
||||||
|
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
|
||||||
|
---
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,66 @@ |
|||||||
|
From ce6031c89a35cffd5a5992b08377b77f49a004b9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sebastien Rannou <mxs@sbrk.org>
|
||||||
|
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 <mxs@sbrk.org>
|
||||||
|
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
|
||||||
|
Acked-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
|
||||||
|
---
|
||||||
|
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",
|
Loading…
Reference in new issue