aboutsummaryrefslogtreecommitdiff
path: root/hw/slw.c
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2017-01-12 14:54:12 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-01-16 09:18:05 +1100
commitc3ea33f173ec3dc021d84372b50f1c13dd4b07ed (patch)
tree603631de4c62585b5cfe10ff95ef2a3435d2e664 /hw/slw.c
parenta78ea5d59cc698757ffcd65e4ac78240f9b7e389 (diff)
downloadskiboot-c3ea33f173ec3dc021d84372b50f1c13dd4b07ed.zip
skiboot-c3ea33f173ec3dc021d84372b50f1c13dd4b07ed.tar.gz
skiboot-c3ea33f173ec3dc021d84372b50f1c13dd4b07ed.tar.bz2
hw/slw: only enable supported STOP states
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>
Diffstat (limited to 'hw/slw.c')
-rw-r--r--hw/slw.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/hw/slw.c b/hw/slw.c
index 78a3e37..579c357 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.