Re: [PATCH v3 0/3] powernv:stop: Use psscr_val,mask provided by firmware
From: Balbir Singh <bsingharora@gmail.com>
Date: 2016-11-29 06:34:21
Also in:
linux-pm, lkml
On 10/11/16 18:54, Gautham R. Shenoy wrote:
From: "Gautham R. Shenoy" <redacted> This is the third iteration of the patchset to use the psscr_val and psscr_mask provided by the firmware for each of the stop states. The previous version can be found here: [v2]: https://lkml.org/lkml/2016/10/27/143 [v1]: https://lkml.org/lkml/2016/9/29/45 This version fixes a couple of bugs pertaining to strncpy and initialization of the target-residency values of nap and sleep which were pointed out by Paul and Oliver in the earlier version. Synopsis ========== In the current implementation, the code for ISA v3.0 stop implementation has a couple of shortcomings. a) The code hand-codes the values for ESL,EC,TR,MTL bits of PSSCR and uses only the RL field from the firmware. While this is not incorrect, since the hand-coded values are legitimate, it is not a very flexible design since the firmware has the capability to communicate these values via the "ibm,cpu-idle-state-psscr" and "ibm,cpu-idle-state-psscr-mask" properties. In case where the firmware provides values for these fields that is different from the hand-coded values, the current code will not work as intended. b) Due to issue a), the current code assumes that ESL=EC=1 for all the stop states and hence the wakeup from the stop instruction will happen at 0x100, the system-reset vector. However, the ISA v3.0 allows the ESL=EC=0 behaviour where the corresponding stop-state loses no state and wakes up from the subsequent instruction. The current code doesn't handle this case.
Sounds reasonable Balbir Singh.