[Skiboot] [PATCH] Tie tm-suspend fw-feature and opal_reinit_cpus() together

Oliver oohall at gmail.com
Mon Mar 5 10:56:11 AEDT 2018


On Mon, Mar 5, 2018 at 10:40 AM, Michael Neuling <mikey at neuling.org> wrote:
> On Mon, 2018-03-05 at 10:21 +1100, Cyril Bur wrote:
>> 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.
>
> Currently it's an IPL time init setting which is tied to the DD revision of the
> chip.  It's only on for DD2.1 currently.
>
> Long term, we'd like to be able to switch this dynamically, but we are not there
> yet.

IIRC the plan was the have some call to PRD that would patch the core
inits in the HCODE image to allow this sort of tweaking. I have no
idea what the ETA on that would be.

> I can add something like that if you like?

Add what?

>
>> >
>> > 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>
>
> Thanks
>
> Mikey
>
>>
>> > ---
>> >  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