diff options
author | Dean Sanner <dsanner@us.ibm.com> | 2017-04-27 09:32:02 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-05-25 09:45:36 -0400 |
commit | e0a1b4a4f6d9bd7927fddcc508d24f9218dfbb13 (patch) | |
tree | 2a88a7b68a8ed3b3dc7f3a54a8bf3bec9b411b45 /src/include | |
parent | c578a6cdfbbc2b77c988548b81df6e1d9f202582 (diff) | |
download | talos-hostboot-e0a1b4a4f6d9bd7927fddcc508d24f9218dfbb13.tar.gz talos-hostboot-e0a1b4a4f6d9bd7927fddcc508d24f9218dfbb13.zip |
Add support for remembering deconfigs without GUARD
Currently on reconfig reboots only parts that are GUARDed
are remembered and reapplied.
- Add suport for a semi persisent PNOR partition,
HB_VOLATILE which Hostboot uses to keep track of the reconfig
reboots vs power off
- Add a new GUARD type specifically for reconfig loops
- Add RECALL_DECONFIG_ON_RECONFIG config flag to control
what gets added to GUARD partition
- During boot will add/clear guard records on deconfig based
on config flags and semi persisent state.
Change-Id: Iec636058cde8095c0c4216d1f95ae4fda554395e
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39780
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Stephen M. Cprek <smcprek@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/usr/hwas/common/deconfigGard.H | 22 | ||||
-rw-r--r-- | src/include/usr/hwas/common/hwasCallout.H | 1 | ||||
-rw-r--r-- | src/include/usr/pnor/pnor_const.H | 1 | ||||
-rw-r--r-- | src/include/usr/util/utilsemipersist.H | 83 |
4 files changed, 107 insertions, 0 deletions
diff --git a/src/include/usr/hwas/common/deconfigGard.H b/src/include/usr/hwas/common/deconfigGard.H index 0c133f427..2cdc5fd26 100644 --- a/src/include/usr/hwas/common/deconfigGard.H +++ b/src/include/usr/hwas/common/deconfigGard.H @@ -60,6 +60,19 @@ namespace HWAS errlHndl_t collectGard(const TARGETING::PredicateBase *i_pPredicate = NULL); /** + * @brief clearGardByType Common HWAS function to clear all GARD records of + * given type + * + * It will call into hwas platform-specific functions. + * + * @param i_type Type of records to be cleared + * + * @return errlHndl_t valid errlHndl_t handle if there was an error + * NULL if no errors; + */ +errlHndl_t clearGardByType(const GARD_ErrorType i_type); + +/** * @brief Returns a reference to the DeconfigGard singleton. */ class DeconfigGard; @@ -239,6 +252,15 @@ public: errlHndl_t clearGardRecordsForReplacedTargets(); /** + * @brief Clears GARD Records that match requested error type + * + * @param i_type error type to clear + * + * @return errlHndl_t. Error log handle. + */ + errlHndl_t clearGardRecordsByType(GARD_ErrorType i_type); + + /** * @brief Deconfigures Targets that have GARD Records in preparation to IPL. * * @param i_pPredicate restrict processing - only look at GARD records diff --git a/src/include/usr/hwas/common/hwasCallout.H b/src/include/usr/hwas/common/hwasCallout.H index 5b8ffff33..9a729a5ed 100644 --- a/src/include/usr/hwas/common/hwasCallout.H +++ b/src/include/usr/hwas/common/hwasCallout.H @@ -57,6 +57,7 @@ typedef enum { GARD_Predictive = 0xE6, //Policy flag to disable. GARD_Power = 0xE9, //Needed since EID is NOT passed in. GARD_PHYP = 0xEA, //Needed since EID is NOT passed in. + GARD_Reconfig = 0xEB, //Force deconfig on reconfig loop GARD_Void = 0xFF } GARD_ErrorType; diff --git a/src/include/usr/pnor/pnor_const.H b/src/include/usr/pnor/pnor_const.H index ae02a2fd2..9f435681d 100644 --- a/src/include/usr/pnor/pnor_const.H +++ b/src/include/usr/pnor/pnor_const.H @@ -71,6 +71,7 @@ enum SectionId RINGOVD, /**< Ring override data */ WOFDATA, /**< VFRT data tables for WOF */ SBKT, /**< SecureBoot Key Transition */ + HB_VOLATILE, /**< Semi volatile partition for reconfig */ #endif NUM_SECTIONS, /**< Number of defined sections */ diff --git a/src/include/usr/util/utilsemipersist.H b/src/include/usr/util/utilsemipersist.H new file mode 100644 index 000000000..82943825e --- /dev/null +++ b/src/include/usr/util/utilsemipersist.H @@ -0,0 +1,83 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/util/utilsemipersist.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2012,2017 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +#ifndef UTILSEMIPERSIST_H +#define UTILSEMIPERSIST_H + +/** + * @file utilsemipersist.H + * + * @brief Utilies to access the semi persistent memory + * + * + */ + +/*****************************************************************************/ +// I n c l u d e s +/*****************************************************************************/ + +// Utility Includes + +/*****************************************************************************/ +// Forwards +/*****************************************************************************/ + +//*****************************************************************************/ +// C o n s t a n t s +/*****************************************************************************/ +namespace Util +{ + enum + { + PERSIST_MAGIC = 0x48425f56, // HB_V + }; + + struct semiPersistData_t + { + uint32_t magic; //HB_V + uint32_t reboot_cnt; // Number of reboots with valid data + semiPersistData_t(): magic(0), reboot_cnt(0) {}; + } PACKED; + + /** + * @brief This function writes data structure to the HB semi persistent + * region. Data is flushed to storage once this call returns + * @param[in] i_data Structure to write + * + * @return none + */ + void writeSemiPersistData(const semiPersistData_t i_data); + + /** + * @brief This function reads data structure from the HB semi persistent + * region. If the region cannot be found it will return 0s for all data. + * User must check magic header to know if data is valid + * @param[in] o_data Structure to read + * + * @return none + */ + void readSemiPersistData(semiPersistData_t & o_data); +}; + +#endif //UTILMEM_H |