diff options
author | Christian Geddes <crgeddes@us.ibm.com> | 2018-02-13 11:14:18 -0600 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2018-02-14 17:43:50 -0500 |
commit | 864e746259e46ef90ffcf8dcdc7273bd8a1ee7d0 (patch) | |
tree | 50f05181afd61a25f50baa69548f3f1be4c3a85b | |
parent | d9c127dca8312f119b379c83b361216b910f6748 (diff) | |
download | talos-hostboot-864e746259e46ef90ffcf8dcdc7273bd8a1ee7d0.tar.gz talos-hostboot-864e746259e46ef90ffcf8dcdc7273bd8a1ee7d0.zip |
Add attribute to give platform more control over PM_RESET
The PM_RESET hwp calls special wakeup enable on all EX targets, then
will clear auto-special wakeup bit on the core if special wakeup is done.
In some cases hostboot does not want these steps of the PM_RESET. This
attribute gives the platform the ability to decide if they want to enable
special wakeup and clear autowakeup on the cores during PM_RESET
CQ:SW412666
Change-Id: I8f2e40f4b122f3ff6a048fa6931a1e47f89d3e4f
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53953
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com>
Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53976
4 files changed, 37 insertions, 5 deletions
diff --git a/src/import/chips/p9/procedures/xml/attribute_info/pm_plat_attributes.xml b/src/import/chips/p9/procedures/xml/attribute_info/pm_plat_attributes.xml index 464c01d81..c47d19735 100644 --- a/src/import/chips/p9/procedures/xml/attribute_info/pm_plat_attributes.xml +++ b/src/import/chips/p9/procedures/xml/attribute_info/pm_plat_attributes.xml @@ -5,7 +5,7 @@ <!-- --> <!-- OpenPOWER HostBoot Project --> <!-- --> -<!-- Contributors Listed Below - COPYRIGHT 2015,2017 --> +<!-- Contributors Listed Below - COPYRIGHT 2015,2018 --> <!-- [+] International Business Machines Corp. --> <!-- --> <!-- --> @@ -2213,4 +2213,20 @@ <default>NO_FALLBACK</default> </attribute> <!-- ********************************************************************* --> + <attribute> + <id>ATTR_SKIP_WAKEUP</id> + <targetType>TARGET_TYPE_SYSTEM</targetType> + <description> + The PM_RESET hwp calls special wakeup enable on all EX targets, then + will clear auto-special wakeup bit on the core if special wakeup is done. + In some cases hostboot does not want these steps of the PM_RESET. This + attribute gives the platform the ability to decide if they want to enable + special wakeup and clear autowakeup on the cores during PM_RESET + </description> + <valueType>uint8</valueType> + <writeable/> + <platInit/> + <default>0</default> + </attribute> + <!-- ********************************************************************* --> </attributes> diff --git a/src/usr/isteps/istep16/call_host_activate_slave_cores.C b/src/usr/isteps/istep16/call_host_activate_slave_cores.C index a6bff1970..865a4f5d0 100644 --- a/src/usr/isteps/istep16/call_host_activate_slave_cores.C +++ b/src/usr/isteps/istep16/call_host_activate_slave_cores.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2017 */ +/* Contributors Listed Below - COPYRIGHT 2015,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -79,6 +79,9 @@ void* call_host_activate_slave_cores (void *io_pArgs) TargetHandleList l_cores; getAllChiplets(l_cores, TYPE_CORE); + TARGETING::Target* sys = NULL; + TARGETING::targetService().getTopLevelTarget(sys); + assert( sys != NULL ); uint32_t l_numCores = 0; for(TargetHandleList::const_iterator @@ -99,9 +102,7 @@ void* call_host_activate_slave_cores (void *io_pArgs) l_processor->getAttr<TARGETING::ATTR_FABRIC_GROUP_ID>(); FABRIC_CHIP_ID_ATTR l_chipId = l_processor->getAttr<TARGETING::ATTR_FABRIC_CHIP_ID>(); - TARGETING::Target* sys = NULL; - TARGETING::targetService().getTopLevelTarget(sys); - assert( sys != NULL ); + const fapi2::Target<fapi2::TARGET_TYPE_CORE> l_fapi2_coreTarget( const_cast<TARGETING::Target*> (*l_core)); @@ -258,6 +259,11 @@ void* call_host_activate_slave_cores (void *io_pArgs) } #endif + //Set SKIP_WAKEUP to false after all cores are powered on (16.2) + //If this is not set false, PM_RESET will fail to enable special wakeup. + // PM_RESET is expected to enable special_wakeup after all the cores powered on + sys->setAttr<ATTR_SKIP_WAKEUP>(0); + // Now that the slave cores are running, we need to include them in // multicast scom operations SCOM::enableSlaveCoreMulticast(); diff --git a/src/usr/targeting/common/xmltohb/hb_customized_attrs.xml b/src/usr/targeting/common/xmltohb/hb_customized_attrs.xml index 7b6d8d357..abc103efc 100644 --- a/src/usr/targeting/common/xmltohb/hb_customized_attrs.xml +++ b/src/usr/targeting/common/xmltohb/hb_customized_attrs.xml @@ -662,6 +662,10 @@ <id>LINK_TRAIN</id> <writeable/> </attribute> + <attribute> + <id>SKIP_WAKEUP</id> + <persistency>volatile-zeroed</persistency> + </attribute> <!-- ===================================================================== End of customizations definitions ================================================================= --> diff --git a/src/usr/targeting/targetservicestart.C b/src/usr/targeting/targetservicestart.C index 740470a53..882c4391a 100755 --- a/src/usr/targeting/targetservicestart.C +++ b/src/usr/targeting/targetservicestart.C @@ -344,6 +344,12 @@ static void initializeAttributes(TargetService& i_targetService, i_targetService.getTopLevelTarget(l_pTopLevel); if(l_pTopLevel) { + //Set SKIP_WAKEUP to true until all cores are powered on (16.2) + //If this is not set to true, PM_RESET , which is called between + //now and istep 16.2 in various configurations and IPL flows will attempt + //to enable special wakeup on cores that are not yet powered + l_pTopLevel->setAttr<ATTR_SKIP_WAKEUP>(1); + Target* l_pMasterProcChip = NULL; i_targetService.masterProcChipTargetHandle(l_pMasterProcChip); |