diff options
author | Dean Sanner <dsanner@us.ibm.com> | 2019-11-03 19:58:29 -0600 |
---|---|---|
committer | RAJA DAS <rajadas2@in.ibm.com> | 2019-11-10 22:13:30 -0600 |
commit | c05bb41d728e6fc05a34d9d02320d6e37a6a79a4 (patch) | |
tree | 5b2dbce5a0e4b486314e33373de81521a9ec3a37 /src/hwpf | |
parent | 27423190a5278003a50686ea4d46fd364a547e39 (diff) | |
download | talos-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.C | 31 |
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; } |