summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt K. Light <mklight@us.ibm.com>2016-10-04 12:06:19 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-02-17 15:36:34 -0500
commit42ebb8a83e405a93188c8b052d5a6b6586e62090 (patch)
treed28b25dab945683d050f57be8157786509dd3a90
parenta4d11d7fbb292a1f83cbb7f38c19f02ad6067888 (diff)
downloadblackbird-hostboot-42ebb8a83e405a93188c8b052d5a6b6586e62090.tar.gz
blackbird-hostboot-42ebb8a83e405a93188c8b052d5a6b6586e62090.zip
store hw access errors to a ffdc buffer for p9_pib2pcb_mux_seq
Change-Id: I2009ca5f26d24e518e990b3d08449d0dcf71f47d Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30688 Tested-by: Jenkins Server <pfd-jenkins+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: Deepak Kodihalli <dkodihal@in.ibm.com> Reviewed-by: PARVATHI RACHAKONDA <prachako@in.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30692 Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Tested-by: Daniel M. Crowell <dcrowell@us.ibm.com>
-rw-r--r--src/import/chips/p9/procedures/hwp/ffdc/p9_pib2pcb_mux_seq.C79
-rw-r--r--src/import/chips/p9/procedures/xml/error_info/p9_start_cbs_errors.xml6
2 files changed, 64 insertions, 21 deletions
diff --git a/src/import/chips/p9/procedures/hwp/ffdc/p9_pib2pcb_mux_seq.C b/src/import/chips/p9/procedures/hwp/ffdc/p9_pib2pcb_mux_seq.C
index aaded2189..8ec4b938a 100644
--- a/src/import/chips/p9/procedures/hwp/ffdc/p9_pib2pcb_mux_seq.C
+++ b/src/import/chips/p9/procedures/hwp/ffdc/p9_pib2pcb_mux_seq.C
@@ -43,10 +43,16 @@
#include <p9_perv_scom_addresses.H>
#include <p9_perv_scom_addresses_fld.H>
+#define RC_CONDITIONAL_SET_BIT(RC, BUFFER, BIT) \
+ if (RC) \
+ { \
+ BUFFER.setBit<BIT>(); \
+ }
fapi2::ReturnCode p9_pib2pcb_mux_seq(const fapi2::ffdc_t& i_chip,
fapi2::ReturnCode& o_rc)
{
+ fapi2::ReturnCode l_rc;
fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> l_target_chip =
*(reinterpret_cast<const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> *>(i_chip.ptr()));
@@ -58,6 +64,7 @@ fapi2::ReturnCode p9_pib2pcb_mux_seq(const fapi2::ffdc_t& i_chip,
fapi2::buffer<uint64_t>l_opcg_0;
fapi2::buffer<uint64_t>l_opcg_1;
fapi2::buffer<uint64_t>l_opcg_2;
+ fapi2::buffer<uint64_t>l_hw_access_errors;
fapi2::ffdc_t UNIT_FFDC_DATA_SL;
fapi2::ffdc_t UNIT_FFDC_DATA_NSL;
@@ -67,66 +74,81 @@ fapi2::ReturnCode p9_pib2pcb_mux_seq(const fapi2::ffdc_t& i_chip,
fapi2::ffdc_t UNIT_FFDC_DATA_OPCG0;
fapi2::ffdc_t UNIT_FFDC_DATA_OPCG1;
fapi2::ffdc_t UNIT_FFDC_DATA_OPCG2;
+ // FFDC to keep track of scom fails in pib2pcb_mux_seq
+ fapi2::ffdc_t UNIT_FFDC_MUX_SEQ_HW_ERROR;
fapi2::buffer<uint32_t> l_data32_root_ctrl0;
fapi2::buffer<uint32_t> l_data32;
FAPI_INF("p9_pib2pcb_mux_seq: Entering ...");
//Setting ROOT_CTRL0 register value
- fapi2::getCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ l_rc = fapi2::getCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 0)
l_data32_root_ctrl0.clearBit<PERV_ROOT_CTRL0_SET_VDD2VIO_LVL_FENCE_DC>(); //CFAM.ROOT_CTRL0.VDD2VIO_LVL_FENCE_DC = 0
- fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ l_rc = fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 1)
//Setting PERV_CTRL0 register value
- fapi2::getCfamRegister(l_target_chip, PERV_PERV_CTRL0_FSI, l_data32);
+ l_rc = fapi2::getCfamRegister(l_target_chip, PERV_PERV_CTRL0_FSI, l_data32);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 2)
l_data32.setBit<31>(); //CFAM.PERV_CTRL0.TP_PLLCHIPLET_FORCE_OUT_EN_DC = 1
- fapi2::putCfamRegister(l_target_chip, PERV_PERV_CTRL0_FSI, l_data32);
+ l_rc = fapi2::putCfamRegister(l_target_chip, PERV_PERV_CTRL0_FSI, l_data32);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 3)
//Setting ROOT_CTRL0 register value
//CFAM.ROOT_CTRL0.TPFSI_TP_FENCE_VTLIO_DC = 0
l_data32_root_ctrl0.clearBit<PERV_ROOT_CTRL0_SET_TPFSI_TP_FENCE_VTLIO_DC>();
- fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ l_rc = fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 4)
//Setting ROOT_CTRL0 register value
l_data32_root_ctrl0.clearBit<PERV_ROOT_CTRL0_SET_FENCE0_DC>(); //CFAM.ROOT_CTRL0.FENCE0_DC = 0
l_data32_root_ctrl0.clearBit<PERV_ROOT_CTRL0_SET_FENCE1_DC>(); //CFAM.ROOT_CTRL0.FENCE1_DC = 0
l_data32_root_ctrl0.clearBit<PERV_ROOT_CTRL0_SET_FENCE2_DC>(); //CFAM.ROOT_CTRL0.FENCE2_DC = 0
- fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ l_rc = fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 5)
//Setting ROOT_CTRL0 register value
l_data32_root_ctrl0.setBit<PERV_ROOT_CTRL0_SET_OOB_MUX>(); //CFAM.ROOT_CTRL0.OOB_MUX = 1
- fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ l_rc = fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 6)
//Setting ROOT_CTRL0 register value
l_data32_root_ctrl0.setBit<PERV_ROOT_CTRL0_SET_PCB_RESET_DC>(); //CFAM.ROOT_CTRL0.PCB_RESET_DC = 1
- fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ l_rc = fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 7)
//Setting ROOT_CTRL0 register value
l_data32_root_ctrl0.setBit<PERV_ROOT_CTRL0_SET_PIB2PCB_DC>(); //CFAM.ROOT_CTRL0.PIB2PCB_DC = 1
- fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ l_rc = fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 8)
//Setting ROOT_CTRL0 register value
l_data32_root_ctrl0.clearBit<PERV_ROOT_CTRL0_SET_PCB_RESET_DC>(); //CFAM.ROOT_CTRL0.PCB_RESET_DC = 0
- fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ l_rc = fapi2::putCfamRegister(l_target_chip, PERV_ROOT_CTRL0_FSI, l_data32_root_ctrl0);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 9)
FAPI_INF("p9_pib2pcb_mux_seq: Check for Clocks running SL");
//Getting CLOCK_STAT_SL register value
- fapi2::getScom(l_target_chip, PERV_TP_CLOCK_STAT_SL,
- l_sl_clock_status); //l_sl_clock_status = PERV.CLOCK_STAT_SL
+ l_rc = fapi2::getScom(l_target_chip, PERV_TP_CLOCK_STAT_SL,
+ l_sl_clock_status); //l_sl_clock_status = PERV.CLOCK_STAT_SL
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 10)
UNIT_FFDC_DATA_SL.ptr() = l_sl_clock_status.pointer();
UNIT_FFDC_DATA_SL.size() = l_sl_clock_status.template getLength<uint8_t>();
//Getting CLOCK_STAT_NSL register value
- fapi2::getScom(l_target_chip, PERV_TP_CLOCK_STAT_NSL,
- l_nsl_clock_status); //l_nsl_clock_status = PERV.CLOCK_STAT_NSL
+ l_rc = fapi2::getScom(l_target_chip, PERV_TP_CLOCK_STAT_NSL,
+ l_nsl_clock_status); //l_nsl_clock_status = PERV.CLOCK_STAT_NSL
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 11)
UNIT_FFDC_DATA_NSL.ptr() = l_nsl_clock_status.pointer();
UNIT_FFDC_DATA_NSL.size() = l_nsl_clock_status.template getLength<uint8_t>();
//Getting CLOCK_STAT_ARY register value
- fapi2::getScom(l_target_chip, PERV_TP_CLOCK_STAT_ARY,
- l_ary_clock_status); //l_ary_clock_status = PERV.CLOCK_STAT_ARY
+ l_rc = fapi2::getScom(l_target_chip, PERV_TP_CLOCK_STAT_ARY,
+ l_ary_clock_status); //l_ary_clock_status = PERV.CLOCK_STAT_ARY
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 12)
UNIT_FFDC_DATA_ARY.ptr() = l_ary_clock_status.pointer();
UNIT_FFDC_DATA_ARY.size() = l_ary_clock_status.template getLength<uint8_t>();
@@ -134,13 +156,19 @@ fapi2::ReturnCode p9_pib2pcb_mux_seq(const fapi2::ffdc_t& i_chip,
FAPI_INF("p9_pib2pcb_mux_seq: SL Clock status register is %#018lX, %#018lX, %#018lX,", l_sl_clock_status,
l_nsl_clock_status, l_ary_clock_status);
- fapi2::getScom(l_target_chip, PERV_TP_SCAN_REGION_TYPE, l_scan_region);
+ l_rc = fapi2::getScom(l_target_chip, PERV_TP_SCAN_REGION_TYPE, l_scan_region);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 13)
UNIT_FFDC_DATA_SCAN_REGION.ptr() = l_scan_region.pointer();
UNIT_FFDC_DATA_SCAN_REGION.size() = l_scan_region.template getLength<uint8_t>();
FAPI_INF("p9_pib2pcb_mux_seq: Scan region and type is %#018lX", l_scan_region);
- fapi2::getScom(l_target_chip, PERV_TP_CLK_REGION, l_clk_region);
+ l_rc = fapi2::getScom(l_target_chip, PERV_TP_CLK_REGION, l_clk_region);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 14)
+
+ UNIT_FFDC_DATA_CLK_REGION.ptr() = l_clk_region.pointer();
+ UNIT_FFDC_DATA_CLK_REGION.size() = l_clk_region.template getLength<uint8_t>();
+ FAPI_INF("p9_pib2pcb_mux_seq: Clk region and type is %#018lX", l_clk_region);
UNIT_FFDC_DATA_CLK_REGION.ptr() = l_clk_region.pointer();
UNIT_FFDC_DATA_CLK_REGION.size() = l_clk_region.template getLength<uint8_t>();
@@ -149,17 +177,20 @@ fapi2::ReturnCode p9_pib2pcb_mux_seq(const fapi2::ffdc_t& i_chip,
// Add FFDC specified by RC_RC_COLLECT_CC_STATUS_REGISTERS
FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_COLLECT_CC_STATUS_REGISTERS);
- fapi2::getScom(l_target_chip, PERV_TP_OPCG_REG0, l_opcg_0);
+ l_rc = fapi2::getScom(l_target_chip, PERV_TP_OPCG_REG0, l_opcg_0);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 15)
UNIT_FFDC_DATA_OPCG0.ptr() = l_opcg_0.pointer();
UNIT_FFDC_DATA_OPCG0.size() = l_opcg_0.template getLength<uint8_t>();
- fapi2::getScom(l_target_chip, PERV_TP_OPCG_REG1, l_opcg_1);
+ l_rc = fapi2::getScom(l_target_chip, PERV_TP_OPCG_REG1, l_opcg_1);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 16)
UNIT_FFDC_DATA_OPCG1.ptr() = l_opcg_1.pointer();
UNIT_FFDC_DATA_OPCG1.size() = l_opcg_1.template getLength<uint8_t>();
- fapi2::getScom(l_target_chip, PERV_TP_OPCG_REG2, l_opcg_2);
+ l_rc = fapi2::getScom(l_target_chip, PERV_TP_OPCG_REG2, l_opcg_2);
+ RC_CONDITIONAL_SET_BIT(l_rc, l_hw_access_errors, 17)
UNIT_FFDC_DATA_OPCG2.ptr() = l_opcg_2.pointer();
UNIT_FFDC_DATA_OPCG2.size() = l_opcg_2.template getLength<uint8_t>();
@@ -167,6 +198,12 @@ fapi2::ReturnCode p9_pib2pcb_mux_seq(const fapi2::ffdc_t& i_chip,
// Add FFDC specified by RC_OPCG_REGISTERS
FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_OPCG_REGISTERS);
+ UNIT_FFDC_MUX_SEQ_HW_ERROR.ptr() = l_hw_access_errors.pointer();
+ UNIT_FFDC_MUX_SEQ_HW_ERROR.size() = l_hw_access_errors.template getLength<uint8_t>();
+
+ // Add FFDC specified by RC_MUX_SEQ_HW_ERROR
+ FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_MUX_SEQ_HW_ERROR);
+
FAPI_INF("p9_pib2pcb_mux_seq: Exiting ...");
return fapi2::FAPI2_RC_SUCCESS;
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_start_cbs_errors.xml b/src/import/chips/p9/procedures/xml/error_info/p9_start_cbs_errors.xml
index aead7b33e..0bcc75f03 100644
--- a/src/import/chips/p9/procedures/xml/error_info/p9_start_cbs_errors.xml
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_start_cbs_errors.xml
@@ -133,4 +133,10 @@
<ffdc>UNIT_FFDC_DATA_OPCG2</ffdc>
</hwpError>
<!-- ******************************************************************** -->
+ <hwpError>
+ <rc>RC_MUX_SEQ_HW_ERROR</rc>
+ <description>Collect hw access errors during p9_pib2pcb_mux_seq</description>
+ <ffdc>UNIT_FFDC_MUX_SEQ_HW_ERROR</ffdc>
+ </hwpError>
+ <!-- ******************************************************************** -->
</hwpErrors>
OpenPOWER on IntegriCloud