[Skiboot] [RFC 4/4] SLW: Enable Stop4 as the deepest idle state

Oliver O'Halloran oohall at gmail.com
Mon May 8 15:44:54 AEST 2017


On Thu, May 4, 2017 at 5:16 PM, Akshay Adiga
<akshay.adiga at linux.vnet.ibm.com> wrote:
> Adding stop4 to device tree as the deepest idle state for power9 dd1.
> The latency is choosen such that they are not chosen for cpuidle and
> will only be used for cpuhotplug.
>
> Use a common variable has_wakeup_engine instead of has_slw to tell if
> the
> a) SLW image is populated in case of power8
> b) CME image is populated in case of power9
>
> Currently we expect CME to be loaded if homer address is known ( except
> for simulators)
>
> Signed-off-by: Akshay Adiga <akshay.adiga at linux.vnet.ibm.com>
> ---
>  hw/slw.c | 29 ++++++++++++++++++++++++-----
>  1 file changed, 24 insertions(+), 5 deletions(-)
>
> diff --git a/hw/slw.c b/hw/slw.c
> index aeb8388..93d5aae 100644
> --- a/hw/slw.c
> +++ b/hw/slw.c
> @@ -700,6 +700,22 @@ static struct cpu_idle_states power9_dd1_cpu_idle_states[] = {
>                                  | OPAL_PM_PSSCR_TR(3) \
>                                  | OPAL_PM_PSSCR_ESL \
>                                  | OPAL_PM_PSSCR_EC,
> +               .pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK },
> +       {
> +               .name = "stop4",
> +               .latency_ns = 2060000,
> +               .residency_ns = 1000000,
> +               .flags = 1*OPAL_PM_DEC_STOP \
> +                      | 1*OPAL_PM_TIMEBASE_STOP  \
> +                      | 1*OPAL_PM_LOSE_USER_CONTEXT \
> +                      | 1*OPAL_PM_LOSE_HYP_CONTEXT \
> +                      | 1*OPAL_PM_LOSE_FULL_CONTEXT \
> +                      | 1*OPAL_PM_STOP_INST_DEEP,
> +               .pm_ctrl_reg_val = OPAL_PM_PSSCR_RL(4) \
> +                                | OPAL_PM_PSSCR_MTL(7) \
> +                                | OPAL_PM_PSSCR_TR(3) \
> +                                | OPAL_PM_PSSCR_ESL \
> +                                | OPAL_PM_PSSCR_EC,
>                 .pm_ctrl_reg_mask = OPAL_PM_PSSCR_MASK }
>  };
>
> @@ -712,7 +728,7 @@ void add_cpu_idle_state_properties(void)
>         int nr_states;
>
>         bool can_sleep = true;
> -       bool has_slw = true;
> +       bool has_wakeup_engine = true;  /* p8=SLW; p9=CME */
>         bool has_stop_inst = false;
>         u8 i;
>
> @@ -802,8 +818,11 @@ void add_cpu_idle_state_properties(void)
>         }
>
>         /* Enable deep idle states only if slw image is intact */
> -       has_slw = (chip->slw_base && chip->slw_bar_size &&
> -                       chip->slw_image_size);
> +       if (proc_gen == proc_gen_p8)
> +               has_wakeup_engine = (chip->slw_base && chip->slw_bar_size &&
> +                               chip->slw_image_size);
> +       else /*if (proc_gen == proc_gen_p9)*/
> +               has_wakeup_engine = !(QUIRK_MAMBO_CALLOUTS);

QUIRK_MAMBO_CALLOUTS is a constant so this is always false. If you
want to query if the currently running system has that quirk use:
chip_quirk(QUIRK_MAMBO_CALLOUTS)

>
>         /*
>          * Currently we can't append strings and cells to dt properties.
> @@ -831,7 +850,7 @@ void add_cpu_idle_state_properties(void)
>         if (has_stop_inst) {
>                 /* Power 9 / POWER ISA 3.0 */
>                 supported_states_mask = OPAL_PM_STOP_INST_FAST;
> -               if (has_slw)
> +               if (has_wakeup_engine)
>                         supported_states_mask |= OPAL_PM_STOP_INST_DEEP;
>         } else {
>                 /* Power 7 and Power 8 */
> @@ -839,7 +858,7 @@ void add_cpu_idle_state_properties(void)
>                 if (can_sleep)
>                         supported_states_mask |= OPAL_PM_SLEEP_ENABLED |
>                                                 OPAL_PM_SLEEP_ENABLED_ER1;
> -               if (has_slw)
> +               if (has_wakeup_engine)
>                         supported_states_mask |= OPAL_PM_WINKLE_ENABLED;
>         }
>         for (i = 0; i < nr_states; i++) {
> --
> 2.5.5
>
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot


More information about the Skiboot mailing list