[Skiboot] [PATCH 13/14] hw/slw: only enable supported STOP states

Michael Neuling mikey at neuling.org
Tue Feb 7 21:12:40 AEDT 2017


On Thu, 2017-01-12 at 14:54 +1100, Oliver O'Halloran wrote:
> This patch adds parsing the ibm,enabled-stop-levels field when building
> the /ibm,opal/power-mgt/ node so that only the STOP levels that have
> been advertised by firmware are used.

(I realise this is upstream but....)

So putting this in /ibm,opal doesn't work for the device tree entry point.  opal
adds ibm,opal, so if the input device tree has this, opal will barf with
duplicate nodes. 

We need to put this somewhere else.

Mikey

> 
> Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
> ---
>  hw/slw.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/hw/slw.c b/hw/slw.c
> index 78a3e37f867a..579c357a952a 100644
> --- a/hw/slw.c
> +++ b/hw/slw.c
> @@ -637,6 +637,7 @@ void add_cpu_idle_state_properties(void)
>  	u64 *pm_ctrl_reg_val_buf;
>  	u64 *pm_ctrl_reg_mask_buf;
>  	u32 supported_states_mask;
> +	u32 stop_levels;
>  
>  	/* Variables to track buffer length */
>  	u8 name_buf_len;
> @@ -676,6 +677,12 @@ void add_cpu_idle_state_properties(void)
>  		states = power9_cpu_idle_states;
>  		nr_states = ARRAY_SIZE(power9_cpu_idle_states);
>  		has_stop_inst = true;
> +
> +		stop_levels = dt_prop_get_u32_def(power_mgt,
> +			"ibm,enabled-stop-levels", 0);
> +		if (!stop_levels)
> +			prerror("SLW: No stop levels available. Power saving
> is disabled!\n");
> +
>  	} else if (chip->type == PROC_CHIP_P8_MURANO ||
>  	    chip->type == PROC_CHIP_P8_VENICE ||
>  	    chip->type == PROC_CHIP_P8_NAPLES) {
> @@ -754,6 +761,13 @@ void add_cpu_idle_state_properties(void)
>  		if (!(states[i].flags & supported_states_mask))
>  			continue;
>  
> +		/* We can only use the stop levels that HB has made available
> */
> +		if (has_stop_inst) {
> +			u32 level = 1ul << states[i].pm_ctrl_reg_val;
> +			if (!(stop_levels & level))
> +				continue;
> +		}
> +
>  		/*
>  		 * If a state is supported add each of its property
>  		 * to its corresponding property buffer.


More information about the Skiboot mailing list