summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2015-04-14 14:09:50 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-05-01 16:26:19 -0500
commitc646754e720b5cd21534425ca90bb414a4a3ff12 (patch)
tree25f3bb1076146a439bff7bfb69f336d7216f85e3 /src/usr
parentb6e759cef2deed503122ae7d167596edb61f798e (diff)
downloadtalos-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')
-rwxr-xr-xsrc/usr/hwpf/fapi/fapiParseErrorInfo.pl24
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc.C18
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/proc_check_slave_sbe_seeprom_complete/proc_extract_sbe_rc_errors.xml35
-rw-r--r--src/usr/hwpf/plat/fapiPlatHwpInvoker.C16
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) ||
OpenPOWER on IntegriCloud