Skip to content

Commit

Permalink
hw/slw: only enable supported STOP states
Browse files Browse the repository at this point in the history
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.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
  • Loading branch information
oohal authored and stewartsmith committed Jan 15, 2017
1 parent a78ea5d commit c3ea33f
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions hw/slw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit c3ea33f

Please sign in to comment.