diff options
author | Soma BhanuTej <soma.bhanu@in.ibm.com> | 2017-06-12 04:54:01 -0400 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-10-24 18:02:56 -0400 |
commit | 1f7535040ac87b87cd066fa6e52d54b6b79c863d (patch) | |
tree | 9ff6b41b4ec01914c64b2a05fcc6535a2868cad5 | |
parent | 03c9491238effe21c479ebbf019773c39125c552 (diff) | |
download | talos-hostboot-1f7535040ac87b87cd066fa6e52d54b6b79c863d.tar.gz talos-hostboot-1f7535040ac87b87cd066fa6e52d54b6b79c863d.zip |
Additional checks to p9_extract_sbe_rc
- To detect NDD1 or other chip for seeprom & otp addr upd
- pibmem program exception
- otprom program exception
- Use sbe_cs bit to identify the state of pk loader
- Adding CBS_STATUS_REGISTERS,ROOT_CTRL_REGISTERS in xml
- Using ifndef __HOSTBOOT_MODULE while read MBOX registers
- Update all Non-Secure mode RC names
Change-Id: Ic764bbda94d9beb023aa1861cb143bf05b8ff06a
RTC: 174954
CQ: SW404908
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/41738
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Soma Bhanutej <soma.bhanu@in.ibm.com>
Reviewed-by: Joachim Fenkes <fenkes@de.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/41770
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
5 files changed, 332 insertions, 168 deletions
diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_extract_sbe_rc.C b/src/import/chips/p9/procedures/hwp/perv/p9_extract_sbe_rc.C index b86bdd2b7..ff76b5d8a 100644 --- a/src/import/chips/p9/procedures/hwp/perv/p9_extract_sbe_rc.C +++ b/src/import/chips/p9/procedures/hwp/perv/p9_extract_sbe_rc.C @@ -65,6 +65,13 @@ /// 4) If in SEEPROM data range, report error if RSP_INFO is non-zero response (0x7-FI2C timeout Error, 0x4-FI2C Seeprom cfg Err, else-FI2C PIB Err) /// /// DEFAULT) If non of the above errors are detected then report as UNKNOWN_ERROR +// +/////////////////////////////// USE CASES //////////////////////////////////// +// 1) FSP calling on any proc // +// 2) HB calling on master proc (after a failed chipop or something) // +// 3) HB calling on slave proc before SMP is up (initial sbe start) // +// 4) HB calling on slave proc after SMP is up (chipop fail) // +////////////////////////////////////////////////////////////////////////////// //------------------------------------------------------------------------------ // *HWP HW Owner : Soma BhanuTej <soma.bhanu@in.ibm.com> // *HWP HW Backup Owner : Srinivas V Naga <srinivan@in.ibm.com> @@ -87,9 +94,10 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip, - P9_EXTRACT_SBE_RC::RETURN_ACTION& o_return_action, bool i_set_sdb, bool i_unsecure_mode) + P9_EXTRACT_SBE_RC::RETURN_ACTION& o_return_action, + bool i_set_sdb, + bool i_unsecure_mode) { - fapi2::buffer<uint64_t> l_data64; fapi2::buffer<uint64_t> l_data64_dbgpro; fapi2::buffer<uint64_t> l_data64_fi2c_status; @@ -99,6 +107,7 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ fapi2::buffer<uint32_t> l_data32_ir; fapi2::buffer<uint32_t> l_data32_edr; fapi2::buffer<uint32_t> l_data32_iar; + fapi2::buffer<uint8_t> l_is_ndd1; bool l_ppe_halt_state = true; bool l_data_mchk = false; bool otprom_addr_range = false; @@ -107,7 +116,12 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ bool otprom_data_range = false; bool pibmem_data_range = false; bool seeprom_data_range = false; + bool l_is_HB_module = false; uint32_t HC, MCS, otprom_addr, mem_error, sib_rsp_info; + uint32_t SEEPROM_MIN_RANGE; + uint32_t SEEPROM_MAX_RANGE; + uint32_t MAGIC_NUMBER_MISMATCH_LOCATION; + uint32_t OTPROM_IMAGE_END_LOCATION; // FAPI_ASSERT condition constant const bool FAIL = false; @@ -116,20 +130,55 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ const uint32_t OTPROM_MAX_RANGE = 0x000C0378; const uint32_t PIBMEM_MIN_RANGE = 0xFFFE8000; const uint32_t PIBMEM_MAX_RANGE = 0xFFFFFFFF; - const uint32_t SEEPROM_MIN_RANGE = 0x80000000; - const uint32_t SEEPROM_MAX_RANGE = 0x80038E18; + const uint32_t SEEPROM_NDD1_MIN_RANGE = 0x80000000; + const uint32_t SEEPROM_NDD1_MAX_RANGE = 0x80038E18; + const uint32_t SEEPROM_NOT_NDD1_MIN_RANGE = 0xFF800000; + const uint32_t SEEPROM_NOT_NDD1_MAX_RANGE = 0xFF838E18; + + // Interrupt Vector offsets locations + const uint32_t OTPROM_PROG_EXCEPTION_LOCATION = 0x000C00E0; + const uint32_t PIBMEM_PROG_EXCEPTION_LOCATION = 0xFFFE80E0; - // OTPROM Address constants as per the image on 28/Sep/2016 + // OTPROM Address constants as per the image on 12/Jun/2017 // These values might change on every recomilation of OTPROM binary - // Refs : /afs/apd/func/project/tools/cronus/p9/exe/dev/prcd_d/images/sbe_otprom.dis - const uint32_t MAGIC_NUMBER_MISMATCH_LOCATION = 0xC0188; - const uint32_t OTPROM_IMAGE_END_LOCATION = 0xC016C; + // Refs : /afs/apd/func/project/tools/cronus/p9/exe/dev/prcd_d/images/sim/sbe_otprom_DD2.dis + const uint32_t NOT_NDD1_MAGIC_NUMBER_MISMATCH_LOCATION = 0xC0170; + const uint32_t NOT_NDD1_OTPROM_IMAGE_END_LOCATION = 0xC016C; + // NDD1 address locations are extracted from HW System by Joachim Fenkes + const uint32_t NDD1_MAGIC_NUMBER_MISMATCH_LOCATION = 0xC015C; + const uint32_t NDD1_OTPROM_IMAGE_END_LOCATION = 0xC0158; FAPI_INF("p9_extract_sbe_rc : Entering ..."); +#ifdef __HOSTBOOT_MODULE + l_is_HB_module = true; +#endif + + FAPI_INF("p9_extract_sbe_rc : Inputs \n\ti_set_sdb = %s \n\ti_unsecure_mode = %s \n\tl_is_HB_module = %s", + btos(i_set_sdb), btos(i_unsecure_mode), btos(l_is_HB_module)); + + FAPI_DBG("p9_extract_sbe_rc: Reading chip ec attribute"); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_EC_FEATURE_EXTRACT_SBE_RC_P9NDD1_CHIPS, i_target_chip, l_is_ndd1)); + + if(l_is_ndd1) + { + FAPI_INF("p9_extract_sbe_rc: Detected as Nimbus DD1 chip"); + MAGIC_NUMBER_MISMATCH_LOCATION = NDD1_MAGIC_NUMBER_MISMATCH_LOCATION; + OTPROM_IMAGE_END_LOCATION = NDD1_OTPROM_IMAGE_END_LOCATION; + SEEPROM_MIN_RANGE = SEEPROM_NDD1_MIN_RANGE; + SEEPROM_MAX_RANGE = SEEPROM_NDD1_MAX_RANGE; + } + else + { + MAGIC_NUMBER_MISMATCH_LOCATION = NOT_NDD1_MAGIC_NUMBER_MISMATCH_LOCATION; + OTPROM_IMAGE_END_LOCATION = NOT_NDD1_OTPROM_IMAGE_END_LOCATION; + SEEPROM_MIN_RANGE = SEEPROM_NOT_NDD1_MIN_RANGE; + SEEPROM_MAX_RANGE = SEEPROM_NOT_NDD1_MAX_RANGE; + } + if(i_set_sdb) { - // Applying SDB setting + // Applying SDB setting required in usecase 1 & 3 only FAPI_DBG("p9_extract_sbe_rc: Setting chip in SDB mode"); FAPI_TRY(getCfamRegister(i_target_chip, PERV_SB_CS_FSI, l_data32)); l_data32.setBit<PERV_SB_CS_SECURE_DEBUG_MODE>(); @@ -146,7 +195,7 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ if (l_data64_dbgpro.getBit<PU_PPE_XIDBGPRO_XSR_HS>()) { - FAPI_INF("p9_extract_sbe_rc : PPE is in HALT state"); + FAPI_INF("p9_extract_sbe_rc : PPE is in HALT state and SDB is set %s", btos(i_set_sdb)); l_ppe_halt_state = true; } else @@ -262,19 +311,66 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ l_data64.extractToRight(l_data32_ir, PU_PPE_XIRAMEDR_XIRAMGA_IR, PU_PPE_XIRAMEDR_XIRAMGA_IR_LEN); l_data64.extractToRight(l_data32_edr, PU_PPE_XIRAMEDR_EDR, PU_PPE_XIRAMEDR_EDR_LEN); - if(MCS == 0x4) + if(MCS == 0x4 || + l_data32_iar == PIBMEM_PROG_EXCEPTION_LOCATION || + l_data32_iar == OTPROM_PROG_EXCEPTION_LOCATION ) { if((OTPROM_MIN_RANGE <= l_data32_iar) && (l_data32_iar <= OTPROM_MAX_RANGE)) { - FAPI_DBG("p9_extract_sbe_rc : Program Interrupt occured in OTPROM memory program"); + FAPI_DBG("p9_extract_sbe_rc : Program Interrupt occured during IVPR pointed to OTPROM memory range"); + + if(!l_is_ndd1) + { + fapi2::buffer<uint8_t> l_sbe_code_state; + FAPI_DBG("p9_extract_sbe_rc : Reading SB_MSG register to collect SBE Code state bits"); + + if(l_is_HB_module && !i_set_sdb) //HB calling Master Proc or HB calling Slave after SMP + { + FAPI_TRY(getScom(i_target_chip, PERV_SB_MSG_SCOM, l_data64)); + l_data64.extractToRight(l_sbe_code_state, 30, 2); + } + else + { + FAPI_TRY(getCfamRegister(i_target_chip, PERV_SB_MSG_FSI, l_data32)); + l_data32.extractToRight(l_sbe_code_state, 30, 2); + } + + if(l_sbe_code_state == 0x1) + { + o_return_action = P9_EXTRACT_SBE_RC::REIPL_UPD_SEEPROM; + FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_MAGIC_NUMBER_MISMATCH() + .set_TARGET_CHIP(i_target_chip), + "ERROR:Program Interrupt occured, probably MAGIC NUMBER MISMATCH"); + + } + else if(l_sbe_code_state == 0x2) + { + o_return_action = P9_EXTRACT_SBE_RC::REIPL_BKP_SEEPROM; + FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_SBE_L1_LOADER_FAIL() + .set_TARGET_CHIP(i_target_chip), + "ERROR:Program Interrupt occured during base loader (l1)"); + + } + else if(l_sbe_code_state == 0x3) + { + o_return_action = P9_EXTRACT_SBE_RC::REIPL_BKP_SEEPROM; + FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_SBE_L2_LOADER_FAIL() + .set_TARGET_CHIP(i_target_chip), + "ERROR:Program Interrupt occured during pk loader") + } + else + { + FAPI_ERR("p9_extract_sbe_rc : SBE code state value = %02X is invalid", l_sbe_code_state); + } + } } else if((PIBMEM_MIN_RANGE <= l_data32_iar) && (l_data32_iar <= PIBMEM_MAX_RANGE)) { - FAPI_DBG("p9_extract_sbe_rc : Program Interrupt occured in PIBMEM memory program"); + FAPI_ERR("p9_extract_sbe_rc : Program Interrupt occured in PIBMEM memory program"); } else if((SEEPROM_MIN_RANGE <= l_data32_iar) && (l_data32_iar <= SEEPROM_MAX_RANGE)) { - FAPI_DBG("p9_extract_sbe_rc : Program Interrupt occured in SEEPROM memory program"); + FAPI_ERR("p9_extract_sbe_rc : Program Interrupt occured in SEEPROM memory program"); } else { @@ -408,7 +504,7 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ //-- FAPI Asserts section for OTPROM --// o_return_action = P9_EXTRACT_SBE_RC::NO_RECOVERY_ACTION; FAPI_ASSERT(l_data64.getBit<PU_STATUS_REGISTER_UNCORR_ERROR>() != 1, - fapi2::EXTRACT_SBE_RC_OTP_ECC_ERR_INSECURE_MODE() + fapi2::EXTRACT_SBE_RC_OTP_ECC_ERR_NONSECURE_MODE() .set_TARGET_CHIP(i_target_chip), "ERROR:Uncorrectable error detected in OTPROM memory read"); } @@ -440,7 +536,7 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ } } - if(pibmem_addr_range) + if(pibmem_addr_range) // PIBMEM status register read is allowed in both Secure & NonSecure mode { FAPI_DBG("p9_extract_sbe_rc : Reading PIBMEM status register"); FAPI_TRY(getScom(i_target_chip, PU_PIBMEM_STATUS_REG, l_data64)); @@ -524,148 +620,138 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ //-- FAPI Asserts section for PIBMEM --// o_return_action = P9_EXTRACT_SBE_RC::RESTART_SBE; FAPI_ASSERT(l_data64.getBit<PU_PIBMEM_STATUS_REG_ECC_UNCORRECTED_ERROR_PIB>() != 1, - fapi2::EXTRACT_SBE_RC_PIBMEM_ECC_ERR_INSECURE_MODE() + fapi2::EXTRACT_SBE_RC_PIBMEM_ECC_ERR() .set_TARGET_CHIP(i_target_chip), - "ERROR:Uncorrectable error occurred while PIB memory read"); + "ERROR:Uncorrectable error occurred while accessing memory via PIB side"); o_return_action = P9_EXTRACT_SBE_RC::RESTART_SBE; FAPI_ASSERT(l_data64.getBit<PU_PIBMEM_STATUS_REG_ECC_UNCORRECTED_ERROR_FACES>() != 1, - fapi2::EXTRACT_SBE_RC_PIBMEM_ECC_ERR_INSECURE_MODE() + fapi2::EXTRACT_SBE_RC_PIBMEM_ECC_ERR() .set_TARGET_CHIP(i_target_chip), - "ERROR:Uncorrectable error occurred while fast access interface read"); + "ERROR:Uncorrectable error occurred while accessing memory via fast access side"); } - if(seeprom_addr_range) + if(seeprom_addr_range && i_unsecure_mode) { - if(i_unsecure_mode) - { - FAPI_DBG("p9_extract_sbe_rc : Reading FI2CM mode register"); - FAPI_TRY(getScom(i_target_chip, PU_MODE_REGISTER_B, l_data64)); - FAPI_DBG("p9_extract_sbe_rc : FI2CM mode : %#018lX", l_data64); + FAPI_DBG("p9_extract_sbe_rc : Reading FI2CM mode register"); + FAPI_TRY(getScom(i_target_chip, PU_MODE_REGISTER_B, l_data64)); + FAPI_DBG("p9_extract_sbe_rc : FI2CM mode : %#018lX", l_data64); - l_data32.flush<0>(); - l_data64.extractToRight(l_data32, 0, 16); - uint32_t i2c_speed = l_data32; - - if(i2c_speed < 0x0003) - { - o_return_action = P9_EXTRACT_SBE_RC::RESTART_SBE; - FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_FI2CM_BIT_RATE_ERR() - .set_TARGET_CHIP(i_target_chip), - "ERROR:Speed on the I2C bit rate divisor is less than min speed value (0x0003), I2C Speed read is %04lX", i2c_speed); - } - } + l_data32.flush<0>(); + l_data64.extractToRight(l_data32, 0, 16); + uint32_t i2c_speed = l_data32; - if(i_unsecure_mode) + if(i2c_speed < 0x0003) { - FAPI_DBG("p9_extract_sbe_rc : Reading FI2CM status register"); - FAPI_TRY(getScom(i_target_chip, PU_STATUS_REGISTER_B, l_data64_fi2c_status)); - FAPI_DBG("p9_extract_sbe_rc : FI2CM status : %#018lX", l_data64_fi2c_status); - - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_ADDR_NVLD_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Address invalid bit set"); - } - - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_WRITE_NVLD_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Write invalid bit set"); - } + o_return_action = P9_EXTRACT_SBE_RC::RESTART_SBE; + FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_FI2CM_BIT_RATE_ERR_NONSECURE_MODE() + .set_TARGET_CHIP(i_target_chip), + "ERROR:Speed on the I2C bit rate divisor is less than min speed value (0x0003), I2C Speed read is %04lX", i2c_speed); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_READ_NVLD_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Read invalid bit set"); - } + FAPI_DBG("p9_extract_sbe_rc : Reading FI2CM status register"); + FAPI_TRY(getScom(i_target_chip, PU_STATUS_REGISTER_B, l_data64_fi2c_status)); + FAPI_DBG("p9_extract_sbe_rc : FI2CM status : %#018lX", l_data64_fi2c_status); - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_ADDR_P_ERR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Address parity error bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_ADDR_NVLD_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Address invalid bit set"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_PAR_ERR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Data parity error bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_WRITE_NVLD_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Write invalid bit set"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_LB_PARITY_ERROR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Local bus parity error bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_READ_NVLD_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Read invalid bit set"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_CORRECTED_ERROR_0>()) - { - FAPI_INF("p9_extract_sbe_rc : FI2CM::WARN:One bit flip was there in data and been corrected"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_ADDR_P_ERR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Address parity error bit set"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_UNCORRECTED_ERROR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::There are 2 bit flips in read data which cannot be corrected"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_PAR_ERR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Data parity error bit set"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_CONFIG_ERROR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Control register is ecc_enabled for data_length not equal to 8. OR ECC is enabled for the engine where ECC block is not instantiated"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_LB_PARITY_ERROR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Local bus parity error bit set"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_INVALID_COMMAND_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Invalid command bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_CORRECTED_ERROR_0>()) + { + FAPI_INF("p9_extract_sbe_rc : FI2CM::WARN:One bit flip was there in data and been corrected"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_PARITY_ERROR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Parity error bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_UNCORRECTED_ERROR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::There are 2 bit flips in read data which cannot be corrected"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_OVERRUN_ERROR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Back end overrun error bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_CONFIG_ERROR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Control register is ecc_enabled for data_length not equal to 8. OR ECC is enabled for the engine where ECC block is not instantiated"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_ACCESS_ERROR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Back end access error bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_INVALID_COMMAND_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Invalid command bit set"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_ARBITRATION_LOST_ERROR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Arbitration lost error bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_PARITY_ERROR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Parity error bit set"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_NACK_RECEIVED_ERROR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::NACK receieved error bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_OVERRUN_ERROR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Back end overrun error bit set"); + } - if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_STOP_ERROR_0>()) - { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::Stop error bit set"); - } + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_ACCESS_ERROR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Back end access error bit set"); + } - //-- FAPI Asserts section for SEEPROM --// - o_return_action = P9_EXTRACT_SBE_RC::REIPL_BKP_SEEPROM; - FAPI_ASSERT((l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_CONFIG_ERROR_0>() != 1 || - l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_INVALID_COMMAND_0>() != 1 || - l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_PARITY_ERROR_0>() != 1 || - l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_OVERRUN_ERROR_0>() != 1 || - l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_ACCESS_ERROR_0>() != 1 || - l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_ARBITRATION_LOST_ERROR_0>() != 1 || - l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_NACK_RECEIVED_ERROR_0>() != 1 || - l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_STOP_ERROR_0>() != 1), - fapi2::EXTRACT_SBE_RC_FI2C_ERROR() - .set_TARGET_CHIP(i_target_chip), - "FI2C I2C Error detected"); + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_ARBITRATION_LOST_ERROR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Arbitration lost error bit set"); + } - o_return_action = P9_EXTRACT_SBE_RC::REIPL_UPD_SEEPROM; - FAPI_ASSERT(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_UNCORRECTED_ERROR_0>() != 1, - fapi2::EXTRACT_SBE_RC_FI2C_ECC_ERR_INSECURE_MODE() - .set_TARGET_CHIP(i_target_chip), - "ERROR:There are 2 bit flips in read data which cannot be corrected"); + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_NACK_RECEIVED_ERROR_0>()) + { + FAPI_ERR("p9_extract_sbe_rc : FI2CM::NACK receieved error bit set"); } - else + + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_STOP_ERROR_0>()) { - // TODO - Read FI2CM status register by performing ramming of local register + FAPI_ERR("p9_extract_sbe_rc : FI2CM::Stop error bit set"); } + + //-- FAPI Asserts section for SEEPROM --// + o_return_action = P9_EXTRACT_SBE_RC::REIPL_BKP_SEEPROM; + FAPI_ASSERT((l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_CONFIG_ERROR_0>() != 1 || + l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_INVALID_COMMAND_0>() != 1 || + l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_PARITY_ERROR_0>() != 1 || + l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_OVERRUN_ERROR_0>() != 1 || + l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_ACCESS_ERROR_0>() != 1 || + l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_ARBITRATION_LOST_ERROR_0>() != 1 || + l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_NACK_RECEIVED_ERROR_0>() != 1 || + l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_BUS_STOP_ERROR_0>() != 1), + fapi2::EXTRACT_SBE_RC_FI2C_ERR_NONSECURE_MODE() + .set_TARGET_CHIP(i_target_chip), + "FI2C I2C Error detected"); + + o_return_action = P9_EXTRACT_SBE_RC::REIPL_UPD_SEEPROM; + FAPI_ASSERT(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_UNCORRECTED_ERROR_0>() != 1, + fapi2::EXTRACT_SBE_RC_FI2C_ECC_ERR_NONSECURE_MODE() + .set_TARGET_CHIP(i_target_chip), + "ERROR:There are 2 bit flips in read data which cannot be corrected"); } // ------- LEVEL 4 ------ // diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_extract_sbe_rc.H b/src/import/chips/p9/procedures/hwp/perv/p9_extract_sbe_rc.H index b1514672a..220dbb482 100644 --- a/src/import/chips/p9/procedures/hwp/perv/p9_extract_sbe_rc.H +++ b/src/import/chips/p9/procedures/hwp/perv/p9_extract_sbe_rc.H @@ -38,7 +38,7 @@ #ifndef _P9_EXTRACT_SBE_RC_H_ #define _P9_EXTRACT_SBE_RC_H_ - +#define btos(x) ((x)?"TRUE":"FALSE") #include <fapi2.H> diff --git a/src/import/chips/p9/procedures/xml/attribute_info/chip_ec_attributes.xml b/src/import/chips/p9/procedures/xml/attribute_info/chip_ec_attributes.xml index ce6e23622..023706697 100644 --- a/src/import/chips/p9/procedures/xml/attribute_info/chip_ec_attributes.xml +++ b/src/import/chips/p9/procedures/xml/attribute_info/chip_ec_attributes.xml @@ -5358,6 +5358,23 @@ </attribute> <!-- ********************************************************************* --> <attribute> + <id>ATTR_CHIP_EC_FEATURE_EXTRACT_SBE_RC_P9NDD1_CHIPS</id> + <targetType>TARGET_TYPE_PROC_CHIP</targetType> + <description> + Use to detect Nimbus DD1 chips in p9_extract_sbe_rc procedure + </description> + <chipEcFeature> + <chip> + <name>ENUM_ATTR_NAME_NIMBUS</name> + <ec> + <value>0x10</value> + <test>EQUAL</test> + </ec> + </chip> + </chipEcFeature> + </attribute> + <!-- ******************************************************************** --> + <attribute> <id>ATTR_CHIP_EC_FEATURE_NO_GPTR_SUPPORT_VIA_MVPD</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType> <description> diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_extract_sbe_rc_errors.xml b/src/import/chips/p9/procedures/xml/error_info/p9_extract_sbe_rc_errors.xml index ef5b31cd9..5f1bcb4da 100644 --- a/src/import/chips/p9/procedures/xml/error_info/p9_extract_sbe_rc_errors.xml +++ b/src/import/chips/p9/procedures/xml/error_info/p9_extract_sbe_rc_errors.xml @@ -42,6 +42,7 @@ Action:Retrigger IPL or HRESET [RESTART_SBE] </description> <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -60,6 +61,7 @@ Action:Retrigger IPL or HRESET [RESTART_SBE] </description> <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -75,8 +77,10 @@ <rc>RC_EXTRACT_SBE_RC_PROGRAM_INTERRUPT</rc> <description> Program interrupt promoted - Action:Code update required [RESTART_SBE] + Action:Retrigger IPL or HRESET [RESTART_SBE] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -91,8 +95,10 @@ <rc>RC_EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED</rc> <description> Address scope out of range - Action:Code update required [RESTART_SBE] + Action:Retrigger IPL or HRESET [RESTART_SBE] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -106,11 +112,13 @@ <!-- Halt codes for OTPROM --> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_OTP_ECC_ERR_INSECURE_MODE</rc> + <rc>RC_EXTRACT_SBE_RC_OTP_ECC_ERR_NONSECURE_MODE</rc> <description> Uncorrectable error detected in OTPROM memory read Action:No recovery action possible to correct this error [NO_RECOVERY_ACTION] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -127,8 +135,56 @@ <rc>RC_EXTRACT_SBE_RC_MAGIC_NUMBER_MISMATCH</rc> <description> SEEPROM magic number didn't match - Action:Reload/update of SEEPROM required [REIPL_UPD_SEEPROM] + Action:Update of SEEPROM required or switch seeprom [REIPL_UPD_SEEPROM] + </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>SBE_EXTERNAL_SCOMMABLE_REGISTERS</id><targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <callout> + <procedure>CODE</procedure> + <priority>HIGH</priority> + </callout> + <callout> + <target>TARGET_CHIP</target> + <targetType>TARGET_TYPE_PROC_CHIP</targetType> + <priority>MEDIUM</priority> + </callout> + </hwpError> + <!-- ******************************************************************** --> + <hwpError> + <rc>RC_EXTRACT_SBE_RC_SBE_L1_LOADER_FAIL</rc> + <description> + Program Interrupt occured during base loader + Action:Switch seeprom [REIPL_BKP_SEEPROM] + </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>SBE_EXTERNAL_SCOMMABLE_REGISTERS</id><targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <callout> + <procedure>CODE</procedure> + <priority>HIGH</priority> + </callout> + <callout> + <target>TARGET_CHIP</target> + <targetType>TARGET_TYPE_PROC_CHIP</targetType> + <priority>MEDIUM</priority> + </callout> + </hwpError> + <!-- ******************************************************************** --> + <hwpError> + <rc>RC_EXTRACT_SBE_RC_SBE_L2_LOADER_FAIL</rc> + <description> + Program Interrupt occured during pk loader + Action:Switch seeprom [REIPL_BKP_SEEPROM] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -150,6 +206,8 @@ Branch to SEEPROM didn't happen Action:No recovery action possible to correct this error [NO_RECOVERY_ACTION] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -167,6 +225,8 @@ Halted in OTPROM, but not at an expected halt location Action:No recovery action possible to correct this error [NO_RECOVERY_ACTION] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -182,11 +242,13 @@ <!-- Halt codes for PIBMEM --> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_PIBMEM_ECC_ERR_INSECURE_MODE</rc> + <rc>RC_EXTRACT_SBE_RC_PIBMEM_ECC_ERR</rc> <description> - Uncorrectable error occurred while PIB memory read - Action:Reload/update of PIBMEM required [RESTART_SBE] + Uncorrectable error occurred while PIB memory access, Check if REPAIR solution is applied + Action:Retrigger IPL or HRESET [RESTART_SBE] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -206,11 +268,13 @@ <!-- Halt codes for SEEPROM --> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_FI2CM_BIT_RATE_ERR</rc> + <rc>RC_EXTRACT_SBE_RC_FI2CM_BIT_RATE_ERR_NONSECURE_MODE</rc> <description> I2C bit rate divisor is less than min speed value - Action:Attempt an SBE restart [RESTART_SBE] + Action:Retrigger IPL or HRESET [RESTART_SBE] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -222,11 +286,13 @@ </hwpError> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_FI2C_ERROR</rc> + <rc>RC_EXTRACT_SBE_RC_FI2C_ERR_NONSECURE_MODE</rc> <description> There are an FI2C I2C Error detected Action:Switch seeprom [REIPL_BKP_SEEPROM] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -240,11 +306,13 @@ </hwpError> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_FI2C_ECC_ERR_INSECURE_MODE</rc> + <rc>RC_EXTRACT_SBE_RC_FI2C_ECC_ERR_NONSECURE_MODE</rc> <description> There are 2 bit flips in read data which cannot be corrected Action:Update of SEEPROM required or switch seeprom [REIPL_UPD_SEEPROM] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -265,6 +333,8 @@ Uncorrectable error detected in OTPROM memory read Action:No recovery action possible to correct this error [NO_RECOVERY_ACTION] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -283,6 +353,8 @@ PIB Timeout error detected Action:Warm ipl where we don't switch off VSB just toggle start_cbs from FSP [RESTART_CBS] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -305,6 +377,8 @@ Scom error detected Action:Warm ipl where we don't switch off VSB just toggle start_cbs from FSP [RESTART_CBS] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -322,34 +396,13 @@ </hwpError> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_PIBMEM_ECC_ERR</rc> - <description> - ECC error detected during pibmem access, Check if REPAIR solution is applied - Action:Retrigger IPL or HRESET [RESTART_SBE] - </description> - <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> - <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> - <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> - <collectRegisterFfdc><id>SBE_EXTERNAL_SCOMMABLE_REGISTERS</id><targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> - <collectRegisterFfdc><id>MIB_EXTERNAL_SCOMMABLE_REGISTERS</id><targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> - <callout> - <target>TARGET_CHIP</target> - <targetType>TARGET_TYPE_PROC_CHIP</targetType> - <priority>HIGH</priority> - </callout> - <callout> - <procedure>CODE</procedure> - <priority>LOW</priority> - </callout> - </hwpError> - - <!-- ******************************************************************** --> - <hwpError> <rc>RC_EXTRACT_SBE_RC_PIBMEM_PIB_ERR</rc> <description> Error detected during pibmem access Action:Warm ipl where we don't switch off VSB just toggle start_cbs from FSP [RESTART_CBS] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -368,6 +421,8 @@ FI2C Timeout error detected Action:Reload/update of SEEPROM required or switch seeprom [REIPL_BKP_SEEPROM] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -386,6 +441,8 @@ There are 2 bit flips in read data which cannot be corrected Action:Update of SEEPROM required or switch seeprom [REIPL_UPD_SEEPROM] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -404,6 +461,8 @@ FI2C SEEPROM config error detected Action:Warm ipl where we don't switch off VSB just toggle start_cbs from FSP [RESTART_CBS] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -425,6 +484,8 @@ FI2C PIB error detected Action:Warm ipl where we don't switch off VSB just toggle start_cbs from FSP [RESTART_CBS] </description> + <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> @@ -444,6 +505,7 @@ Action:Switch seeprom [REIPL_BKP_SEEPROM] </description> <collectRegisterFfdc><id>CBS_STATUS_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> + <collectRegisterFfdc><id>ROOT_CTRL_REGISTERS_CFAM</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>I2C_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>PIBMEM_REGISTERS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> <collectRegisterFfdc><id>OTPROM_STATUS</id> <targetType>TARGET_TYPE_PROC_CHIP</targetType><target>TARGET_CHIP</target></collectRegisterFfdc> diff --git a/src/usr/sbeio/sbe_extract_rc_handler.C b/src/usr/sbeio/sbe_extract_rc_handler.C index 35a9cbdae..ebce51e63 100644 --- a/src/usr/sbeio/sbe_extract_rc_handler.C +++ b/src/usr/sbeio/sbe_extract_rc_handler.C @@ -802,24 +802,24 @@ P9_EXTRACT_SBE_RC::RETURN_ACTION action_for_ffdc_rc(uint32_t i_rc) case fapi2::RC_EXTRACT_SBE_RC_NEVER_STARTED: case fapi2::RC_EXTRACT_SBE_RC_PROGRAM_INTERRUPT: case fapi2::RC_EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED: - case fapi2::RC_EXTRACT_SBE_RC_PIBMEM_ECC_ERR_INSECURE_MODE: - case fapi2::RC_EXTRACT_SBE_RC_FI2CM_BIT_RATE_ERR: case fapi2::RC_EXTRACT_SBE_RC_PIBMEM_ECC_ERR: + case fapi2::RC_EXTRACT_SBE_RC_FI2CM_BIT_RATE_ERR_NONSECURE_MODE: l_action = P9_EXTRACT_SBE_RC::RESTART_SBE; break; case fapi2::RC_EXTRACT_SBE_RC_MAGIC_NUMBER_MISMATCH: - case fapi2::RC_EXTRACT_SBE_RC_FI2C_ECC_ERR_INSECURE_MODE: case fapi2::RC_EXTRACT_SBE_RC_FI2C_ECC_ERR: + case fapi2::RC_EXTRACT_SBE_RC_FI2C_ECC_ERR_NONSECURE_MODE: l_action = P9_EXTRACT_SBE_RC::REIPL_UPD_SEEPROM; break; - case fapi2::RC_EXTRACT_SBE_RC_FI2C_ERROR: case fapi2::RC_EXTRACT_SBE_RC_FI2C_TIMEOUT: + case fapi2::RC_EXTRACT_SBE_RC_SBE_L1_LOADER_FAIL: + case fapi2::RC_EXTRACT_SBE_RC_SBE_L2_LOADER_FAIL: case fapi2::RC_EXTRACT_SBE_RC_UNKNOWN_ERROR: l_action = P9_EXTRACT_SBE_RC::REIPL_BKP_SEEPROM; @@ -836,7 +836,6 @@ P9_EXTRACT_SBE_RC::RETURN_ACTION action_for_ffdc_rc(uint32_t i_rc) break; - case fapi2::RC_EXTRACT_SBE_RC_OTP_ECC_ERR_INSECURE_MODE: case fapi2::RC_EXTRACT_SBE_RC_BRANCH_TO_SEEPROM_FAIL: case fapi2::RC_EXTRACT_SBE_RC_UNEXPECTED_OTPROM_HALT: case fapi2::RC_EXTRACT_SBE_RC_OTP_ECC_ERR: |