diff options
author | Soma BhanuTej <soma.bhanu@in.ibm.com> | 2016-09-14 02:23:39 -0400 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-10-07 00:21:44 -0400 |
commit | ddf2fd32f298038b2c57b21fa33801fc44e2b04c (patch) | |
tree | a580fc3d135e1a3d79d015169215f4b9946f1d32 /src | |
parent | 00b8a27543f06bedc4fe7c1ddfcd9947f186f960 (diff) | |
download | talos-hostboot-ddf2fd32f298038b2c57b21fa33801fc44e2b04c.tar.gz talos-hostboot-ddf2fd32f298038b2c57b21fa33801fc44e2b04c.zip |
Level 2 HWP for p9_extract_sbe_rc - Ver2
Change-Id: I2801ddd9e7f4e819d9e893ab19d66bdee6615dfc
RTC:160843
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/29619
Reviewed-by: Sandeep Korrapati <sakorrap@in.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: SRINIVAS V. POLISETTY <srinivan@in.ibm.com>
Reviewed-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Reviewed-by: PARVATHI RACHAKONDA <prachako@in.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/29628
Reviewed-by: Hostboot Team <hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
4 files changed, 399 insertions, 146 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 9f52c396a..95e22bc92 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 @@ -25,7 +25,45 @@ //------------------------------------------------------------------------------ /// @file p9_extract_sbe_rc.C /// -/// @brief Check for errors on the PNOR , SEEPROM +/// @brief Check for errors on the SBE, OTPROM, PIBMEM & SEEPROM +/// Level 1 : +/// 1) Read the value of DBGPRO 0xE0005 & Store IAR +/// 2) Identify if PPE is halted from XSR Bit0, Continue only if halted +/// 3) If Halted, Check for Halt Conditions(HC) i.e XSR (1:3) +/// 4) If HC is all Zero report error else Print the Halt condition reported +/// 5) Print info of XSR bits 7,8,12,13,14,21,28 if TRUE +/// 6) Read the value of XIRAMEDR 0xE0004 & Store IR and EDR +/// 7) Check for Machine Check State(MCS) i.e XSR (29:31) +/// 8) if MCS=0x4, Report error as Program Interrupt for the address stored in EDR +/// 9) if MCS=0x1, 0x2, 0x3, Set the flag as Data Machine Check - l_data_mchk +/// Level 2 : +/// 1) Based on IAR value identifying the Memory Address range +/// OTPROM (0x000C0000 to 0x000C0378) +/// PIBMEM (0xFFFE8000 to 0xFFFFFFFF) +/// SEEPROM(0x80000000 to 0x80038E18) +/// 2) If IAR value is out of above address scope, report error +/// Level 3 : +/// 1) If in OTPROM address range, Collect OTPROM Status 0x00010002 +/// 1.1) Print info of error report bits if they are true (0,1,2,3,4,5,45,46) +/// 1.2) Map the OTPROM address to the known error at that location +/// 1.3) Report Error if ECC errors are detected in OTPROM +/// 2) If in PIBMEM address range, Collect PIBMEM status 0x00088005 +/// 2.1) Print info of error report bits in status if they are true (0,1,2,3,4,5,6,7,19,20,21,22,23,24,25,26) +/// 2.2) Report Error if ECC errors are detected in PIBMEM +/// 3) If in SEEPROM address range, Collect FI2CM Mode 0x000A0006, status 0x000A0002 & MIB Info 0xE0007 +/// 3.1) Print info of error report bits in status if they are true (0,1,2,3,4,5,41,42,43,45,46,47,48,49,50,53) +/// 3.2) Report Error if Mode reg I2C bit rate divisor (0:15) is < 0x0003 +/// 3.3) Report Error for FI2C errors +/// 3.4) Report Error if ECC errors are detected in SEEPROM +/// 3.5) Report Error if Mib Error rsp is non Zero (0x7-FI2C timeout Error, 0x4-FI2C Seeprom cfg Err, else-FI2C PIB Err) +/// Level 4 : +/// 1) If Data Machine Check error is true then look for the edr data range in SEEPROM/PIBMEM/OTPROM scope +/// 2) Collect the SIB Info from 0xE0006 +/// 3) If in OTPROM data range report error if RSP_INFO is non-Zero response (0x7-PIB timeout Error, else-Scom Err) +/// 3) If in PIBMEM data range, read MEM_Info (E0007) and report error if RSP_INFO is non-Zero response as Scom Err +/// 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 //------------------------------------------------------------------------------ // *HWP HW Owner : Soma BhanuTej <soma.bhanu@in.ibm.com> // *HWP HW Backup Owner : Srinivas V Naga <srinivan@in.ibm.com> @@ -42,39 +80,59 @@ #include <p9_misc_scom_addresses.H> #include <p9_misc_scom_addresses_fld.H> -fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip) + +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) { fapi2::buffer<uint64_t> l_data64; + fapi2::buffer<uint64_t> l_data64_dbgpro; + fapi2::buffer<uint64_t> l_data64_fi2c_status; + fapi2::buffer<uint64_t> l_data64_mib_mem_info; + fapi2::buffer<uint64_t> l_data64_mib_sib_info; fapi2::buffer<uint32_t> l_data32; fapi2::buffer<uint32_t> l_data32_ir; fapi2::buffer<uint32_t> l_data32_edr; - fapi2::buffer<uint32_t> l_data32_xsr; fapi2::buffer<uint32_t> l_data32_iar; bool l_ppe_halt_state = true; + bool l_data_mchk = false; bool otprom_addr_range = false; bool pibmem_addr_range = false; bool seeprom_addr_range = false; - bool FAIL = false; - uint32_t HC, MCS, otprom_addr; - - // OTPROM Address constants - uint32_t MAGIC_NUMBER_MISMATCH_LOCATION = 0xC015C; - uint32_t OTPROM_IMAGE_END_LOCATION = 0xC0158; + bool otprom_data_range = false; + bool pibmem_data_range = false; + bool seeprom_data_range = false; + uint32_t HC, MCS, otprom_addr, mem_error, sib_rsp_info; + + // FAPI_ASSERT condition constant + const bool FAIL = false; + // Address Range constants + const uint32_t OTPROM_MIN_RANGE = 0x000C0000; + 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; + + // OTPROM Address constants as per the image on 28/Sep/2016 + // 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; FAPI_INF("p9_extract_sbe_rc : Entering ..."); // XSR and IAR FAPI_DBG("p9_extract_sbe_rc : Reading PPE_XIDBGPRO"); - FAPI_TRY(getScom(i_target_chip, PU_PPE_XIDBGPRO, l_data64)); - l_data64.extractToRight(l_data32_xsr, 0, 32); - l_data64.extractToRight(l_data32_iar, 32, 32); + FAPI_TRY(getScom(i_target_chip, PU_PPE_XIDBGPRO, l_data64_dbgpro)); + l_data64_dbgpro.extractToRight(l_data32_iar, PU_PPE_XIDBGPRO_IAR, PU_PPE_XIDBGPRO_IAR_LEN); + FAPI_DBG("p9_extract_sbe_rc : PPE_XIDBGPRO : %#018lX", l_data64_dbgpro); + FAPI_DBG("p9_extract_sbe_rc : SBE IAR : %#08lX", l_data32_iar); - if (l_data32_xsr.getBit<0>()) + if (l_data64_dbgpro.getBit<PU_PPE_XIDBGPRO_XSR_HS>()) { FAPI_INF("p9_extract_sbe_rc : PPE is in HALT state"); l_ppe_halt_state = true; - } else { @@ -82,119 +140,118 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ l_ppe_halt_state = false; } - if(l_ppe_halt_state) { // ------- LEVEL 1 ------ // //Extract HC l_data32.flush<0>(); - l_data32_xsr.extractToRight(l_data32, 1, 3); + l_data64_dbgpro.extractToRight(l_data32, PU_PPE_XIDBGPRO_XSR_HC, PU_PPE_XIDBGPRO_XSR_HC_LEN); HC = l_data32; - if(HC != 0x0) - { - switch(HC) - { - case 0x1 : - FAPI_DBG("p9_extract_sbe_rc : XCR[CMD] written 111 to force-halt the processor."); - break; - - case 0x2 : - FAPI_DBG("p9_extract_sbe_rc : A second watchdog timer (WDT) event occurred while TCR[WRC]=11"); - break; - - case 0x3 : - FAPI_DBG("p9_extract_sbe_rc : Unmaskable interrupt halt"); - break; - - case 0x4 : - FAPI_DBG("p9_extract_sbe_rc : Debug halt"); - break; - - case 0x5 : - FAPI_DBG("p9_extract_sbe_rc : DBCR halt"); - break; - - case 0x6 : - FAPI_DBG("p9_extract_sbe_rc : The external halt_req input was active."); - break; - - case 0x7 : - FAPI_DBG("p9_extract_sbe_rc : Hardware failure"); - break; - - default : - FAPI_ERR("p9_extract_sbe_rc : INVALID HALT CONDITION HC=0x%x", HC); - break; - } - } - else + switch(HC) { - FAPI_INF("p9_extract_sbe_rc : Halt condition not reported"); + case 0x0 : + o_return_action = P9_EXTRACT_SBE_RC::RESTART_SBE; + FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_NEVER_STARTED(), + "ERROR:Halt Condition is all Zero, SBE engine was probably never started"); + break; + + case 0x1 : + FAPI_ERR("p9_extract_sbe_rc : XCR[CMD] written 111 to force-halt the processor."); + break; + + case 0x2 : + FAPI_ERR("p9_extract_sbe_rc : A second watchdog timer (WDT) event occurred while TCR[WRC]=11"); + break; + + case 0x3 : + FAPI_ERR("p9_extract_sbe_rc : Unmaskable interrupt halt"); + break; + + case 0x4 : + FAPI_ERR("p9_extract_sbe_rc : Debug halt"); + break; + + case 0x5 : + FAPI_ERR("p9_extract_sbe_rc : DBCR halt"); + break; + + case 0x6 : + FAPI_ERR("p9_extract_sbe_rc : The external halt_req input was active."); + break; + + case 0x7 : + FAPI_ERR("p9_extract_sbe_rc : Hardware failure"); + break; + + default : + FAPI_ERR("p9_extract_sbe_rc : INVALID HALT CONDITION HC=0x%x", HC); + break; } //Extract TRAP - if(l_data32_xsr.getBit<7>()) + if(l_data64_dbgpro.getBit<PU_PPE_XIDBGPRO_XSR_TRAP>()) { FAPI_DBG("p9_extract_sbe_rc : TRAP Instruction Debug Event Occured"); } //Extract IAC - if(l_data32_xsr.getBit<8>()) + if(l_data64_dbgpro.getBit<PU_PPE_XIDBGPRO_XSR_IAC>()) { FAPI_DBG("p9_extract_sbe_rc : Instruction Address Compare Debug Event Occured"); } //Extract DACR - if(l_data32_xsr.getBit<12>()) + if(l_data64_dbgpro.getBit<PU_PPE_XIDBGPRO_XSR_DACR>()) { FAPI_DBG("p9_extract_sbe_rc : Data Address Compare (Read) Debug Event Occured"); } //Extract DACW - if(l_data32_xsr.getBit<13>()) + if(l_data64_dbgpro.getBit<PU_PPE_XIDBGPRO_XSR_DACW>()) { FAPI_DBG("p9_extract_sbe_rc : Data Address Compare (Write) Debug Event Occured"); } //Extract WS - if(l_data32_xsr.getBit<14>()) + if(l_data64_dbgpro.getBit<PU_PPE_XIDBGPRO_NULL_MSR_WE>()) { FAPI_DBG("p9_extract_sbe_rc : In WAIT STATE"); } //Extract EP - if(l_data32_xsr.getBit<21>()) + if(l_data64_dbgpro.getBit<PU_PPE_XIDBGPRO_XSR_EP>()) { FAPI_DBG("p9_extract_sbe_rc : Maskable Event Pending"); } //Extract MFE - if(l_data32_xsr.getBit<28>()) + if(l_data64_dbgpro.getBit<PU_PPE_XIDBGPRO_XSR_MFE>()) { - FAPI_DBG("p9_extract_sbe_rc : Multiple Fault Error Occured"); + FAPI_ERR("p9_extract_sbe_rc : Multiple Fault Error Occured"); } //Extract MCS l_data32.flush<0>(); - l_data32_xsr.extractToRight(l_data32, 29, 3); + l_data64_dbgpro.extractToRight(l_data32, PU_PPE_XIDBGPRO_XSR_MCS, PU_PPE_XIDBGPRO_XSR_MCS_LEN); MCS = l_data32; // IR and EDR FAPI_DBG("p9_extract_sbe_rc : Reading PPE_XIRAMEDR"); FAPI_TRY(getScom(i_target_chip, PU_PPE_XIRAMEDR, l_data64)); - l_data64.extractToRight(l_data32_ir, 0, 32); - l_data64.extractToRight(l_data32_edr, 32, 32); + 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) { - FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_PROGRAM_INTERRUPT(), "ERROR:Program interrupt promoted for Address=0x%08llX", + o_return_action = P9_EXTRACT_SBE_RC::RESTART_SBE; + FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_PROGRAM_INTERRUPT(), "ERROR:Program interrupt promoted for Address=%08lX", l_data32_edr); } else { - FAPI_DBG("p9_extract_sbe_rc : Data/Alignment/Data Machine check interrupt for Data=0x%08llX", l_data32_edr); + FAPI_DBG("p9_extract_sbe_rc : Data/Alignment/Data Machine check interrupt for Data=%08lX", l_data32_edr); switch (MCS) { @@ -204,14 +261,17 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ case 0x1 : FAPI_DBG("p9_extract_sbe_rc : Data machine check - load"); + l_data_mchk = true; break; case 0x2 : FAPI_DBG("p9_extract_sbe_rc : Data machine check - precise store"); + l_data_mchk = true; break; case 0x3 : FAPI_DBG("p9_extract_sbe_rc : Data machine check - imprecise store"); + l_data_mchk = true; break; case 0x5 : @@ -234,24 +294,25 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ // ------- LEVEL 2 ------ // - if((0x00C00000 <= l_data32_iar) && (l_data32_iar >= 0x000C0378)) + if((OTPROM_MIN_RANGE <= l_data32_iar) && (l_data32_iar <= OTPROM_MAX_RANGE)) { FAPI_DBG("p9_extract_sbe_rc : IAR contains OTPROM address"); otprom_addr_range = true; } - else if((0xFFE80000 <= l_data32_iar) && (l_data32_iar >= 0xFFEFFFFF)) + else if((PIBMEM_MIN_RANGE <= l_data32_iar) && (l_data32_iar <= PIBMEM_MAX_RANGE)) { FAPI_DBG("p9_extract_sbe_rc : IAR contains PIBMEM address"); pibmem_addr_range = true; } - else if((0x80000000 <= l_data32_iar) && (l_data32_iar >= 0x8000FFFF)) + else if((SEEPROM_MIN_RANGE <= l_data32_iar) && (l_data32_iar <= SEEPROM_MAX_RANGE)) { FAPI_DBG("p9_extract_sbe_rc : IAR contains SEEPROM address"); seeprom_addr_range = true; } else { - FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED(), "ERROR:Address 0x%08llX is out of range", l_data32_iar); + o_return_action = P9_EXTRACT_SBE_RC::RESTART_SBE; + FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED(), "ERROR:Address %08lX is out of range", l_data32_iar); } // ------- LEVEL 3 ------ // @@ -303,24 +364,30 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ } - //-- FAPI Asserts section --// + //-- 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_OTPROM_UNCORRECTED_ERROR(), "ERROR:Uncorrectable error detected in OTPROM memory read"); - // map the OTPROM address to the known error at that location + // Map the OTPROM address to the known error at that location // the OTPROM is write-once at mfg test, so addresses should remain fixed in this code otprom_addr = l_data32_iar; if(otprom_addr == MAGIC_NUMBER_MISMATCH_LOCATION) { + o_return_action = P9_EXTRACT_SBE_RC::RE_IPL; FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_MAGIC_NUMBER_MISMATCH(), "ERROR:SEEPROM magic number didn't match"); } - else if(otprom_addr > OTPROM_IMAGE_END_LOCATION) + else if(otprom_addr == OTPROM_IMAGE_END_LOCATION) { + o_return_action = P9_EXTRACT_SBE_RC::RE_IPL; FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_BRANCH_TO_SEEPROM_FAIL(), "ERROR:Branch to SEEPROM didn't happen"); } else { + o_return_action = P9_EXTRACT_SBE_RC::RE_IPL; FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_UNEXPECTED_OTPROM_HALT(), - "ERROR:Halted in OTPROM at address 0x%08llX, but not at an expected halt location", otprom_addr); + "ERROR:Halted in OTPROM at address %08lX, but not at an expected halt location", otprom_addr); } } @@ -352,7 +419,7 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ if(l_data64.getBit<PU_PIBMEM_STATUS_REG_ECC_CORRECTED_ERROR_PIB>()) { - FAPI_ERR("p9_extract_sbe_rc : PIBMEM::Corrected error in PIB mem read"); + FAPI_INF("p9_extract_sbe_rc : PIBMEM::Corrected error in PIB mem read"); } if(l_data64.getBit<PU_PIBMEM_STATUS_REG_WRITE_RST_INTERRUPT_PIB>()) @@ -387,7 +454,7 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ if(l_data64.getBit<PU_PIBMEM_STATUS_REG_ECC_CORRECTED_ERROR_FACES>()) { - FAPI_ERR("p9_extract_sbe_rc : PIBMEM::Corrected error in fast acess read operation"); + FAPI_INF("p9_extract_sbe_rc : PIBMEM::Corrected error in fast acess read operation"); } if(l_data64.getBit<PU_PIBMEM_STATUS_REG_BAD_ARRAY_ADDRESS_FACES>()) @@ -405,19 +472,15 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ FAPI_ERR("p9_extract_sbe_rc : PIBMEM::Reset occurred during read operation to PIBMEM from fast acess side"); } - //-- FAPI Asserts section --// - + //-- 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_UNCORRECTED_ERROR_PIB(), "ERROR:Uncorrectable error occurred while PIB memory read"); - FAPI_ASSERT(l_data64.getBit<PU_PIBMEM_STATUS_REG_ECC_CORRECTED_ERROR_PIB>() != 1, - fapi2::EXTRACT_SBE_RC_PIBMEM_SOFT_ECC_ERROR_PIB(), "WARN:Corrected error in PIB mem read from 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_UNCORRECTED_ERROR_FACES(), - "ERROR:Uncorrectable error occurred while fast acess interface read"); - FAPI_ASSERT(l_data64.getBit<PU_PIBMEM_STATUS_REG_ECC_CORRECTED_ERROR_FACES>() != 1, - fapi2::EXTRACT_SBE_RC_PIBMEM_SOFT_ECC_ERROR_FACES(), "WARN:Corrected error in fast acess read operation"); - FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_HALT_PIBMEM(), "ERROR:Halted in PIBMEM address location 0x%08llX", - l_data32_iar); + "ERROR:Uncorrectable error occurred while fast access interface read"); } if(seeprom_addr_range) @@ -430,109 +493,191 @@ fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_ l_data64.extractToRight(l_data32, 0, 16); uint32_t i2c_speed = l_data32; - if(i2c_speed <= 0x0003) + if(i2c_speed < 0x0003) { + o_return_action = P9_EXTRACT_SBE_RC::RE_IPL; FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_FI2CM_BIT_RATE_ERR(), - "ERROR:Speed on the I2C bit rate divisor is less than min speed value (0x0003), I2C Speed read is 0x%04llX", i2c_speed); + "ERROR:Speed on the I2C bit rate divisor is less than min speed value (0x0003), I2C Speed read is %04lX", i2c_speed); } FAPI_DBG("p9_extract_sbe_rc : Reading FI2CM status register"); - FAPI_TRY(getScom(i_target_chip, PU_STATUS_REGISTER_B, l_data64)); - FAPI_DBG("p9_extract_sbe_rc : FI2CM status : %#018lX", l_data64); + 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.getBit<PU_STATUS_REGISTER_B_BUS_ADDR_NVLD_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_WRITE_NVLD_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_READ_NVLD_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_ADDR_P_ERR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_PAR_ERR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_LB_PARITY_ERROR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_ECC_CORRECTED_ERROR_0>()) + if(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_CORRECTED_ERROR_0>()) { - FAPI_ERR("p9_extract_sbe_rc : FI2CM::WARN:One bit flip was there in data and been corrected"); + FAPI_INF("p9_extract_sbe_rc : FI2CM::WARN:One bit flip was there in data and been corrected"); } - if(l_data64.getBit<PU_STATUS_REGISTER_B_ECC_UNCORRECTED_ERROR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_ECC_CONFIG_ERROR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_INVALID_COMMAND_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_PARITY_ERROR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_OVERRUN_ERROR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_BACK_END_ACCESS_ERROR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_ARBITRATION_LOST_ERROR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_NACK_RECEIVED_ERROR_0>()) + 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.getBit<PU_STATUS_REGISTER_B_BUS_STOP_ERROR_0>()) + 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"); } - //-- FAPI Asserts section --// - - FAPI_ASSERT(l_data64.getBit<PU_STATUS_REGISTER_B_ECC_UNCORRECTED_ERROR_0>() != 1, - fapi2::EXTRACT_SBE_RC_UNRECOVERABLE_ECC_SEEPROM(), - "ERROR:There are 2 bit flips in read data which cannot be corrected"); - FAPI_ASSERT(l_data64.getBit<PU_STATUS_REGISTER_B_ECC_UNCORRECTED_ERROR_0>() != 1, + //-- 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(), + "FI2C I2C Error detected"); + + o_return_action = P9_EXTRACT_SBE_RC::REIPL_BKP_SEEPROM; + FAPI_ASSERT(l_data64_fi2c_status.getBit<PU_STATUS_REGISTER_B_ECC_UNCORRECTED_ERROR_0>() != 1, fapi2::EXTRACT_SBE_RC_UNRECOVERABLE_ECC_SEEPROM(), "ERROR:There are 2 bit flips in read data which cannot be corrected"); - FAPI_ASSERT(l_data64.getBit<PU_STATUS_REGISTER_B_ECC_CORRECTED_ERROR_0>() != 1, - fapi2::EXTRACT_SBE_RC_SOFT_ECC_ERROR_SEEPROM(), "WARN:One bit flip was there in data and been corrected"); - FAPI_ASSERT(FAIL, fapi2::EXTRACT_SBE_RC_HALT_SEEPROM(), "ERROR:Halted in SEEPROM address location 0x%08llX", - l_data32_iar); } + + // ------- LEVEL 4 ------ // + if(l_data_mchk) + { + if((OTPROM_MIN_RANGE <= l_data32_edr) && (l_data32_edr <= OTPROM_MAX_RANGE)) + { + FAPI_DBG("p9_extract_sbe_rc : EDR contains OTPROM address"); + otprom_data_range = true; + } + else if((PIBMEM_MIN_RANGE <= l_data32_edr) && (l_data32_edr <= PIBMEM_MAX_RANGE)) + { + FAPI_DBG("p9_extract_sbe_rc : EDR contains PIBMEM address"); + pibmem_data_range = true; + } + else if((SEEPROM_MIN_RANGE <= l_data32_edr) && (l_data32_edr <= SEEPROM_MAX_RANGE)) + { + FAPI_DBG("p9_extract_sbe_rc : EDR contains SEEPROM address"); + seeprom_data_range = true; + } + else + { + FAPI_DBG("p9_extract_sbe_rc : EDR contains out of scope address = %08lX", l_data32_edr); + } + + if(otprom_data_range || seeprom_data_range) // SIB Info is valid only for Otprom & Seeprom data + { + //-- MIB External Interface SIB Info + FAPI_DBG("p9_extract_sbe_rc : Reading MIB SIB Info register"); + FAPI_TRY(getScom(i_target_chip, PU_MIB_XISIB, l_data64_mib_sib_info)); + FAPI_DBG("p9_extract_sbe_rc : MIB SIB Info : %#018lX", l_data64_mib_sib_info); + + l_data32.flush<0>(); + l_data64_mib_sib_info.extractToRight(l_data32, PU_MIB_XISIB_PIB_RSP_INFO, PU_MIB_XISIB_PIB_RSP_INFO_LEN); + sib_rsp_info = l_data32; + } + + if(otprom_data_range) + { + o_return_action = P9_EXTRACT_SBE_RC::RESTART_CBS; + FAPI_ASSERT((!(sib_rsp_info == 0x7)), fapi2::EXTRACT_SBE_RC_PIB_TIMEOUT(), "PIB Timeout error detected"); + + o_return_action = P9_EXTRACT_SBE_RC::RESTART_CBS; + FAPI_ASSERT((!(sib_rsp_info != 0x0)), fapi2::EXTRACT_SBE_RC_SCOM_ERR(), "Scom error detected"); + } + + if(pibmem_data_range) + { + //-- MIB External Interface MEM Info + FAPI_DBG("p9_extract_sbe_rc : Reading MIB MEM Info register"); + FAPI_TRY(getScom(i_target_chip, PU_MIB_XIMEM, l_data64_mib_mem_info)); + FAPI_DBG("p9_extract_sbe_rc : MIB MEM Info : %#018lX", l_data64_mib_mem_info); + + l_data32.flush<0>(); + l_data64_mib_mem_info.extractToRight(l_data32, PU_MIB_XIMEM_MEM_ERROR, PU_MIB_XIMEM_MEM_ERROR_LEN); + mem_error = l_data32; + + o_return_action = P9_EXTRACT_SBE_RC::RESTART_CBS; + FAPI_ASSERT((!(mem_error != 0x0)), fapi2::EXTRACT_SBE_RC_PIBMEM_ERR(), "Error detected during pibmem access"); + } + + if(seeprom_data_range) + { + o_return_action = P9_EXTRACT_SBE_RC::REIPL_BKP_SEEPROM; + FAPI_ASSERT((!(sib_rsp_info == 0x7)), fapi2::EXTRACT_SBE_RC_FI2C_TIMEOUT(), "FI2C Timeout error detected"); + + o_return_action = P9_EXTRACT_SBE_RC::RESTART_CBS; + FAPI_ASSERT((!(sib_rsp_info == 0x4)), fapi2::EXTRACT_SBE_RC_FI2C_SPRM_CFG_ERR(), "FI2C SEEPROM config error detected"); + + o_return_action = P9_EXTRACT_SBE_RC::RESTART_CBS; + FAPI_ASSERT((!(sib_rsp_info != 0x0)), fapi2::EXTRACT_SBE_RC_FI2C_PIB_ERR(), "FI2C PIB error detected"); + } + } + + //Unknown + FAPI_ERR("Halted due to unknown error at IAR location %08lX", l_data32_iar); + o_return_action = P9_EXTRACT_SBE_RC::RE_IPL; + FAPI_SET_HWP_ERROR(fapi2::current_err, RC_EXTRACT_SBE_RC_UNKNOWN_ERROR) } FAPI_INF("p9_extract_sbe_rc : Exiting ..."); 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 ac6a65636..a5f35fb77 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 @@ -25,7 +25,7 @@ //------------------------------------------------------------------------------ /// @file p9_extract_sbe_rc.H /// -/// @brief Check for errors on the PNOR , SEEPROM +/// @brief Check for errors on the SBE, OTPROM, PIBMEM & SEEPROM //------------------------------------------------------------------------------ // *HWP HW Owner : Soma BhanuTej <soma.bhanu@in.ibm.com> // *HWP HW Backup Owner : Srinivas V Naga <srinivan@in.ibm.com> @@ -42,16 +42,30 @@ #include <fapi2.H> +namespace P9_EXTRACT_SBE_RC +{ +enum RETURN_ACTION +{ + RESTART_SBE = 1, // Trigger external HRESET to reset SBE + RESTART_CBS = 2, // Trigger Warm ipl where we don't switch off VSB just toggle start_cbs from FSP + REIPL_BKP_SEEPROM = 3, // Run IPL by selecting backup seeprom + RE_IPL = 4, // Reload/update of SEEPROM required or deconfig the chip + NO_RECOVERY_ACTION = 5 // No recovery action possible to correct this error, Replace the chip with new one +}; +}; -typedef fapi2::ReturnCode (*p9_extract_sbe_rc_FP_t)(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>&); +typedef fapi2::ReturnCode (*p9_extract_sbe_rc_FP_t)(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>&, + P9_EXTRACT_SBE_RC::RETURN_ACTION&); -/// @brief called on all chips(master and slaves) to look for any correctable errors on the PNOR and/or SEEPROM, the soft_error flag tells the procedure not to generate error if no HW issue. +/// @brief called on all chips(master and slaves) to look for any correctable errors on the SBE, OTPROM, PIBMEM & SEEPROM, the soft_error flag tells the procedure not to generate error if no HW issue. /// /// @param[in] i_target_chiplet Reference to TARGET_TYPE_PROC_CHIP target +/// @param[out] o_return_action Returns the action to be taken on an error /// @return FAPI2_RC_SUCCESS if success, else error code. extern "C" { - fapi2::ReturnCode p9_extract_sbe_rc(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip); + 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); } #endif 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 950dfd279..6f6936bb3 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 @@ -27,76 +27,166 @@ <hwpErrors> <!-- ******************************************************************** --> - <!-- Halt codes --> + <!-- Halt codes for PPE --> + <!-- ******************************************************************** --> + <hwpError> + <rc>RC_EXTRACT_SBE_RC_NEVER_STARTED</rc> + <description> + SBE engine was probably never started + Action:Retrigger IPL or HRESET [RESTART_SBE] + </description> + </hwpError> <!-- ******************************************************************** --> <hwpError> <rc>RC_EXTRACT_SBE_RC_PROGRAM_INTERRUPT</rc> - <description>Program interrupt promoted</description> + <description> + Program interrupt promoted + Action:Code update required [RESTART_SBE] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> <rc>RC_EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED</rc> - <description>Address scope out of range</description> + <description> + Address scope out of range + Action:Code update required [RESTART_SBE] + </description> + </hwpError> + <!-- ******************************************************************** --> + <!-- Halt codes for OTPROM --> + <!-- ******************************************************************** --> + <hwpError> + <rc>RC_EXTRACT_SBE_RC_OTPROM_UNCORRECTED_ERROR</rc> + <description> + Uncorrectable error detected in OTPROM memory read + Action:No recovery action possible to correct this error [NO_RECOVERY_ACTION] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> <rc>RC_EXTRACT_SBE_RC_MAGIC_NUMBER_MISMATCH</rc> - <description>SEEPROM magic number didn't match</description> + <description> + SEEPROM magic number didn't match + Action:Reload/update of OTPROM and SEEPROM required [RE_IPL] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> <rc>RC_EXTRACT_SBE_RC_BRANCH_TO_SEEPROM_FAIL</rc> - <description>Branch to SEEPROM didn't happen</description> + <description> + Branch to SEEPROM didn't happen + Action:Reload/update of OTPROM required [RE_IPL] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> <rc>RC_EXTRACT_SBE_RC_UNEXPECTED_OTPROM_HALT</rc> - <description>Halted in OTPROM, but not at an expected halt location</description> + <description> + Halted in OTPROM, but not at an expected halt location + Action:Reload/update of OTPROM required [RE_IPL] + </description> </hwpError> <!-- ******************************************************************** --> + <!-- Halt codes for PIBMEM --> + <!-- ******************************************************************** --> <hwpError> <rc>RC_EXTRACT_SBE_RC_PIBMEM_ECC_UNCORRECTED_ERROR_PIB</rc> - <description>Uncorrectable error occurred while PIB memory read</description> + <description> + Uncorrectable error occurred while PIB memory read + Action:Reload/update of PIBMEM required [RESTART_SBE] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_PIBMEM_SOFT_ECC_ERROR_PIB</rc> - <description>WARN:Corrected error in PIB mem read from PIB side</description> + <rc>RC_EXTRACT_SBE_RC_PIBMEM_ECC_UNCORRECTED_ERROR_FACES</rc> + <description> + Uncorrectable error occurred while fast acess interface read + Action:Reload/update of PIBMEM required [RESTART_SBE] + </description> </hwpError> <!-- ******************************************************************** --> + <!-- Halt codes for SEEPROM --> + <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_PIBMEM_ECC_UNCORRECTED_ERROR_FACES</rc> - <description>Uncorrectable error occurred while fast acess interface read</description> + <rc>RC_EXTRACT_SBE_RC_FI2CM_BIT_RATE_ERR</rc> + <description> + I2C bit rate divisor is less than min speed value + Action:Reload/update of OTPROM required [RE_IPL] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_PIBMEM_SOFT_ECC_ERROR_FACES</rc> - <description>WARN:Corrected error in fast acess read operation</description> + <rc>RC_EXTRACT_SBE_RC_FI2C_ERROR</rc> + <description> + There are an FI2C I2C Error detected + Action:Reload/update of SEEPROM required or switch seeprom [REIPL_BKP_SEEPROM] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_HALT_PIBMEM</rc> - <description>Halted in PIBMEM address location</description> + <rc>RC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_SEEPROM</rc> + <description> + There are 2 bit flips in read data which cannot be corrected + Action:Reload/update of SEEPROM required or switch seeprom [REIPL_BKP_SEEPROM] + </description> </hwpError> <!-- ******************************************************************** --> + <!-- Halt codes for Data Machine Check --> + <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_FI2CM_BIT_RATE_ERR</rc> - <description>I2C bit rate divisor is less than min speed value</description> + <rc>RC_EXTRACT_SBE_RC_PIB_TIMEOUT</rc> + <description> + PIB Timeout error detected + Action:Warm ipl where we don't switch off VSB just toggle start_cbs from FSP [RESTART_CBS] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_SEEPROM</rc> - <description>There are 2 bit flips in read data which cannot be corrected</description> + <rc>RC_EXTRACT_SBE_RC_SCOM_ERR</rc> + <description> + Scom error detected + Action:Warm ipl where we don't switch off VSB just toggle start_cbs from FSP [RESTART_CBS] + </description> + </hwpError> + <!-- ******************************************************************** --> + <hwpError> + <rc>RC_EXTRACT_SBE_RC_PIBMEM_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> + </hwpError> + <!-- ******************************************************************** --> + <hwpError> + <rc>RC_EXTRACT_SBE_RC_FI2C_TIMEOUT</rc> + <description> + FI2C Timeout error detected + Action:Reload/update of SEEPROM required or switch seeprom [REIPL_BKP_SEEPROM] + </description> + </hwpError> + <!-- ******************************************************************** --> + <hwpError> + <rc>RC_EXTRACT_SBE_RC_FI2C_SPRM_CFG_ERR</rc> + <description> + FI2C SEEPROM config error detected + Action:Warm ipl where we don't switch off VSB just toggle start_cbs from FSP [RESTART_CBS] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_SEEPROM</rc> - <description>WARN:One bit flip was there in data and been corrected</description> + <rc>RC_EXTRACT_SBE_RC_FI2C_PIB_ERR</rc> + <description> + FI2C PIB error detected + Action:Warm ipl where we don't switch off VSB just toggle start_cbs from FSP [RESTART_CBS] + </description> </hwpError> <!-- ******************************************************************** --> <hwpError> - <rc>RC_EXTRACT_SBE_RC_HALT_SEEPROM</rc> - <description>Halted in SEEPROM address location</description> + <rc>RC_EXTRACT_SBE_RC_UNKNOWN_ERROR</rc> + <description> + Unknown error has occured, So debug has to be done to understand the error + Action:No automatic action can be taken [RE_IPL] + </description> </hwpError> <!-- ******************************************************************** --> </hwpErrors> diff --git a/src/usr/isteps/istep08/call_proc_check_slave_sbe_seeprom_complete.C b/src/usr/isteps/istep08/call_proc_check_slave_sbe_seeprom_complete.C index 614386367..4c820cd5d 100644 --- a/src/usr/isteps/istep08/call_proc_check_slave_sbe_seeprom_complete.C +++ b/src/usr/isteps/istep08/call_proc_check_slave_sbe_seeprom_complete.C @@ -228,8 +228,12 @@ void* call_proc_check_slave_sbe_seeprom_complete( void *io_pArgs ) " on processor target %.8X", TARGETING::get_huid(l_cpu_target) ); + //@TODO-RTC:100963-Do something with the RETURN_ACTION + P9_EXTRACT_SBE_RC::RETURN_ACTION l_rcAction + = P9_EXTRACT_SBE_RC::RE_IPL; FAPI_INVOKE_HWP(l_errl, p9_extract_sbe_rc, - l_fapi2ProcTarget); + l_fapi2ProcTarget, + l_rcAction); if (l_errl) { TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, |