[Skiboot] [PATCH] Tie tm-suspend fw-feature and opal_reinit_cpus() together
Cyril Bur
cyrilbur at gmail.com
Mon Mar 5 10:21:08 AEDT 2018
On Fri, 2018-03-02 at 14:08 +1100, Michael Neuling wrote:
> Currently opal_reinit_cpus(OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED)
> always returns OPAL_UNSUPPORTED.
I wonder if more of a mention of how the mode is set by hostboot on IPL
. I seem unable to actually come up with that I feel is missing.
>
> This ties the tm suspend fw-feature to the
> opal_reinit_cpus(OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED) so that when tm
> suspend is disabled, we correctly report it to the kernel. For
> backwards compatibility, it's assumed tm suspend is available if the
> fw-feature is not present.
>
> Signed-off-by: Michael Neuling <mikey at neuling.org>
Reviewed-by: Cyril Bur <cyril.bur at au1.ibm.com>
> ---
> core/cpu.c | 27 ++++++++++++++++++++++-----
> 1 file changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/core/cpu.c b/core/cpu.c
> index 2eab522553..7a9dbe5d70 100644
> --- a/core/cpu.c
> +++ b/core/cpu.c
> @@ -57,6 +57,7 @@ static bool ipi_enabled;
> static bool pm_enabled;
> static bool current_hile_mode;
> static bool current_radix_mode;
> +static bool tm_suspend_enabled;
>
> unsigned long cpu_secondary_start __force_data = 0;
>
> @@ -1012,6 +1013,21 @@ static int find_dec_bits(void)
> return bits;
> }
>
> +static void init_tm_suspend_mode_property(void)
> +{
> + struct dt_node *node;
> +
> + /* If we don't find anything, assume TM suspend is enabled */
> + tm_suspend_enabled = true;
> +
> + node = dt_find_by_path(dt_root, "/ibm,opal/fw-features/tm-suspend-mode");
> + if (!node)
> + return;
> +
> + if (dt_find_property(node, "disabled"))
> + tm_suspend_enabled = false;
> +}
> +
> void init_all_cpus(void)
> {
> struct dt_node *cpus, *cpu;
> @@ -1021,6 +1037,8 @@ void init_all_cpus(void)
> cpus = dt_find_by_path(dt_root, "/cpus");
> assert(cpus);
>
> + init_tm_suspend_mode_property();
> +
> /* Iterate all CPUs in the device-tree */
> dt_for_each_child(cpus, cpu) {
> unsigned int pir, server_no, chip_id;
> @@ -1436,11 +1454,10 @@ static int64_t opal_reinit_cpus(uint64_t flags)
> if (flags & OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED) {
> flags &= ~OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED;
>
> - /*
> - * Pending a hostboot change we can't determine the status of
> - * this, so it always fails.
> - */
> - rc = OPAL_UNSUPPORTED;
> + if (tm_suspend_enabled)
> + rc = OPAL_UNSUPPORTED;
> + else
> + rc = OPAL_SUCCESS;
> }
>
> /* Handle P8 DD1 SLW reinit */
More information about the Skiboot
mailing list