[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