diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2015-04-14 14:09:50 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-05-01 16:26:19 -0500 |
commit | c646754e720b5cd21534425ca90bb414a4a3ff12 (patch) | |
tree | 25f3bb1076146a439bff7bfb69f336d7216f85e3 /src/usr/hwpf | |
parent | b6e759cef2deed503122ae7d167596edb61f798e (diff) | |
download | talos-hostboot-c646754e720b5cd21534425ca90bb414a4a3ff12.tar.gz talos-hostboot-c646754e720b5cd21534425ca90bb414a4a3ff12.zip |
Add callout for PCI clocks for specific SBE errors
Updates to HWP to callout PCI clocks
Changes to invoker logic to translate callout into
a deconfig+gard
Change-Id: Ifa4e7a46223348d0e29559c25ac814d4cb008e4b
CQ: SW285387
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/17100
Reviewed-by: Brian Silver <bsilver@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Tested-by: Jenkins Server
Diffstat (limited to 'src/usr/hwpf')
4 files changed, 69 insertions, 24 deletions
diff --git a/src/usr/hwpf/fapi/fapiParseErrorInfo.pl b/src/usr/hwpf/fapi/fapiParseErrorInfo.pl index 28d1716d1..3e32f51e8 100755 --- a/src/usr/hwpf/fapi/fapiParseErrorInfo.pl +++ b/src/usr/hwpf/fapi/fapiParseErrorInfo.pl @@ -562,24 +562,11 @@ foreach my $argnum (1 .. $#ARGV) exit(1); } - # Check that those HW callouts that need reference targets have them - if (($callout->{hw}->{hwid} eq "TOD_CLOCK") || - ($callout->{hw}->{hwid} eq "MEM_REF_CLOCK") || - ($callout->{hw}->{hwid} eq "PROC_REF_CLOCK") || - ($callout->{hw}->{hwid} eq "PCI_REF_CLOCK") || - ($callout->{hw}->{hwid} eq "FLASH_CONTROLLER_PART") || - ($callout->{hw}->{hwid} eq "PNOR_PART") || - ($callout->{hw}->{hwid} eq "SBE_SEEPROM_PART") || - ($callout->{hw}->{hwid} eq "VPD_PART") || - ($callout->{hw}->{hwid} eq "LPC_SLAVE_PART") || - ($callout->{hw}->{hwid} eq "GPIO_EXPANDER_PART") || - ($callout->{hw}->{hwid} eq "SPIVID_SLAVE_PART")) + # Check that there is a reference target + if (! exists $callout->{hw}->{refTarget}) { - if (! exists $callout->{hw}->{refTarget}) - { - print ("fapiParseErrorInfo.pl ERROR in $err->{rc}. Callout missing refTarget\n"); - exit(1); - } + print ("fapiParseErrorInfo.pl ERROR in $err->{rc}. Callout missing refTarget\n"); + exit(1); } # Add an EI entry to eiEntryStr @@ -744,7 +731,8 @@ foreach my $argnum (1 .. $#ARGV) $cdgChildHash{$parent}{$childType}{childNumber} = $childNum; } - } + } + if ($elementsFound == 0) { print ("fapiParseErrorInfo.pl ERROR in $err->{rc}. Deconfigure incomplete\n"); 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 d701c08f7..97969ec17 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 @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2014 */ +/* Contributors Listed Below - COPYRIGHT 2012,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -28,7 +28,6 @@ // *| // *! (C) Copyright International Business Machines Corp. 2012 // *! All Rights Reserved -- Property of IBM -// *! *** *** // *| // *! TITLE : proc_extract_sbe_rc.C // *! DESCRIPTION : Create return code for PORE (SBE/SLW) error @@ -329,6 +328,14 @@ fapi::ReturnCode proc_extract_sbe_rc(const fapi::Target & i_target, FAPI_INF("proc_extract_sbe_rc: Reconfig loop should be attempted"); FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_ENGINE_RETRY); } + // SW285387 + else if (is_sbe && + (scom_address == (uint32_t) PCIE_OPCG_CNTL0_0x09030002) && + (pore_state.vital_state.getHalfWord(1) == 0x2100)) + { + FAPI_INF("proc_extract_sbe_rc: PCI OPCG SCOM failure encountered"); + FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_PCI_CLOCK_ERROR); + } else { FAPI_SET_HWP_ERROR(rc, RC_PROC_EXTRACT_SBE_RC_SCOM_ERROR); @@ -457,16 +464,19 @@ fapi::ReturnCode proc_extract_sbe_rc(const fapi::Target & i_target, 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 + case (0x400fc): + case (0x40118): + case (0x40124): 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): + case (0x401cc): 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): + case (0x401f8): 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; 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 28a449bae..e318f639b 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 @@ -5,7 +5,7 @@ <!-- --> <!-- OpenPOWER HostBoot Project --> <!-- --> -<!-- Contributors Listed Below - COPYRIGHT 2012,2014 --> +<!-- Contributors Listed Below - COPYRIGHT 2012,2015 --> <!-- [+] International Business Machines Corp. --> <!-- --> <!-- --> @@ -127,6 +127,39 @@ </hwpError> <!-- *********************************************************************** --> <hwpError> + <rc>RC_PROC_EXTRACT_SBE_RC_PCI_CLOCK_ERROR</rc> + <description> + Procedure: proc_extract_sbe_rc + First SCOM into PCIe chiplet from SBE failed + Trigger callout for PCI reference clock + </description> + <ffdc>SCOM_ADDRESS</ffdc> + <ffdc>PIB_ERROR_CODE</ffdc> + <ffdc>PIB_DATA_READ_PARITY_ERROR</ffdc> + <callout> + <hw> + <hwid>PCI_REF_CLOCK</hwid> + <refTarget>CHIP</refTarget> + </hw> + <priority>HIGH</priority> + </callout> + <!-- No support for deconfig/gard yet, must be handled at PLAT layer + <deconfigure> + <hw> + <hwid>PCI_REF_CLOCK</hwid> + <refTarget>CHIP</refTarget> + </hw> + </deconfigure> + <gard> + <hw> + <hwid>PCI_REF_CLOCK</hwid> + <refTarget>CHIP</refTarget> + </hw> + </gard> + --> + </hwpError> + <!-- *********************************************************************** --> + <hwpError> <rc>RC_PROC_EXTRACT_SBE_RC_SCOM_ERROR</rc> <description> Procedure: proc_extract_sbe_rc diff --git a/src/usr/hwpf/plat/fapiPlatHwpInvoker.C b/src/usr/hwpf/plat/fapiPlatHwpInvoker.C index 952f44982..27c8e54ff 100644 --- a/src/usr/hwpf/plat/fapiPlatHwpInvoker.C +++ b/src/usr/hwpf/plat/fapiPlatHwpInvoker.C @@ -311,7 +311,21 @@ void processEIHwCallouts(const ErrorInfo & i_errInfo, FAPI_ERR("processEIHwCallouts: Adding clock-callout" " (clock:%d, pri:%d)", l_clock, l_priority); - io_pError->addClockCallout(l_pRefTarget, l_clock, l_priority); + + //@fixme-RTC:127069-add native support to deconfig/gard clocks + // Force PCI clocks to be deconfigured and garded + if( l_hw == HwCallouts::PCI_REF_CLOCK ) + { + io_pError->addClockCallout(l_pRefTarget, + l_clock, + l_priority, + HWAS::DECONFIG, + HWAS::GARD_Predictive); + } + else + { + io_pError->addClockCallout(l_pRefTarget, l_clock, l_priority); + } } else if ( (l_hw == HwCallouts::FLASH_CONTROLLER_PART) || (l_hw == HwCallouts::PNOR_PART) || |