diff options
Diffstat (limited to 'src/usr/isteps/istep06')
-rw-r--r-- | src/usr/isteps/istep06/call_host_update_master_tpm.C | 28 | ||||
-rw-r--r-- | src/usr/isteps/istep06/call_host_voltage_config.C | 6 | ||||
-rw-r--r-- | src/usr/isteps/istep06/host_discover_targets.C | 65 | ||||
-rw-r--r-- | src/usr/isteps/istep06/host_gard.C | 1 | ||||
-rw-r--r-- | src/usr/isteps/istep06/host_init_fsi.C | 1 |
5 files changed, 89 insertions, 12 deletions
diff --git a/src/usr/isteps/istep06/call_host_update_master_tpm.C b/src/usr/isteps/istep06/call_host_update_master_tpm.C index 284d43450..fa374f279 100644 --- a/src/usr/isteps/istep06/call_host_update_master_tpm.C +++ b/src/usr/isteps/istep06/call_host_update_master_tpm.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2018 */ +/* Contributors Listed Below - COPYRIGHT 2015,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -31,6 +31,8 @@ #include <trustedbootif.H> #include <initservice/isteps_trace.H> #include <secureboot/service.H> +#include <secureboot/phys_presence_if.H> +#include <config.h> namespace ISTEP_06 { @@ -39,7 +41,7 @@ void* call_host_update_master_tpm( void *io_pArgs ) { ISTEP_ERROR::IStepError l_stepError; - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_host_update_master_tpm entry" ); errlHndl_t l_err = nullptr; @@ -67,10 +69,28 @@ void* call_host_update_master_tpm( void *io_pArgs ) ERRORLOG::errlCommit( l_err, SECURE_COMP_ID ); } - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_host_update_master_tpm exit" ); + // Check for Physical Presence +#ifdef CONFIG_PHYS_PRES_PWR_BUTTON + l_err = SECUREBOOT::detectPhysPresence(); + if (l_err) + { + // @TODO RTC 210301 - Handle Error Log Correctly, but for now + // just delete it + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_host_update_master_tpm: Error back from " + "SECUREBOOT::detectPhysPresence: rc=0x%X, plid=0x%X. " + "Deleting error for now", + ERRL_GETRC_SAFE(l_err), ERRL_GETPLID_SAFE(l_err)); + delete l_err; + l_err = nullptr; + } +#endif + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_host_update_master_tpm exit" ); return l_stepError.getErrorHandle(); + + } }; diff --git a/src/usr/isteps/istep06/call_host_voltage_config.C b/src/usr/isteps/istep06/call_host_voltage_config.C index 6cb647e9b..5e7b0eb94 100644 --- a/src/usr/isteps/istep06/call_host_voltage_config.C +++ b/src/usr/isteps/istep06/call_host_voltage_config.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2016,2018 */ +/* Contributors Listed Below - COPYRIGHT 2016,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -489,7 +489,7 @@ void* call_host_voltage_config( void *io_pArgs ) l_err->addHwCallout(l_proc, HWAS::SRCI_PRIORITY_HIGH, - HWAS::DECONFIG, + HWAS::DELAYED_DECONFIG, HWAS::GARD_NULL ); // Create IStep error log and @@ -538,7 +538,7 @@ void* call_host_voltage_config( void *io_pArgs ) l_err->addHwCallout(l_proc, HWAS::SRCI_PRIORITY_HIGH, - HWAS::DECONFIG, + HWAS::DELAYED_DECONFIG, HWAS::GARD_NULL ); // Create IStep error log and diff --git a/src/usr/isteps/istep06/host_discover_targets.C b/src/usr/isteps/istep06/host_discover_targets.C index 89e0dd8dd..7884056c1 100644 --- a/src/usr/isteps/istep06/host_discover_targets.C +++ b/src/usr/isteps/istep06/host_discover_targets.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2018 */ +/* Contributors Listed Below - COPYRIGHT 2015,2019 */ /* [+] Google Inc. */ /* [+] International Business Machines Corp. */ /* */ @@ -59,6 +59,7 @@ //SBE interfacing #include <sbeio/sbeioif.H> #include <sys/misc.h> +#include <sbe/sbeif.H> #include <p9_query_core_access_state.H> #include <p9_setup_sbe_config.H> @@ -618,13 +619,71 @@ void* host_discover_targets( void *io_pArgs ) errlCommit (l_err, ISTEP_COMP_ID); } } // end if (l_pMasterProcChip) - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "host_discover_targets exit" ); #ifdef CONFIG_PRINT_SYSTEM_INFO print_system_info(); #endif + // Handle the case where we don't have a valid memory map swap victim due + // to a module swap - See TARGETING::adjustMemoryMap() + if( l_pTopLevel->getAttr<TARGETING::ATTR_FORCE_SBE_UPDATE>() + == TARGETING::FORCE_SBE_UPDATE_BAR_MISMATCH ) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "Forcing SBE update to handle swapped memory map" ); + l_err = SBE::updateProcessorSbeSeeproms(); + if(l_err) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "host_discover_targets: Error calling updateProcessorSbeSeeproms"); + l_stepError.addErrorDetails( l_err ); + errlCommit( l_err, ISTEP_COMP_ID ); + } + + // We should never get here, if we do that means the SBE update didn't + // actually happen. That is a problem since we're currently running + // with mismatched BAR data + TARGETING::ATTR_XSCOM_BASE_ADDRESS_type l_xscom = + l_pMasterProcChip->getAttr<TARGETING::ATTR_XSCOM_BASE_ADDRESS>(); + TARGETING::ATTR_PROC_EFF_FABRIC_GROUP_ID_type l_group = + l_pMasterProcChip->getAttr<TARGETING::ATTR_PROC_EFF_FABRIC_GROUP_ID>(); + TARGETING::ATTR_PROC_EFF_FABRIC_CHIP_ID_type l_chip = + l_pMasterProcChip->getAttr<TARGETING::ATTR_PROC_EFF_FABRIC_CHIP_ID>(); + /*@ + * @errortype + * @moduleid ISTEP::MOD_DISCOVER_TARGETS + * @reasoncode ISTEP::RC_CANNOT_BOOT_WITH_MISMATCHED_BARS + * @userdata1 Current XSCOM BAR + * @userdata2[0-31] Desired ATTR_PROC_EFF_FABRIC_GROUP_ID + * @userdata2[32:63] Desired ATTR_PROC_EFF_FABRIC_GROUP_ID + * @devdesc Not able to update the SBE to correct the BAR mismatch + * @custdesc Required module update failed + */ + l_err = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, + ISTEP::MOD_DISCOVER_TARGETS, + ISTEP::RC_CANNOT_BOOT_WITH_MISMATCHED_BARS, + l_xscom, + TWO_UINT32_TO_UINT64( + l_group, + l_chip)); + + l_err->addHwCallout( l_pMasterProcChip, + HWAS::SRCI_PRIORITY_HIGH, + HWAS::NO_DECONFIG, + HWAS::GARD_NULL ); + + l_err->collectTrace(TARG_COMP_NAME); + l_err->collectTrace(SBE_COMP_NAME); + l_err->collectTrace("ISTEPS_TRACE",256); + + // Create IStep error log and cross ref error that occurred + l_stepError.addErrorDetails( l_err ); + errlCommit( l_err, ISTEP_COMP_ID ); + } + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "host_discover_targets exit" ); + return l_stepError.getErrorHandle(); } diff --git a/src/usr/isteps/istep06/host_gard.C b/src/usr/isteps/istep06/host_gard.C index 4a9852e17..1f16c866c 100644 --- a/src/usr/isteps/istep06/host_gard.C +++ b/src/usr/isteps/istep06/host_gard.C @@ -51,7 +51,6 @@ #include <console/consoleif.H> // Custom compile configs -#include <config.h> #ifdef CONFIG_DRTM #include <secureboot/drtm.H> diff --git a/src/usr/isteps/istep06/host_init_fsi.C b/src/usr/isteps/istep06/host_init_fsi.C index 2e294893e..455068633 100644 --- a/src/usr/isteps/istep06/host_init_fsi.C +++ b/src/usr/isteps/istep06/host_init_fsi.C @@ -37,7 +37,6 @@ #include <isteps/hwpisteperror.H> #include <attributeenums.H> #include <secureboot/trustedbootif.H> -#include <config.h> //Targeting #include <targeting/common/commontargeting.H> |