WSL2-Linux-Kernel/arch
Gautham R. Shenoy 09206b600c powernv: Pass PSSCR value and mask to power9_idle_stop
The power9_idle_stop method currently takes only the requested stop
level as a parameter and picks up the rest of the PSSCR bits from a
hand-coded macro. This is not a very flexible design, especially when
the firmware has the capability to communicate the psscr value and the
mask associated with a particular stop state via device tree.

This patch modifies the power9_idle_stop API to take as parameters the
PSSCR value and the PSSCR mask corresponding to the stop state that
needs to be set. These PSSCR value and mask are respectively obtained
by parsing the "ibm,cpu-idle-state-psscr" and
"ibm,cpu-idle-state-psscr-mask" fields from the device tree.

In addition to this, the patch adds support for handling stop states
for which ESL and EC bits in the PSSCR are zero. As per the
architecture, a wakeup from these stop states resumes execution from
the subsequent instruction as opposed to waking up at the System
Vector.

The older firmware sets only the Requested Level (RL) field in the
psscr and psscr-mask exposed in the device tree. For older firmware
where psscr-mask=0xf, this patch will set the default sane values that
the set for for remaining PSSCR fields (i.e PSLL, MTL, ESL, EC, and
TR). For the new firmware, the patch will validate that the invariants
required by the ISA for the psscr values are maintained by the
firmware.

This skiboot patch that exports fully populated PSSCR values and the
mask for all the stop states can be found here:
https://lists.ozlabs.org/pipermail/skiboot/2016-September/004869.html

[Optimize the number of instructions before entering STOP with
ESL=EC=0, validate the PSSCR values provided by the firimware
maintains the invariants required as per the ISA suggested by Balbir
Singh]

Acked-by: Balbir Singh <bsingharora@gmail.com>
Signed-off-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2017-01-31 08:32:13 +11:00
..
alpha clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
arc ARC: Revert "ARC: mm: IOC: Don't enable IOC by default" 2017-01-18 19:21:06 -08:00
arm KVM fixes for v4.10-rc5 2017-01-20 14:19:34 -08:00
arm64 KVM fixes for v4.10-rc5 2017-01-20 14:19:34 -08:00
avr32 clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
blackfin Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-12-25 14:30:04 -08:00
c6x clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
cris Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
frv Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
h8300 Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
hexagon clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
ia64 clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
m32r Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
m68k clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
metag Merge branch 'smp-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-12-25 14:05:56 -08:00
microblaze clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
mips KVM fixes for v4.10-rc3 2017-01-06 15:27:17 -08:00
mn10300 clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
nios2 clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
openrisc openrisc: Add _text symbol to fix ksym build error 2017-01-02 10:35:11 +09:00
parisc parisc: Add line-break when printing segfault info 2017-01-02 18:07:25 +01:00
powerpc powernv: Pass PSSCR value and mask to power9_idle_stop 2017-01-31 08:32:13 +11:00
s390 KVM fixes for v4.10-rc5 2017-01-20 14:19:34 -08:00
score Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
sh Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
sparc clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
tile Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
um clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
unicore32 clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
x86 Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2017-01-22 12:47:48 -08:00
xtensa Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-12-25 14:30:04 -08:00
.gitignore
Kconfig powerpc: ima: get the kexec buffer passed by the previous kernel 2016-12-20 09:48:40 -08:00