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

Michael Neuling mikey at neuling.org
Mon Mar 5 10:40:46 AEDT 2018


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.

I can add something like that if you like?

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