summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2016-04-29 14:44:49 -0500
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2016-05-02 16:00:49 -0400
commit321e7344c6b85a0ad5e58e7a7a92848df900efd1 (patch)
treef861874a931ded913eb9fe06ba3f9ef96cc2eefc /src
parent3475e82c44ae47a09777068867e18ca92b3da09b (diff)
downloadtalos-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.C32
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")
OpenPOWER on IntegriCloud