[Skiboot] [PATCH V4] slw: Define stop idle states for P9 DD1
Vaidyanathan Srinivasan
svaidy at linux.vnet.ibm.com
Wed Mar 8 14:21:59 AEDT 2017
* Shilpa Bhat <shilpa.bhat at linux.vnet.ibm.com> [2017-03-07 11:13:58]:
> Only stop[0,1]_lite idle states are supported in DD1. And stop1 with
> ESL=EC=1 is used for CPU hotplug in DD1.
>
> Signed-off-by: Shilpasri G Bhat <shilpa.bhat at linux.vnet.ibm.com>
Reviewed-by: Vaidyanathan Srinivasan <svaidy at linux.vnet.ibm.com>
> ---
> Changes from V3:
> - Define new array of idle states for P9 DD1.
>
> Changes from V2:
> - Disbale Stop2 state for DD1
>
> Changes from V1:
> - Removed only_lite variable.
> - Moved the ESL check inside "if (has_stop_inst)"
> hw/slw.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
> 1 file changed, 57 insertions(+), 4 deletions(-)
>
> diff --git a/hw/slw.c b/hw/slw.c
> index bea1028..210be8d 100644
> --- a/hw/slw.c
> +++ b/hw/slw.c
> @@ -621,6 +621,55 @@ static struct cpu_idle_states power9_cpu_idle_states[] = {
> .pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK },
>
> };
> +
> +/* Idle states supported for P9 DD1 */
> +static struct cpu_idle_states power9_dd1_cpu_idle_states[] = {
> + {
> + .name = "stop0_lite",
> + .latency_ns = 200,
> + .residency_ns = 2000,
> + .flags = 0*OPAL_PM_DEC_STOP \
> + | 0*OPAL_PM_TIMEBASE_STOP \
> + | 0*OPAL_PM_LOSE_USER_CONTEXT \
> + | 0*OPAL_PM_LOSE_HYP_CONTEXT \
> + | 0*OPAL_PM_LOSE_FULL_CONTEXT \
> + | 1*OPAL_PM_STOP_INST_FAST,
> + .pm_ctrl_reg_val = OPAL_PM_PSSCR_RL(0) \
> + | OPAL_PM_PSSCR_MTL(3) \
> + | OPAL_PM_PSSCR_TR(3),
> + .pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK },
> + {
> + .name = "stop1_lite",
> + .latency_ns = 4900,
> + .residency_ns = 49000,
> + .flags = 0*OPAL_PM_DEC_STOP \
> + | 0*OPAL_PM_TIMEBASE_STOP \
> + | 1*OPAL_PM_LOSE_USER_CONTEXT \
> + | 0*OPAL_PM_LOSE_HYP_CONTEXT \
> + | 0*OPAL_PM_LOSE_FULL_CONTEXT \
> + | 1*OPAL_PM_STOP_INST_FAST,
> + .pm_ctrl_reg_val = OPAL_PM_PSSCR_RL(1) \
> + | OPAL_PM_PSSCR_MTL(3) \
> + | OPAL_PM_PSSCR_TR(3),
> + .pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK },
> + {
Cpuidle will use the above two states.
> + .name = "stop1",
> + .latency_ns = 2050000,
> + .residency_ns = 50000,
> + .flags = 0*OPAL_PM_DEC_STOP \
> + | 0*OPAL_PM_TIMEBASE_STOP \
> + | 1*OPAL_PM_LOSE_USER_CONTEXT \
> + | 0*OPAL_PM_LOSE_HYP_CONTEXT \
> + | 0*OPAL_PM_LOSE_FULL_CONTEXT \
> + | 1*OPAL_PM_STOP_INST_FAST,
> + .pm_ctrl_reg_val = OPAL_PM_PSSCR_RL(1) \
> + | OPAL_PM_PSSCR_MTL(3) \
> + | OPAL_PM_PSSCR_TR(3) \
> + | OPAL_PM_PSSCR_ESL \
> + | OPAL_PM_PSSCR_EC,
> + .pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK }
> +};
Cpuhotplug will use the stop1 with ESL=1 and the decision in
(upstream) kernel is made using the larger latency value. Hence no
kernel change is required to pick the above ESL state for hotplug
only.
--Vaidy
More information about the Skiboot
mailing list