diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2016-04-29 14:44:49 -0500 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2016-05-02 16:00:49 -0400 |
commit | 321e7344c6b85a0ad5e58e7a7a92848df900efd1 (patch) | |
tree | f861874a931ded913eb9fe06ba3f9ef96cc2eefc /src | |
parent | 3475e82c44ae47a09777068867e18ca92b3da09b (diff) | |
download | talos-hostboot-321e7344c6b85a0ad5e58e7a7a92848df900efd1.tar.gz talos-hostboot-321e7344c6b85a0ad5e58e7a7a92848df900efd1.zip |
Add hardware callout for b001 errors in indirect scoms
There have been examples of bad hardware causing indirect scoms
to fail with a 'resource occupied' (b001) so modifying the code
to point to the part in that case.
Change-Id: I45d88e80514b680aa50a27800b89f3343cee6377
CQ: SW306414
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/23885
Tested-by: Jenkins Server
Tested-by: FSP CI Jenkins
Reviewed-by: Thi N. Tran <thi@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/usr/scom/scom.C | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/src/usr/scom/scom.C b/src/usr/scom/scom.C index 619ff8c20..3ec60a46c 100644 --- a/src/usr/scom/scom.C +++ b/src/usr/scom/scom.C @@ -280,7 +280,15 @@ errlHndl_t checkIndirectAndDoScom(DeviceFW::OperationType i_opType, // or we saw an error, then we're done if (scomout.done || scomout.piberr) { - break; + // we should never see this error code so we are most + // likely going to fail, but since the hardware team + // cannot explain why we get this we're going to + // poll for awhile just in case it could work with + // a retry + if( scomout.piberr != PIB::PIB_RESOURCE_OCCUPIED ) + { + break; + } } nanosleep( 0, 10000 ); //sleep for 10,000 ns @@ -317,11 +325,23 @@ errlHndl_t checkIndirectAndDoScom(DeviceFW::OperationType i_opType, i_addr, scomout.data64); - //Add the callouts for the specific PCB/PIB error - PIB::addFruCallouts( i_target, - scomout.piberr, - i_addr, - l_err ); + // we should never hit this so if we do we are going + // to blame hardware + if( scomout.piberr == PIB::PIB_RESOURCE_OCCUPIED ) + { + l_err->addHwCallout( i_target, + HWAS::SRCI_PRIORITY_HIGH, + HWAS::NO_DECONFIG, + HWAS::GARD_NULL ); + } + else + { + //Add the callouts for the specific PCB/PIB error + PIB::addFruCallouts( i_target, + scomout.piberr, + i_addr, + l_err ); + } //Add this target to the FFDC ERRORLOG::ErrlUserDetailsTarget(i_target,"IndSCOM Target") |