summaryrefslogtreecommitdiffstats
path: root/src/hwpf
diff options
context:
space:
mode:
authorDean Sanner <dsanner@us.ibm.com>2019-11-03 19:58:29 -0600
committerRAJA DAS <rajadas2@in.ibm.com>2019-11-10 22:13:30 -0600
commitc05bb41d728e6fc05a34d9d02320d6e37a6a79a4 (patch)
tree5b2dbce5a0e4b486314e33373de81521a9ec3a37 /src/hwpf
parent27423190a5278003a50686ea4d46fd364a547e39 (diff)
downloadtalos-sbe-c05bb41d728e6fc05a34d9d02320d6e37a6a79a4.tar.gz
talos-sbe-c05bb41d728e6fc05a34d9d02320d6e37a6a79a4.zip
Run LPC Init to clean up errors on MPIPL
Recently HBBL added some error checking on LPC accesses Unfortunately OPAL leaves some errors in the accumulated status register of the LPC Host Controller. Since HBBL doesn't have the space to clear... have the SBE run lpc_init on MPIPL to clean up Keep a global alias for HRMOR Attribute in Pibmem Fetch the SPMode from Default SPMODE Attr if Mbox8 valid bit is not set, else fetch it from Mbox3 bit3. This is to support BMC scratch register setting which are all NULL Change-Id: I975311d9313ac8dbe70cf4595a96c43faaa98dd7 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/86434 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: RAJA DAS <rajadas2@in.ibm.com>
Diffstat (limited to 'src/hwpf')
-rw-r--r--src/hwpf/target.C31
1 files changed, 22 insertions, 9 deletions
diff --git a/src/hwpf/target.C b/src/hwpf/target.C
index 71b5e564..c2dca699 100644
--- a/src/hwpf/target.C
+++ b/src/hwpf/target.C
@@ -37,6 +37,9 @@
// call.
std::vector<fapi2::plat_target_handle_t> G_vec_targets;
+//Defined a Global variable to store HRMOR in PIBMEM, Alias for HRMOR Attr
+uint64_t g_HRMOR = 0;
+
// Global variable for fixed section in pibmem
G_sbe_attrs_t G_sbe_attrs;
@@ -48,6 +51,8 @@ fapi2attr::EQAttributes_t* G_eq_attributes_ptr;
fapi2attr::EXAttributes_t* G_ex_attributes_ptr;
#else // __SBEFW_SEEPROM__
+extern uint64_t g_HRMOR;
+
extern std::vector<fapi2::plat_target_handle_t> G_vec_targets;
// Global variable for fixed section in pibmem
@@ -95,6 +100,7 @@ extern fapi2::ReturnCode
uint64_t iv_deviceIdReg;
} l_deviceId;
+ uint64_t l_temp_hrmor = 0;
uint8_t l_chipName = fapi2::ENUM_ATTR_NAME_NONE;
uint8_t l_ec = 0;
uint8_t fusedMode = 0;
@@ -124,7 +130,7 @@ extern fapi2::ReturnCode
uint8_t l_proc_chip_mem_to_use_chip_id = 0;
bool l_proc_chip_mem_to_use_set = false;
fapi2::buffer<uint8_t> l_proc_chip_mem_to_use_attr = 0;
-
+ uint8_t isSpMode = 0;
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_RISK_LEVEL, FAPI_SYSTEM, l_riskLvl));
//Getting SCRATCH_REGISTER_8 register value
@@ -222,7 +228,6 @@ extern fapi2::ReturnCode
if ( l_scratch8Reg.getBit<2>() )
{
uint8_t isMpIpl = 0;
- uint8_t isSpMode = 0;
FAPI_DBG("Reading Scratch_reg3");
//Getting SCRATCH_REGISTER_3 register value
FAPI_TRY(fapi2::getScom(l_chipTarget, PERV_SCRATCH_REGISTER_3_SCOM,
@@ -234,17 +239,21 @@ extern fapi2::ReturnCode
FAPI_TRY(PLAT_ATTR_INIT(fapi2::ATTR_IS_MPIPL, FAPI_SYSTEM, isMpIpl));
l_tempReg.extractToRight<3, 1>(isSpMode);
- if(!isSpMode && !SBE::isSimicsRunning())
- {
- FAPI_DBG("Set up ATTR_HOSTBOOT_HRMOR_OFFSET in SPless mode");
- uint64_t hrmor = HRMOR_FOR_SPLESS_MODE;
- FAPI_TRY(PLAT_ATTR_INIT(fapi2::ATTR_HOSTBOOT_HRMOR_OFFSET,
- FAPI_SYSTEM, hrmor));
- }
+ FAPI_DBG("Upating ATTR_IS_SP_MODE based on Scratch_reg3:%d",isSpMode);
FAPI_TRY(PLAT_ATTR_INIT(fapi2::ATTR_IS_SP_MODE, l_chipTarget, isSpMode));
l_tempReg.extractToRight<28, 4>(l_riskLvl);
}
+ //Update the HRMOR value based on system is FSP/BMC based.
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_IS_SP_MODE, l_chipTarget, isSpMode));
+ if(!isSpMode && !SBE::isSimicsRunning())
+ {
+ FAPI_DBG("Set up ATTR_HOSTBOOT_HRMOR_OFFSET in SPless mode");
+ uint64_t hrmor = HRMOR_FOR_SPLESS_MODE;
+ FAPI_TRY(PLAT_ATTR_INIT(fapi2::ATTR_HOSTBOOT_HRMOR_OFFSET,
+ FAPI_SYSTEM, hrmor));
+ }
+
if ( l_scratch8Reg.getBit<3>() )
{
uint8_t l_cpFilterBypass = 0;
@@ -473,6 +482,10 @@ extern fapi2::ReturnCode
FAPI_TRY(PLAT_ATTR_INIT(fapi2::ATTR_BACKUP_SEEPROM_SELECT,
l_chipTarget, attrSeepromSlct));
} // end of scope initializer
+
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_HOSTBOOT_HRMOR_OFFSET, FAPI_SYSTEM, l_temp_hrmor));
+ g_HRMOR = l_temp_hrmor;
+
fapi_try_exit:
return fapi2::current_err;
}
OpenPOWER on IntegriCloud