From 76fc214b0add778c2dc3d7866e5e627b9cddee46 Mon Sep 17 00:00:00 2001 From: Thi Tran Date: Mon, 4 Aug 2014 14:29:51 -0500 Subject: SW261816: INITPROC: Add callouts for SBE errors - originally found in SW261688 CQ:SW261816 Change-Id: Ic534ffa59624223dc2f27f187758ad8077faaa43 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/12459 Reviewed-by: Thi N. Tran Tested-by: Thi N. Tran Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/12615 Reviewed-by: A. Patrick Williams III Tested-by: Jenkins Server --- src/include/usr/isteps/istep06list.H | 5 +- src/usr/hwpf/fapi/fapiParseErrorInfo.pl | 15 +- .../p8_slw_build/p8_image_help.C | 12 +- src/usr/hwpf/hwp/cen_fir_registers.xml | 158 ++++ src/usr/hwpf/hwp/dram_training/memory_errors.xml | 146 +++- src/usr/hwpf/hwp/include/cen_scom_addresses.H | 44 +- src/usr/hwpf/hwp/include/p8_scom_addresses.H | 14 +- src/usr/hwpf/hwp/p8_fir_registers.xml | 296 +++++++ src/usr/hwpf/hwp/p8_slw_registers.xml | 12 +- src/usr/hwpf/hwp/proc_pba_utils_registers.xml | 54 ++ .../proc_sbe_check_master_errors.xml | 37 +- .../proc_sbe_chiplet_init_errors.xml | 61 +- .../proc_sbe_decompress_scan_halt_codes.xml | 129 ++- .../proc_sbe_ex_dpll_setup_halt_codes.xml | 30 +- .../proc_sbe_ex_startclocks_errors.xml | 42 +- .../proc_sbe_errors/proc_sbe_fabricinit_errors.xml | 55 +- .../proc_sbe_instruct_start_errors.xml | 63 +- .../proc_sbe_errors/proc_sbe_lco_loader_errors.xml | 213 +++-- .../proc_sbe_errors/proc_sbe_npll_setup_errors.xml | 122 ++- .../proc_sbe_errors/proc_sbe_pb_startclocks.xml | 24 +- .../proc_sbe_pibmem_loader_halt_codes.xml | 82 +- .../proc_sbe_errors/proc_sbe_scominit_errors.xml | 75 +- .../proc_sbe_errors/proc_sbe_select_ex_errors.xml | 56 +- .../proc_sbe_errors/proc_sbe_setup_evid_errors.xml | 82 +- .../proc_sbe_tp_switch_gears_errors.xml | 53 +- .../proc_sbe_trigger_winkle_errors.xml | 117 ++- .../proc_sbe_errors/proc_slw_base_halt_codes.xml | 434 +++++++--- .../hwp/proc_sbe_errors/sbe_common_halt_codes.xml | 254 +++--- .../sbe_load_ring_vec_ex_errors.xml | 90 ++- src/usr/hwpf/hwp/slave_sbe/makefile | 5 + .../proc_check_slave_sbe_seeprom_complete.C | 14 +- .../proc_extract_pore_base_ffdc.C | 144 ++++ .../proc_extract_pore_base_ffdc.H | 86 ++ .../proc_extract_pore_base_ffdc.xml | 119 +++ .../proc_extract_pore_engine_state.C | 558 +++++++++++++ .../proc_extract_pore_engine_state.H | 97 +++ .../proc_extract_pore_engine_state_errors.xml | 93 +++ .../proc_extract_pore_halt_ffdc.C | 550 +++++++++++++ .../proc_extract_pore_halt_ffdc.H | 88 ++ .../proc_extract_pore_halt_ffdc.xml | 59 ++ .../proc_extract_sbe_rc.C | 886 +++++++-------------- .../proc_extract_sbe_rc.H | 146 +++- .../proc_extract_sbe_rc_errors.xml | 694 +++------------- src/usr/hwpf/makefile | 8 +- src/usr/pore/fapiporeve/fapiPoreVe.C | 72 +- src/usr/pore/fapiporeve/makefile | 6 +- 46 files changed, 4451 insertions(+), 1949 deletions(-) create mode 100644 src/usr/hwpf/hwp/cen_fir_registers.xml create mode 100644 src/usr/hwpf/hwp/p8_fir_registers.xml create mode 100644 src/usr/hwpf/hwp/proc_pba_utils_registers.xml create mode 100644 src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.C create mode 100644 src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.H create mode 100644 src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.xml create mode 100644 src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.C create mode 100644 src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.H create mode 100644 src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state_errors.xml create mode 100644 src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.C create mode 100644 src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.H create mode 100644 src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.xml diff --git a/src/include/usr/isteps/istep06list.H b/src/include/usr/isteps/istep06list.H index 49a45799f..e804df5f7 100644 --- a/src/include/usr/isteps/istep06list.H +++ b/src/include/usr/isteps/istep06list.H @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2014 */ +/* Contributors Listed Below - COPYRIGHT 2012,2014 */ +/* [+] International Business Machines Corp. */ +/* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ /* you may not use this file except in compliance with the License. */ @@ -155,6 +157,7 @@ const DepModInfo g_istep06Dependancies = { DEP_LIB(libbuild_winkle_images.so), //proc_mailbox_utils DEP_LIB(libslave_sbe.so), DEP_LIB(libsbe.so), + DEP_LIB(libporeve.so), NULL } }; diff --git a/src/usr/hwpf/fapi/fapiParseErrorInfo.pl b/src/usr/hwpf/fapi/fapiParseErrorInfo.pl index 6481b9ca9..b08bbeeb7 100755 --- a/src/usr/hwpf/fapi/fapiParseErrorInfo.pl +++ b/src/usr/hwpf/fapi/fapiParseErrorInfo.pl @@ -6,7 +6,9 @@ # # OpenPOWER HostBoot Project # -# COPYRIGHT International Business Machines Corp. 2011,2014 +# Contributors Listed Below - COPYRIGHT 2011,2014 +# [+] International Business Machines Corp. +# # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,7 +23,7 @@ # permissions and limitations under the License. # # IBM_PROLOG_END_TAG -# $Id: fapiParseErrorInfo.pl,v 1.29 2014/06/11 16:47:16 maploetz Exp $ +# $Id: fapiParseErrorInfo.pl,v 1.30 2014/07/25 00:36:41 jmcgill Exp $ # Purpose: This perl script will parse HWP Error XML files and create required # FAPI code. # @@ -1205,15 +1207,6 @@ print SBFILE " default:\\\n"; print SBFILE " FAPI_SET_HWP_ERROR(RC, RC_SBE_UNKNOWN_ERROR);\\\n"; print SBFILE " break;\\\n"; print SBFILE "}\\\n"; -print SBFILE "const void * l_objects[] = {&CHIP_IN_ERROR};\\\n"; -print SBFILE "fapi::ReturnCode::ErrorInfoEntry l_entries[1];\\\n"; -print SBFILE "l_entries[0].iv_type = fapi::ReturnCode::EI_TYPE_CDG;\\\n"; -print SBFILE "l_entries[0].target_cdg.iv_targetObjIndex = 0;\\\n"; -print SBFILE "l_entries[0].target_cdg.iv_callout = 1;\\\n"; -print SBFILE "l_entries[0].target_cdg.iv_deconfigure = 1;\\\n"; -print SBFILE "l_entries[0].target_cdg.iv_gard = 1;\\\n"; -print SBFILE "l_entries[0].target_cdg.iv_calloutPriority = fapi::CalloutPriorities::HIGH;\\\n"; -print SBFILE "RC.addErrorInfo(l_objects, l_entries, 1);\\\n"; print SBFILE "}\n\n"; print SBFILE "#endif\n"; diff --git a/src/usr/hwpf/hwp/build_winkle_images/p8_slw_build/p8_image_help.C b/src/usr/hwpf/hwp/build_winkle_images/p8_slw_build/p8_image_help.C index e0a36d6e6..0983c977d 100644 --- a/src/usr/hwpf/hwp/build_winkle_images/p8_slw_build/p8_image_help.C +++ b/src/usr/hwpf/hwp/build_winkle_images/p8_slw_build/p8_image_help.C @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2014 */ +/* Contributors Listed Below - COPYRIGHT 2012,2014 */ +/* [+] International Business Machines Corp. */ +/* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ /* you may not use this file except in compliance with the License. */ @@ -20,7 +22,7 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: p8_image_help.C,v 1.60 2014/01/25 05:28:39 cmolsen Exp $ +// $Id: p8_image_help.C,v 1.61 2014/07/23 20:08:36 jmcgill Exp $ // /*------------------------------------------------------------------------------*/ /* *! TITLE : p8_image_help.C */ @@ -485,7 +487,8 @@ int create_wiggle_flip_prg( uint32_t *i_deltaRing, // scan ring delta s pore_XORI( &ctx, D0, D0, ((uint64_t)scanRingCheckWord) << 32); PORE_LOCATION( &ctx, src5); pore_BRAZ( &ctx, D0, tgt5); - pore_HALT( &ctx); + pore_inline_instruction1( &ctx, 0x34, 0x616C74); + pore_inline_instruction1( &ctx, 0x00, 0xCB0DA9); PORE_LOCATION( &ctx, tgt5); if (ctx.error > 0) { MY_ERR("***LD, XORI, BRANZ, RET or HALT went wrong rc = %d", ctx.error); @@ -519,7 +522,8 @@ int create_wiggle_flip_prg( uint32_t *i_deltaRing, // scan ring delta s pore_XORI( &ctx, D0, D0, ((uint64_t)scanRingCheckWord) << 32); PORE_LOCATION( &ctx, src8); pore_BRAZ( &ctx, D0, tgt8); - pore_HALT( &ctx); + pore_inline_instruction1( &ctx, 0x34, 0x616C74); + pore_inline_instruction1( &ctx, 0x00, 0xCB0DA9); PORE_LOCATION( &ctx, tgt8); pore_STI(&ctx, GENERIC_CLK_SCAN_UPDATEDR_0x0003A000, P0, 0x0); pore_RET( &ctx); diff --git a/src/usr/hwpf/hwp/cen_fir_registers.xml b/src/usr/hwpf/hwp/cen_fir_registers.xml new file mode 100644 index 000000000..b1c973685 --- /dev/null +++ b/src/usr/hwpf/hwp/cen_fir_registers.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RC_CEN_FIR_FFDC + + FFDC collected on Centaur FIR errors + + TARGET + + REG_FFDC_CEN_CHIP_MASTER_INTERRUPT_REGISTERS + REG_FFDC_CEN_CHIP_GLOB_XFIR_REGISTERS + REG_FFDC_CEN_CHIP_GLOB_RFIR_REGISTERS + REG_FFDC_CEN_CHIP_GLOB_FIR_MASK_REGISTERS + REG_FFDC_CEN_CHIP_GLOB_ATTN_REGISTERS + REG_FFDC_CEN_CHIP_GLOB_ATTN_MASK_REGISTERS + REG_FFDC_CEN_CHIP_LFIR_REGISTERS + REG_FFDC_CEN_CHIP_LFIR_MASK_REGISTERS + TARGET + + + REG_FFDC_CEN_MBA_LFIR_REGISTERS + REG_FFDC_CEN_MBA_LFIR_MASK_REGISTERS + + TARGET + TARGET_TYPE_MBA_CHIPLET + + + + + + + + REG_FFDC_CEN_CHIP_MASTER_INTERRUPT_REGISTERS + CFAM_FSI_STATUS_0x00001007 + MASTER_PCB_INT_0x000F001A + + + + REG_FFDC_CEN_CHIP_GLOB_XFIR_REGISTERS + READ_GLOBAL_XSTOP_FIR_0x570F001B + TP_XSTOP_0x01040000 + NEST_XSTOP_0x02040000 + MEM_XSTOP_0x03040000 + + + + REG_FFDC_CEN_CHIP_GLOB_RFIR_REGISTERS + READ_GLOBAL_RECOV_FIR_0x570F001C + TP_RECOV_0x01040001 + NEST_RECOV_0x02040001 + MEM_RECOV_0x03040001 + + + + REG_FFDC_CEN_CHIP_GLOB_FIR_MASK_REGISTERS + TP_FIR_MASK_0x01040002 + NEST_FIR_MASK_0x02040002 + MEM_FIR_MASK_0x03040002 + + + + REG_FFDC_CEN_CHIP_GLOB_ATTN_REGISTERS + READ_GLOBAL_SPATT_FIR_0x570F001A + TP_SPATTN_0x01040004 + NEST_SPATTN_0x02040004 + MEM_SPATTN_0x03040004 + + + + REG_FFDC_CEN_CHIP_GLOB_ATTN_MASK_REGISTERS + TP_SPATTN_MASK_0x01040007 + NEST_SPATTN_MASK_0x02040007 + MEM_SPATTN_MASK_0x03040007 + + + + REG_FFDC_CEN_CHIP_LFIR_REGISTERS + TP_PERV_LFIR_0x0104000A + NEST_PERV_LFIR_0x0204000A + CEN_DMIFIR_0x02010400 + MBI_FIR_0x02010800 + MBS_FIR_REG_0x02011400 + MBS_ECC0_MBECCFIR_0x02011440 + MBS_ECC1_MBECCFIR_0x02011480 + MBS01_MBSFIRQ_0x02011600 + MBS23_MBSFIRQ_0x02011700 + FBISTN_FIR_REG_0x02010880 + SCAC_LFIR_0x020115C0 + MBSS_FIR_REG_0x0201141E + MEM_PERV_LFIR_0x0304000A + FBISTM_FIR_REG_0x03010480 + + + + REG_FFDC_CEN_CHIP_LFIR_MASK_REGISTERS + TP_PERV_LFIR_MASK_0x0104000D + NEST_PERV_LFIR_MASK_0x0204000D + CEN_DMIFIR_MASK_0x02010403 + MBI_FIRMASK_0x02010803 + MBS_FIR_MASK_REG_0x02011403 + MBS_ECC0_MBECCFIR_MASK_0x02011443 + MBS_ECC1_MBECCFIR_MASK_0x02011483 + MBS01_MBSFIRMASK_0x02011603 + MBS23_MBSFIRMASK_0x02011703 + FBISTN_FIR_MASK_REG_0x02010883 + SCAC_FIRMASK_0x020115C3 + MBSS_FIR_MASK_REG_0x02011421 + MEM_PERV_LFIR_MASK_0x0304000D + FBISTM_FIR_MASK_REG_0x03010483 + + + + + + REG_FFDC_CEN_MBA_LFIR_REGISTERS + MBA01_MBACALFIR_0x03010400 + MBA01_MBAFIRQ_0x03010600 + PHY01_DDRPHY_FIR_REG_0x800200900301143f + MBAS_FIR_REG_0x0301041B + + + + REG_FFDC_CEN_MBA_LFIR_MASK_REGISTERS + MBA01_MBACALFIR_MASK_0x03010403 + MBA01_MBAFIRMASK_0x03010603 + PHY01_DDRPHY_FIR_MASK_REG_0x800200930301143f + MBAS_FIR_MASK_REG_0x0301041E + + + diff --git a/src/usr/hwpf/hwp/dram_training/memory_errors.xml b/src/usr/hwpf/hwp/dram_training/memory_errors.xml index 7a8f726c4..151ca013a 100644 --- a/src/usr/hwpf/hwp/dram_training/memory_errors.xml +++ b/src/usr/hwpf/hwp/dram_training/memory_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -21,7 +23,7 @@ - + @@ -43,37 +45,159 @@ RC_MSS_UNEXPECTED_NEST_CLK_STATUS A read of the nest clock status register returned an unexpected value. - + + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_NEST_CHIPLET + + CHIP + HIGH + + + CHIP + + + CHIP + + RC_MSS_INIT1_OPCG_DONE_ERROR - Timed out waiting for OPCG done bit(15). - + Timed out waiting for OPCG done bit in SCAN0 module. + + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FLUSH_FAIL, POR_FFDC_OFFSET_USE_P1 + + CHIP + HIGH + + + CHIP + + + CHIP + + RC_MSS_INIT1_FSISTATUS_FAIL Failed VDD status check on FSI2PIB Status Reg bit(16). + + + REG_FFDC_CEN_STANDBY_REGION + CHIP + + + CHIP + HIGH + + + CHIP + + + CHIP + RC_MSS_INIT3_FSISTATUS_FAIL Failed clock region check on FSI2PIB Status Reg bit(31). - + + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_TP_CHIPLET + + CHIP + HIGH + + + CHIP + + + CHIP + + - RC_MSS_PLL_LOCK_TIMEOUT - Timed out waiting for PLL locks in FSI2PIB Status Reg bits(24,25). - + RC_MSS_NEST_PLL_LOCK_TIMEOUT + Timed out waiting for NEST PLL lock in FSI2PIB Status Reg bit 24. + + + REG_FFDC_CEN_STANDBY_REGION + CHIP + + + CHIP + HIGH + + + CHIP + + + CHIP + + + + + RC_MSS_MEM_PLL_LOCK_TIMEOUT + Timed out waiting for MEM PLL lock in FSI2PIB Status Reg bit 25. + + + REG_FFDC_CEN_STANDBY_REGION + CHIP + + + CHIP + HIGH + + + CHIP + + + CHIP + + + + + REG_FFDC_CEN_STANDBY_REGION + CFAM_FSI_STATUS_0x00001007 + CFAM_FSI_GP3_0x00001012 + CFAM_FSI_GP4_0x00001013 + CFAM_FSI_GP4_0x00001013 + CFAM_FSI_GP5_0x00001014 + CFAM_FSI_GP6_0x00001015 + CFAM_FSI_GP7_0x00001016 + CFAM_FSI_GP3_MIRROR_0x0000101B + RC_MSS_THOLD_ERROR THOLDS after Clock Start cmd do NOT match to the expected value. - + + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_TP_CHIPLET + + CHIP + HIGH + + + CHIP + + + CHIP + + RC_MSS_CCREG_MISMATCH Clock Control Register does not match the expected value. - + + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_TP_CHIPLET + + CHIP + HIGH + + + CHIP + + + CHIP + + RC_MSS_ARRAY_REPAIR_BUSY diff --git a/src/usr/hwpf/hwp/include/cen_scom_addresses.H b/src/usr/hwpf/hwp/include/cen_scom_addresses.H index dcc4c8fdd..7059a5395 100755 --- a/src/usr/hwpf/hwp/include/cen_scom_addresses.H +++ b/src/usr/hwpf/hwp/include/cen_scom_addresses.H @@ -22,7 +22,7 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: cen_scom_addresses.H,v 1.69 2014/04/07 17:59:13 gollub Exp $ +// $Id: cen_scom_addresses.H,v 1.70 2014/07/15 13:42:27 jmcgill Exp $ // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/cen_scom_addresses.H,v $ //------------------------------------------------------------------------------ // *! (C) Copyright International Business Machines Corp. 2011 @@ -219,9 +219,11 @@ CONST_UINT64_T( MEM_CHIPLET_0x03000000 , ULL(0x03000000) ); // CENTAUR REPAIR LOADER REGISTERS //------------------------------------------------------------------------------ CONST_UINT64_T( CEN_WRITE_ARRAY_REPAIR_REG_0x00050000, ULL(0x00050000) ); +CONST_UINT64_T( CEN_REPAIR_FRONTEND_REG_0x00050001, ULL(0x00050001) ); CONST_UINT64_T( CEN_WRITE_ARRAY_REPAIR_CMD_0x00050002, ULL(0x00050002) ); CONST_UINT64_T( CEN_READ_ARRAY_REPAIR_STATUS_0x00050003, ULL(0x00050003) ); CONST_UINT64_T( CEN_READ_ECC_TRAP_REGISTER_0x00050004, ULL(0x00050004) ); +CONST_UINT64_T( CEN_REPAIR_CONFIG_REG_0x00050005, ULL(0x00050005) ); CONST_UINT64_T( TP_TRACE_DATA_HI_0x01010440 , ULL(0x01010440) ); CONST_UINT64_T( TP_TRACE_DATA_LO_0x01010441 , ULL(0x01010441) ); @@ -1040,6 +1042,7 @@ CONST_UINT64_T( MBS23_MBMPERQ_0x02011762 , ULL(0x02011762) ); CONST_UINT64_T( MBS01_MBUERQ_0x02011663 , ULL(0x02011663) ); CONST_UINT64_T( MBS23_MBUERQ_0x02011763 , ULL(0x02011763) ); + //------------------------------------------------------------------------------ // MBS FIR Registers //------------------------------------------------------------------------------ @@ -1051,6 +1054,42 @@ CONST_UINT64_T( MBS_FIR_ACTION0_REG_0x02011406 , ULL(0x02011406) ); CONST_UINT64_T( MBS_FIR_ACTION1_REG_0x02011407 , ULL(0x02011407) ); CONST_UINT64_T( MBS_FIR_WOF_REG_0x02011408 , ULL(0x02011408) ); +//------------------------------------------------------------------------------ +// FBIST NEST FIR Registers +//------------------------------------------------------------------------------ +CONST_UINT64_T( FBISTN_FIR_REG_0x02010880 , ULL(0x02010880) ); +CONST_UINT64_T( FBISTN_FIR_MASK_REG_0x02010883 , ULL(0x02010883) ); +CONST_UINT64_T( FBISTN_FIR_MASK_REG_AND_0x02010884 , ULL(0x02010884) ); +CONST_UINT64_T( FBISTN_FIR_MASK_REG_OR_0x02010885 , ULL(0x02010885) ); +CONST_UINT64_T( FBISTN_FIR_ACTION0_REG_0x02010886 , ULL(0x02010886) ); +CONST_UINT64_T( FBISTN_FIR_ACTION1_REG_0x02010887 , ULL(0x02010887) ); + +//------------------------------------------------------------------------------ +// FBIST MEM FIR Registers +//------------------------------------------------------------------------------ +CONST_UINT64_T( FBISTM_FIR_REG_0x03010480 , ULL(0x03010480) ); +CONST_UINT64_T( FBISTM_FIR_MASK_REG_0x03010483 , ULL(0x03010483) ); +CONST_UINT64_T( FBISTM_FIR_MASK_REG_AND_0x03010484 , ULL(0x03010484) ); +CONST_UINT64_T( FBISTM_FIR_MASK_REG_OR_0x03010485 , ULL(0x03010485) ); +CONST_UINT64_T( FBISTM_FIR_ACTION0_REG_0x03010486 , ULL(0x03010486) ); +CONST_UINT64_T( FBISTM_FIR_ACTION1_REG_0x03010487 , ULL(0x03010487) ); + +//------------------------------------------------------------------------------ +// MBS Secure FIR Registers +//------------------------------------------------------------------------------ +CONST_UINT64_T( MBSS_FIR_REG_0x0201141E , ULL(0x0201141E) ); +CONST_UINT64_T( MBSS_FIR_MASK_REG_0x02011421 , ULL(0x02011421) ); +CONST_UINT64_T( MBSS_FIR_ACTION0_REG_0x02011424 , ULL(0x02011424) ); +CONST_UINT64_T( MBSS_FIR_ACTION1_REG_0x02011425 , ULL(0x02011425) ); + +//------------------------------------------------------------------------------ +// MBA Secure FIR Registers +//------------------------------------------------------------------------------ +CONST_UINT64_T( MBAS_FIR_REG_0x0301041B , ULL(0x0301041B) ); +CONST_UINT64_T( MBAS_FIR_MASK_REG_0x0301041E , ULL(0x0301041E) ); +CONST_UINT64_T( MBAS_FIR_ACTION0_REG_0x03010421 , ULL(0x03010421) ); +CONST_UINT64_T( MBAS_FIR_ACTION1_REG_0x03010422 , ULL(0x03010422) ); + //------------------------------------------------------------------------------ // DDRPHY FIR Registers //------------------------------------------------------------------------------ @@ -1815,6 +1854,9 @@ This section is automatically updated by CVS when you check in this file. Be sure to create CVS comments when you commit so that they can be included here. $Log: cen_scom_addresses.H,v $ +Revision 1.70 2014/07/15 13:42:27 jmcgill +add FIR/repair loader register definitions for FFDC collection (SW260441) + Revision 1.69 2014/04/07 17:59:13 gollub /!/ 1.69 | gollub |07-APR-14| Added MBSCFGQ so we can enable/disable exit point 1 diff --git a/src/usr/hwpf/hwp/include/p8_scom_addresses.H b/src/usr/hwpf/hwp/include/p8_scom_addresses.H index 711d388f6..3eaa39dc3 100755 --- a/src/usr/hwpf/hwp/include/p8_scom_addresses.H +++ b/src/usr/hwpf/hwp/include/p8_scom_addresses.H @@ -22,7 +22,7 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: p8_scom_addresses.H,v 1.183 2014/06/08 19:49:24 jmcgill Exp $ +// $Id: p8_scom_addresses.H,v 1.184 2014/07/15 21:12:03 jmcgill Exp $ // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/p8_scom_addresses.H,v $ //------------------------------------------------------------------------------ // *! (C) Copyright International Business Machines Corp. 2011 @@ -1784,6 +1784,15 @@ CONST_UINT64_T( EX_PERV_TCTL5_SPATTN_0x10013057 , ULL(0x10013057) ); CONST_UINT64_T( EX_PERV_TCTL6_SPATTN_0x10013067 , ULL(0x10013067) ); CONST_UINT64_T( EX_PERV_TCTL7_SPATTN_0x10013077 , ULL(0x10013077) ); +CONST_UINT64_T( EX_PCNE_REG0_HOLD_OUT_0x1001300D , ULL(0x1001300D) ); +CONST_UINT64_T( EX_PCNE_REG1_HOLD_OUT_0x1001301D , ULL(0x1001301D) ); +CONST_UINT64_T( EX_PCNE_REG2_HOLD_OUT_0x1001302D , ULL(0x1001302D) ); +CONST_UINT64_T( EX_PCNE_REG3_HOLD_OUT_0x1001303D , ULL(0x1001303D) ); +CONST_UINT64_T( EX_PCNE_REG4_HOLD_OUT_0x1001304D , ULL(0x1001304D) ); +CONST_UINT64_T( EX_PCNE_REG5_HOLD_OUT_0x1001305D , ULL(0x1001305D) ); +CONST_UINT64_T( EX_PCNE_REG6_HOLD_OUT_0x1001306D , ULL(0x1001306D) ); +CONST_UINT64_T( EX_PCNE_REG7_HOLD_OUT_0x1001307D , ULL(0x1001307D) ); + // Thread Active Status CONST_UINT64_T( EX_PERV_THREAD_ACTIVE_0x1001310E , ULL(0x1001310E) ); @@ -2123,6 +2132,9 @@ This section is automatically updated by CVS when you check in this file. Be sure to create CVS comments when you commit so that they can be included here. $Log: p8_scom_addresses.H,v $ +Revision 1.184 2014/07/15 21:12:03 jmcgill +add PC_NE error report hold register definitions for FFDC collection (SW261816) + Revision 1.183 2014/06/08 19:49:24 jmcgill add XBUS skew adjust data register definition diff --git a/src/usr/hwpf/hwp/p8_fir_registers.xml b/src/usr/hwpf/hwp/p8_fir_registers.xml new file mode 100644 index 000000000..d8e1dd46e --- /dev/null +++ b/src/usr/hwpf/hwp/p8_fir_registers.xml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RC_PROC_FIR_FFDC + + FFDC collected on processor FIR errors + + TARGET + + REG_FFDC_CHIP_MASTER_INTERRUPT_REGISTERS + REG_FFDC_CHIP_GLOB_XFIR_REGISTERS + REG_FFDC_CHIP_GLOB_RFIR_REGISTERS + REG_FFDC_CHIP_GLOB_FIR_MASK_REGISTERS + REG_FFDC_CHIP_GLOB_ATTN_REGISTERS + REG_FFDC_CHIP_GLOB_ATTN_MASK_REGISTERS + REG_FFDC_CHIP_LFIR_REGISTERS + REG_FFDC_CHIP_LFIR_MASK_REGISTERS + TARGET + + + REG_FFDC_EX_GLOB_XFIR_REGISTERS + REG_FFDC_EX_GLOB_RFIR_REGISTERS + REG_FFDC_EX_GLOB_FIR_MASK_REGISTERS + REG_FFDC_EX_GLOB_ATTN_REGISTERS + REG_FFDC_EX_GLOB_ATTN_MASK_REGISTERS + REG_FFDC_EX_LFIR_REGISTERS + REG_FFDC_EX_LFIR_MASK_REGISTERS + + TARGET + TARGET_TYPE_EX_CHIPLET + + + + REG_FFDC_MCS_LFIR_REGISTERS + REG_FFDC_MCS_LFIR_MASK_REGISTERS + + TARGET + TARGET_TYPE_MCS_CHIPLET + + + + REG_FFDC_XBUS_LFIR_REGISTERS + REG_FFDC_XBUS_LFIR_MASK_REGISTERS + + TARGET + TARGET_TYPE_XBUS_ENDPOINT + + + + REG_FFDC_ABUS_LFIR_REGISTERS + REG_FFDC_ABUS_LFIR_MASK_REGISTERS + + TARGET + TARGET_TYPE_ABUS_ENDPOINT + + + + + + + + REG_FFDC_CHIP_MASTER_INTERRUPT_REGISTERS + CFAM_FSI_STATUS_0x00001007 + MASTER_PCB_INT_0x000F001A + + + + REG_FFDC_CHIP_GLOB_XFIR_REGISTERS + READ_GLOBAL_XSTOP_FIR_0x570F001B + TP_XSTOP_0x01040000 + NEST_XSTOP_0x02040000 + X_XSTOP_0x04040000 + A_XSTOP_0x08040000 + PCIE_XSTOP_0x09040000 + PB_RAS_FIR_0x02010C6E + + + + REG_FFDC_CHIP_GLOB_RFIR_REGISTERS + READ_GLOBAL_RECOV_FIR_0x570F001C + TP_RECOV_0x01040001 + NEST_RECOV_0x02040001 + X_RECOV_0x04040001 + A_RECOV_0x08040001 + PCIE_RECOV_0x09040001 + + + + REG_FFDC_CHIP_GLOB_FIR_MASK_REGISTERS + TP_FIR_MASK_0x01040002 + NEST_FIR_MASK_0x02040002 + X_FIR_MASK_0x04040002 + A_FIR_MASK_0x08040002 + PCIE_FIR_MASK_0x09040002 + PB_RAS_FIR_MASK_0x02010C71 + + + + REG_FFDC_CHIP_GLOB_ATTN_REGISTERS + READ_GLOBAL_SPATT_FIR_0x570F001A + TP_SPATTN_0x01040004 + NEST_SPATTN_0x02040004 + X_SPATTN_0x04040004 + A_SPATTN_0x08040004 + PCIE_SPATTN_0x09040004 + + + + REG_FFDC_CHIP_GLOB_ATTN_MASK_REGISTERS + TP_SPATTN_MASK_0x01040007 + NEST_SPATTN_MASK_0x02040007 + X_SPATTN_MASK_0x04040007 + A_SPATTN_MASK_0x08040007 + PCIE_SPATTN_MASK_0x09040007 + + + + REG_FFDC_CHIP_LFIR_REGISTERS + OCC_LFIR_0x01010800 + PMC_LFIR_0x01010840 + OCC_PMC_LFIR_0x01010C00 + TP_PERV_LFIR_0x0104000A + PBA_FIR_0x02010840 + PSI_HB_FIR_0x02010900 + HCA_EN_FIR_0x02010940 + HCA_EN_EHHCA_FIR_0x02010980 + EN_TPC_INTP_SYNC_FIR_0x020109C0 + PB_FIR_WEST_0x02010C00 + PB_FIR_CENT_0x02010C40 + PB_FIR_EAST_0x02010C80 + PCIE0_FIR_0x02012000 + PCIE1_FIR_0x02012400 + PCIE2_FIR_0x02012800 + NX_CQ_FIR_0x02013080 + NX_AS_FIR_0x020130C0 + NX_DMA_ENG_FIR_0x02013100 + NX_CAPP_FIR_0x02013000 + MCD_FIR_0x02013400 + NEST_PERV_LFIR_0x0204000A + PB_X_FIR_0x04010C00 + X_PSI_FIR_0x04012400 + X_PERV_LFIR_0x0404000A + PB_A_FIR_0x08010800 + A_PERV_LFIR_0x0804000A + ES_PBES_WRAP_TOP_FIR_0x09010800 + PCIE_IOP0_PLL_FIR_0x09011400 + PCIE_IOP1_PLL_FIR_0x09011840 + PCIE_PERV_LFIR_0x0904000A + + + + REG_FFDC_CHIP_LFIR_MASK_REGISTERS + OCC_LFIR_MASK_0x01010803 + PMC_LFIR_MASK_0x01010843 + OCC_PMC_LFIR_MASK_0x01010C03 + TP_PERV_LFIR_MASK_0x0104000D + PBA_FIR_MASK_0x02010843 + PSI_HB_FIR_MASK_0x02010903 + HCA_EN_FIR_MASK_0x02010943 + HCA_EN_EHHCA_FIR_MASK_0x02010983 + EN_TPC_INTP_SYNC_FIR_MASK_0x020109C3 + PB_FIR_MASK_WEST_0x02010C03 + PB_FIR_MASK_CENT_0x02010C43 + PB_FIR_MASK_EAST_0x02010C83 + PCIE0_FIR_MASK_0x02012003 + PCIE1_FIR_MASK_0x02012403 + PCIE2_FIR_MASK_0x02012803 + NX_CQ_FIR_MASK_0x02013083 + NX_AS_FIR_MASK_0x020130C3 + NX_DMA_ENG_FIR_MASK_0x02013103 + NX_CAPP_FIR_MASK_0x02013003 + MCD_FIR_MASK_0x02013403 + NEST_PERV_LFIR_MASK_0x0204000D + PB_X_FIR_MASK_0x04010C03 + X_PSI_FIR_MASK_0x04012403 + X_PERV_LFIR_MASK_0x0404000D + PB_A_FIR_MASK_0x08010803 + A_PERV_LFIR_MASK_0x0804000D + ES_PBES_WRAP_TOP_FIR_MASK_0x09010803 + PCIE_IOP0_PLL_FIR_MASK_0x09011403 + PCIE_IOP1_PLL_FIR_MASK_0x09011843 + PCIE_PERV_LFIR_MASK_0x0904000D + + + + + + REG_FFDC_EX_GLOB_XFIR_REGISTERS + EX_XSTOP_0x10040000 + + + + REG_FFDC_EX_GLOB_RFIR_REGISTERS + EX_RECOV_0x10040001 + + + + REG_FFDC_EX_GLOB_FIR_MASK_REGISTERS + EX_FIR_MASK_0x10040002 + + + + REG_FFDC_EX_GLOB_ATTN_REGISTERS + EX_SPATTN_0x10040004 + + + + REG_FFDC_EX_GLOB_ATTN_MASK_REGISTERS + EX_SPATTN_MASK_0x10040007 + + + + REG_FFDC_EX_LFIR_REGISTERS + EX_CORE_FIR_0x10013100 + EX_L2_FIR_REG_0x10012800 + EX_L3_FIR_REG_0x10010800 + EX_NCU_FIR_REG_0x10010C00 + EX_PERV_LFIR_0x1004000A + + + + REG_FFDC_EX_LFIR_MASK_REGISTERS + EX_CORE_FIR_MASK_0x10013103 + EX_L2_FIR_MASK_REG_0x10012803 + EX_L3_FIR_MASK_REG_0x10010803 + EX_NCU_FIR_MASK_REG_0x10010C03 + EX_PERV_LFIR_MASK_0x1004000D + + + + + + REG_FFDC_MCS_LFIR_REGISTERS + MCS_MCIFIR_0x02011840 + IOMC0_BUSCNTL_FIR_0x02011A00 + + + + REG_FFDC_MCS_LFIR_MASK_REGISTERS + MCS_MCIFIRMASK_0x02011843 + IOMC0_BUSCNTL_FIR_MASK_0x02011A03 + + + + + + REG_FFDC_XBUS_LFIR_REGISTERS + X_XBUS0_BUSCNTL_FIR_0x04011000 + + + + REG_FFDC_XBUS_LFIR_MASK_REGISTERS + X_XBUS0_BUSCNTL_FIR_MASK_0x04011003 + + + + + + REG_FFDC_ABUS_LFIR_REGISTERS + A_ABUS_BUSCNTL_FIR_0x08010C00 + + + + REG_FFDC_ABUS_LFIR_MASK_REGISTERS + A_ABUS_BUSCNTL_FIR_MASK_0x08010C03 + + + diff --git a/src/usr/hwpf/hwp/p8_slw_registers.xml b/src/usr/hwpf/hwp/p8_slw_registers.xml index c251ce4bb..cee0c97bb 100644 --- a/src/usr/hwpf/hwp/p8_slw_registers.xml +++ b/src/usr/hwpf/hwp/p8_slw_registers.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -99,4 +101,10 @@ EX_PCBS_DPLL_STATUS_REG_100F0161 EX_DPLL_CPM_PARM_REG_0x100F0152 + + REG_FFDC_PROC_SLW_SPWKUP_REGISTERS + PM_SPECIAL_WKUP_FSP_0x100F010B + PM_SPECIAL_WKUP_OCC_0x100F010C + PM_SPECIAL_WKUP_PHYP_0x100F010D + diff --git a/src/usr/hwpf/hwp/proc_pba_utils_registers.xml b/src/usr/hwpf/hwp/proc_pba_utils_registers.xml new file mode 100644 index 000000000..102b7f0ff --- /dev/null +++ b/src/usr/hwpf/hwp/proc_pba_utils_registers.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + REG_FFDC_PROC_PBA_UTILS_REGISTERS + OTPC_M_SECURITY_SWITCH_0x00010005 + PBA_MODE_0x00064000 + PBA_SLVRST_0x00064001 + PBA_SLVCTL3_0x00064007 + OCB3_ADDRESS_0x0006B070 + OCB3_STATUS_CONTROL_0x0006B071 + OCB3_ERROR_STATUS_0x0006B074 + PBA_BAR3_0x02013F03 + PBA_BARMSK3_0x02013F07 + PBA_RBUFVAL2_0x02010852 + PBA_RBUFVAL3_0x02010853 + PBA_WBUFVAL0_0x02010858 + PBA_WBUFVAL1_0x02010859 + PBA_FIR_0x02010840 + PBA_FIR_MASK_0x02010843 + PBA_FIR_ACTION0_0x02010846 + PBA_FIR_ACTION1_0x02010847 + PBA_CONFIG_0x0201084B + PBA_ERR_RPT0_0x0201084C + PBA_ERR_RPT1_0x0201084D + PBA_ERR_RPT2_0x0201084E + PB_MODE_CENT_0x02010C4A + ADU_PMISC_MODE_0x0202000B + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_check_master_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_check_master_errors.xml index b8c9807d0..0201d6f97 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_check_master_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_check_master_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -28,14 +30,33 @@ RC_SBE_CHECK_MASTER_NO_VALID_MCS Procedure: proc_sbe_check_master - Both MCL/MCR fences asserted, no functional MCS units are available for use. + Both MCL/MCR fences asserted, no functional MCS units are available for use on master chip. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_CHECK_MASTER + CHIP - NEST_GP0_0x02000000 - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + + + + REG_FFDC_SBE_CHECK_MASTER + NEST_GP0_0x02000000 + DEVICE_ID_REG_0x000F000F + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_chiplet_init_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_chiplet_init_errors.xml index 334896354..72cfce8be 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_chiplet_init_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_chiplet_init_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,49 +22,66 @@ - + RC_SBE_MPIPL_CLOCK_START_ERROR - Procedure: proc_sbe_chiplet_init.S + Procedure: proc_sbe_chiplet_init Check that clocks were started to allow AISS access for PCB Fencing failed - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_USE_P1 + + CHIP + HIGH + + + CHIP + + + CHIP + RC_SBE_MPIPL_PBC_FENCE_TIMEOUT_ERROR - Procedure: proc_sbe_chiplet_init.S - Check that the PCB Fence was raised fOR MPIPL reset failed + Procedure: proc_sbe_chiplet_init + Check that the PCB Fence was raised for MPIPL reset failed - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + RC_SBE_MPIPL_SECURITY_UNLOCK_ERROR - Procedure: proc_sbe_chiplet_init.S + Procedure: proc_sbe_chiplet_init The security function failed to unlock for MPIPL restart - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_USE_P1 + + CHIP + HIGH + + + CHIP + + + CHIP + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_decompress_scan_halt_codes.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_decompress_scan_halt_codes.xml index 731dc5f73..0b0aa0e23 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_decompress_scan_halt_codes.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_decompress_scan_halt_codes.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -32,12 +34,21 @@ however it is not a multicast WRITE type as required. The bad chiplet Id will be found in P0 at the halt. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + @@ -49,12 +60,21 @@ register D0. The most likely cause of this error is a problem with the tool chain used to build the SBE IPL images. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + + CHIP + LOW + + + CODE + HIGH + + + CHIP + + + CHIP + @@ -67,12 +87,22 @@ this error is a problem with the tool chain used to build the SBE IPL images. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + LOW + + + CODE + HIGH + + + CHIP + + + CHIP + @@ -86,12 +116,22 @@ cause of this error is a problem with the tool chain used to build the SBE IPL images. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + LOW + + + CODE + HIGH + + + CHIP + + + CHIP + @@ -103,14 +143,22 @@ excess bits. The most likely cause of this error is a problem with the tool chain used to build the SBE IPL images. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + LOW + + + CODE + HIGH + + + CHIP + + + CHIP + @@ -124,13 +172,22 @@ could be caused by broken hardware, or by any tool problem that would misrepresent the length of the actual hardware scan ring. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_ex_dpll_setup_halt_codes.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_ex_dpll_setup_halt_codes.xml index 358066958..a36fd1c70 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_ex_dpll_setup_halt_codes.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_ex_dpll_setup_halt_codes.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,14 +32,22 @@ Procedure: proc_sbe_ex_dpll_setup This error is signalled when the EX DPLL fails to lock after ~150us. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_DPLL_LOCK_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_ex_startclocks_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_ex_startclocks_errors.xml index 96ba038a7..1797f7107 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_ex_startclocks_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_ex_startclocks_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,13 +32,18 @@ Procedure: proc_sbe_ex_startclocks After trying to start all of the EX clocks, some of the tholds were still high - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -45,12 +52,19 @@ Procedure: proc_sbe_ex_startclocks After starting the EX clocks the system was xstopped - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + HIGH + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_fabricinit_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_fabricinit_errors.xml index dae3ce4f1..3cab561af 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_fabricinit_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_fabricinit_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,13 +32,22 @@ Procedure: proc_sbe_fabricinit Fabric init sequence not attempted, fabric arbitration is stopped. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_FABRICINIT + CHIP - ADU_PMISC_MODE_0x0202000B - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -45,12 +56,32 @@ Procedure: proc_sbe_fabricinit Fabric init failed, or mismatch in expected ADU status. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_FABRICINIT + CHIP - ADU_STATUS_0x02020002 - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + + + + REG_FFDC_SBE_FABRICINIT + PB_MODE_CENT_0x02010C4A + PB_HP_MODE_NEXT_CENT_0x02010C4B + PB_HP_MODE_CURR_CENT_0x02010C4C + PB_HPX_MODE_NEXT_CENT_0x02010C4D + PB_HPX_MODE_CURR_CENT_0x02010C4E + ADU_PMISC_MODE_0x0202000B + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_instruct_start_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_instruct_start_errors.xml index a82392d01..4479fa5d4 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_instruct_start_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_instruct_start_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,15 +32,18 @@ Procedure: proc_sbe_instruct_start Special wakeup before starting instructions failed. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_INSTRUCT_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -47,15 +52,18 @@ Procedure: proc_sbe_instruct_start Thread 0 is still in nap/sleep/winkle after the instruct start - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_INSTRUCT_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -64,14 +72,17 @@ Procedure: proc_sbe_instruct_start Can't start instructions because the core is still in maintenance mode. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_INSTRUCT_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + HIGH + + + CHIP + + + CHIP + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_lco_loader_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_lco_loader_errors.xml index 88733209d..6b6405f07 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_lco_loader_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_lco_loader_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,12 +32,11 @@ Procedure: proc_sbe_lco_loader Attempted to execute procedure with cv_multicast option. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + + CODE + HIGH + @@ -44,58 +45,73 @@ Procedure: proc_sbe_lco_loader LCO load sequence not attempted, fabric arbitration is stopped. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_FABRICINIT + CHIP - ADU_PMISC_MODE_0x0202000B - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + RC_SBE_LCO_LOADER_IMAGE_SIZE_PAD_ERR Procedure: proc_sbe_lco_loader - Image size is not evenly divisible by cacheline size. + Hostboot image size is not evenly divisible by cacheline size. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - - OTPC_M_SECURITY_SWITCH_0x00010005 + + CHIP + LOW + + + CODE + HIGH + RC_SBE_LCO_LOADER_IMAGE_SIZE_OVERFLOW_ERR Procedure: proc_sbe_lco_loader - Image size is larger than master chiplet cache size. + Hostboot image size is larger than master chiplet cache size. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - - OTPC_M_SECURITY_SWITCH_0x00010005 + + CHIP + LOW + + + CODE + HIGH + RC_SBE_LCO_LOADER_IMAGE_WRAP_ERR Procedure: proc_sbe_lco_loader - Combination of target base address and image size will wrap OCB address. + Combination of target base address and hostboot image size will wrap OCB address. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - - OTPC_M_SECURITY_SWITCH_0x00010005 + + CHIP + LOW + + + CODE + HIGH + @@ -104,13 +120,15 @@ Procedure: proc_sbe_lco_loader Target base address is not cacheline aligned. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - - OTPC_M_SECURITY_SWITCH_0x00010005 + + CHIP + LOW + + + CODE + HIGH + @@ -119,13 +137,45 @@ Procedure: proc_sbe_lco_loader PBA slave reset still in progress or buffer is busy. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_PROC_PBA_UTILS_REGISTERS + CHIP - PBA_SLVRST_0x00064001 + + CHIP + HIGH + + + CHIP + + + CHIP + + + + + RC_SBE_LCO_LOADER_LPCM_FIR_ERR + + Procedure: proc_sbe_lco_loader + LPCM FIR register was non-zero after PNOR read. + + + REG_FFDC_PROC_PBA_UTILS_REGISTERS + CHIP + + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -134,13 +184,22 @@ Procedure: proc_sbe_lco_loader Unexpected state in OCB Status Control Register at end of write stream. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_PROC_PBA_UTILS_REGISTERS + CHIP - OCB3_STATUS_CONTROL_0x0006B071 - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -149,13 +208,22 @@ Procedure: proc_sbe_lco_loader Unexpected state in PBA FIR Register at end of write stream. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_PROC_PBA_UTILS_REGISTERS + CHIP - PBA_FIR_0x02010840 - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -164,13 +232,22 @@ Procedure: proc_sbe_lco_loader Unexpected state in PBA Write Buffer0 Register at end of write stream. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_PROC_PBA_UTILS_REGISTERS + CHIP - PBA_WBUFVAL0_0x02010858 - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -179,12 +256,22 @@ Procedure: proc_sbe_lco_loader Unexpected state in PBA Write Buffer1 Register at end of write stream. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_PROC_PBA_UTILS_REGISTERS + CHIP - PBA_WBUFVAL1_0x02010859 - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_npll_setup_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_npll_setup_errors.xml index d5f239235..ae455f87e 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_npll_setup_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_npll_setup_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,15 +32,32 @@ Procedure: proc_sbe_npll_setup CP Filter PLL failed to lock. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_PROC_SBE_NPLL_SETUP_FILTER_PLL + CHIP - TP_PLL_LOCK_0x010F0019 - MBOX_FSIGP4_0x00050013 - MBOX_FSIGP3_0x00050012 - + + + PROC_REF_CLOCK + CHIP + + HIGH + + + CHIP + MEDIUM + + + CODE + LOW + + + CHIP + + + CHIP + @@ -47,15 +66,32 @@ Procedure: proc_sbe_npll_setup EM Filter PLL failed to lock. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_PROC_SBE_NPLL_SETUP_FILTER_PLL + CHIP - TP_PLL_LOCK_0x010F0019 - MBOX_FSIGP4_0x00050013 - MBOX_FSIGP3_0x00050012 - + + + PROC_REF_CLOCK + CHIP + + HIGH + + + CHIP + MEDIUM + + + CODE + LOW + + + CHIP + + + CHIP + @@ -64,14 +100,54 @@ Procedure: proc_sbe_npll_setup X-Bus PLL failed to lock. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_PROC_SBE_NPLL_SETUP_XBUS_PLL + CHIP - MBOX_FSIGP4_0x00050013 - MBOX_GP3MIR_0x0005001B - X_PLLLOCKREG_0x040F0019 - + + + PROC_REF_CLOCK + CHIP + + HIGH + + + CHIP + MEDIUM + + + CODE + LOW + + + CHIP + + + CHIP + + + + REG_FFDC_PROC_SBE_NPLL_SETUP_FILTER_PLL + CFAM_FSI_GP3_0x00002812 + CFAM_FSI_GP4_0x00002813 + CFAM_FSI_GP6_0x00002815 + CFAM_FSI_GP7_0x00002816 + TP_PLL_LOCK_0x010F0019 + + + + REG_FFDC_PROC_SBE_NPLL_SETUP_XBUS_PLL + CFAM_FSI_GP3_0x00002812 + CFAM_FSI_GP4_0x00002813 + CFAM_FSI_GP6_0x00002815 + CFAM_FSI_GP7_0x00002816 + CFAM_FSI_GP3_MIRROR_0x0000281B + X_PLLLOCKREG_0x040F0019 + + + + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_pb_startclocks.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_pb_startclocks.xml index f3c67f7bb..26ab416a7 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_pb_startclocks.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_pb_startclocks.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,12 +32,18 @@ Procedure: proc_sbe_pb_startclocks Failed to start clocks on PB chiplet. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_NEST_CLOCK_CONTROLLER - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_NEST_CHIPLET + + CHIP + HIGH + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_pibmem_loader_halt_codes.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_pibmem_loader_halt_codes.xml index 178f7a70b..4db5b30b9 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_pibmem_loader_halt_codes.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_pibmem_loader_halt_codes.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -32,12 +34,17 @@ Register are in D0 at the time of the halt. Resetting the PIBMEM prior to running proc_sbe_pibmem_loader should clear up this error. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -48,12 +55,17 @@ execution of the procedure. The contents of the PIBMEM Status Register are in D0 at the time of the halt. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -64,12 +76,17 @@ is a hard requirement due to the PORE architecture. The image size passed to the procedure can be found in SPRG0. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -80,12 +97,17 @@ is a hard requirement due to the PORE architecture. The load address passed to the procedure can be found in SPRG0. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -96,11 +118,17 @@ PIBMEM. The image size (in bytes) passed to the procedure is in SPRG0; D1 contains the PIBMEM load address passed to the procedure. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_scominit_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_scominit_errors.xml index 135c39b65..2b5299ca1 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_scominit_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_scominit_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,24 +32,16 @@ Procedure: proc_sbe_scominit Check of winkle state across all IPLed chiplets using READ-OR failed. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - REG_FFDC_PROC_SLW_FIR_REGISTERS - REG_FFDC_PROC_SLW_PMC_REGISTERS - REG_FFDC_PROC_SLW_PBA_REGISTERS - CHIP_IN_ERROR - + REG_FFDC_PROC_SLW_PCBS_REGISTERS - CHIP_IN_ERROR - TARGET_TYPE_EX_CHIPLET - 0x01000000 + CHIP + TARGET_TYPE_EX_CHIPLET + 0x01000000 - + CHIP HIGH @@ -55,7 +49,6 @@ CODE LOW - @@ -64,21 +57,13 @@ Procedure: proc_sbe_scominit Check of winkle state across all IPLed chiplets using READ-AND failed. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - REG_FFDC_PROC_SLW_FIR_REGISTERS - REG_FFDC_PROC_SLW_PMC_REGISTERS - REG_FFDC_PROC_SLW_PBA_REGISTERS - CHIP_IN_ERROR - + REG_FFDC_PROC_SLW_PCBS_REGISTERS - CHIP_IN_ERROR - TARGET_TYPE_EX_CHIPLET - 0x01000000 + CHIP + TARGET_TYPE_EX_CHIPLET + 0x01000000 @@ -89,7 +74,6 @@ CODE LOW - @@ -98,21 +82,12 @@ Procedure: proc_sbe_scominit Polling of Idle FSM timed out. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - REG_FFDC_PROC_SLW_FIR_REGISTERS - REG_FFDC_PROC_SLW_PMC_REGISTERS - REG_FFDC_PROC_SLW_PBA_REGISTERS - CHIP_IN_ERROR - REG_FFDC_PROC_SLW_PCBS_REGISTERS - CHIP_IN_ERROR - TARGET_TYPE_EX_CHIPLET - 0x01000000 + CHIP + TARGET_TYPE_EX_CHIPLET + 0x01000000 @@ -128,27 +103,19 @@ Procedure: proc_sbe_scominit Polling of PFET controller for idle timed out. - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - REG_FFDC_PROC_SLW_FIR_REGISTERS - REG_FFDC_PROC_SLW_PMC_REGISTERS - REG_FFDC_PROC_SLW_PBA_REGISTERS - CHIP_IN_ERROR - + REG_FFDC_PROC_SLW_PCBS_REGISTERS - CHIP_IN_ERROR - TARGET_TYPE_EX_CHIPLET - 0x01000000 + CHIP + TARGET_TYPE_EX_CHIPLET + 0x01000000 CHIP HIGH - + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_select_ex_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_select_ex_errors.xml index b727e27d8..2d9bfe1ba 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_select_ex_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_select_ex_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,13 +32,25 @@ Procedure: proc_sbe_select_ex None of the valid boot cores are enabled + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_SELECT_EX + CHIP - EX_PARTIAL_GOOD_0x520F0012 - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + @@ -45,12 +59,30 @@ Procedure: proc_sbe_select_ex Skipped the first good boot core and no other good boot core was found + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_SELECT_EX + CHIP - EX_PARTIAL_GOOD_0x520F0012 - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + + + + REG_FFDC_SBE_SELECT_EX + EX_PARTIAL_GOOD_0x520F0012 + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_setup_evid_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_setup_evid_errors.xml index bc2d75c62..c2317fbed 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_setup_evid_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_setup_evid_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,23 +22,9 @@ - + - - - RC_SBE_SET_VID_ERROR - - Procedure: proc_sbe_setup_evid - Setting the VID with SPIVID returned bad status - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - - - RC_SBE_SET_VID_TIMEOUT @@ -44,27 +32,21 @@ Procedure: proc_sbe_setup_evid Setting EVID during boot timed out on the SPIVID bus - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_O2S_REGISTERS - CHIP_IN_ERROR - - - - - RC_SBE_SET_VID_ZERO_BOOT_VOLTAGE - - Procedure: proc_sbe_setup_evid - Boot voltage IDs are invalid (0s) - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_O2S_REGISTERS + CHIP - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -73,13 +55,21 @@ Procedure: proc_sbe_setup_evid Errors detected in O2S Status Reg setting Boot Voltage + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS REG_FFDC_O2S_REGISTERS - CHIP_IN_ERROR + CHIP - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -88,13 +78,21 @@ Procedure: proc_sbe_setup_evid SPIVID Device did not return good status the Boot Voltage Write operation + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS REG_FFDC_O2S_REGISTERS - CHIP_IN_ERROR + CHIP - + + CHIP + HIGH + + + CHIP + + + CHIP + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_tp_switch_gears_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_tp_switch_gears_errors.xml index f09822e9e..60a0f106e 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_tp_switch_gears_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_tp_switch_gears_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,13 +32,32 @@ Procedure: proc_sbe_tp_switch_gears X-Bus PLL failed to lock (Murano DD1.x workaround). + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR + REG_FFDC_PROC_SBE_NPLL_SETUP_XBUS_PLL + CHIP - X_PLLLOCKREG_0x040F0019 - + + + PROC_REF_CLOCK + CHIP + + HIGH + + + CHIP + MEDIUM + + + CODE + LOW + + + CHIP + + + CHIP + @@ -45,12 +66,18 @@ Procedure: proc_sbe_tp_switch_gears X-Bus Murano DD1.x workaround header check fail (ie. scan failed) - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_XBUS_CLOCK_CONTROLLER - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FAIL, POR_FFDC_OFFSET_USE_P0 + + CHIP + HIGH + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_trigger_winkle_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_trigger_winkle_errors.xml index 5e6911112..2a7a48ea5 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_trigger_winkle_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_sbe_trigger_winkle_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,24 +32,21 @@ Procedure: proc_sbe_trigger_winkle The master EX chiplet did not enter winkle before the deadman timer expired. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS REG_FFDC_PROC_PIBMEM_REGISTERS - REG_FFDC_PROC_SLW_FIR_REGISTERS - REG_FFDC_PROC_SLW_PMC_REGISTERS - REG_FFDC_PROC_SLW_PBA_REGISTERS - CHIP_IN_ERROR + CHIP - - REG_FFDC_PROC_SLW_PCBS_REGISTERS - - CHIP_IN_ERROR - TARGET_TYPE_EX_CHIPLET - 0x01000000 - - - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -56,24 +55,21 @@ Procedure: proc_sbe_trigger_winkle The master EX chiplet wakeup did not hit GOTO before the deadman timer expired. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS REG_FFDC_PROC_PIBMEM_REGISTERS - REG_FFDC_PROC_SLW_FIR_REGISTERS - REG_FFDC_PROC_SLW_PMC_REGISTERS - REG_FFDC_PROC_SLW_PBA_REGISTERS - CHIP_IN_ERROR - - - REG_FFDC_PROC_SLW_PCBS_REGISTERS - - CHIP_IN_ERROR - TARGET_TYPE_EX_CHIPLET - 0x01000000 - + CHIP - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -82,25 +78,21 @@ Procedure: proc_sbe_trigger_winkle The master EX chiplet wakeup didn't finish before the deadman timer expired. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS REG_FFDC_PROC_PIBMEM_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - REG_FFDC_PROC_SLW_FIR_REGISTERS - REG_FFDC_PROC_SLW_PMC_REGISTERS - REG_FFDC_PROC_SLW_PBA_REGISTERS - CHIP_IN_ERROR - - - REG_FFDC_PROC_SLW_PCBS_REGISTERS - - CHIP_IN_ERROR - TARGET_TYPE_EX_CHIPLET - 0x01000000 - + CHIP - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -109,24 +101,21 @@ Procedure: proc_sbe_trigger_winkle The master EX chiplet woke up but hostboot didn't indicate that it was running before the deadman timer expired. + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS REG_FFDC_PROC_PIBMEM_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - REG_FFDC_PROC_SLW_FIR_REGISTERS - REG_FFDC_PROC_SLW_PMC_REGISTERS - REG_FFDC_PROC_SLW_PBA_REGISTERS - CHIP_IN_ERROR + CHIP - - REG_FFDC_PROC_SLW_PCBS_REGISTERS - - CHIP_IN_ERROR - TARGET_TYPE_EX_CHIPLET - 0x01000000 - - - + + CHIP + HIGH + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/proc_slw_base_halt_codes.xml b/src/usr/hwpf/hwp/proc_sbe_errors/proc_slw_base_halt_codes.xml index 61d87f10a..da69d145f 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/proc_slw_base_halt_codes.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/proc_slw_base_halt_codes.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -31,11 +33,21 @@ invalid start vector was detected in the EXE_TRIGGER (ETR) register when kicking off an idle transition. The start vector is in ETR(8:11). - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + @@ -44,11 +56,17 @@ This error is signalled by proc_slw_poweronoff and indicates that a timeout occured waiting for the VDD PFET sequencer(s) to complete. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -57,11 +75,17 @@ This error is signalled by proc_slw_poweronoff and indicates that a timeout occured waiting for the VCS PFET sequencer(s) to complete. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -70,11 +94,21 @@ This error is signalled by proc_slw_poweronoff and indicates that an invalid PFET decode was detected. This is an SLW firmware issue. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + LOW + + + CODE + HIGH + + + CHIP + + + CHIP + @@ -84,11 +118,17 @@ occured waiting for the internal VRM babystepper to synchronize the idle transition command during sleep entry. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -98,11 +138,17 @@ occured waiting for the internal VRM babystepper to synchronize the idle transition command during winkle entry. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -112,11 +158,17 @@ occured waiting for the internal VRM babystepper to synchronize the idle transition command during a fast exit. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -125,11 +177,17 @@ This error is signalled by proc_slw_base and indicates that a timeout occured while polling for the iVRM calibration to complete. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -139,11 +197,17 @@ occured waiting for the internal VRM babystepper to synchronize the idle transition command during a deep exit after iVRM calibration. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -152,11 +216,17 @@ This error is signalled by proc_slw_base and indicates that a timeout occured waiting for the internal VRM force safe mode to take effect. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -165,11 +235,17 @@ This error is signalled by proc_slw_ram and indicates that a timeout occured waiting the RAM hardware to accept the instruction given to it.. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -178,11 +254,17 @@ This error is signalled by proc_slw_ram and indicates that a timeout occured waiting the RAM hardware to quiesce. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -191,11 +273,17 @@ This error is signalled by proc_slw_ram and indicates that RAM controller indicates recovery is inprogress or an exception has occured.. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -204,24 +292,36 @@ This error is signalled by proc_slw_ram and indicates that a timeout occured looking for good status from the RAM Controller. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + RC_SLW_GOTO_TIMEOUT_ERROR This error is signalled by proc_slw_base and indicates that a timeout occured - looking for the proper PCBS-PM state before issuing a PCBS-PM GOTO command. + looking for the proper PCBS-PM state before issuing a PCBS-PM "GOTO" command. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -231,11 +331,17 @@ updated the PMC status reg but never reached the subsequent halt op. PMC SLW Timeouts will be indicated without further FIR bits. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -245,11 +351,11 @@ executed the simple halt error injection. PMC SLW Timeouts will be indicated without further FIR bits. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + @@ -258,11 +364,11 @@ This error is signalled by proc_slw_pro_epi_log and indicates that the image enabled invalid instruction error injection occured. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + @@ -271,11 +377,11 @@ This error is signalled by proc_slw_pro_epi_log and indicates that the image enabled invalid OCI address error injection occured. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + @@ -284,11 +390,11 @@ This error is signalled by proc_slw_pro_epi_log and indicates that the image enabled invalid PIB address error injection occured. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + @@ -297,11 +403,11 @@ This error is signalled by proc_slw_pro_epi_log and indicates that the image enabled PC underflow error injection occured. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + @@ -310,11 +416,11 @@ This error is signalled by proc_slw_pro_epi_log and indicates that the image enabled PC overflow error injection occured. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + @@ -323,11 +429,11 @@ This error is signalled by proc_slw_pro_epi_log and indicates that the image enabled timeout error injection occured. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + @@ -336,11 +442,17 @@ This error is signalled by proc_slw_error_handler upon a detected error 0 event (non-masked PIB error code). - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -349,11 +461,17 @@ This error is signalled by proc_slw_error_handler upon a detected error 1 event (non-masked OCI error code). - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -362,11 +480,17 @@ This error is signalled by proc_slw_error_handler upon a detected error 2 event (instruction fetch or decode). - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -375,11 +499,17 @@ This error is signalled by proc_slw_error_handler upon a detected error 3 event (internal data error). - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -388,11 +518,17 @@ This error is signalled by proc_slw_error_handler upon a detected error 4 event (an error was detected upon an error). - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -405,11 +541,21 @@ Deep Winkle power up bit. If these bits match, then a hardware fault is the next most probable. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + @@ -421,11 +567,21 @@ causes the loss of the High Availability Log Write pointer in the L3 before it could be saved for restoration upon Deep Winkle Exit. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + LOW + + + CODE + HIGH + + + CHIP + + + CHIP + @@ -435,11 +591,17 @@ achieving the special wake-up state after hitting the PCBS GOTO operation to complete deep sleep exit. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -449,11 +611,21 @@ special wake-up override isnt enabled which it must be prior to calling any of the CPM install or enable routines. - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + LOW + + + CODE + HIGH + + + CHIP + + + CHIP + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/sbe_common_halt_codes.xml b/src/usr/hwpf/hwp/proc_sbe_errors/sbe_common_halt_codes.xml index 9149a5c11..2842ad9ef 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/sbe_common_halt_codes.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/sbe_common_halt_codes.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -33,13 +35,6 @@ with the normal successful completion of an IPL by an SBE istep procedure. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - @@ -50,13 +45,6 @@ with the normal successful completion of an IPL by an SBE istep procedure on a slave chip. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - @@ -67,13 +55,6 @@ with a procedure initiated halt of the SBE code, with the expectation that it will be resumed at a later point in time. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - @@ -87,13 +68,6 @@ by setting the PROC_CONTROL_ENTRY_HALT bit in the control word for the procedure. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - @@ -115,15 +89,18 @@ procedure. Use the fields of the SBEVITAL register to identify the procedure that failed. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -133,16 +110,17 @@ executing a procedure. Use the fields of the SBEVITAL register to identify the procedure that failed. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + LOW + + + CODE + HIGH + + RC_SBE_PROC_SPATTN @@ -151,15 +129,18 @@ executing a procedure. Use the fields of the SBEVITAL register to identify the procedure that failed. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_FIR_FAIL, POR_FFDC_OFFSET_NONE + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -171,15 +152,25 @@ returned a non-0 response. The PORE PIBMS_DBG registers 0 and 1 (plus the remainder of the PORE state) contain the information required for an initial debug of the problem. + + This error should never occur for SBE/SLW, based on the fact that the + HW error handler mechanism is disabled. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + @@ -190,17 +181,24 @@ PORE state) contain the information required for an initial debug of the problem. - This error should never occur during an SBE IPL since the SBE does not - include an OCI interface. + This error should never occur for SBE/SLW, based on the fact that the + HW error handler mechanism is disabled. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + @@ -212,15 +210,25 @@ o An I2C hang when fetching code from SEEPROM; o A bad branch that starts executing garbage or data; o Memory corruption + + This error should never occur for SBE/SLW, based on the fact that the + HW error handler mechanism is disabled. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + @@ -229,17 +237,24 @@ This halt code indicates an internal data error during consistency checking, e.g., a bad scan-data CRC. - This error should never occur during an SBE IPL since the SBE IPL does - not use the PORE SCAND instruction. + This error should never occur for SBE/SLW, based on the fact that the + HW error handler mechanism is disabled. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + @@ -248,18 +263,24 @@ This halt code indicates that a second error occurred during processing of an initial error. - It is extremely unlikely that this error would ever occur during an SBE - IPL since the PORE error handlers are nothing more than a single HALT - statement. + This error should never occur for SBE/SLW, based on the fact that the + HW error handler mechanism is disabled. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + @@ -271,15 +292,18 @@ scan0 DONE polling reached the specified threshold value. The scan0 subroutine could have been called by various procedures. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_SCAN_FLUSH_FAIL, POR_FFDC_OFFSET_USE_P1 + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -291,14 +315,18 @@ arrayinit DONE polling reached the specified threshold value. The arrayinit subroutine could have been called by various procedures. - - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + proc_extract_pore_halt_ffdc, pore_state, PORE_HALT_ARRAYINIT_FAIL, POR_FFDC_OFFSET_USE_P1 + + CHIP + HIGH + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/proc_sbe_errors/sbe_load_ring_vec_ex_errors.xml b/src/usr/hwpf/hwp/proc_sbe_errors/sbe_load_ring_vec_ex_errors.xml index 002501f0f..876e0afca 100644 --- a/src/usr/hwpf/hwp/proc_sbe_errors/sbe_load_ring_vec_ex_errors.xml +++ b/src/usr/hwpf/hwp/proc_sbe_errors/sbe_load_ring_vec_ex_errors.xml @@ -5,7 +5,9 @@ - + + + @@ -20,7 +22,7 @@ - + @@ -30,15 +32,21 @@ Procedure: proc_sbe_ex_core_gptr_time_initf Failed to find a chiplet to scan for ex_time_core - + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_SELECT_EX + CHIP - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -47,31 +55,44 @@ Procedure: proc_sbe_ex_gptr_time_initf Failed to find a chiplet to scan for ex_time_eco - + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_SELECT_EX + CHIP - + + CHIP + HIGH + + + CHIP + + + CHIP + RC_SBE_LOAD_RING_VEC_EX_ex_repr_core_ERROR Procedure: proc_sbe_ex_core_repair_initf - Failed to find a chiplet to scan for ex_repr_core - + Failed to find a chiplet to scan for ex_repr_core + + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_SELECT_EX + CHIP - + + CHIP + HIGH + + + CHIP + + + CHIP + @@ -80,14 +101,21 @@ Procedure: proc_sbe_ex_repair_initf Failed to find a chiplet to scan for ex_repr_eco - + - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR + REG_FFDC_SBE_SELECT_EX + CHIP - + + CHIP + HIGH + + + CHIP + + + CHIP + + diff --git a/src/usr/hwpf/hwp/slave_sbe/makefile b/src/usr/hwpf/hwp/slave_sbe/makefile index 9e8c71cf4..2ee5fe406 100644 --- a/src/usr/hwpf/hwp/slave_sbe/makefile +++ b/src/usr/hwpf/hwp/slave_sbe/makefile @@ -45,6 +45,8 @@ EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_cen_ref_clk_enable EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_spless_sbe_startWA EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/build_winkle_images/proc_mailbox_utils EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_tp_collect_dbg_data +EXTRAINCDIR += ${ROOTPATH}/src/usr/pore/poreve/porevesrc +EXTRAINCDIR += ${ROOTPATH}/src/usr/pore/poreve/model/ ## NOTE: add new object files when you add a new HWP OBJS += slave_sbe.o @@ -58,6 +60,9 @@ OBJS += proc_spless_sbe_startWA.o OBJS += proc_reset_i2cm_bus_fence.o OBJS += proc_check_master_sbe_seeprom.o OBJS += proc_tp_collect_dbg_data.o +OBJS += proc_extract_pore_engine_state.o +OBJS += proc_extract_pore_base_ffdc.o +OBJS += proc_extract_pore_halt_ffdc.o ## NOTE: add a new directory onto the vpaths when you add a new HWP VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_cen_ref_clk_enable diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.C b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.C index 86d92eec0..373a6a49e 100644 --- a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.C +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_check_slave_sbe_seeprom_complete.C @@ -23,7 +23,7 @@ /* */ /* IBM_PROLOG_END_TAG */ // -*- mode: C++; c-file-style: "linux"; -*- -// $Id: proc_check_slave_sbe_seeprom_complete.C,v 1.14 2014/06/10 12:41:40 dsanner Exp $ +// $Id: proc_check_slave_sbe_seeprom_complete.C,v 1.15 2014/07/23 19:30:59 jmcgill Exp $ // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_check_slave_sbe_seeprom_complete.C,v $ //------------------------------------------------------------------------------ // *| @@ -61,7 +61,7 @@ const uint8_t SBE_EXIT_SUCCESS_0xF = 0xF; const uint64_t NS_TO_FINISH = 10000000; //(10 ms) const uint64_t MS_TO_FINISH = NS_TO_FINISH/1000000; const uint64_t SIM_CYCLES_TO_FINISH = 10000000; -//Should really be 19.6*NS_TO_FINISH, but sim runs at about 11 hours per +//Should really be 19.6*NS_TO_FINISH, but sim runs at about 11 hours per //simulated second which is longer than we want to wait in error cases @@ -242,7 +242,7 @@ extern "C" do { //Check if the SBE is still running. Loop until stopped - //or loop time is exceeded. + //or loop time is exceeded. bool still_running = true; size_t loop_time = 0; rc = proc_check_slave_sbe_seeprom_complete_check_running( @@ -327,12 +327,12 @@ extern "C" if( halt_code != SBE_EXIT_SUCCESS_0xF ) { FAPI_ERR( - "SBE halted with error %i (istep 0x%X, substep %i)", + "SBE halted with error %i (istep 0x%X, substep %i)", halt_code, istep_num, substep_num); //Get the error code from the SBE code - FAPI_EXEC_HWP(rc, proc_extract_sbe_rc, i_target, i_pSEEPROM, SBE); + FAPI_EXEC_HWP(rc, proc_extract_sbe_rc, i_target, NULL, i_pSEEPROM, SBE); break; } //Halt code was success @@ -343,7 +343,7 @@ extern "C" ( istep_num != PROC_SBE_EX_HOST_RUNTIME_SCOM_MAGIC_ISTEP_NUM )) { FAPI_ERR( - "SBE halted in wrong istep (istep 0x%X, substep %i)", + "SBE halted in wrong istep (istep 0x%X, substep %i)", istep_num, substep_num); const fapi::Target & CHIP_IN_ERROR = i_target; @@ -362,7 +362,7 @@ extern "C" ( substep_num != SUBSTEP_ENABLE_PNOR_SLAVE_CHIP ))) { FAPI_ERR( - "SBE halted in wrong substep (istep 0x%X, substep %i)", + "SBE halted in wrong substep (istep 0x%X, substep %i)", istep_num, substep_num); const fapi::Target & CHIP_IN_ERROR = i_target; diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.C b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.C new file mode 100644 index 000000000..f6103356a --- /dev/null +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.C @@ -0,0 +1,144 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2014 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +// $Id: proc_extract_pore_base_ffdc.C,v 1.1 2014/07/23 19:38:05 jmcgill Exp $ +// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_extract_pore_base_ffdc.C,v $ +//------------------------------------------------------------------------------ +// *| +// *! (C) Copyright International Business Machines Corp. 2012 +// *! All Rights Reserved -- Property of IBM +// *! *** *** +// *| +// *! TITLE : proc_extract_pore_base_ffdc.C +// *! DESCRIPTION : Log base FFDC for SBE/SLW errors +// *! +// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com +// *! BACKUP NAME : Johannes Koesters Email: koesters@de.ibm.com +// *! +// *! Overview: +// *! - Dump state of SBE/SLW engine +// *! - Extract additional FFDC based on engine type +// *! +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +// Includes +//------------------------------------------------------------------------------ +#include +#include +#include + +//------------------------------------------------------------------------------ +// Function definitions +//------------------------------------------------------------------------------ + +extern "C" +{ + + +/** + * proc_extract_pore_engine_state - HWP entry point, log PORE engine state + * + * @param[in] i_pore_state - struct holding PORE state + * @param[in] i_pore_sbe_state - struct holding PORE SBE specific state + * @param[out] o_rc - target return code for extra FFDC + * + * @retval fapi::ReturnCode = SUCCESS + */ +fapi::ReturnCode proc_extract_pore_base_ffdc(const por_base_state & i_pore_state, + const por_sbe_base_state & i_pore_sbe_state, + fapi::ReturnCode & o_rc) + +{ + // return code + fapi::ReturnCode rc; + + FAPI_INF("proc_extract_pore_base_ffdc: Start"); + + do + { + // append to return code + const fapi::Target & CHIP = i_pore_state.target; + const por_engine_t & ENGINE = i_pore_state.engine; + const bool & VIRTUAL = i_pore_state.is_virtual; + const uint64_t & PORE_VITAL_REG = i_pore_state.vital_state.getDoubleWord(0); + const uint64_t & PORE_STATUS_REG = i_pore_state.engine_state.getDoubleWord(PORE_STATUS_OFFSET); + const uint64_t & PORE_CONTROL_REG = i_pore_state.engine_state.getDoubleWord(PORE_CONTROL_OFFSET); + const uint64_t & PORE_RESET_REG = i_pore_state.engine_state.getDoubleWord(PORE_RESET_OFFSET); + const uint64_t & PORE_ERR_MASK_REG = i_pore_state.engine_state.getDoubleWord(PORE_ERR_MASK_OFFSET); + const uint64_t & PORE_P0_REG = i_pore_state.engine_state.getDoubleWord(PORE_P0_OFFSET); + const uint64_t & PORE_P1_REG = i_pore_state.engine_state.getDoubleWord(PORE_P1_OFFSET); + const uint64_t & PORE_A0_REG = i_pore_state.engine_state.getDoubleWord(PORE_A0_OFFSET); + const uint64_t & PORE_A1_REG = i_pore_state.engine_state.getDoubleWord(PORE_A1_OFFSET); + const uint64_t & PORE_TBL_BASE_REG = i_pore_state.engine_state.getDoubleWord(PORE_TBL_BASE_OFFSET); + const uint64_t & PORE_EXE_TRIGGER_REG = i_pore_state.engine_state.getDoubleWord(PORE_EXE_TRIGGER_OFFSET); + const uint64_t & PORE_CTR_REG = i_pore_state.engine_state.getDoubleWord(PORE_CTR_OFFSET); + const uint64_t & PORE_D0_REG = i_pore_state.engine_state.getDoubleWord(PORE_D0_OFFSET); + const uint64_t & PORE_D1_REG = i_pore_state.engine_state.getDoubleWord(PORE_D1_OFFSET); + const uint64_t & PORE_IBUF0_REG = i_pore_state.engine_state.getDoubleWord(PORE_IBUF0_OFFSET); + const uint64_t & PORE_IBUF1_REG = i_pore_state.engine_state.getDoubleWord(PORE_IBUF1_OFFSET); + const uint64_t & PORE_DEBUG0_REG = i_pore_state.engine_state.getDoubleWord(PORE_DEBUG0_OFFSET); + const uint64_t & PORE_DEBUG1_REG = i_pore_state.engine_state.getDoubleWord(PORE_DEBUG1_OFFSET); + const uint64_t & PORE_STACK0_REG = i_pore_state.engine_state.getDoubleWord(PORE_STACK0_OFFSET); + const uint64_t & PORE_STACK1_REG = i_pore_state.engine_state.getDoubleWord(PORE_STACK1_OFFSET); + const uint64_t & PORE_STACK2_REG = i_pore_state.engine_state.getDoubleWord(PORE_STACK2_OFFSET); + const uint64_t & PORE_IDFLAGS_REG = i_pore_state.engine_state.getDoubleWord(PORE_IDFLAGS_OFFSET); + const uint64_t & PORE_SPRG0_REG = i_pore_state.engine_state.getDoubleWord(PORE_SPRG0_OFFSET); + const uint64_t & PORE_MRR_REG = i_pore_state.engine_state.getDoubleWord(PORE_MRR_OFFSET); + const uint64_t & PORE_I2CE0_REG = i_pore_state.engine_state.getDoubleWord(PORE_I2CE0_OFFSET); + const uint64_t & PORE_I2CE1_REG = i_pore_state.engine_state.getDoubleWord(PORE_I2CE1_OFFSET); + const uint64_t & PORE_I2CE2_REG = i_pore_state.engine_state.getDoubleWord(PORE_I2CE2_OFFSET); + const uint64_t & PORE_PC = i_pore_state.pc; + const uint64_t & PORE_RC = i_pore_state.rc; + FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_PROC_EXTRACT_PORE_BASE_FFDC_ENGINE_STATE); + + + // + // collect additional FFDC based on engine type + // + + if (i_pore_state.target.getType() == fapi::TARGET_TYPE_PROC_CHIP) + { + if (i_pore_state.engine == SBE) + { + const uint64_t & PNOR_ECCB_STATUS = i_pore_sbe_state.pnor_eccb_status.getDoubleWord(0); + const uint64_t & SEEPROM_ECCB_STATUS = i_pore_sbe_state.i2cm_eccb_status.getDoubleWord(0); + const uint8_t & SOFT_ERROR_STATUS = i_pore_sbe_state.soft_err; + const bool & ATTN_REPORTED = i_pore_sbe_state.reported_attn; + FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_PROC_EXTRACT_PORE_BASE_FFDC_SBE); + } + else + { + FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_PROC_EXTRACT_PORE_BASE_FFDC_SLW); + } + } + } while(0); + + FAPI_INF("proc_extract_pore_base_ffdc: End"); + return rc; +} + + +} // extern "C" diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.H b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.H new file mode 100644 index 000000000..10424d9f8 --- /dev/null +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.H @@ -0,0 +1,86 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2014 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +// $Id: proc_extract_pore_base_ffdc.H,v 1.1 2014/07/23 19:38:05 jmcgill Exp $ +// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_extract_pore_base_ffdc.H,v $ +//------------------------------------------------------------------------------ +// *| +// *! (C) Copyright International Business Machines Corp. 2012 +// *! All Rights Reserved -- Property of IBM +// *! *** *** +// *| +// *! TITLE : proc_extract_pore_base_ffdc.C +// *! DESCRIPTION : Log base FFDC for SBE/SLW errors +// *! +// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com +// *! BACKUP NAME : Johannes Koesters Email: koesters@de.ibm.com +// *! +//------------------------------------------------------------------------------ + +#ifndef _PROC_EXTRACT_PORE_BASE_FFDC_H_ +#define _PROC_EXTRACT_PORE_BASE_FFDC_H_ + + +//------------------------------------------------------------------------------ +// Includes +//------------------------------------------------------------------------------ +#include +#include + + +//------------------------------------------------------------------------------ +// Structure definitions +//------------------------------------------------------------------------------ + +// function pointer typedef definition for HWP call support +typedef fapi::ReturnCode (*proc_extract_pore_base_ffdc_FP_t)(const por_base_state &, + const por_sbe_base_state &, + fapi::ReturnCode &); + +//------------------------------------------------------------------------------ +// Function prototypes +//------------------------------------------------------------------------------ + + +extern "C" +{ + +/** + * proc_extract_pore_engine_state - HWP entry point, log PORE engine state + * + * @param[in] i_pore_state - struct holding PORE state + * @param[in] i_pore_sbe_state - struct holding PORE SBE specific state + * @param[out] o_rc - target return code for extra FFDC + * + * @retval fapi::ReturnCode = SUCCESS + */ +fapi::ReturnCode proc_extract_pore_base_ffdc(const por_base_state & i_pore_state, + const por_sbe_base_state & i_pore_sbe_state, + fapi::ReturnCode & o_rc); + + + +} // extern "C" + +#endif // _PROC_EXTRACT_PORE_BASE_FFDC_H_ diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.xml b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.xml new file mode 100644 index 000000000..a28556771 --- /dev/null +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RC_PROC_EXTRACT_PORE_BASE_FFDC + + Base error code used to invoke PORE engine state FFDC logging function + + proc_extract_pore_base_ffdc, pore_state, pore_sbe_state + + + + RC_PROC_EXTRACT_PORE_BASE_FFDC_ENGINE_STATE + + PORE engine state collected on all SBE/SLW fails + + + CHIP + ENGINE + VIRTUAL + + PORE_VITAL_REG + + PORE_STATUS_REG + PORE_CONTROL_REG + PORE_RESET_REG + PORE_ERR_MASK_REG + PORE_P0_REG + PORE_P1_REG + PORE_A0_REG + PORE_A1_REG + PORE_TBL_BASE_REG + PORE_EXE_TRIGGER_REG + PORE_CTR_REG + PORE_D0_REG + PORE_D1_REG + PORE_IBUF0_REG + PORE_IBUF1_REG + PORE_DEBUG0_REG + PORE_DEBUG1_REG + PORE_STACK0_REG + PORE_STACK1_REG + PORE_STACK2_REG + PORE_IDFLAGS_REG + PORE_SPRG0_REG + PORE_MRR_REG + PORE_I2CE0_REG + PORE_I2CE1_REG + PORE_I2CE2_REG + + PORE_PC + + PORE_RC + + + + RC_PROC_EXTRACT_PORE_BASE_FFDC_SBE + + SBE specific register FFDC to collect (via chip target) on all fails + + PNOR_ECCB_STATUS + SEEPROM_ECCB_STATUS + SOFT_ERROR_STATUS + ATTN_REPORTED + + REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS + REG_FFDC_PROC_MBOX_REGISTERS + CHIP + + proc_tp_collect_dbg_data, CHIP + + + + RC_PROC_EXTRACT_PORE_BASE_FFDC_SLW + + SLW specific register FFDC to collect (via chip target) on all fails + + + REG_FFDC_PROC_SLW_PBA_REGISTERS + REG_FFDC_PROC_SLW_FIR_REGISTERS + REG_FFDC_PROC_SLW_PMC_REGISTERS + CHIP + + + REG_FFDC_PROC_SLW_PCBS_REGISTERS + + CHIP + TARGET_TYPE_EX_CHIPLET + 0x01000000 + + + + + \ No newline at end of file diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.C b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.C new file mode 100644 index 000000000..7ca0ad37d --- /dev/null +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.C @@ -0,0 +1,558 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2014 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +// $Id: proc_extract_pore_engine_state.C,v 1.3 2014/08/07 15:04:41 thi Exp $ +// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_extract_pore_engine_state.C,v $ +//------------------------------------------------------------------------------ +// *| +// *! (C) Copyright International Business Machines Corp. 2012 +// *! All Rights Reserved -- Property of IBM +// *! *** *** +// *| +// *! TITLE : proc_extract_pore_engine_state.C +// *! DESCRIPTION : Extract PORE (SBE/SLW) engine state +// *! +// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com +// *! BACKUP NAME : Johannes Koesters Email: koesters@de.ibm.com +// *! +// *! Overview: +// *! - Dump state of SBE/SLW engine +// *! +//------------------------------------------------------------------------------ + + +#ifdef FAPIECMD + #if FAPIECMD == 1 + #define PROC_EXTRACT_PORE_ENGINE_STATE_BUILD_POREVE 0 + #else + #define PROC_EXTRACT_PORE_ENGINE_STATE_BUILD_POREVE 1 + #endif +#else + #ifdef __HOSTBOOT_MODULE + #define PROC_EXTRACT_PORE_ENGINE_STATE_BUILD_POREVE 1 + #else + #define PROC_EXTRACT_PORE_ENGINE_STATE_BUILD_POREVE 0 + #endif +#endif + + +//------------------------------------------------------------------------------ +// Includes +//------------------------------------------------------------------------------ +#include +#include +#include + +#if PROC_EXTRACT_PORE_ENGINE_STATE_BUILD_POREVE == 1 + #include +#endif + + +//------------------------------------------------------------------------------ +// Constant definitions +//------------------------------------------------------------------------------ +const uint32_t SLW_VITAL_PIBMEM_OFFSET = 0x12; + + +//------------------------------------------------------------------------------ +// Function definitions +//------------------------------------------------------------------------------ + +extern "C" +{ + + +/** + * proc_extract_pore_engine_state_sbe_ffdc - Extract SBE-specific engine state + * + * @param[in] i_target - target of chip with failed SBE + * @param[out] o_pore_sbe_state - PORE SBE-specific state/FFDC content + * + * @retval fapi::ReturnCode = SUCCESS + * @retval fapi::ReturnCode = results of cfam/SCOM access + */ +fapi::ReturnCode proc_extract_pore_engine_state_sbe_ffdc( + const fapi::Target & i_target, + por_sbe_base_state & o_pore_sbe_state) +{ + // return codes + fapi::ReturnCode rc; + + FAPI_DBG("proc_extract_pore_engine_state_sbe_ffdc: Start"); + + do + { + // check cfam status register for any PIB errors + ecmdDataBufferBase cfam_status(32); + rc = fapiGetCfamRegister(i_target, CFAM_FSI_STATUS_0x00001007, cfam_status); + if (rc) + { + FAPI_ERR("proc_extract_pore_engine_state_sbe_ffdc: Error from fapiGetCfamRegister (CFAM_FSI_STATUS_0x00001007)"); + break; + } + + // bit 30 indicates SBE reported attention + if (cfam_status.isBitSet(30)) + { + FAPI_ERR("proc_extract_pore_engine_state_sbe_ffdc: SBE reported attention to CFAM Status register"); + o_pore_sbe_state.reported_attn = true; + } + + // check ECCB engines (I2C/LPC) for UE/CE conditions + // SLW does not use these engines to access main memory, so no need to check + rc = fapiGetScom(i_target, PORE_ECCB_STATUS_REGISTER_READ_0x000C0002, o_pore_sbe_state.i2cm_eccb_status); + if (rc) + { + FAPI_ERR("proc_extract_pore_engine_state_sbe_ffdc: Error from fapiGetScom (PORE_ECCB_STATUS_REGISTER_READ_0x000C00002)"); + break; + } + + rc = fapiGetScom(i_target, LPC_STATUS_0x000B0002, o_pore_sbe_state.pnor_eccb_status); + if (rc) + { + FAPI_ERR("proc_extract_pore_engine_state_sbe_ffdc: Error from fapiGetScom (LPC_STATUS_0x000B0002)"); + break; + } + + // determine if either engine has reached threshold of > 128 CEs + if (o_pore_sbe_state.i2cm_eccb_status.isBitSet(57)) + { + o_pore_sbe_state.soft_err = eSOFT_ERR_I2CM; + } + + if (o_pore_sbe_state.pnor_eccb_status.isBitSet(57)) + { + if (o_pore_sbe_state.soft_err == eSOFT_ERR_I2CM) + { + o_pore_sbe_state.soft_err = eSOFT_ERR_BOTH; + } + else + { + o_pore_sbe_state.soft_err = eSOFT_ERR_PNOR; + } + } + } while(0); + + FAPI_DBG("proc_extract_pore_engine_state_sbe_ffdc: End"); + return rc; +} + + +/** + * proc_extract_pore_engine_state_hw - Extract PORE engine state from HW + * + * @param[in] i_target - target of chip with failed SBE/SLW engine + * @param[in] i_engine - engine type (SBE/SLW) + * @param[out] o_vital_state - data buffer to hold SBE/SLW vital state + * @param[out] o_engine_state - data buffer to hold engine FFDC state + * + * @retval fapi::ReturnCode = SUCCESS + * @retval fapi::ReturnCode = results of cfam/SCOM access + */ +fapi::ReturnCode proc_extract_pore_engine_state_hw( + const fapi::Target & i_target, + const por_engine_t i_engine, + ecmdDataBufferBase & o_vital_state, + ecmdDataBufferBase & o_engine_state) +{ + // return codes + fapi::ReturnCode rc; + uint32_t rc_ecmd = 0x0; + + FAPI_DBG("proc_extract_pore_engine_state_hw: Start"); + + do + { + // collect SBE/SLW vital register value + if (i_engine == SBE) + { + ecmdDataBufferBase cfam_vital_data(32); + + // collect from SBE vital HW register + rc = fapiGetCfamRegister(i_target, CFAM_FSI_SBE_VITAL_0x0000281C, cfam_vital_data); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_engine_state_hw: Error from fapiGetCfamRegister (CFAM_FSI_SBE_VITAL_0x0000281C)"); + break; + } + + rc_ecmd |= o_vital_state.setWord(0, cfam_vital_data.getWord(0)); + rc_ecmd |= o_vital_state.setWord(1, 0x0); + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_engine_state_hw: Error %x forming SBE Vital FFDC data buffers", + rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + } + else + { + // collect from PIBMEM (virtual SLW vital state) + rc = fapiGetScom(i_target, + PIBMEM0_0x00080000 + SLW_VITAL_PIBMEM_OFFSET, + o_vital_state); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_engine_state_hw: Error from fapiGetCfamRegister (CFAM_FSI_SBE_VITAL_0x0000281C)"); + break; + } + } + + // collect SBE/SLW engine state + for (uint8_t offset = PORE_STATUS_OFFSET; + offset < PORE_NUM_REGS; + offset++) + { + ecmdDataBufferBase reg(64); + + rc = fapiGetScom(i_target, + (uint32_t) i_engine + offset, + reg); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_engine_state_hw: Error from fapiGetScom (0x%08X)", + (uint32_t) i_engine + offset); + break; + } + + rc_ecmd |= o_engine_state.setDoubleWord(offset, reg.getDoubleWord(0)); + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_engine_state_hw: Error %x inserting engine FFDC data value (DW=%d)", + rc_ecmd, offset); + rc.setEcmdError(rc_ecmd); + break; + } + } + if (!rc.ok()) + { + break; + } + } while(0); + + FAPI_DBG("proc_extract_pore_engine_state_hw: End"); + return rc; +} + + +/** + * proc_extract_pore_engine_state_virtual - Extract PORE engine state from virtual engine + * + * @param[in] i_target - target of chip with failed SBE engine + * @param[in] i_poreve - pointer to PoreVe object + * @param[out] o_vital_state - data buffer to hold SBE vital state + * @param[out] o_engine_state - data buffer to hold engine FFDC state + * + * @retval fapi::ReturnCode = SUCCESS + * @retval fapi::ReturnCode = RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_MODEL_ERROR + * @retval fapi::ReturnCode = RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_PIB_ERROR + */ +#if PROC_EXTRACT_PORE_ENGINE_STATE_BUILD_POREVE == 1 +fapi::ReturnCode proc_extract_pore_engine_state_virtual( + const fapi::Target & i_target, + vsbe::PoreVe * i_poreve, + ecmdDataBufferBase & o_vital_state, + ecmdDataBufferBase & o_engine_state) +{ + // return codes + fapi::ReturnCode rc; + uint32_t rc_ecmd = 0x0; + vsbe::ModelError me; + + FAPI_DBG("proc_extract_pore_engine_state_virtual: Start"); + + do + { + // extract SBE vital state + // - for processor chips, this should resolve to a getscom + // - for Centaur, the state should be extracted from the virtual model + uint64_t vital_data; + int pib_rc; + me = i_poreve->getscom(MBOX_SBEVITAL_0x0005001C, vital_data, pib_rc); + if (me != vsbe::ME_SUCCESS) + { + FAPI_ERR("proc_extract_pore_engine_state_virtual: Model error %x extracting SBE vital state", + (int) me); + const fapi::Target & CHIP = i_target; + const uint32_t & MODEL_ERROR = (uint32_t) me; + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_MODEL_ERROR); + break; + } + else if (pib_rc) + { + FAPI_ERR("proc_extract_pore_engine_state_virtual: PIB error getting SBE vital state (error code %d)", + pib_rc); + const fapi::Target & CHIP = i_target; + const int & PIB_ERROR = pib_rc; + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_PIB_ERROR); + break; + } + rc_ecmd = o_vital_state.setDoubleWord(0, vital_data); + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_engine_state_virtual: Error %x inserting SBE vital FFDC data value", + rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + + // extract engine state from model + vsbe::PoreState ve_state; + me = i_poreve->iv_pore.extractState(ve_state); + if (me != vsbe::ME_SUCCESS) + { + FAPI_ERR("proc_extract_pore_engine_state_virtual: Model error %x extracting virtual engine state", + (int) me); + const fapi::Target & CHIP = i_target; + const uint32_t & MODEL_ERROR = (uint32_t) me; + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_MODEL_ERROR); + break; + } + + uint64_t status; + ve_state.get(vsbe::PORE_STATUS, status); + uint64_t control; + ve_state.get(vsbe::PORE_CONTROL, control); + uint64_t reset; + ve_state.get(vsbe::PORE_RESET, reset); + uint64_t table_base; + ve_state.get(vsbe::PORE_TABLE_BASE_ADDR, table_base); + uint64_t ibuf0, ibuf1; + ve_state.get(vsbe::PORE_IBUF_01, ibuf0); + ve_state.get(vsbe::PORE_IBUF_2, ibuf1); + uint64_t dbg0, dbg1; + ve_state.get(vsbe::PORE_DBG0, dbg0); + ve_state.get(vsbe::PORE_DBG1, dbg1); + uint64_t stack0, stack1, stack2; + ve_state.get(vsbe::PORE_PC_STACK0, stack0); + ve_state.get(vsbe::PORE_PC_STACK1, stack1); + ve_state.get(vsbe::PORE_PC_STACK2, stack2); + uint64_t mrr; + ve_state.get(vsbe::PORE_MEM_RELOC, mrr); + uint64_t i2c_e0, i2c_e1, i2c_e2; + ve_state.get(vsbe::PORE_I2C_E0_PARAM, i2c_e0); + ve_state.get(vsbe::PORE_I2C_E1_PARAM, i2c_e1); + ve_state.get(vsbe::PORE_I2C_E2_PARAM, i2c_e2); + + rc_ecmd |= o_engine_state.setDoubleWord(PORE_STATUS_OFFSET, status); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_CONTROL_OFFSET, control); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_RESET_OFFSET, reset); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_ERR_MASK_OFFSET, i_poreve->iv_pore.emr.read()); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_P0_OFFSET, (i_poreve->iv_pore.p0.read() << 32)); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_P1_OFFSET, (i_poreve->iv_pore.p1.read() << 32)); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_A0_OFFSET, i_poreve->iv_pore.a0.read()); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_A1_OFFSET, i_poreve->iv_pore.a1.read()); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_TBL_BASE_OFFSET, table_base); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_EXE_TRIGGER_OFFSET, i_poreve->iv_pore.etr.read()); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_CTR_OFFSET, i_poreve->iv_pore.ctr.read()); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_D0_OFFSET, i_poreve->iv_pore.d0.read()); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_D1_OFFSET, i_poreve->iv_pore.d1.read()); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_IBUF0_OFFSET, ibuf0); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_IBUF1_OFFSET, ibuf1); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_DEBUG0_OFFSET, dbg0); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_DEBUG1_OFFSET, dbg1); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_STACK0_OFFSET, stack0); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_STACK1_OFFSET, stack1); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_STACK2_OFFSET, stack2); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_IDFLAGS_OFFSET, i_poreve->iv_pore.ifr.read()); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_SPRG0_OFFSET, i_poreve->iv_pore.sprg0.read()); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_MRR_OFFSET, mrr); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_I2CE0_OFFSET, i2c_e0); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_I2CE1_OFFSET, i2c_e1); + rc_ecmd |= o_engine_state.setDoubleWord(PORE_I2CE2_OFFSET, i2c_e2); + + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_engine_state_virtual: Error %x inserting engine FFDC data value", + rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + + } while(0); + + FAPI_DBG("proc_extract_pore_engine_state_virtual: End"); + return rc; +} +#endif + +/** + * proc_extract_pore_engine_state - HWP entry point, extract PORE engine state + * + * @param[in] i_target - chip target, used to collect engine state if + * i_poreve is NULL + * @param[in] i_poreve - pointer to PoreVe object, used to collect engine + * state if non NULL + * @param[in] i_engine - engine type to analyze (SBE/SLW) + * @param[out] o_pore_state - PORE state/FFDC content + * @param[out] o_pore_sbe_state - PORE SBE-specific state/FFDC content (filled + * only if i_engine=SBE) + * + * @retval fapi::ReturnCode = SUCCESS + * @retval fapi::ReturnCode = RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_MODEL_ERROR + * @retval fapi::ReturnCode = RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_PIB_ERROR + * @retval fapi::ReturnCode = RC_PROC_EXTRACT_PORE_ENGINE_STATE_UNSUPPORTED_INVOCATION + */ +fapi::ReturnCode proc_extract_pore_engine_state(const fapi::Target & i_target, + void * i_poreve, + const por_engine_t i_engine, + por_base_state & o_pore_state, + por_sbe_base_state & o_pore_sbe_state) +{ + // return code + fapi::ReturnCode rc; + + do + { + // + // check arguments + // + + // virtual SBE for processor or Centaur OR + // real SBE/SLW for processor + bool is_virtual = (i_poreve != NULL); +#if PROC_EXTRACT_PORE_ENGINE_STATE_BUILD_POREVE == 1 + bool is_virtual_supported = true; + vsbe::PoreVe * ve = reinterpret_cast(i_poreve); +#else + bool is_virtual_supported = false; +#endif + bool is_processor = (i_target.getType() == fapi::TARGET_TYPE_PROC_CHIP); + bool is_centaur = (i_target.getType() == fapi::TARGET_TYPE_MEMBUF_CHIP); + bool is_sbe = (i_engine == SBE); + bool is_slw = (i_engine == SLW); + + o_pore_state.target = i_target; + o_pore_state.engine = i_engine; + o_pore_state.is_virtual = is_virtual; + + if (!((is_virtual && is_virtual_supported && (is_processor || is_centaur) && is_sbe) || + (!is_virtual && is_processor && (is_sbe || is_slw)))) + { + FAPI_ERR("proc_extract_pore_engine_state: Unsupported invocation for target: %s, engine type: %s, virtual: %d", + i_target.toEcmdString(), ((i_engine == SBE)?("SBE"):("SLW")), is_virtual); + const fapi::Target & CHIP = i_target; + const por_engine_t & ENGINE = i_engine; + const bool & VIRTUAL = is_virtual; + const bool & VIRTUAL_IS_SUPPORTED = is_virtual_supported; + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_PORE_ENGINE_STATE_UNSUPPORTED_INVOCATION); + break; + } + + + // + // extract engine state + // + + FAPI_INF("proc_extract_pore_engine_state: Extracting PORE engine FFDC for target: %s, engine type: %s, virtual: %d", + i_target.toEcmdString(), ((i_engine == SBE)?("SBE"):("SLW")), is_virtual); + + // collect engine state from virtual PORE engine + if (is_virtual) + { +#if PROC_EXTRACT_PORE_ENGINE_STATE_BUILD_POREVE == 1 + rc = proc_extract_pore_engine_state_virtual(i_target, + ve, + o_pore_state.vital_state, + o_pore_state.engine_state); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_engine_state: Error from proc_extract_pore_engine_state_virtual"); + break; + } +#endif + } + // HW + else + { + rc = proc_extract_pore_engine_state_hw(i_target, + i_engine, + o_pore_state.vital_state, + o_pore_state.engine_state); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_engine_state: Error from proc_extract_pore_engine_state_hw"); + break; + } + } + + FAPI_INF("proc_extract_pore_engine_state: PORE_VITAL = 0x%016llX", o_pore_state.vital_state.getDoubleWord(0)); + FAPI_INF("proc_extract_pore_engine_state: PORE_STATUS = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_STATUS_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_CONTROL = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_CONTROL_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_RESET = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_RESET_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_ERR_MASK = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_ERR_MASK_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_P0 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_P0_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_P1 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_P1_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_A0 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_A0_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_A1 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_A1_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_TBL_BASE = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_TBL_BASE_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_EXE_TRIGGER = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_EXE_TRIGGER_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_CTR = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_CTR_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_D0 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_D0_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_D1 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_D1_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_IBUF0 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_IBUF0_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_IBUF1 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_IBUF1_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_DEBUG0 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_DEBUG0_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_DEBUG1 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_DEBUG1_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_STACK0 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_STACK0_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_STACK1 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_STACK1_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_STACK2 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_STACK2_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_IDFLAGS = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_IDFLAGS_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_SPRG0 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_SPRG0_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_MRR = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_MRR_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_I2CE0 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_I2CE0_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_I2CE1 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_I2CE1_OFFSET)); + FAPI_INF("proc_extract_pore_engine_state: PORE_I2CE2 = 0x%016llX", o_pore_state.engine_state.getDoubleWord(PORE_I2CE2_OFFSET)); + + o_pore_state.pc = (o_pore_state.engine_state.getDoubleWord(PORE_STATUS_OFFSET) & 0x0000FFFFFFFFFFFFULL); + FAPI_INF("proc_extract_pore_engine_state: PORE_PC = 0x%016llX", o_pore_state.pc); + + // + // processor SBE specific state collection + // + + if (is_processor && is_sbe) + { + rc = proc_extract_pore_engine_state_sbe_ffdc(i_target, + o_pore_sbe_state); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_engine_state: Error from proc_extract_pore_engine_state_sbe_ffdc"); + break; + } + + FAPI_INF("proc_extract_pore_engine_state: SBE SEEPROM ECCB = %016llX", o_pore_sbe_state.i2cm_eccb_status.getDoubleWord(0)); + FAPI_INF("proc_extract_pore_engine_state: SBE PNOR ECCB = %016llX", o_pore_sbe_state.pnor_eccb_status.getDoubleWord(0)); + FAPI_INF("proc_extract_pore_engine_state: SBE soft error = %d", o_pore_sbe_state.soft_err); + FAPI_INF("proc_extract_pore_engine_state: SBE attn = %d", o_pore_sbe_state.reported_attn); + } + } while(0); + + FAPI_INF("proc_extract_pore_engine_state: End"); + return rc; +} + + +} // extern "C" diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.H b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.H new file mode 100644 index 000000000..6a2b7fc42 --- /dev/null +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.H @@ -0,0 +1,97 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2014 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +// $Id: proc_extract_pore_engine_state.H,v 1.2 2014/07/24 03:16:22 jmcgill Exp $ +// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_extract_pore_engine_state.H,v $ +//------------------------------------------------------------------------------ +// *| +// *! (C) Copyright International Business Machines Corp. 2012 +// *! All Rights Reserved -- Property of IBM +// *! *** *** +// *| +// *! TITLE : proc_extract_pore_engine_state.H +// *! DESCRIPTION : Extract PORE (SBE/SLW) engine state +// *! +// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com +// *! BACKUP NAME : Johannes Koesters Email: koesters@de.ibm.com +// *! +//------------------------------------------------------------------------------ + +#ifndef _PROC_EXTRACT_PORE_ENGINE_STATE_H_ +#define _PROC_EXTRACT_PORE_ENGINE_STATE_H_ + + +//------------------------------------------------------------------------------ +// Includes +//------------------------------------------------------------------------------ +#include +#include + +//------------------------------------------------------------------------------ +// Structure definitions +//------------------------------------------------------------------------------ + +// function pointer typedef definition for HWP call support +typedef fapi::ReturnCode (*proc_extract_pore_engine_state_FP_t)(const fapi::Target &, + void *, + const por_engine_t, + por_base_state &, + por_sbe_base_state &); + +//------------------------------------------------------------------------------ +// Function prototypes +//------------------------------------------------------------------------------ + + +extern "C" +{ + + +/** + * proc_extract_pore_engine_state - HWP entry point, extract PORE engine state + * + * @param[in] i_target - chip target, used to collect engine state if + * i_poreve is NULL + * @param[in] i_poreve - pointer to PoreVe object, used to collect engine + * state if non NULL + * @param[in] i_engine - engine type to analyze (SBE/SLW) + * @param[out] o_pore_state - PORE state/FFDC content + * @param[out] o_pore_sbe_state - PORE SBE-specific state/FFDC content (filled + * only if i_engine=SBE) + * + * @retval fapi::ReturnCode = SUCCESS + * @retval fapi::ReturnCode = RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_MODEL_ERROR + * @retval fapi::ReturnCode = RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_PIB_ERROR + * @retval fapi::ReturnCode = RC_PROC_EXTRACT_PORE_ENGINE_STATE_UNSUPPORTED_INVOCATION + */ +fapi::ReturnCode proc_extract_pore_engine_state(const fapi::Target & i_target, + void *, + const por_engine_t i_engine, + por_base_state & o_pore_state, + por_sbe_base_state & o_pore_sbe_state); + + +} // extern "C" + +#endif // _PROC_EXTRACT_PORE_ENGINE_STATE_H_ diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state_errors.xml b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state_errors.xml new file mode 100644 index 000000000..711e5119e --- /dev/null +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state_errors.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_MODEL_ERROR + + Procedure: proc_extract_pore_engine_state + Virtual SBE model error occurred when attempting to access SBE vital state. + + CHIP + MODEL_ERROR + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + + + + + RC_PROC_EXTRACT_PORE_ENGINE_STATE_VSBE_PIB_ERROR + + Procedure: proc_extract_pore_engine_state + PIB error occurred when attempting to access SBE vital state from virtual SBE model. + + CHIP + PIB_ERROR + + CHIP + HIGH + + + CODE + LOW + + + CHIP + + + CHIP + + + + + RC_PROC_EXTRACT_PORE_ENGINE_STATE_UNSUPPORTED_INVOCATION + + Procedure: proc_extract_pore_engine_state + Unsupported engine type presented for analysis. + + CHIP + ENGINE + VIRTUAL + VIRTUAL_IS_SUPPORTED + + CODE + HIGH + + + + \ No newline at end of file diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.C b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.C new file mode 100644 index 000000000..aaf28f372 --- /dev/null +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.C @@ -0,0 +1,550 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2014 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +// $Id: proc_extract_pore_halt_ffdc.C,v 1.2 2014/08/07 13:32:17 thi Exp $ +// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_extract_pore_halt_ffdc.C,v $ +//------------------------------------------------------------------------------ +// *| +// *! (C) Copyright International Business Machines Corp. 2012 +// *! All Rights Reserved -- Property of IBM +// *! *** *** +// *| +// *! TITLE : proc_extract_pore_halt_ffdc.C +// *! DESCRIPTION : Extract halt-fail related FFDC for selected SBE/SLW errors +// *! +// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com +// *! +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +// Includes +//------------------------------------------------------------------------------ +#include +#include + + +// ----------------------------------------------------------------------------- +// Constant definitions +// ----------------------------------------------------------------------------- + +// X Clock Adjust Set register bit/field definitions +const uint32_t X_CLK_ADJ_SET_REG_SYNC_BIT = 2; +const uint32_t X_CLK_ADJ_SET_REG_RLM_SELECT_BIT = 5; +const uint32_t X_CLK_ADJ_SET_REG_CMD_START_BIT = 6; +const uint32_t X_CLK_ADJ_SET_REG_CMD_END_BIT = 9; +const uint32_t X_CLK_ADJ_SET_REG_DATA_START_BIT = 21; +const uint32_t X_CLK_ADJ_SET_REG_DATA_END_BIT = 28; + +const uint8_t X_CLK_ADJ_CMD_TYPE_READ = 0xE; + + +const uint64_t scan_ffdc_addr_arr[] = +{ + GENERIC_CLK_SYNC_CONFIG_0x00030000, + GENERIC_OPCG_CNTL0_0x00030002, + GENERIC_OPCG_CNTL1_0x00030003, + GENERIC_OPCG_CNTL2_0x00030004, + GENERIC_OPCG_CNTL3_0x00030005, + GENERIC_CLK_REGION_0x00030006, + GENERIC_CLK_SCANSEL_0x00030007, + GENERIC_CLK_STATUS_0x00030008, + GENERIC_CLK_ERROR_0x00030009, + GENERIC_CLK_SCANDATA0_0x00038000 +}; + +const uint64_t instruct_start_ffdc_addr_arr[] = +{ + EX_PERV_TCTL0_R_MODE_0x10013001, + EX_PERV_TCTL0_R_STAT_0x10013002, + EX_PERV_TCTL0_POW_STAT_0x10013004, + EX_PCNE_REG0_HOLD_OUT_0x1001300D, + EX_PERV_THREAD_ACTIVE_0x1001310E, + EX_CORE_FIR_0x10013100, + EX_SPATTN_0x10040004, + PM_SPECIAL_WKUP_FSP_0x100F010B, + PM_SPECIAL_WKUP_OCC_0x100F010C, + PM_SPECIAL_WKUP_PHYP_0x100F010D, + EX_OHA_RO_STATUS_REG_0x1002000B, + EX_OHA_MODE_REG_RWx1002000D, + EX_OHA_ARCH_IDLE_STATE_REG_RWx10020011, + EX_OHA_RO_STATUS_REG_0x1002000B, + EX_OHA_AISS_IO_REG_0x10020014, + EX_GP3_0x100F0012, + EX_PMGP0_0x100F0100, + EX_PMGP1_0x100F0103, + EX_PFET_CTL_REG_0x100F0106, + EX_PFET_STAT_REG_0x100F0107, + EX_PFET_CTL_REG_0x100F010E, + EX_PMSTATEHISTPERF_REG_0x100F0113, + EX_PCBS_FSM_MONITOR1_REG_0x100F0170, + EX_PCBS_FSM_MONITOR2_REG_0x100F0171, + EX_PMErr_REG_0x100F0109, + EX_PCBS_DPLL_STATUS_REG_100F0161, + EX_DPLL_CPM_PARM_REG_0x100F0152 +}; + +const uint64_t dpll_lock_ffdc_addr_arr[] = +{ + EX_DPLL_CPM_PARM_REG_0x100F0152, + EX_PMGP0_0x100F0100, + EX_GP3_0x100F0012 +}; + + +//------------------------------------------------------------------------------ +// Function definitions +//------------------------------------------------------------------------------ + +extern "C" +{ + + +/** + * proc_extract_pore_halt_ffdc_unicast - collect FFDC data for one chiplet + * + * @param[in] i_target - target for FFDC collection + * @param[in] i_halt_type - FFDC type, for logging + * @param[in] i_ffdc_addrs - FFDC addresses to log + * @param[in] i_base_scom_addr - base SCOM address (XX000000) to apply + * to entries of i_ffdc_addrs_log + * @param[out] o_rc - target return code for extra FFDC + * + * @retval fapi::ReturnCode = SUCCESS + */ +fapi::ReturnCode proc_extract_pore_halt_ffdc_unicast(const fapi::Target & i_target, + const por_halt_type_t i_halt_type, + const std::vector * i_ffdc_addrs, + const uint32_t i_base_scom_addr, + fapi::ReturnCode & o_rc) +{ + // return code + fapi::ReturnCode rc; + uint32_t rc_ecmd = 0x0; + + // FFDC collection + ecmdDataBufferBase ffdc_reg_addrs(64*(i_ffdc_addrs->size())); + ecmdDataBufferBase ffdc_reg_data(64*(i_ffdc_addrs->size())); + uint8_t dw_index = 0; + + FAPI_INF("proc_extract_pore_halt_ffdc_unicast: Start (target = %s, base = 0x%08X)", + i_target.toEcmdString(), i_base_scom_addr); + + do + { + rc_ecmd |= ffdc_reg_addrs.flushTo1(); + rc_ecmd |= ffdc_reg_data.flushTo1(); + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_halt_ffdc_unicast: Error %x flushing FFDC data buffers", rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + + for (std::vector::const_iterator i = i_ffdc_addrs->begin(); + i != i_ffdc_addrs->end(); + i++) + { + ecmdDataBufferBase data(64); + uint32_t scom_addr = (uint32_t) (*i); + scom_addr &= 0x0FFFFFFF; + scom_addr += i_base_scom_addr; + + FAPI_DBG("proc_extract_pore_halt_ffdc_unicast: Dumping 0x%08X on %s", + scom_addr, i_target.toEcmdString()); + + // explicitly ignore return code, attempt to collect all FFDC registers + rc = fapiGetScom(i_target, scom_addr, data); + rc_ecmd |= ffdc_reg_addrs.setDoubleWord(dw_index, scom_addr); + if (rc.ok()) + { + rc_ecmd |= ffdc_reg_data.setDoubleWord(dw_index, data.getDoubleWord(0)); + } + else + { + rc = fapi::FAPI_RC_SUCCESS; + } + + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_halt_ffdc_unicast: Error %x forming FFDC data buffers", rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + dw_index++; + } + if (!rc.ok()) + { + break; + } + + } while(0); + + const fapi::Target & TARGET = i_target; + const por_halt_type_t & PORE_HALT_TYPE = i_halt_type; + const ecmdDataBufferBase & FFDC_ADDRESSES = ffdc_reg_addrs; + const ecmdDataBufferBase & FFDC_DATA = ffdc_reg_data; + FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_PROC_EXTRACT_PORE_HALT_FFDC); + + FAPI_INF("proc_extract_pore_halt_ffdc_unicast: End"); + return rc; +} + + +/** + * proc_extract_pore_halt_ffdc_skew_adjust - collect FFDC data for XBUS skew adjust halt + * + * @param[in] i_target - target for FFDC collection + * @param[in] i_halt_type - FFDC type, for logging + * @param[out] o_rc - target return code for extra FFDC + * + * @retval fapi::ReturnCode = SUCCESS + */ +fapi::ReturnCode proc_extract_pore_halt_ffdc_skew_adjust(const fapi::Target & i_target, + const por_halt_type_t i_halt_type, + fapi::ReturnCode & o_rc) +{ + // return code + fapi::ReturnCode rc; + uint32_t rc_ecmd = 0x0; + + // FFDC collection + const uint8_t READ_REGS = 16; + ecmdDataBufferBase ffdc_reg_addrs(64*READ_REGS); + ecmdDataBufferBase ffdc_reg_data(64*READ_REGS); + + FAPI_INF("proc_extract_pore_halt_ffdc_skew_adjust: Start (target = %s)", + i_target.toEcmdString()); + + for (uint8_t dw_index = 0; dw_index < READ_REGS; dw_index++) + { + ecmdDataBufferBase data(64); + bool iter_valid = true; + + // write set register with sync bit asserted + rc_ecmd |= data.setBit(X_CLK_ADJ_SET_REG_SYNC_BIT); + rc_ecmd |= data.setBit(X_CLK_ADJ_SET_REG_RLM_SELECT_BIT); + rc_ecmd |= data.insertFromRight( + X_CLK_ADJ_CMD_TYPE_READ, + X_CLK_ADJ_SET_REG_CMD_START_BIT, + (X_CLK_ADJ_SET_REG_CMD_END_BIT- + X_CLK_ADJ_SET_REG_CMD_START_BIT+1)); + rc_ecmd |= data.insertFromRight( + dw_index, + X_CLK_ADJ_SET_REG_DATA_START_BIT, + (X_CLK_ADJ_SET_REG_DATA_END_BIT- + X_CLK_ADJ_SET_REG_DATA_START_BIT+1)); + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_halt_ffdc_skew_adjust: Error %x forming X CLK Adjust Set register data buffer (set)", + rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + + rc = fapiPutScom(i_target, X_CLK_ADJ_SET_0x040F0016, data); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_halt_ffdc_skew_adjust: Error from fapiPutScom (X_CLK_ADJ_SET_0x040F0016)"); + iter_valid = false; + } + + // write set register with sync bit cleared + rc_ecmd |= data.clearBit(X_CLK_ADJ_SET_REG_SYNC_BIT); + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_halt_ffdc_skew_adjust: Error %x forming X CLK Adjust Set register data buffer (clear)", + rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + + rc = fapiPutScom(i_target, X_CLK_ADJ_SET_0x040F0016, data); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_halt_ffdc_skew_adjust: Error from fapiPutScom (X_CLK_ADJ_SET_0x040F0016)"); + iter_valid = false; + } + + rc = fapiGetScom(i_target, X_CLK_ADJ_DAT_REG_0x040F0015, data); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_halt_ffdc_skew_adjust: Error from fapiGetScom (X_CLK_ADJ_DAT_REG_0x040F0015)"); + iter_valid = false; + } + + rc_ecmd |= ffdc_reg_addrs.setDoubleWord(dw_index, dw_index); + if (iter_valid) + { + rc_ecmd |= ffdc_reg_data.setDoubleWord(dw_index, data.getDoubleWord(0)); + } + else + { + rc_ecmd |= ffdc_reg_data.setDoubleWord(dw_index, 0xFFFFFFFFFFFFFFFFULL); + rc = fapi::FAPI_RC_SUCCESS; + } + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_halt_ffdc_skew_adjust: Error %x forming FFDC data buffers", rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + } + + const fapi::Target & TARGET = i_target; + const por_halt_type_t & PORE_HALT_TYPE = i_halt_type; + const ecmdDataBufferBase & FFDC_ADDRESSES = ffdc_reg_addrs; + const ecmdDataBufferBase & FFDC_DATA = ffdc_reg_data; + FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_PROC_EXTRACT_PORE_HALT_FFDC); + + FAPI_INF("proc_extract_pore_halt_ffdc_skew_adjust: End"); + return rc; +} + + + +/** + * proc_extract_pore_halt_ffdc - HWP entry point, log PORE fail FFDC + * + * @param[in] i_pore_state - struct holding PORE state + * @param[in] i_halt_type - FFDC type to collect + * @param[in] i_offset - offset to apply to FFDC registers for + * i_halt_type (constant/value of PORE + * pervasive base registers/none) + * @param[out] o_rc - target return code for extra FFDC + * + * @retval fapi::ReturnCode = SUCCESS + */ +fapi::ReturnCode proc_extract_pore_halt_ffdc(const por_base_state & i_pore_state, + const por_halt_type_t i_halt_type, + const por_ffdc_offset_t i_offset, + fapi::ReturnCode & o_rc) +{ + // return code + fapi::ReturnCode rc; + uint32_t rc_ecmd = 0x0; + + // FFDC register collection pointer + const std::vector *p = NULL; + std::vector scan_ffdc_addr(scan_ffdc_addr_arr, scan_ffdc_addr_arr + (sizeof(scan_ffdc_addr_arr) / sizeof(scan_ffdc_addr_arr[0]))); + std::vector instruct_start_ffdc_addr(instruct_start_ffdc_addr_arr, instruct_start_ffdc_addr_arr + (sizeof(instruct_start_ffdc_addr_arr) / sizeof(instruct_start_ffdc_addr_arr[0]))); + std::vector dpll_lock_ffdc_addr(dpll_lock_ffdc_addr_arr, dpll_lock_ffdc_addr_arr + (sizeof(dpll_lock_ffdc_addr_arr) / sizeof(dpll_lock_ffdc_addr_arr[0]))); + + FAPI_INF("proc_extract_pore_halt_ffdc: Start"); + + do + { + const fapi::Target & TARGET = i_pore_state.target; + const por_halt_type_t & PORE_HALT_TYPE = i_halt_type; + + if (i_halt_type == PORE_HALT_SKEW_ADJUST_FAIL) + { + FAPI_DBG("proc_extract_pore_halt_ffdc: Collecting skew adjust FFDC"); + if (i_pore_state.target.getType() == fapi::TARGET_TYPE_PROC_CHIP) + { + rc = proc_extract_pore_halt_ffdc_skew_adjust(i_pore_state.target, + i_halt_type, + o_rc); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_halt_ffdc: Error from proc_extract_pore_halt_ffdc_skew_adjust"); + break; + } + } + else + { + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_PORE_HALT_FFDC_BAD_TYPE); + break; + } + } + else if (i_halt_type == PORE_HALT_FIR_FAIL) + { + FAPI_DBG("proc_extract_pore_halt_ffdc: Collecting FIR FFDC"); + if (i_pore_state.target.getType() == fapi::TARGET_TYPE_PROC_CHIP) + { + FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_PROC_FIR_FFDC); + break; + } + else if (i_pore_state.target.getType() == fapi::TARGET_TYPE_MEMBUF_CHIP) + { + FAPI_ADD_INFO_TO_HWP_ERROR(o_rc, RC_CEN_FIR_FFDC); + break; + } + else + { + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_PORE_HALT_FFDC_BAD_TYPE); + break; + } + } + else + { + // set pointer based on halt type + switch (i_halt_type) + { + case PORE_HALT_SCAN_FAIL: + case PORE_HALT_SCAN_FLUSH_FAIL: + case PORE_HALT_ARRAYINIT_FAIL: + p = &(scan_ffdc_addr); + FAPI_DBG("proc_extract_pore_halt_ffdc: Pointer set to scan FFDC array"); + break; + case PORE_HALT_INSTRUCT_FAIL: + p = &(instruct_start_ffdc_addr); + FAPI_DBG("proc_extract_pore_halt_ffdc: Pointer set to instruction start FFDC array"); + break; + case PORE_HALT_DPLL_LOCK_FAIL: + p = &(dpll_lock_ffdc_addr); + FAPI_DBG("proc_extract_pore_halt_ffdc: Pointer set to DPLL lock FFDC array"); + break; + default: + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_PORE_HALT_FFDC_BAD_TYPE); + break; + } + if (!rc.ok()) + { + break; + } + + // determine chiplet ID offset to apply to FFDC registers collected + // for this halt type + uint32_t chiplet_id = i_offset; + if ((i_offset == POR_FFDC_OFFSET_USE_P0) || + (i_offset == POR_FFDC_OFFSET_USE_P1)) + { + chiplet_id = 0x0; + // chiplet addressed is stored in one of the PORE pervasive base registers + // use the value of that register to form the chiplet portion of the FFDC + // SCOM addresses + rc_ecmd |= i_pore_state.engine_state.extractPreserve( + &chiplet_id, + (64*(i_offset)) + 24, + 8, + 0); + + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_halt_ffdc: Error %x extracting P%d pervasive base content", + rc_ecmd, (i_offset == POR_FFDC_OFFSET_USE_P0)?(0):(1)); + rc.setEcmdError(rc_ecmd); + break; + } + } + + // multicast address + // only support EX multicast unrolling for processor chip targets + if (chiplet_id & 0x40000000) + { + uint8_t mc_group = (chiplet_id >> 24) & 0x3; + std::vector ex_chiplets; + + if ((i_pore_state.target.getType() == fapi::TARGET_TYPE_PROC_CHIP) && + ((mc_group == 1) || (mc_group == 2))) + { + // determine set of EX chiplets + rc = fapiGetChildChiplets(i_pore_state.target, + fapi::TARGET_TYPE_EX_CHIPLET, + ex_chiplets, + fapi::TARGET_STATE_FUNCTIONAL); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_halt_ffdc: Error from fapiGetChildChiplets"); + break; + } + + // collect FFDC for chiplets which are part of the multicast group + for (std::vector::iterator i = ex_chiplets.begin(); + i != ex_chiplets.end(); + i++) + { + ecmdDataBufferBase mc_config_data(64); + uint64_t mc_group_addr = (mc_group == 1)?(EX_MCGR2_0x100F0002):(EX_MCGR3_0x100F0003); + uint8_t mc_group_listen; + + rc = fapiGetScom(*i, mc_group_addr, mc_config_data); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_halt_ffdc: Error from fapiGetScom (EX_MCGR%d_0x%08llX)", + mc_group+1, mc_group_addr); + break; + } + + rc_ecmd |= mc_config_data.extractToRight(&mc_group_listen, 3, 3); + if (rc_ecmd) + { + FAPI_ERR("proc_extract_pore_halt_ffdc: Error %x extracting multicast group listen configuration", rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + + if (mc_group_listen == mc_group) + { + rc = proc_extract_pore_halt_ffdc_unicast(*i, i_halt_type, p, 0x10000000, o_rc); + if (!rc.ok()) + { + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_halt_ffdc: Error from proc_extract_pore_halt_ffdc_unicast"); + break; + } + } + } + else + { + FAPI_INF("proc_extract_pore_halt_ffdc: Skipping %s, not part of multicast group", + i->toEcmdString()); + } + } + if (!rc.ok()) + { + break; + } + } + else + { + FAPI_ERR("proc_extract_halt_ffdc: Unsupported multicast extraction for target: %s, group: %d", + i_pore_state.target.toEcmdString(), mc_group); + const uint8_t & CHIPLET_ID = chiplet_id; + const uint8_t & MC_GROUP = mc_group; + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_PORE_HALT_FFDC_BAD_MULTICAST); + break; + } + } + // unicast address + else + { + rc = proc_extract_pore_halt_ffdc_unicast(i_pore_state.target, i_halt_type, p, chiplet_id, o_rc); + if (!rc.ok()) + { + FAPI_ERR("proc_extract_pore_halt_ffdc: Error from proc_extract_pore_halt_ffdc_unicast"); + break; + } + } + } + } while(0); + + FAPI_INF("proc_extract_pore_halt_ffdc: End"); + return rc; +} + + +} // extern "C" diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.H b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.H new file mode 100644 index 000000000..1e9d4e2d3 --- /dev/null +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.H @@ -0,0 +1,88 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2014 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +// $Id: proc_extract_pore_halt_ffdc.H,v 1.1 2014/07/23 19:38:06 jmcgill Exp $ +// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_extract_pore_halt_ffdc.H,v $ +//------------------------------------------------------------------------------ +// *| +// *! (C) Copyright International Business Machines Corp. 2012 +// *! All Rights Reserved -- Property of IBM +// *! *** *** +// *| +// *! TITLE : proc_extract_pore_halt_ffdc.C +// *! DESCRIPTION : Extract SBE/SLW halt-fail related FFDC +// *! +// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com +// *! +//------------------------------------------------------------------------------ + +#ifndef _PROC_EXTRACT_PORE_HALT_FFDC_H_ +#define _PROC_EXTRACT_PORE_HALT_FFDC_H_ + + +//------------------------------------------------------------------------------ +// Includes +//------------------------------------------------------------------------------ +#include +#include + + +//------------------------------------------------------------------------------ +// Structure definitions +//------------------------------------------------------------------------------ + +// function pointer typedef definition for HWP call support +typedef fapi::ReturnCode (*proc_extract_pore_halt_ffdc_FP_t)(const por_base_state &, + const por_halt_type_t, + const por_ffdc_offset_t, + fapi::ReturnCode &); + +//------------------------------------------------------------------------------ +// Function prototypes +//------------------------------------------------------------------------------ + + +extern "C" +{ + +/** + * proc_extract_pore_halt_ffdc - HWP entry point, log PORE fail FFDC + * + * @param[in] i_pore_state - struct holding PORE state + * @param[in] i_halt_type - FFDC type to collect + * @param[in] i_offset - offset to apply to FFDC registers for + * i_halt_type (constant/value of PORE + * pervasive base registers/none) + * @param[out] o_rc - target return code for extra FFDC + * + * @retval fapi::ReturnCode = SUCCESS + */ +fapi::ReturnCode proc_extract_pore_halt_ffdc(const por_base_state & i_pore_state, + const por_halt_type_t i_halt_type, + const por_ffdc_offset_t i_offset, + fapi::ReturnCode & o_rc); + +} // extern "C" + +#endif // _PROC_EXTRACT_PORE_HALT_FFDC_H_ diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.xml b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.xml new file mode 100644 index 000000000..99afc14dc --- /dev/null +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RC_PROC_EXTRACT_PORE_HALT_FFDC + + FFDC collected on selected PORE engine halt failures + + TARGET + PORE_HALT_TYPE + FFDC_ADDRESSES + FFDC_DATA + + + + RC_PROC_EXTRACT_PORE_HALT_FFDC_BAD_MULTICAST + + Unsupported multicast analysis requested + + TARGET + CHIPLET_ID + MC_GROUP + + + + RC_PROC_EXTRACT_PORE_HALT_FFDC_BAD_TYPE + + Unsupported halt type analysis requested + + TARGET + PORE_HALT_TYPE + + + \ No newline at end of file diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C index d4151fa40..aefae9a5f 100644 --- a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C @@ -22,19 +22,19 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ -// -*- mode: C++; c-file-style: "linux"; -*- -// $Id: proc_extract_sbe_rc.C,v 1.18 2014/06/30 14:32:05 bgeukes Exp $ +// $Id: proc_extract_sbe_rc.C,v 1.20 2014/07/24 03:13:59 jmcgill Exp $ // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_extract_sbe_rc.C,v $ //------------------------------------------------------------------------------ // *| // *! (C) Copyright International Business Machines Corp. 2012 // *! All Rights Reserved -- Property of IBM -// *! *** IBM Confidential *** +// *! *** *** // *| // *! TITLE : proc_extract_sbe_rc.C -// *! DESCRIPTION : Create a return code for an SBE/SLW error +// *! DESCRIPTION : Create return code for PORE (SBE/SLW) error // *! -// *! OWNER NAME : Johannes Koesters Email: koesters@de.ibm.com +// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com +// *! BACKUP NAME : Johannes Koesters Email: koesters@de.ibm.com // *! // *! Overview: // *! - Analyze error state of SBE/SLW engine @@ -53,44 +53,26 @@ //------------------------------------------------------------------------------ #include #include -#include -#include +#include +#include +#include -//------------------------------------------------------------------------------ -// Structure definitions -//------------------------------------------------------------------------------ - -enum soft_error_t -{ - eNO_ERROR = 0, - eSOFT_ERR_I2CM=1, - eSOFT_ERR_PNOR=2, - eSOFT_ERR_BOTH=3 -}; - //------------------------------------------------------------------------------ // Constant definitions //------------------------------------------------------------------------------ -// address space/alignment masks -const uint64_t SBE_ADDR_MASK = 0x0000FFFFFFFFFFFFULL; -const uint64_t FOURBYTE_ALIGNMENT_MASK = 0x0000000000000003ULL; +// address space masks +const uint64_t PORE_ADDR_MASK = 0x0000FFFFFFFFFFFFULL; const uint64_t INTERNAL_ADDR_MASK = 0x000000007FFFFFFFULL; const uint64_t ADDR_TYPE_MASK = 0x0000FFFF80000000ULL; const uint64_t OTPROM_ADDR_TYPE = 0x0000000100000000ULL; const uint64_t PIBMEM_ADDR_TYPE = 0x0000000800000000ULL; const uint64_t SEEPROM_ADDR_TYPE = 0x0000800C80000000ULL; -const uint32_t ALIGN_FOUR_BYTE = 0xFFFFFFFC; - -// common SCOM register offsets for SBE/SLW engines -const uint32_t STATUS_OFFSET_0x00 = 0x00000000; -const uint32_t IBUF_OFFSET_0x0D = 0x0000000D; -const uint32_t DEBUG0_OFFSET_0x0F = 0x0000000F; -const uint32_t DEBUG1_OFFSET_0x10 = 0x00000010; +const uint64_t SLW_ADDR_TYPE = 0x0000800080000000ULL; // illegal instruction encoding for SW detected halt -const uint32_t HALT_WITH_ERROR_INSTRUCTION = (('h' << 24) | ('a' << 16) | ('l' << 8) | ('t')); +const uint32_t PORE_HALT_WITH_ERROR_INSTRUCTION = (('h' << 24) | ('a' << 16) | ('l' << 8) | ('t')); //------------------------------------------------------------------------------ @@ -100,506 +82,211 @@ const uint32_t HALT_WITH_ERROR_INSTRUCTION = (('h' << 24) | ('a' << 16) | ('l' < extern "C" { -//------------------------------------------------------------------------------ -// subroutine: -// reads the word at the given address in SEEPROM pointer -// -// parameters: i_target => target of chip with failed SBE/SLW engine -// i_pSEEPROM => pointer to a memory-mapped SEEPROM image -// i_address => SEEPROM address to read -// i_engine => type of engine that failed (SBE/SLW) -// i_soft_err => engine soft error status, for FFDC -// o_data => return data -// -// returns: fapi::ReturnCode with the error, or fapi::FAPI_RC_SUCCESS -//------------------------------------------------------------------------------ -fapi::ReturnCode proc_extract_sbe_rc_read_SEEPROM(const fapi::Target & i_target, - const void * i_pSEEPROM, - const uint32_t i_address, - const por_engine_t i_engine, - const soft_error_t i_soft_err, - uint32_t & o_data) -{ - // return codes - fapi::ReturnCode rc; - - do - { - if (i_pSEEPROM == NULL) - { - FAPI_ERR("Need to extract SEEPROM address 0x%08X, but pointer to SEEPROM image content is NULL", i_address); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint32_t & PC = i_address; - if (i_engine == SBE) - { - const soft_error_t & SOFT_ERR_STATUS = i_soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_IMAGE_POINTER_NULL_SBE); - } - else - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_IMAGE_POINTER_NULL_SLW); - } - break; - } - // copy the data out of the image pointer - uint8_t * p_errorCode = (uint8_t *)i_pSEEPROM + (i_address & ALIGN_FOUR_BYTE); - o_data = - (p_errorCode[0] << 3*8) | - (p_errorCode[1] << 2*8) | - (p_errorCode[2] << 1*8) | - (p_errorCode[3]); - } while(0); - - return rc; -} - - -//------------------------------------------------------------------------------ -// subroutine: -// Returns the PC of the given engine -// -// parameters: i_target => target of chip with failed SBE/SLW engine -// i_engine => type of engine that failed (SBE/SLW) -// i_soft_err => engine soft error status, for FFDC -// o_pc => referenee to the uint64_t containing the PC -// -// returns: fapi::ReturnCode with the error, or fapi::FAPI_RC_SUCCESS -//------------------------------------------------------------------------------ -fapi::ReturnCode proc_extract_sbe_rc_get_pc(const fapi::Target & i_target, - const por_engine_t i_engine, - const soft_error_t i_soft_err, - uint64_t & o_pc) -{ - // return codes - fapi::ReturnCode rc; - - // data buffer to hold register values - ecmdDataBufferBase data(64); - - do - { - // read PC from the Status Register - rc = fapiGetScom(i_target, i_engine + STATUS_OFFSET_0x00, data); - if (rc) - { - FAPI_ERR("Error from fapiGetScom (STATUS_REG_0x%08X)", i_engine + STATUS_OFFSET_0x00); - break; - } - - o_pc = (data.getDoubleWord(0) & SBE_ADDR_MASK); - - if (o_pc & FOURBYTE_ALIGNMENT_MASK) - { - FAPI_ERR("Address isn't 4-byte aligned"); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = o_pc; - if (i_engine == SBE) - { - const soft_error_t & SOFT_ERR_STATUS = i_soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_ADDR_UNALIGNED_SBE); - } - else - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_ADDR_UNALIGNED_SLW); - } - break; - } - } while(0); - - return rc; -} - - -//------------------------------------------------------------------------------ -// subroutine: -// Returns the return code indicated by the PC of the engine -// -// parameters: i_target => target of chip with failed SBE/SLW engine -// i_pSEEPROM => pointer to a memory-mapped SEEPROM image -// i_engine => type of engine that failed (SBE/SLW) -// i_soft_err => engine soft error status, for FFDC -// -// returns: fapi::ReturnCode with the error -// This procedure will NEVER return SUCCESS -//------------------------------------------------------------------------------ -fapi::ReturnCode proc_extract_sbe_rc_from_address(const fapi::Target & i_target, - const void * i_pSEEPROM, - const por_engine_t i_engine, - const soft_error_t i_soft_err) -{ - // return codes - fapi::ReturnCode rc; - - // data buffer to hold register values - ecmdDataBufferBase data(64); - uint64_t address_64; - - do - { - // read PC - rc = proc_extract_sbe_rc_get_pc(i_target, i_engine, i_soft_err, address_64); - if (rc) - { - FAPI_ERR("Error from proc_extract_sbe_rc_get_pc"); - break; - } - - // add 4 because address_64 is pointing at the halt instruction - uint32_t internal_address = (uint32_t)(address_64 & INTERNAL_ADDR_MASK) + 4; - // error code to emit - uint32_t error_code = 0; - - if ((address_64 & ADDR_TYPE_MASK) == SEEPROM_ADDR_TYPE) - { - // get the error code from that location in the SEEPROM image - FAPI_INF("Extracting the error code from address " - "0x%X in the SEEPROM", internal_address); - - rc = proc_extract_sbe_rc_read_SEEPROM(i_target, i_pSEEPROM, internal_address, i_engine, i_soft_err, error_code); - if (rc) - { - FAPI_ERR("Error from proc_extract_sbe_rc_read_SEEPROM (address = 0x%08X)", internal_address); - break; - } - } - else if ((address_64 & ADDR_TYPE_MASK) == PIBMEM_ADDR_TYPE) - { - // get the error code from that location in the PIBMEM - FAPI_INF("Extracting the error code from address " - "0x%X in the PIBMEM", internal_address); - - rc = fapiGetScom(i_target, PIBMEM0_0x00080000 + (internal_address >>3), data); - if (rc) - { - FAPI_ERR("Error from fapiGetScom (PIBMEM address 0x%08X)", (uint32_t)PIBMEM0_0x00080000 + (internal_address >>3)); - break; - } - - error_code = data.getWord((internal_address & 0x04)?1:0); - } - else - { - FAPI_ERR("Address (0x%012llX) isn't in a known memory address space", address_64); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = address_64; - if (i_engine == SBE) - { - const soft_error_t & SOFT_ERR_STATUS = i_soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED_SBE); - } - else - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED_SLW); - } - break; - } - - // look up specified error code - FAPI_ERR("SBE got error code 0x%06X", error_code); - const fapi::Target CHIP_IN_ERROR = i_target; - const fapi::Target CHIP = i_target; - FAPI_SET_SBE_ERROR(rc, error_code); - } while(0); - - //Make sure the code doesn't return SUCCESS - if (rc.ok()) - { - FAPI_ERR("proc_extract_sbe_rc_from_addr tried to return SUCCESS," - " which should be impossible. Must be a code bug."); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = address_64; - if (i_engine == SBE) - { - const soft_error_t & SOFT_ERR_STATUS = i_soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_FROM_ADDR_CODE_BUG_SBE); - } - else - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_FROM_ADDR_CODE_BUG_SLW); - } - } - return rc; -} - - -//------------------------------------------------------------------------------ -// function: -// Return an RC indicating the SBE/SLW error -// -// parameters: i_target => Target of chip with failed SBE/SLW -// i_pSEEPROM => pointer to a memory-mapped SEEPROM image -// i_engine => The type of engine that failed (SBE/SLW) -// -// returns: fapi::ReturnCode with the error -// This procedure will NEVER return SUCCESS -//------------------------------------------------------------------------------ +/** + * proc_extract_sbe_rc - HWP entry point, return RC indicating SBE/SLW error + * + * @param[in] i_target - target of chip with failed SBE/SLW engine + * @param[in] i_poreve - pointer to PoreVe object, used to collect engine + * state if non NULL + * @param[in] i_image - pointer to memory-mapped PORE image + * @param[in] i_engine - type of engine that failed (SBE/SLW) + * + * @retval fapi::ReturnCode - The error code the SBE hit, or the error hit + * while trying to get the error code + */ fapi::ReturnCode proc_extract_sbe_rc(const fapi::Target & i_target, - const void * i_pSEEPROM, - const por_engine_t i_engine) + void * i_poreve, + const void * i_image, + const por_engine_t i_engine) { // return codes fapi::ReturnCode rc; + uint32_t rc_ecmd = 0x0; - // data buffer to hold register values - ecmdDataBufferBase data(64); - ecmdDataBufferBase pnor_eccb_status(64); - ecmdDataBufferBase i2cm_eccb_status(64); - ecmdDataBufferBase fsi_data(32); - ecmdDataBufferBase sbe_data0(64); - ecmdDataBufferBase sbe_data1(64); - - // PC value - uint64_t pc = 0x0ULL; - - // SBE PNOR/SEEPROM soft error status - soft_error_t soft_err = eNO_ERROR; + // common state for analysis/FFDC + const fapi::Target & CHIP = i_target; + por_base_state pore_state; + // SBE specific state for analysis/FFDC + por_sbe_base_state pore_sbe_state; - // SBE attn status - bool sbe_reported_attn = false; + // process arguments + bool is_processor = (i_target.getType() == fapi::TARGET_TYPE_PROC_CHIP); + bool is_sbe = (i_engine == SBE); + bool is_slw = (i_engine == SLW); do { - // check engine type - if ((i_engine != SBE) && - (i_engine != SLW)) + // + // all engine types -- extract engine state + // + + FAPI_INF("proc_extract_sbe_rc: Processing PORE engine for target: %s, engine type: %s, virtual: %d", + i_target.toEcmdString(), + ((i_engine == SBE)?("SBE"):("SLW")), + (i_poreve == NULL)?(0):(1)); + + FAPI_EXEC_HWP(rc, proc_extract_pore_engine_state, + i_target, i_poreve, i_engine, pore_state, pore_sbe_state); + if (!rc.ok()) { - FAPI_ERR("Unknown engine type %i", i_engine); - const fapi::Target & CHIP_IN_ERROR = i_target; - const por_engine_t ENGINE = i_engine; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_UNKNOWN_ENGINE); + FAPI_ERR("proc_extract_sbe_rc: Error from proc_extract_pore_engine_state"); break; } - FAPI_INF("Processing %s error", ((i_engine == SBE)?("SBE"):("SLW"))); - // if analyzing SBE engine failure - // - make sure I2C master bus fence is released before proceeding - // - check ECCB engines (I2C/LPC) for UE/CE conditions (SLW does not use - // these engines, so no need to check) - if (i_engine == SBE) + // + // processor SBE -- return SEEPROM/PNOR UE as highest priority callouts + // + + if (is_processor && is_sbe) { + // ensure I2C master bus fence is released before proceeding FAPI_EXEC_HWP(rc, proc_reset_i2cm_bus_fence, i_target); if (!rc.ok()) { - FAPI_ERR("Error from proc_reset_i2cm_bus_fence"); - break; - } - - // check on FSI 1007 for any PIB Access Error - rc = fapiGetCfamRegister(i_target, CFAM_FSI_STATUS_0x00001007, fsi_data); - if (rc) - { - FAPI_ERR("Error from fapiGetCfamRegister (CFAM_FSI_STATUS_0x00001007)"); + FAPI_ERR("proc_extract_sbe_rc: Error from proc_reset_i2cm_bus_fence"); break; } - if (fsi_data.getNumBitsSet(17,3) != 0) - { - FAPI_ERR("Error during PIB Access"); - const fapi::Target & CHIP_IN_ERROR = i_target; - const ecmdDataBufferBase & FSI_STATUS = fsi_data; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_PIB_ERROR_SBE); - break; - } - - if (fsi_data.isBitSet(30)) - { - FAPI_ERR("SELFBOOT_ENGINE_ATTENTION - SBE reported attention to FSI2PIB status register"); - sbe_reported_attn = true; - } - - // check on ECCB Error for I2C engine - rc = fapiGetScom(i_target, PORE_ECCB_STATUS_REGISTER_READ_0x000C0002, i2cm_eccb_status); - if (rc) + // return error if either ECCB engine reports an unrecoverable ECC error + if (pore_sbe_state.i2cm_eccb_status.isBitClear(41,2) && pore_sbe_state.i2cm_eccb_status.isBitSet(43)) { - FAPI_ERR("Error from fapiGetScom (PORE_ECCB_STATUS_REGISTER_READ_0x000C00002)"); + FAPI_ERR("proc_extract_sbe_rc: SBE encountered Unrecoverable ECC error on I2C Access"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_SEEPROM); break; } - // check on ECCB Engine for PNOR Access - rc = fapiGetScom(i_target, LPC_STATUS_0x000B0002, pnor_eccb_status); - if (rc) + if (pore_sbe_state.pnor_eccb_status.isBitClear(41,2) && pore_sbe_state.pnor_eccb_status.isBitSet(43)) { - FAPI_ERR("Error from fapiGetScom (LPC_STATUS_0x000B0002)"); + FAPI_ERR("proc_extract_sbe_rc: SBE encountered Unrecoverable ECC error on PNOR Access"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_PNOR); break; } - - // determine if either engine has reached threshold of > 128 CEs - if (i2cm_eccb_status.isBitSet(57)) - { - soft_err = eSOFT_ERR_I2CM; - } - - if (pnor_eccb_status.isBitSet(57)) - { - if (soft_err == eSOFT_ERR_I2CM) - { - soft_err = eSOFT_ERR_BOTH; - } - else - { - soft_err = eSOFT_ERR_PNOR; - } - } } - // read engine PC value - rc = proc_extract_sbe_rc_get_pc(i_target, i_engine, soft_err, pc); - if (rc) - { - FAPI_ERR("Error from proc_extract_sbe_rc_get_pc"); - break; - } - if (i_engine == SBE) - { - // return error if either engine reports an unrecoverable ECC error - if (i2cm_eccb_status.isBitClear(41,2) && i2cm_eccb_status.isBitSet(43)) - { - FAPI_ERR("Unrecoverable ECC error on I2C Access"); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = pc; - const ecmdDataBufferBase & ECCB_STATUS = i2cm_eccb_status; - const soft_error_t & SOFT_ERR_STATUS = soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_I2C_SBE); - break; - } - - if (pnor_eccb_status.isBitClear(41,2) && pnor_eccb_status.isBitSet(43)) - { - FAPI_ERR("Unrecoverable ECC error on PNOR Access"); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = pc; - const ecmdDataBufferBase & ECCB_STATUS = pnor_eccb_status; - const soft_error_t & SOFT_ERR_STATUS = soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_PNOR_SBE); - break; - } - } // if (i_engine == SBE) + // + // all engine types -- process PORE Debug0/Debug1 registers for HW detected/SW generated errors + // + ecmdDataBufferBase pore_debug0_reg; + ecmdDataBufferBase pore_debug1_reg; - // read Debug1 register state, check for any HW error - rc = fapiGetScom(i_target, i_engine + DEBUG1_OFFSET_0x10, sbe_data1); - if (rc) + rc_ecmd |= pore_state.engine_state.extractToRight(pore_debug0_reg, 64*PORE_DEBUG0_OFFSET, 64); + rc_ecmd |= pore_state.engine_state.extractToRight(pore_debug1_reg, 64*PORE_DEBUG1_OFFSET, 64); + if (rc_ecmd) { - FAPI_ERR("Error from fapiGetScom (DEBUG1_REG_0x%08X)", i_engine + DEBUG1_OFFSET_0x10); + FAPI_ERR("proc_extract_sbe_rc: Error %x extracting PORE engine debug register state", rc_ecmd); + rc.setEcmdError(rc_ecmd); break; } - if (sbe_data1.isBitSet(63)) // SBE ANYERROR + // any HW error will cause DBG_LOCK bit to be set + if (pore_debug1_reg.isBitSet(63)) { - FAPI_ERR("PIBMS_DBG_LOCK - error set"); - - // read Debug0 register state - rc = fapiGetScom(i_target, i_engine + DEBUG0_OFFSET_0x0F, sbe_data0); - if (rc) - { - FAPI_ERR("Error from fapiGetScom (DEBUG0_REG_0x%08X)", i_engine + DEBUG0_OFFSET_0x0F); - break; - } + FAPI_ERR("proc_extract_sbe_rc: PIBMS_DBG_LOCK - error set"); // print bitwise messages for error log, unique errors will be grouped/combined into callouts below - // grouping is done per guideance provided by Andreas Koenig - if (sbe_data1.isBitSet(48)) + // grouping is done per guidance provided by Andreas Koenig + if (pore_debug1_reg.isBitSet(48)) { - FAPI_ERR("OCI_DATA_READ_P_ERR - Parity error in read data from OCI"); + FAPI_ERR("proc_extract_sbe_rc: ERR_DATA_READ_P_ERR - Parity error in read data from OCI"); } - uint8_t oci_rc = (sbe_data0.getByte(7) >> 5) & 0x7; + uint8_t oci_rc = (pore_debug0_reg.getByte(7) >> 5) & 0x7; if (oci_rc) { - FAPI_ERR("Last return code from OCI SBE got return code %i", oci_rc); + FAPI_ERR("proc_extract_sbe_rc: Last return code from OCI received return code %i", oci_rc); } - if (sbe_data1.isBitSet(52)) + if (pore_debug1_reg.isBitSet(52)) { - FAPI_ERR("BAD_PAR - bad instruction parity"); + FAPI_ERR("proc_extract_sbe_rc: BAD_PAR - bad instruction parity"); } - if (sbe_data1.isBitSet(53)) + if (pore_debug1_reg.isBitSet(53)) { - FAPI_ERR("BAD_INSTRUCTION - invalid instruction"); + FAPI_ERR("proc_extract_sbe_rc: BAD_INSTRUCTION - invalid instruction"); } - if (sbe_data1.isBitSet(54)) + if (pore_debug1_reg.isBitSet(54)) { - FAPI_ERR("BAD_PC - PC overflow/underflow"); + FAPI_ERR("proc_extract_sbe_rc: BAD_PC - PC overflow/underflow"); } - if (sbe_data1.isBitSet(55)) + if (pore_debug1_reg.isBitSet(55)) { - FAPI_ERR("SCAN_DATA_CRC - Scan data CRC error"); + FAPI_ERR("proc_extract_sbe_rc: SCAN_DATA_CRC - Scan data CRC error"); } - if (sbe_data1.isBitSet(56)) + if (pore_debug1_reg.isBitSet(56)) { - FAPI_ERR("PC_STACK_ERR - PC stack PUSH error or POP error"); + FAPI_ERR("proc_extract_sbe_rc: PC_STACK_ERR - PC stack PUSH error or POP error"); } - if (sbe_data1.isBitSet(57)) + if (pore_debug1_reg.isBitSet(57)) { - FAPI_ERR("INSTR_FETCH_ERROR - Non-zero return code or read sbe_data1 parity error was received when during fetch - phase"); + FAPI_ERR("proc_extract_sbe_rc: INSTR_FETCH_ERROR - Non-zero return code or read DEBUG1 parity error was received when during fetch phase"); } - if (sbe_data1.isBitSet(58)) + if (pore_debug1_reg.isBitSet(58)) { - FAPI_ERR("BAD_OPERAND - Invalid Instruction Operand"); + FAPI_ERR("proc_extract_sbe_rc: BAD_OPERAND - Invalid Instruction Operand"); } - if (sbe_data1.isBitSet(59)) + if (pore_debug1_reg.isBitSet(59)) { - FAPI_ERR("BAD_INSTRUCTION_PATH - Invalid Instruction Path (e.g. FI2C parameter miss)"); + FAPI_ERR("proc_extract_sbe_rc: BAD_INSTRUCTION_PATH - Invalid Instruction Path (e.g. FI2C parameter miss)"); } - if (sbe_data1.isBitSet(60)) + if (pore_debug1_reg.isBitSet(60)) { - FAPI_ERR("BAD_START_VECTOR_TRIGGER - Invalid Start Vector triggered"); + FAPI_ERR("proc_extract_sbe_rc: BAD_START_VECTOR_TRIGGER - Invalid Start Vector triggered"); } - if (sbe_data1.isBitSet(61)) + if (pore_debug1_reg.isBitSet(61)) { - FAPI_ERR("FI2C_PROTOCOL_HANG - Fast I2C protocol hang detected - exceeded poll limit for FI2C engine"); + FAPI_ERR("proc_extract_sbe_rc: FI2C_PROTOCOL_HANG - Fast I2C protocol hang detected - exceeded poll limit for FI2C engine"); } - if (sbe_data1.isBitSet(62)) + if (pore_debug1_reg.isBitSet(62)) { - FAPI_ERR("ROL_INVALID - rotate invalid"); + FAPI_ERR("proc_extract_sbe_rc: ROL_INVALID - rotate invalid"); } - - if (sbe_data0.isBitSet(32)) + if (pore_debug0_reg.isBitSet(32)) { - FAPI_ERR("PIB_DATA_READ_P_ERR - Parity error in read data from PRV PIB"); + FAPI_ERR("proc_extract_sbe_rc: PIB_DATA_READ_P_ERR - Parity error in read data from PRV PIB"); } - uint8_t pcb_error = (sbe_data0.getByte(4) >> 4) & 0x7; - uint32_t scom_address = sbe_data0.getWord(0); + uint8_t pcb_error = (pore_debug0_reg.getByte(4) >> 4) & 0x7; + uint32_t scom_address = pore_debug0_reg.getWord(0); if (pcb_error) { - FAPI_ERR("SBE got PCB error %i accessing scom address 0x%08X", pcb_error, scom_address); + FAPI_ERR("proc_extract_sbe_rc: PORE engine got PCB error %i accessing scom address 0x%08X", pcb_error, scom_address); } - if (sbe_data0.isBitSet(36)) + if (pore_debug0_reg.isBitSet(36)) { - FAPI_ERR("I2C_BAD_STATUS_0 - I2CM internal errors including parity errors"); + FAPI_ERR("proc_extract_sbe_rc: I2C_BAD_STATUS_0 - I2CM internal errors including parity errors"); } - if (sbe_data0.isBitSet(37)) + if (pore_debug0_reg.isBitSet(37)) { - FAPI_ERR("I2C_BAD_STATUS_1 - bad PIB response code error for ECCAX to I2CM communication"); + FAPI_ERR("proc_extract_sbe_rc: I2C_BAD_STATUS_1 - bad PIB response code error for ECCAX to I2CM communication"); } - if (sbe_data0.isBitSet(38)) + if (pore_debug0_reg.isBitSet(38)) { - FAPI_ERR("I2C_BAD_STATUS_2 - ECCAX internal errors (UCE or PIB master resets)"); + FAPI_ERR("proc_extract_sbe_rc: I2C_BAD_STATUS_2 - ECCAX internal errors (UCE or PIB master resets)"); } - if (sbe_data0.isBitSet(39)) + if (pore_debug0_reg.isBitSet(39)) { - FAPI_ERR("I2C_BAD_STATUS_3 - I2C bus issues (I2C bus busy, NACK, stop bit error)"); + FAPI_ERR("proc_extract_sbe_rc: I2C_BAD_STATUS_3 - I2C bus issues (I2C bus busy, NACK, stop bit error)"); } - if (sbe_data0.isBitSet(40)) + if (pore_debug0_reg.isBitSet(40)) { - FAPI_ERR("GROUP_PARITY_ERROR_0 - parity error from debug or status or error mask or pc stack regs"); + FAPI_ERR("proc_extract_sbe_rc: GROUP_PARITY_ERROR_0 - parity error from DEBUG or STATUS or ERROR MASK or PC STACK regs"); } - if (sbe_data0.isBitSet(41)) + if (pore_debug0_reg.isBitSet(41)) { - FAPI_ERR("GROUP_PARITY_ERROR_1 - parity error from control or exe trigger or exe t_mask or i2c param regs"); + FAPI_ERR("proc_extract_sbe_rc: GROUP_PARITY_ERROR_1 - parity error from CONTROL or EXE TRIGGER or EXE T_MASK or I2C PARAM regs"); } - if (sbe_data0.isBitSet(42)) + if (pore_debug0_reg.isBitSet(42)) { - FAPI_ERR("GROUP_PARITY_ERROR_2 - parity error from perv/oci base addr or table base addr or memory reloc"); + FAPI_ERR("proc_extract_sbe_rc: GROUP_PARITY_ERROR_2 - parity error from PERV/OCI BASE ADDR or TABLE BASE ADDR or MEMORY RELOC regs"); } - if (sbe_data0.isBitSet(43)) + if (pore_debug0_reg.isBitSet(43)) { - FAPI_ERR("GROUP_PARITY_ERROR_3 - parity error from scr0 or scr1 or scr2 or sbe_data0 scr0 reg"); + FAPI_ERR("proc_extract_sbe_rc: GROUP_PARITY_ERROR_3 - parity error from SCR0 or SCR1 or SCR2 or DEBUG0 SCR0 reg"); } - if (sbe_data0.isBitSet(44)) + if (pore_debug0_reg.isBitSet(44)) { - FAPI_ERR("GROUP_PARITY_ERROR_4 - parity error from ibuf regs"); + FAPI_ERR("proc_extract_sbe_rc: GROUP_PARITY_ERROR_4 - parity error from IBUF regs"); } // @@ -607,237 +294,242 @@ fapi::ReturnCode proc_extract_sbe_rc(const fapi::Target & i_target, // // "Internal Error" bucket (Error Event 3) - if ((sbe_data0.getNumBitsSet(40,5) != 0) || sbe_data1.isBitSet(55)) - { - FAPI_ERR("Internal %s Error", ((i_engine == SBE)?("SBE"):("SLW"))); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = pc; - const uint8_t & GROUP_PARITY_ERROR_0_4 = (sbe_data0.getByte(5) >> 3) & 0x1F; - const bool & SCAN_DATA_CRC_ERROR = sbe_data1.isBitSet(55); - if (i_engine == SBE) - { - const soft_error_t & SOFT_ERR_STATUS = soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_INTERNAL_ERROR_SBE); - } - else - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_INTERNAL_ERROR_SLW); - } + if ((pore_debug0_reg.getNumBitsSet(40,5) != 0) || pore_debug1_reg.isBitSet(55)) + { + FAPI_ERR("proc_extract_sbe_rc: Internal Error (Event 3)"); + const uint8_t & GROUP_PARITY_ERROR_0_4 = (pore_debug0_reg.getByte(5) >> 3) & 0x1F; + const bool & SCAN_DATA_CRC_ERROR = pore_debug1_reg.isBitSet(55); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_INTERNAL_ERROR); break; } // "I2C Error" bucket (Error Event 0) - if ((sbe_data0.getNumBitsSet(36,4) != 0) || (sbe_data1.isBitSet(61))) + if ((pore_debug0_reg.getNumBitsSet(36,4) != 0) || (pore_debug1_reg.isBitSet(61))) { - FAPI_ERR("%s failed I2C Master operation", ((i_engine == SBE)?("SBE"):("SLW"))); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = pc; - const uint8_t & I2C_BAD_STATUS_0_3 = sbe_data0.getHalfWord(10); - const bool & FI2C_HANG = sbe_data1.isBitSet(61); - - if (i_engine == SBE) - { - const soft_error_t & SOFT_ERR_STATUS = soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_I2C_ERROR_SBE); - } - else - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_I2C_ERROR_SLW); - } + FAPI_ERR("proc_extract_sbe_rc: I2C Error (Event 0)"); + const uint8_t & I2C_BAD_STATUS_0_3 = pore_debug0_reg.getHalfWord(10); + const bool & FI2C_HANG = pore_debug1_reg.isBitSet(61); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_I2C_ERROR); break; } - // "SCOM Error" bucket (Error Event 0), raise in presence of no instruction execution error - if ((sbe_data0.getNumBitsSet(32,4) != 0) && (sbe_data1.getNumBitsSet(52,9) == 0) && (sbe_data1.isBitClear(62))) + // "SCOM Error" bucket (Error Event 0), raise only if no instruction execution error is present + if ((pore_debug0_reg.getNumBitsSet(32,4) != 0) && (pore_debug1_reg.getNumBitsSet(52,9) == 0) && (pore_debug1_reg.isBitClear(62))) { - FAPI_ERR("%s failed SCOM operation", ((i_engine == SBE)?("SBE"):("SLW"))); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = pc; + FAPI_ERR("proc_extract_sbe_rc: SCOM operation failed (Event 0)"); const uint32_t & SCOM_ADDRESS = scom_address; const uint8_t & PIB_ERROR_CODE = pcb_error; - const bool & PIB_DATA_READ_PARITY_ERROR = sbe_data0.isBitSet(32); - if (i_engine == SBE) - { - const soft_error_t & SOFT_ERR_STATUS = soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SCOM_ERROR_SBE); - } - else - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SCOM_ERROR_SLW); - } + const bool & PIB_DATA_READ_PARITY_ERROR = pore_debug0_reg.isBitSet(32); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SCOM_ERROR); break; } // "OCI Error" bucket (Error Event 1) - if ((i_engine == SLW) && (sbe_data1.getNumBitsSet(48,4) != 0)) + if (is_slw && (pore_debug1_reg.getNumBitsSet(48,4) != 0)) { - FAPI_ERR("%s failed OCI Master operation", ((i_engine == SBE)?("SBE"):("SLW"))); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = pc; + FAPI_ERR("proc_extract_sbe_rc: OCI Master operation failed (Event 1)"); const uint8_t & OCI_ERROR_CODE = oci_rc; - const bool & OCI_DATA_READ_PARITY_ERROR = sbe_data1.isBitSet(48); - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_OCI_ERROR_SLW); + const bool & OCI_DATA_READ_PARITY_ERROR = pore_debug1_reg.isBitSet(48); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_OCI_ERROR); break; } - // check for the execution of an invalid instruction - // if present, check if the SBE stopped at a code detected error (instruction = 'halt') - if (sbe_data1.isBitSet(53) || sbe_data1.isBitSet(62)) + // check for PORE code generated halt + // code detected errors will result in the the execution of an invalid instruction -> ASCII 'halt' + if (pore_debug1_reg.isBitSet(53) || pore_debug1_reg.isBitSet(62)) { - rc = fapiGetScom(i_target, i_engine + IBUF_OFFSET_0x0D, data); - if (rc) + // check alignment of PC value + if (pore_state.pc & 0x3ULL) { - // fail through to "Instruction Execution Error" bucket below - FAPI_ERR("Error from fapiGetScom(IBUF_REG_0x%08X)", i_engine + IBUF_OFFSET_0x0D); - FAPI_ERR("SBE reported an invalid instruction error, but unable to determine if it was a code-detected error or not"); + FAPI_ERR("proc_extract_sbe_rc: Unexpected address alignment"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_ADDR_UNALIGNED); + break; } - else + + // examine first word of IBUF register + uint32_t instruction = pore_state.engine_state.getWord(2*PORE_IBUF0_OFFSET); + if (instruction == PORE_HALT_WITH_ERROR_INSTRUCTION) { - // lookup return code identifying halt from image, based on PC value - const uint32_t instruction = data.getWord(0); - if (instruction == HALT_WITH_ERROR_INSTRUCTION) - { - rc = proc_extract_sbe_rc_from_address(i_target, i_pSEEPROM, i_engine, soft_err); - break; - } + // halt encountered + // RC indicating unique exit point will be contained in next word + // retrieve RC from appropriate memory space + uint64_t rc_addr = (pore_state.pc & INTERNAL_ADDR_MASK)+4; + + if ((is_processor && + (((pore_state.pc & ADDR_TYPE_MASK) == SEEPROM_ADDR_TYPE) || + ((pore_state.pc & ADDR_TYPE_MASK) == SLW_ADDR_TYPE))) || + (!is_processor)) + { + if (i_image == NULL) + { + FAPI_ERR("proc_extract_sbe_rc: PORE image pointer is NULL"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_IMAGE_POINTER_NULL); + break; + } + + FAPI_INF("proc_extract_sbe_rc: Extracting the error code from address 0x%llX in PORE image", rc_addr); + uint8_t * p_errorCode = (uint8_t *) i_image + rc_addr; + pore_state.rc = + (p_errorCode[0] << 3*8) | + (p_errorCode[1] << 2*8) | + (p_errorCode[2] << 1*8) | + (p_errorCode[3]); + } + else if (is_processor && ((pore_state.pc & ADDR_TYPE_MASK) == PIBMEM_ADDR_TYPE)) + { + FAPI_INF("proc_extract_sbe_rc: Extracting the error code from address 0x%llX in the PIBMEM", rc_addr); + ecmdDataBufferBase pibmem_data(64); + rc = fapiGetScom(i_target, PIBMEM0_0x00080000 + (rc_addr >>3), pibmem_data); + if (rc) + { + FAPI_ERR("proc_extract_sbe_rc: Error from fapiGetScom (PIBMEM address 0x%08X)", (uint32_t) (PIBMEM0_0x00080000 + (rc_addr >>3))); + break; + } + pore_state.rc = pibmem_data.getWord((rc_addr & 0x04)?1:0); + } + else + { + FAPI_ERR("proc_extract_sbe_rc: Address (0x%012llX) isn't in a known memory address space", pore_state.pc); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED); + break; + } + + // invoke platform function to return XML defined RC associated with PORE state + FAPI_ERR("proc_extract_sbe_rc: PORE got error code 0x%06X", pore_state.rc); + FAPI_SET_SBE_ERROR(rc, pore_state.rc); + + // ensure that error is generated in this code path + if (rc.ok()) + { + FAPI_ERR("proc_extract_sbe_rc: PORE got error code 0x%06X, but this did not resolve to any return code!", pore_state.rc); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_FROM_ADDR_CODE_BUG); + } + break; } } // "Instruction Execution Error" bucket (Error Event 2) - if ((sbe_data1.getNumBitsSet(52,9) != 0) || (sbe_data1.isBitSet(62))) - { - FAPI_ERR("SBE encountered instruction execution error"); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = pc; - const bool & INSTRUCTION_PARITY_ERROR = sbe_data1.isBitSet(52); - const bool & INVALID_INSTRUCTION_NON_ROTATE = sbe_data1.isBitSet(53); - const bool & PC_OVERFLOW_UNDERFLOW = sbe_data1.isBitSet(54); + if ((pore_debug1_reg.getNumBitsSet(52,9) != 0) || (pore_debug1_reg.isBitSet(62))) + { + FAPI_ERR("proc_extract_sbe_rc: Instruction execution error (Event 2)"); + const bool & INSTRUCTION_PARITY_ERROR = pore_debug1_reg.isBitSet(52); + const bool & INVALID_INSTRUCTION_NON_ROTATE = pore_debug1_reg.isBitSet(53); + const bool & PC_OVERFLOW_UNDERFLOW = pore_debug1_reg.isBitSet(54); // bit 55 covered by Internal Error check - const bool & PC_STACK_ERROR = sbe_data1.isBitSet(56); - const bool & INSTRUCTION_FETCH_ERROR = sbe_data1.isBitSet(57); - const bool & INVALID_OPERAND = sbe_data1.isBitSet(58); - const bool & I2C_ENGINE_MISS = sbe_data1.isBitSet(59); - const bool & INVALID_START_VECTOR = sbe_data1.isBitSet(60); - const bool & INVALID_INSTRUCTION_ROTATE = sbe_data1.isBitSet(62); - - if (i_engine == SBE) - { - const soft_error_t & SOFT_ERR_STATUS = soft_err; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_INSTRUCTION_ERROR_SBE); - } - else - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_INSTRUCTION_ERROR_SLW); - } + const bool & PC_STACK_ERROR = pore_debug1_reg.isBitSet(56); + const bool & INSTRUCTION_FETCH_ERROR = pore_debug1_reg.isBitSet(57); + const bool & INVALID_OPERAND = pore_debug1_reg.isBitSet(58); + const bool & I2C_ENGINE_MISS = pore_debug1_reg.isBitSet(59); + const bool & INVALID_START_VECTOR = pore_debug1_reg.isBitSet(60); + const bool & INVALID_INSTRUCTION_ROTATE = pore_debug1_reg.isBitSet(62); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_INSTRUCTION_ERROR); break; } - } // SBE ANYERROR debug(63) + } + - // no error bits are set, check PC to check execution progress - // check for real halt (wait 0) instruction in OTPROM - if ((i_engine == SBE) && ((pc & ADDR_TYPE_MASK) == OTPROM_ADDR_TYPE)) + // + // processor SBE -- check for real halt in OTPROM + // + + // for processor SBE only, check for real halt (wait 0) instruction in OTPROM + if (is_processor && is_sbe && ((pore_state.pc & ADDR_TYPE_MASK) == OTPROM_ADDR_TYPE)) { // Note: OTPROM halts are actual halt instructions, which means the // SBE updated the PC before the halt. // Thus we have to subtract 4 to get back to the address of the halt - uint32_t internal_address = (uint32_t)(pc & INTERNAL_ADDR_MASK) - 4; + uint32_t pc_m4 = (uint32_t)(pore_state.pc & INTERNAL_ADDR_MASK)-4; // 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 - FAPI_INF("Determining the OTPROM error based on the address " - "0x%X", internal_address); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = internal_address; - - switch (internal_address) + FAPI_INF("proc_extract_sbe_rc: Determining OTPROM error at address 0x%X", pc_m4); + switch (pc_m4) { case (0x400fc): // original OTPROM version case (0x40118): // updated OTPROM version - FAPI_ERR("Chip not identified as Murano or Venice"); - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_BAD_CHIP_TYPE_SBE); + FAPI_ERR("proc_extract_sbe_rc: Chip was not identified as Murano or Venice"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_BAD_CHIP_TYPE); break; case (0x401c0): - FAPI_ERR("SEEPROM magic number didn't match \"XIP SEPM\""); - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SEEPROM_MAGIC_NUMBER_MISMATCH_SBE); + FAPI_ERR("proc_extract_sbe_rc: SEEPROM magic number didn't match \"XIP SEPM\""); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SEEPROM_MAGIC_NUMBER_MISMATCH); break; case (0x401ec): - FAPI_ERR("Branch to SEEPROM didn't happen"); - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_BRANCH_TO_SEEPROM_FAIL_SBE); + FAPI_ERR("proc_extract_sbe_rc: Branch to SEEPROM didn't happen"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_BRANCH_TO_SEEPROM_FAIL); break; default: - FAPI_ERR("Halted in OTPROM, but not at an expected halt location"); - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_UNEXPECTED_OTPROM_HALT_SBE); + FAPI_ERR("proc_extract_sbe_rc: Halted in OTPROM, but not at an expected halt location"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_UNEXPECTED_OTPROM_HALT); break; } - break; } - // check to see if engine was never started - if (((pc & SBE_ADDR_MASK) == 0x0000800000000000ULL) || - ((pc & SBE_ADDR_MASK) == 0x0000000000000000ULL)) - { - FAPI_ERR("PC is all zeros, which means %s was probably never started", ((i_engine == SBE)?("SBE"):("SLW"))); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = pc; - if (i_engine == SBE) - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_NEVER_STARTED_SBE); - break; - } - else - { - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_NEVER_STARTED_SLW); - break; - } + // + // all engine types -- validate execution progress of PC + // + + // determine if engine was ever started + if (((pore_state.pc & PORE_ADDR_MASK) == 0x0000800000000000ULL) || + ((pore_state.pc & PORE_ADDR_MASK) == 0x0000000000000000ULL)) + { + FAPI_ERR("proc_extract_sbe_rc: PC is all zeros, which means PORE engine was probably never started"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_NEVER_STARTED); + break; } - // return soft error with lowest priority - if ((i_engine == SBE) && (soft_err != eNO_ERROR)) + + // + // processor SBE -- return soft error with lowest priority + // + + if (is_processor && is_sbe && (pore_sbe_state.soft_err != eNO_ERROR)) { - const fapi::Target & CHIP_IN_ERROR = i_target; - if (soft_err == eSOFT_ERR_I2CM) + if (pore_sbe_state.soft_err == eSOFT_ERR_I2CM) { - FAPI_ERR("Recoverable ECC Error on I2C Access"); - const ecmdDataBufferBase & I2C_ECCB_STATUS = i2cm_eccb_status; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_I2C_SBE); + FAPI_ERR("proc_extract_sbe_rc: SBE encountered Recoverable ECC Error on I2C Access"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_SEEPROM); break; } - else if (soft_err == eSOFT_ERR_PNOR) + else if (pore_sbe_state.soft_err == eSOFT_ERR_PNOR) { - FAPI_ERR("Recoverable ECC Error on PNOR Access"); - const ecmdDataBufferBase & PNOR_ECCB_STATUS = pnor_eccb_status; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_PNOR_SBE); + FAPI_ERR("proc_extract_sbe_rc: SBE encountered Recoverable ECC Error on PNOR Access"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_PNOR); break; } else // (soft_err == eSOFT_ERR_BOTH) { - FAPI_ERR("Recoverable ECC Error on PNOR Access"); - FAPI_ERR("Recoverable ECC Error on I2C Access"); - const ecmdDataBufferBase & PNOR_ECCB_STATUS = pnor_eccb_status; - const ecmdDataBufferBase & I2C_ECCB_STATUS = i2cm_eccb_status; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_I2C_AND_PNOR_SBE); + FAPI_ERR("proc_extract_sbe_rc: SBE encountered Recoverable ECC Error on I2C Access"); + FAPI_ERR("proc_extract_sbe_rc: SBE encountered Recoverable ECC Error on PNOR Access"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_SEEPROM_AND_PNOR); break; } } } while(0); - // if SBE, make sure that the code doesn't return FAPI_RC_SUCCESS - // if the engine reported an attn to the FSI2PIB status register - if (rc.ok() && (i_engine == SBE) && (sbe_reported_attn)) + // + // processor SBE -- ensure HWP doesn't return FAPI_RC_SUCCESS if the engine reported attn + // + if (rc.ok() && is_processor && is_sbe && pore_sbe_state.reported_attn) { - FAPI_ERR("SBE reported attention, but proc_extract_sbe_rc tried to return SUCCESS," - " which should be impossible. Must be a code bug."); - const fapi::Target & CHIP_IN_ERROR = i_target; - const uint64_t & PC = pc; - FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_CODE_BUG_SBE); + FAPI_ERR("proc_extract_sbe_rc: SBE reported attention, but proc_extract_sbe_rc tried to return SUCCESS!"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_CODE_BUG); } + + // + // all engine types -- append engine specific base FFDC to any non-zero return code + // + + if (!rc.ok()) + { + FAPI_ADD_INFO_TO_HWP_ERROR(rc, RC_PROC_EXTRACT_PORE_BASE_FFDC); + } + + FAPI_INF("proc_extract_sbe_rc: End"); return rc; } } // extern "C" -/* Local Variables: */ -/* c-basic-offset: 4 */ -/* End: */ diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.H b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.H index 8571d3de3..3e2114749 100644 --- a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.H +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.H @@ -22,7 +22,7 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: proc_extract_sbe_rc.H,v 1.7 2014/03/18 14:09:28 jmcgill Exp $ +// $Id: proc_extract_sbe_rc.H,v 1.9 2014/07/24 03:13:59 jmcgill Exp $ // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_extract_sbe_rc.H,v $ //------------------------------------------------------------------------------ // *| @@ -31,31 +31,145 @@ // *! *** *** // *| // *! TITLE : proc_extract_sbe_rc.H -// *! DESCRIPTION : Create a return code for an SBE/SLW error. +// *! DESCRIPTION : Create return code for PORE (SBE/SLW) error // *! -// *! OWNER NAME : Johannes Koesters Email: koesters@de.ibm.com +// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com +// *! BACKUP NAME : Johannes Koesters Email: koesters@de.ibm.com // *! //------------------------------------------------------------------------------ #ifndef _PROC_EXTRACT_SBE_RC_H_ #define _PROC_EXTRACT_SBE_RC_H_ + //------------------------------------------------------------------------------ // Includes //------------------------------------------------------------------------------ #include #include +#include + //------------------------------------------------------------------------------ // Structure definitions //------------------------------------------------------------------------------ + +// engine types enum por_engine_t { - SBE = PORE_SBE_0x000E0000, - SLW = PORE_SLW_0x00068000 + SBE = PORE_SBE_0x000E0000, + SLW = PORE_SLW_0x00068000 +}; + +// common SCOM register offsets for SBE/SLW engines +enum por_reg_offset_t { + PORE_STATUS_OFFSET = 0x00, + PORE_CONTROL_OFFSET = 0x01, + PORE_RESET_OFFSET = 0x02, + PORE_ERR_MASK_OFFSET = 0x03, + PORE_P0_OFFSET = 0x04, + PORE_P1_OFFSET = 0x05, + PORE_A0_OFFSET = 0x06, + PORE_A1_OFFSET = 0x07, + PORE_TBL_BASE_OFFSET = 0x08, + PORE_EXE_TRIGGER_OFFSET = 0x09, + PORE_CTR_OFFSET = 0x0A, + PORE_D0_OFFSET = 0x0B, + PORE_D1_OFFSET = 0x0C, + PORE_IBUF0_OFFSET = 0x0D, + PORE_IBUF1_OFFSET = 0x0E, + PORE_DEBUG0_OFFSET = 0x0F, + PORE_DEBUG1_OFFSET = 0x10, + PORE_STACK0_OFFSET = 0x11, + PORE_STACK1_OFFSET = 0x12, + PORE_STACK2_OFFSET = 0x13, + PORE_IDFLAGS_OFFSET = 0x14, + PORE_SPRG0_OFFSET = 0x15, + PORE_MRR_OFFSET = 0x16, + PORE_I2CE0_OFFSET = 0x17, + PORE_I2CE1_OFFSET = 0x18, + PORE_I2CE2_OFFSET = 0x19, + PORE_NUM_REGS = 0x1A +}; + +// SBE soft error types +enum por_sbe_soft_error_t +{ + eNO_ERROR = 0, + eSOFT_ERR_I2CM=1, + eSOFT_ERR_PNOR=2, + eSOFT_ERR_BOTH=3 +}; + +enum por_halt_type_t +{ + PORE_HALT_SCAN_FAIL = 0, + PORE_HALT_SCAN_FLUSH_FAIL = 1, + PORE_HALT_ARRAYINIT_FAIL = 2, + PORE_HALT_SKEW_ADJUST_FAIL = 3, + PORE_HALT_FIR_FAIL = 4, + PORE_HALT_INSTRUCT_FAIL = 5, + PORE_HALT_DPLL_LOCK_FAIL = 6 +}; + +enum por_ffdc_offset_t +{ + POR_FFDC_OFFSET_NONE = 0x0, + POR_FFDC_OFFSET_TP_CHIPLET = TP_CHIPLET_0x01000000, + POR_FFDC_OFFSET_NEST_CHIPLET = NEST_CHIPLET_0x02000000, + POR_FFDC_OFFSET_MEM_CHIPLET = MEM_CHIPLET_0x03000000, + POR_FFDC_OFFSET_XBUS_CHIPLET = X_BUS_CHIPLET_0x04000000, + POR_FFDC_OFFSET_ABUS_CHIPLET = A_BUS_CHIPLET_0x08000000, + POR_FFDC_OFFSET_PCIE_CHIPLET = PCIE_CHIPLET_0x09000000, + POR_FFDC_OFFSET_EX_CHIPLET = EX00_CHIPLET_0x10000000, + POR_FFDC_OFFSET_USE_P0 = PORE_P0_OFFSET, + POR_FFDC_OFFSET_USE_P1 = PORE_P1_OFFSET +}; + + +// structure to encapsulate PORE state/FFDC content +struct por_base_state +{ + fapi::Target target; // chip target associated with failed engine + por_engine_t engine; // engine type (SBE/SLW) + bool is_virtual; // virtual engine? + ecmdDataBufferBase vital_state; // SBE/SLW vital state + ecmdDataBufferBase engine_state; // SBE/SLW engine state + uint64_t pc; // SBE/SLW engine PC + uint32_t rc; // RC associated with SBE/SLW halt point + + por_base_state() + { + vital_state.setDoubleWordLength(1); + vital_state.flushTo1(); + engine_state.setDoubleWordLength(PORE_NUM_REGS); + engine_state.flushTo1(); + pc = 0xFFFFFFFFFFFFFFFFULL; + rc = 0x0; + } +}; + +// structure to encapsulate PORE SBE-specific base FFDC content +struct por_sbe_base_state +{ + ecmdDataBufferBase pnor_eccb_status; // PNOR ECCB status register state + ecmdDataBufferBase i2cm_eccb_status; // SEEPROM ECCB status register state + por_sbe_soft_error_t soft_err; // PNOR/SEEPROM soft error state + bool reported_attn; // SBE generated attention? + + por_sbe_base_state() + { + pnor_eccb_status.setDoubleWordLength(1); + pnor_eccb_status.flushTo1(); + i2cm_eccb_status.setDoubleWordLength(1); + i2cm_eccb_status.flushTo1(); + soft_err = eNO_ERROR; + reported_attn = false; + } }; // function pointer typedef definition for HWP call support typedef fapi::ReturnCode (*proc_extract_sbe_rc_FP_t)(const fapi::Target &, + void *, const void *, const por_engine_t); @@ -68,17 +182,21 @@ extern "C" { /** - * @brief Create a return code based off the current SBE/SLW RC. + * proc_extract_sbe_rc - HWP entry point, return RC indicating SBE/SLW error + * + * @param[in] i_target - target of chip with failed SBE/SLW engine + * @param[in] i_poreve - pointer to PoreVe object, used to collect engine + * state if non NULL + * @param[in] i_image - pointer to memory-mapped PORE image + * @param[in] i_engine - type of engine that failed (SBE/SLW) * - * @param[in] i_target Reference to processor target containing the SBE/SLW engine - * @param[in] i_pSEEPROM Pointer to a memory-mapped SEEPROM image (or NULL) - * @param[in] i_engine The POR engine type (SBE/SLW) - * @return ReturnCode The error code the SBE hit, or the error hit - * while trying to get the error code + * @retval fapi::ReturnCode - The error code the SBE hit, or the error hit + * while trying to get the error code */ - fapi::ReturnCode proc_extract_sbe_rc(const fapi::Target & i_target, - const void * i_pSEEPROM, - const por_engine_t i_engine); +fapi::ReturnCode proc_extract_sbe_rc(const fapi::Target & i_target, + void * i_poreve, + const void * i_image, + const por_engine_t i_engine); } // extern "C" diff --git a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml index a51a4a61f..3abfd4275 100644 --- a/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml +++ b/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml @@ -22,223 +22,143 @@ - + - RC_PROC_EXTRACT_SBE_RC_IMAGE_POINTER_NULL_SBE + RC_PROC_EXTRACT_SBE_RC_ADDR_UNALIGNED Procedure: proc_extract_sbe_rc - NULL image pointer prevented extraction of SBE error code + The PORE engine PC isn't properly aligned - CHIP_IN_ERROR - PC - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - CHIP_IN_ERROR + CHIP HIGH - - CODE - LOW - - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_IMAGE_POINTER_NULL_SLW + RC_PROC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_SEEPROM Procedure: proc_extract_sbe_rc - NULL image pointer prevented extraction of SLW error code + ECCB indicates unrecoverable ECC error from I2C during SBE execution + Reload/update of SEEPROM required - CHIP_IN_ERROR - PC - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - - CHIP_IN_ERROR + CHIP HIGH - - CODE - LOW - - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - RC_PROC_EXTRACT_SBE_RC_ADDR_UNALIGNED_SBE + RC_PROC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_PNOR Procedure: proc_extract_sbe_rc - The SBE stop address isn't properly aligned + ECCB indicates unrecoverable ECC error from PNOR during SBE execution + Reload/Update of PNOR required - CHIP_IN_ERROR - PC - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - CHIP_IN_ERROR + CHIP HIGH - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - RC_PROC_EXTRACT_SBE_RC_ADDR_UNALIGNED_SLW + RC_PROC_EXTRACT_SBE_RC_INTERNAL_ERROR Procedure: proc_extract_sbe_rc - The SLW stop address isn't properly aligned + PORE engine encountered an internal HW error - CHIP_IN_ERROR - PC - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + GROUP_PARITY_ERROR_0_4 + SCAN_DATA_CRC_ERROR - CHIP_IN_ERROR + CHIP HIGH - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED_SBE + RC_PROC_EXTRACT_SBE_RC_I2C_ERROR Procedure: proc_extract_sbe_rc - The SBE stop address isn't in a recognized address space + PORE engine encountered a I2C interface/setup error - CHIP_IN_ERROR - PC - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - + I2C_BAD_STATUS_0_3 + FI2C_HANG - CHIP_IN_ERROR + CHIP HIGH - - CODE - LOW - - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED_SLW + RC_PROC_EXTRACT_SBE_RC_SCOM_ERROR Procedure: proc_extract_sbe_rc - The SLW stop address isn't in a reognized address space + PORE engine encountered a SCOM error - CHIP_IN_ERROR - PC - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - + SCOM_ADDRESS + PIB_ERROR_CODE + PIB_DATA_READ_PARITY_ERROR - CHIP_IN_ERROR + CHIP HIGH - - CODE - LOW - - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_FROM_ADDR_CODE_BUG_SBE + RC_PROC_EXTRACT_SBE_RC_OCI_ERROR Procedure: proc_extract_sbe_rc - Extract RC from address subroutine tried to return SUCCESS for SBE, which isn't allowed + PORE SLW engine encountered error on OCI interface - CHIP_IN_ERROR - PC - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - CHIP_IN_ERROR - + OCI_ERROR_CODE + OCI_DATA_READ_PARITY_ERROR - CHIP_IN_ERROR + CHIP HIGH - - CODE - LOW - - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_FROM_ADDR_CODE_BUG_SLW + RC_PROC_EXTRACT_SBE_RC_IMAGE_POINTER_NULL Procedure: proc_extract_sbe_rc - Extract RC from address subroutine tried to return SUCCESS for SLW, which isn't allowed + PORE image pointer provided was NULL. - CHIP_IN_ERROR - PC - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - - CHIP_IN_ERROR + CHIP HIGH @@ -246,22 +166,21 @@ LOW - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_UNKNOWN_ENGINE + RC_PROC_EXTRACT_SBE_RC_ADDR_NOT_RECOGNIZED Procedure: proc_extract_sbe_rc - Tried to extract error from unknown engine type + The PORE halt address isn't in a recognized address space - ENGINE - CHIP_IN_ERROR + CHIP HIGH @@ -269,328 +188,58 @@ LOW - CHIP_IN_ERROR - - - - - RC_PROC_EXTRACT_SBE_RC_PIB_ERROR_SBE - - Procedure: proc_extract_sbe_rc - Error during PIB access for SBE - - CHIP_IN_ERROR - FSI_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - proc_tp_collect_dbg_data,CHIP_IN_ERROR - - CHIP_IN_ERROR - HIGH - - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - - - - RC_PROC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_I2C_SBE - - Procedure: proc_extract_sbe_rc - ECCB indicates unrecoverable ECC error from I2C during SBE execution - Reload/update of SEEPROM required - - CHIP_IN_ERROR - PC - ECCB_STATUS - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - proc_tp_collect_dbg_data,CHIP_IN_ERROR - - CHIP_IN_ERROR - HIGH - - - - - RC_PROC_EXTRACT_SBE_RC_UNRECOVERABLE_ECC_PNOR_SBE - - Procedure: proc_extract_sbe_rc - ECCB indicates unrecoverable ECC error from PNOR during SBE execution - Reload/Update of PNOR required - - CHIP_IN_ERROR - PC - ECCB_STATUS - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - proc_tp_collect_dbg_data,CHIP_IN_ERROR - - CHIP_IN_ERROR - HIGH - - - - - RC_PROC_EXTRACT_SBE_RC_INTERNAL_ERROR_SBE - - Procedure: proc_extract_sbe_rc - SBE engine encountered an internal error - - CHIP_IN_ERROR - PC - GROUP_PARITY_ERROR_0_4 - SCAN_DATA_CRC_ERROR - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - proc_tp_collect_dbg_data,CHIP_IN_ERROR - - CHIP_IN_ERROR - HIGH - - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - - - - RC_PROC_EXTRACT_SBE_RC_INTERNAL_ERROR_SLW - - Procedure: proc_extract_sbe_rc - SLW engine encountered an internal error - - CHIP_IN_ERROR - PC - GROUP_PARITY_ERROR_0_4 - SCAN_DATA_CRC_ERROR - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - - - CHIP_IN_ERROR - HIGH - - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - - - - RC_PROC_EXTRACT_SBE_RC_SCOM_ERROR_SBE - - Procedure: proc_extract_sbe_rc - SBE engine encountered a SCOM error - - CHIP_IN_ERROR - PC - SCOM_ADDRESS - PIB_ERROR_CODE - PIB_DATA_READ_PARITY_ERROR - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - proc_tp_collect_dbg_data,CHIP_IN_ERROR - - CHIP_IN_ERROR - HIGH - - - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_SCOM_ERROR_SLW + RC_SBE_UNKNOWN_ERROR Procedure: proc_extract_sbe_rc - SLW engine encountered a SCOM error + FAPI_SET_SBE_ERROR did not resolve PORE halt code to known return code + May be caused by platform attempting to resolve engine state with mismatched binary image. - CHIP_IN_ERROR - PC - SCOM_ADDRESS - PIB_ERROR_CODE - PIB_DATA_READ_PARITY_ERROR - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - - proc_tp_collect_dbg_data,CHIP_IN_ERROR - CHIP_IN_ERROR - HIGH + CHIP + LOW - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - - - - RC_PROC_EXTRACT_SBE_RC_OCI_ERROR_SLW - - Procedure: proc_extract_sbe_rc - SLW engine encountered error on OCI interface - - CHIP_IN_ERROR - PC - OCI_ERROR_CODE - OCI_DATA_READ_PARITY_ERROR - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - - proc_tp_collect_dbg_data,CHIP_IN_ERROR - CHIP_IN_ERROR + CODE HIGH - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - RC_PROC_EXTRACT_SBE_RC_I2C_ERROR_SBE + RC_PROC_EXTRACT_SBE_RC_FROM_ADDR_CODE_BUG Procedure: proc_extract_sbe_rc - SBE engine encountered a I2C interface/setup error + Failed to association PORE halt code with known return code - CHIP_IN_ERROR - PC - I2C_BAD_STATUS_0_3 - FI2C_HANG - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - proc_tp_collect_dbg_data,CHIP_IN_ERROR - CHIP_IN_ERROR + CHIP HIGH - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - - - - RC_PROC_EXTRACT_SBE_RC_I2C_ERROR_SLW - - Procedure: proc_extract_sbe_rc - SLW engine encountered a I2C interface/setup error - - CHIP_IN_ERROR - PC - I2C_BAD_STATUS_0_3 - FI2C_HANG - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - - proc_tp_collect_dbg_data,CHIP_IN_ERROR - CHIP_IN_ERROR - HIGH - - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - - - - RC_PROC_EXTRACT_SBE_RC_INSTRUCTION_ERROR_SBE - - Procedure: proc_extract_sbe_rc - SBE engine encountered an instruction fetch/decode/execution error - - CHIP_IN_ERROR - PC - INSTRUCTION_PARITY_ERROR - INVALID_INSTRUCTION_NON_ROTATE - PC_OVERFLOW_UNDERFLOW - PC_STACK_ERROR - INSTRUCTION_FETCH_ERROR - INVALID_OPERAND - I2C_ENGINE_MISS - INVALID_START_VECTOR - INVALID_INSTRUCTION_ROTATE - SOFT_ERR_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - - CHIP_IN_ERROR - HIGH + CODE + LOW - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_INSTRUCTION_ERROR_SLW + RC_PROC_EXTRACT_SBE_RC_INSTRUCTION_ERROR Procedure: proc_extract_sbe_rc - SLW engine encountered an instruction fetch/decode/execution error + PORE engine encountered an instruction fetch/decode/execution error - CHIP_IN_ERROR - PC INSTRUCTION_PARITY_ERROR INVALID_INSTRUCTION_NON_ROTATE PC_OVERFLOW_UNDERFLOW @@ -600,151 +249,119 @@ I2C_ENGINE_MISS INVALID_START_VECTOR INVALID_INSTRUCTION_ROTATE - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - - CHIP_IN_ERROR + CHIP HIGH - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_BAD_CHIP_TYPE_SBE + RC_PROC_EXTRACT_SBE_RC_BAD_CHIP_TYPE Procedure: proc_extract_sbe_rc - SBE execution of OTPROM code failed chip type (Murano/Venice) check + PORE SBE execution of OTPROM code failed chip type (Murano/Venice) check - CHIP_IN_ERROR - PC - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS REG_FFDC_PROC_FIRST_OTPROM_INSTRUCTIONS - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP HIGH - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_SEEPROM_MAGIC_NUMBER_MISMATCH_SBE + RC_PROC_EXTRACT_SBE_RC_SEEPROM_MAGIC_NUMBER_MISMATCH Procedure: proc_extract_sbe_rc - SBE execution of OTPROM code failed SEEPROM magic number check + PORE SBE execution of OTPROM code failed SEEPROM magic number check - CHIP_IN_ERROR - PC - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS REG_FFDC_PROC_FIRST_OTPROM_INSTRUCTIONS - CHIP_IN_ERROR + CHIP - proc_tp_collect_dbg_data,CHIP_IN_ERROR - CHIP_IN_ERROR + CHIP HIGH - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_BRANCH_TO_SEEPROM_FAIL_SBE + RC_PROC_EXTRACT_SBE_RC_BRANCH_TO_SEEPROM_FAIL Procedure: proc_extract_sbe_rc - SBE execution of OTPROM code failed to branch to SEEPROM + PORE SBE execution of OTPROM code failed to branch to SEEPROM - CHIP_IN_ERROR - PC - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS REG_FFDC_PROC_FIRST_OTPROM_INSTRUCTIONS - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP HIGH - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_UNEXPECTED_OTPROM_HALT_SBE + RC_PROC_EXTRACT_SBE_RC_UNEXPECTED_OTPROM_HALT Procedure: proc_extract_sbe_rc - SBE execution of OTPROM code halted at an unexpected location + PORE SBE execution of OTPROM code halted at an unexpected location - CHIP_IN_ERROR - PC - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS REG_FFDC_PROC_FIRST_OTPROM_INSTRUCTIONS - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP HIGH - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_NEVER_STARTED_SBE + RC_PROC_EXTRACT_SBE_RC_NEVER_STARTED Procedure: proc_extract_sbe_rc - Procedure was called when no error bits were set and PC is all zeros. SBE - was probably never started. + Procedure was called when no error bits were set and PC is all zeros. + PORE engine was probably never started. - CHIP_IN_ERROR - PC - REG_FFDC_PROC_CFAM_REGISTERS - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS REG_FFDC_PROC_FIRST_OTPROM_INSTRUCTIONS - CHIP_IN_ERROR + CHIP - proc_tp_collect_dbg_data,CHIP_IN_ERROR - CHIP_IN_ERROR + CHIP HIGH @@ -752,153 +369,70 @@ LOW - CHIP_IN_ERROR + CHIP - CHIP_IN_ERROR + CHIP - RC_PROC_EXTRACT_SBE_RC_NEVER_STARTED_SLW - - Procedure: proc_extract_sbe_rc - Procedure was called when no error bits were set and PC is all zeros. SLW - was probably never started. - - CHIP_IN_ERROR - PC - - REG_FFDC_PROC_SLW_REGISTERS - CHIP_IN_ERROR - - - CHIP_IN_ERROR - HIGH - - - CODE - LOW - - - CHIP_IN_ERROR - - - CHIP_IN_ERROR - - - - - RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_I2C_SBE + RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_SEEPROM Procedure: proc_extract_sbe_rc ECCB indicates correctable ECC error threshold from I2C was exceeded during SBE execution Reload/update of SEEPROM required - CHIP_IN_ERROR - I2C_ECCB_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - CHIP_IN_ERROR + CHIP LOW - RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_PNOR_SBE + RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_PNOR Procedure: proc_extract_sbe_rc ECCB indicates correctable ECC error threshold from PNOR was exceeded during SBE execution Reload/update of PNOR required - CHIP_IN_ERROR - PNOR_ECCB_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - CHIP_IN_ERROR + CHIP LOW - RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_I2C_AND_PNOR_SBE + RC_PROC_EXTRACT_SBE_RC_SOFT_ECC_ERROR_SEEPROM_AND_PNOR Procedure: proc_extract_sbe_rc ECCB indicates correctable ECC error threshold from both I2C and PNOR was exceeded during SBE execution Reload/update of SEEPROM/PNOR required - CHIP_IN_ERROR - I2C_ECCB_STATUS - PNOR_ECCB_STATUS - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - CHIP_IN_ERROR + CHIP LOW - RC_PROC_EXTRACT_SBE_RC_CODE_BUG_SBE + RC_PROC_EXTRACT_SBE_RC_CODE_BUG Procedure: proc_extract_sbe_rc - SBE reported attention, but procedure attempted to return SUCCESS + PORE SBE reported attention, but procedure attempted to return SUCCESS - CHIP_IN_ERROR - PC - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - CODE LOW - CHIP_IN_ERROR + CHIP - - RC_SBE_UNKNOWN_ERROR - - Procedure: proc_extract_sbe_rc - FAPI_SET_SBE_ERROR did not resolve SBE/SLW PC to known RC. - May be caused by platform attempting to resolve engine state with mismatched binary image. - - CHIP_IN_ERROR - - REG_FFDC_PROC_STATUS_AND_SBE_VITAL_REGISTERS - REG_FFDC_PROC_SBE_REGISTERS - REG_FFDC_PROC_MBOX_REGISTERS - CHIP_IN_ERROR - - - CHIP_IN_ERROR - LOW - - - CODE - HIGH - - - + + + diff --git a/src/usr/hwpf/makefile b/src/usr/hwpf/makefile index 7466ffba6..a8c706074 100644 --- a/src/usr/hwpf/makefile +++ b/src/usr/hwpf/makefile @@ -175,6 +175,13 @@ HWP_ERROR_XML_FILES += hwp/proc_sbe_errors/proc_sbe_trigger_winkle_errors.xml HWP_ERROR_XML_FILES += hwp/proc_sbe_errors/proc_slw_base_halt_codes.xml HWP_ERROR_XML_FILES += hwp/proc_sbe_errors/sbe_common_halt_codes.xml HWP_ERROR_XML_FILES += hwp/proc_sbe_errors/sbe_load_ring_vec_ex_errors.xml +HWP_ERROR_XML_FILES += hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.xml +HWP_ERROR_XML_FILES += hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_engine_state_errors.xml +HWP_ERROR_XML_FILES += hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_base_ffdc.xml +HWP_ERROR_XML_FILES += hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_pore_halt_ffdc.xml +HWP_ERROR_XML_FILES += hwp/proc_pba_utils_registers.xml +HWP_ERROR_XML_FILES += hwp/p8_fir_registers.xml +HWP_ERROR_XML_FILES += hwp/cen_fir_registers.xml ## these get generated into obj/genfiles/AttributeIds.H HWP_ATTR_XML_FILES += hwp/memory_attributes.xml @@ -209,7 +216,6 @@ HWP_ATTR_XML_FILES += hwp/dram_training/mem_pll_setup/memb_pll_ring_attributes.x HWP_ATTR_XML_FILES += hwp/proc_chip_ec_feature.xml HWP_ATTR_XML_FILES += hwp/proc_abus_dmi_xbus_scominit_attributes.xml HWP_ATTR_XML_FILES += hwp/runtime_attributes/memory_occ_attributes.xml -HWP_ERROR_XML_FILES += hwp/slave_sbe/proc_tp_collect_dbg_data/proc_tp_collect_dbg_data.xml #------------------------------------------------------------------------------ # PLL Ring Data files diff --git a/src/usr/pore/fapiporeve/fapiPoreVe.C b/src/usr/pore/fapiporeve/fapiPoreVe.C index 59aacde62..653c3fbee 100644 --- a/src/usr/pore/fapiporeve/fapiPoreVe.C +++ b/src/usr/pore/fapiporeve/fapiPoreVe.C @@ -23,7 +23,7 @@ /* */ /* IBM_PROLOG_END_TAG */ // -*- mode: C++; c-file-style: "linux"; -*- -// $Id: fapiPoreVe.C,v 1.35 2014/03/31 15:21:37 thi Exp $ +// $Id: fapiPoreVe.C,v 1.37 2014/07/25 15:19:10 jmcgill Exp $ // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/poreve/working/fapiporeve/fapiPoreVe.C,v $ //------------------------------------------------------------------------------ // *! (C) Copyright International Business Machines Corp. 2011 @@ -69,11 +69,22 @@ #ifdef FAPIECMD extern "C" { + #if FAPIECMD == 1 + const uint32_t MBOX_SBEVITAL_0x0005001C = 0x0005001C; + #define FAPIPOREVE_USE_PROC_EXTRACT_SBE_RC 0 + #else + #define FAPIPOREVE_USE_PROC_EXTRACT_SBE_RC 1 + #endif +#else + #define FAPIPOREVE_USE_PROC_EXTRACT_SBE_RC 1 #endif +#if FAPIPOREVE_USE_PROC_EXTRACT_SBE_RC == 1 + #include +#endif + using namespace vsbe; -const uint32_t MBOX_SBEVITAL_0x0005001C = 0x0005001C; //****************************************************************************** // fapiPoreVe function @@ -625,7 +636,7 @@ fapi::ReturnCode fapiPoreVe( uint64_t data_64; int pib_rc; ModelError me; - me = poreve->getscom(MBOX_SBEVITAL_0x0005001C, data_64, pib_rc); + me = poreve->getscom((uint32_t) MBOX_SBEVITAL_0x0005001C, data_64, pib_rc); if( me == ME_SUCCESS ) { if( pib_rc == 0 ) @@ -635,10 +646,18 @@ fapi::ReturnCode fapiPoreVe( if( haltcode != 0xF ) { FAPI_ERR( "Halt code is 0x%x (ERROR)\n", haltcode ); - uint32_t & ERROR = haltcode; - FAPI_SET_HWP_ERROR(rc, - RC_FAPIPOREVE_HALTED_WITH_ERROR); poreve->iv_pore.dumpOnce(); +#if FAPIPOREVE_USE_PROC_EXTRACT_SBE_RC == 1 + FAPI_EXEC_HWP(rc, proc_extract_sbe_rc, i_target, poreve, + (i_target.getType() == fapi::TARGET_TYPE_PROC_CHIP)?(poreve->iv_seepromMemory.iv_images->iv_image):(poreve->iv_pnorMemory.iv_images->iv_image), + SBE); +#endif + if (rc.ok()) + { + uint32_t & ERROR = haltcode; + FAPI_SET_HWP_ERROR(rc, + RC_FAPIPOREVE_HALTED_WITH_ERROR); + } } else { @@ -667,8 +686,16 @@ fapi::ReturnCode fapiPoreVe( { FAPI_ERR( "PORE is stopped due to an architected error\n"); runStatus &= ~PORE_STATUS_ERROR_HALT; - FAPI_SET_HWP_ERROR(rc, RC_FAPIPOREVE_ARCHITECTED_ERROR); poreve->iv_pore.dumpOnce(); +#if FAPIPOREVE_USE_PROC_EXTRACT_SBE_RC == 1 + FAPI_EXEC_HWP(rc, proc_extract_sbe_rc, i_target, poreve, + (i_target.getType() == fapi::TARGET_TYPE_PROC_CHIP)?(poreve->iv_seepromMemory.iv_images->iv_image):(poreve->iv_pnorMemory.iv_images->iv_image), + SBE); +#endif + if (rc.ok()) + { + FAPI_SET_HWP_ERROR(rc, RC_FAPIPOREVE_ARCHITECTED_ERROR); + } } if( runStatus & PORE_STATUS_HARDWARE_STOP ) { @@ -689,8 +716,16 @@ fapi::ReturnCode fapiPoreVe( { FAPI_ERR( "PORE is stopped due to a modeling error\n"); runStatus &= ~PORE_STATUS_MODEL_ERROR; - FAPI_SET_HWP_ERROR(rc, RC_FAPIPOREVE_MODELING_ERROR); poreve->iv_pore.dumpOnce(); +#if FAPIPOREVE_USE_PROC_EXTRACT_SBE_RC == 1 + FAPI_EXEC_HWP(rc, proc_extract_sbe_rc, i_target, poreve, + (i_target.getType() == fapi::TARGET_TYPE_PROC_CHIP)?(poreve->iv_seepromMemory.iv_images->iv_image):(poreve->iv_pnorMemory.iv_images->iv_image), + SBE); +#endif + if (rc.ok()) + { + FAPI_SET_HWP_ERROR(rc, RC_FAPIPOREVE_MODELING_ERROR); + } } if( runStatus & PORE_STATUS_DEBUG_STOP ) { @@ -703,8 +738,17 @@ fapi::ReturnCode fapiPoreVe( { FAPI_ERR( "PORE is stopped with an unknown status code:0x%X\n", runStatus); - int & STATUS = runStatus; - FAPI_SET_HWP_ERROR(rc, RC_FAPIPOREVE_UNKNOWN_STATUS_ERROR); + poreve->iv_pore.dumpOnce(); +#if FAPIPOREVE_USE_PROC_EXTRACT_SBE_RC == 1 + FAPI_EXEC_HWP(rc, proc_extract_sbe_rc, i_target, poreve, + (i_target.getType() == fapi::TARGET_TYPE_PROC_CHIP)?(poreve->iv_seepromMemory.iv_images->iv_image):(poreve->iv_pnorMemory.iv_images->iv_image), + SBE); +#endif + if (rc.ok()) + { + int & STATUS = runStatus; + FAPI_SET_HWP_ERROR(rc, RC_FAPIPOREVE_UNKNOWN_STATUS_ERROR); + } } } else { //runStatus == 0 FAPI_IMP( "PORE ran the requested number of instructions " @@ -842,6 +886,8 @@ fapi::ReturnCode fapiPoreVe( HookManager::destroy(); #endif + FAPI_INF("\nfapiPoreVe return code = 0x%08X\n", (uint32_t) rc); + return rc; } //end function @@ -855,6 +901,12 @@ This section is automatically updated by CVS when you check in this file. Be sure to create CVS comments when you commit so that they are included here. $Log: fapiPoreVe.C,v $ +Revision 1.37 2014/07/25 15:19:10 jmcgill +add ifdefs to exclude proc_extract_sbe_rc analysis for Cronus + +Revision 1.36 2014/07/23 20:34:14 jmcgill +invoke proc_extract_sbe_rc on execution errors (SW261816/SW260441) + Revision 1.35 2014/03/31 15:21:37 thi Added FFDC and callouts diff --git a/src/usr/pore/fapiporeve/makefile b/src/usr/pore/fapiporeve/makefile index e62110a4a..280cc348a 100644 --- a/src/usr/pore/fapiporeve/makefile +++ b/src/usr/pore/fapiporeve/makefile @@ -5,7 +5,9 @@ # # OpenPOWER HostBoot Project # -# COPYRIGHT International Business Machines Corp. 2011,2014 +# Contributors Listed Below - COPYRIGHT 2012,2014 +# [+] International Business Machines Corp. +# # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -33,6 +35,8 @@ EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/hwp EXTRAINCDIR += ${ROOTPATH}/src/usr/pore/poreve/porevesrc EXTRAINCDIR += ${ROOTPATH}/src/usr/pore/poreve/pore_model EXTRAINCDIR += ${ROOTPATH}/src/usr/pore/poreve/model +EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/ +EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/include/ OBJS += fapiPoreVe.o OBJS += fapiPoreVeArg.o -- cgit v1.2.1