diff options
Diffstat (limited to 'src/usr/isteps/istep21/call_host_runtime_setup.C')
-rw-r--r-- | src/usr/isteps/istep21/call_host_runtime_setup.C | 69 |
1 files changed, 46 insertions, 23 deletions
diff --git a/src/usr/isteps/istep21/call_host_runtime_setup.C b/src/usr/isteps/istep21/call_host_runtime_setup.C index 4a87ddefd..db0fc2d5f 100644 --- a/src/usr/isteps/istep21/call_host_runtime_setup.C +++ b/src/usr/isteps/istep21/call_host_runtime_setup.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2019 */ +/* Contributors Listed Below - COPYRIGHT 2015,2020 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -23,7 +23,6 @@ /* */ /* IBM_PROLOG_END_TAG */ -#include <config.h> #include <errl/errlentry.H> #include <errl/errlmanager.H> #include <initservice/isteps_trace.H> @@ -68,8 +67,12 @@ #ifdef CONFIG_NVDIMM #include "call_nvdimm_update.H" +#include <isteps/nvdimm/nvdimm.H> #endif +#include <dump/dumpif.H> + + using namespace ERRORLOG; using namespace ISTEP; using namespace ISTEP_ERROR; @@ -290,8 +293,8 @@ errlHndl_t verifyAndMovePayload(void) break; } - // If in Secure Mode Verify PHYP at Temporary TCE-related Memory Location - if (SECUREBOOT::enabled() && is_phyp) + // If in Secure Mode Verify Payload at Temporary TCE-related Memory Location + if (SECUREBOOT::enabled()) { TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,"verifyAndMovePayload() " "Verifying PAYLOAD: physAddr=0x%.16llX, virtAddr=0x%.16llX", @@ -736,6 +739,19 @@ void* call_host_runtime_setup (void *io_pArgs) errlCommit(l_err, ISTEP_COMP_ID); pmStartSuccess = false; } + else + { +#ifdef CONFIG_NVDIMM + // Arm the nvdimms + // Only get here if is_sapphire_load and PM started and have NVDIMMs + TARGETING::TargetHandleList l_nvdimmTargetList; + NVDIMM::nvdimm_getNvdimmList(l_nvdimmTargetList); + if (l_nvdimmTargetList.size() != 0) + { + NVDIMM::nvdimmArm(l_nvdimmTargetList); + } +#endif + } #ifdef CONFIG_HTMGT // Report PM status to HTMGT @@ -767,7 +783,7 @@ void* call_host_runtime_setup (void *io_pArgs) uint8_t l_skip_fir_attr_reset = 1; // Since we are not leaving the PM complex alive, we will // explicitly put it into reset and clean up any memory - l_err = HBPM::resetPMAll(HBPM::RESET_AND_CLEAR_ATTRIBUTES, + l_err = HBPM::resetPMAll(HBPM::RESET_AND_CLEAR_ATTRIBUTES, l_skip_fir_attr_reset); if (l_err) { @@ -846,11 +862,20 @@ void* call_host_runtime_setup (void *io_pArgs) break; } } - + // Update the MDRT Count and PDA Table Entries from Attribute TargetService& l_targetService = targetService(); Target* l_sys = nullptr; l_targetService.getTopLevelTarget(l_sys); + + // Default captured data to 0s -- MPIPL if check fills in if + // valid + uint32_t threadRegSize = sizeof(DUMP::hostArchRegDataHdr)+ + (95 * sizeof(DUMP::hostArchRegDataEntry)); + uint8_t threadRegFormat = REG_DUMP_SBE_HB_STRUCT_VER; + uint64_t capThreadArrayAddr = 0; + uint64_t capThreadArraySize = 0; + if(l_sys->getAttr<ATTR_IS_MPIPL_HB>()) { uint32_t l_mdrtCount = @@ -862,25 +887,23 @@ void* call_host_runtime_setup (void *io_pArgs) l_mdrtCount); } - // Update PDA Table entries - if ( !INITSERVICE::spBaseServicesEnabled() ) - { - uint32_t threadRegSize = - l_sys->getAttr<TARGETING::ATTR_PDA_THREAD_REG_ENTRY_SIZE>(); - uint8_t threadRegFormat = - l_sys->getAttr<TARGETING::ATTR_PDA_THREAD_REG_STATE_ENTRY_FORMAT>(); - uint64_t capThreadArrayAddr = - l_sys->getAttr<TARGETING::ATTR_PDA_CAPTURED_THREAD_REG_ARRAY_ADDR>(); - uint64_t capThreadArraySize = - l_sys->getAttr<TARGETING::ATTR_PDA_CAPTURED_THREAD_REG_ARRAY_SIZE>(); - - // Ignore return value - RUNTIME::updateHostProcDumpActual( RUNTIME::PROC_DUMP_AREA_TBL, - threadRegSize, threadRegFormat, - capThreadArrayAddr, capThreadArraySize); - } + + threadRegSize = + l_sys->getAttr<TARGETING::ATTR_PDA_THREAD_REG_ENTRY_SIZE>(); + threadRegFormat = + l_sys->getAttr<TARGETING::ATTR_PDA_THREAD_REG_STATE_ENTRY_FORMAT>(); + capThreadArrayAddr = + l_sys->getAttr<TARGETING::ATTR_PDA_CAPTURED_THREAD_REG_ARRAY_ADDR>(); + capThreadArraySize = + l_sys->getAttr<TARGETING::ATTR_PDA_CAPTURED_THREAD_REG_ARRAY_SIZE>(); } + // Ignore return value + RUNTIME::updateHostProcDumpActual( RUNTIME::PROC_DUMP_AREA_TBL, + threadRegSize, threadRegFormat, + capThreadArrayAddr, capThreadArraySize); + + //Update the MDRT value (for MS Dump) l_err = RUNTIME::writeActualCount(RUNTIME::MS_DUMP_RESULTS_TBL); if(l_err != NULL) |