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

Cyril Bur cyrilbur at gmail.com
Mon Mar 5 10:57:52 AEDT 2018


On Mon, 2018-03-05 at 10:40 +1100, Michael Neuling 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.
> 
> I can add something like that if you like?
> 

Big thumbs up.

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