aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2018-05-11 19:06:58 +1000
committerStewart Smith <stewart@linux.ibm.com>2018-05-24 04:03:19 -0500
commit15d9f319978211045651a8c960db6a46ab52b1f4 (patch)
tree7ee91d4895ac13c5c07cf20431a4b7dae592881d /core
parent08992151641a24db5ff52ce3a4bd18714d5be700 (diff)
downloadskiboot-15d9f319978211045651a8c960db6a46ab52b1f4.zip
skiboot-15d9f319978211045651a8c960db6a46ab52b1f4.tar.gz
skiboot-15d9f319978211045651a8c960db6a46ab52b1f4.tar.bz2
cpu: Use STOP1 on POWER9 for idle/sleep inside OPAL
The current code requests STOP3, which means it gets STOP2 in practice. STOP2 has proven to occasionally be unreliable depending on FW version and chip revision, it also requires a functional CME, so instead, let's use STOP1. The difference is rather minimum for something that is only used a few seconds during boot. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
Diffstat (limited to 'core')
-rw-r--r--core/cpu.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/core/cpu.c b/core/cpu.c
index 6b604c7..2ee9056 100644
--- a/core/cpu.c
+++ b/core/cpu.c
@@ -409,14 +409,14 @@ static void cpu_idle_p9(enum cpu_wake_cause wake_on)
if (sreset_enabled) {
/* stop with EC=1 (sreset) and ESL=1 (enable thread switch). */
- /* PSSCR SD=0 ESL=1 EC=1 PSSL=0 TR=3 MTL=0 RL=3 */
+ /* PSSCR SD=0 ESL=1 EC=1 PSSL=0 TR=3 MTL=0 RL=1 */
psscr = PPC_BIT(42) | PPC_BIT(43) |
- PPC_BITMASK(54, 55) | PPC_BITMASK(62,63);
+ PPC_BITMASK(54, 55) | PPC_BIT(63);
enter_p9_pm_state(psscr);
} else {
/* stop with EC=0 (resumes) which does not require sreset. */
- /* PSSCR SD=0 ESL=0 EC=0 PSSL=0 TR=3 MTL=0 RL=3 */
- psscr = PPC_BITMASK(54, 55) | PPC_BITMASK(62,63);
+ /* PSSCR SD=0 ESL=0 EC=0 PSSL=0 TR=3 MTL=0 RL=1 */
+ psscr = PPC_BITMASK(54, 55) | PPC_BIT(63);
enter_p9_pm_lite_state(psscr);
}