diff options
Diffstat (limited to 'src/usr/xscom')
-rw-r--r-- | src/usr/xscom/piberror.C | 6 | ||||
-rw-r--r-- | src/usr/xscom/runtime/makefile | 4 | ||||
-rw-r--r-- | src/usr/xscom/xscom.C | 29 |
3 files changed, 13 insertions, 26 deletions
diff --git a/src/usr/xscom/piberror.C b/src/usr/xscom/piberror.C index 0ffe42a2b..498d36991 100644 --- a/src/usr/xscom/piberror.C +++ b/src/usr/xscom/piberror.C @@ -1,4 +1,3 @@ - /* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ @@ -6,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013 */ +/* COPYRIGHT International Business Machines Corp. 2013,2014 */ /* */ /* p1 */ /* */ @@ -21,6 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ + /** * @file piberror.C * @@ -59,7 +59,7 @@ void addFruCallouts(TARGETING::Target* i_target, HWAS::SRCI_PRIORITY_HIGH); io_errl->addHwCallout( i_target, HWAS::SRCI_PRIORITY_LOW, - HWAS::NO_DECONFIG, + HWAS::DECONFIG, HWAS::GARD_NULL ); break; case PIB::PIB_PARTIAL_GOOD: diff --git a/src/usr/xscom/runtime/makefile b/src/usr/xscom/runtime/makefile index b49e707b5..a534fc13b 100644 --- a/src/usr/xscom/runtime/makefile +++ b/src/usr/xscom/runtime/makefile @@ -5,7 +5,7 @@ # # IBM CONFIDENTIAL # -# COPYRIGHT International Business Machines Corp. 2013 +# COPYRIGHT International Business Machines Corp. 2013,2014 # # p1 # @@ -24,7 +24,7 @@ HOSTBOOT_RUNTIME = 1 ROOTPATH = ../../../.. MODULE = xscom_rt -OBJS = rt_xscom.o +OBJS = rt_xscom.o piberror.o SUBDIRS = test.d diff --git a/src/usr/xscom/xscom.C b/src/usr/xscom/xscom.C index 671702775..9b62d6f78 100644 --- a/src/usr/xscom/xscom.C +++ b/src/usr/xscom/xscom.C @@ -108,26 +108,6 @@ HMER waitForHMERStatus() /** - * @brief Internal routine that checks to see if retry is - * possible on an XSCOM error - * - * @return true if retry is possible; false otherwise. - */ -bool XSComRetry(const HMER i_hmer) -{ - bool l_retry = false; - switch (i_hmer.mXSComStatus) - { - case PIB::PIB_RESOURCE_OCCUPIED: - l_retry = true; - break; - default: - break; - } - return l_retry; -} - -/** * @brief Internal routine that verifies the validity of input parameters * for an XSCOM access. * @@ -494,8 +474,15 @@ errlHndl_t xScomDoOp(DeviceFW::OperationType i_opType, { // print a trace message.. for debug purposes // incase we are stuck in a retry loop. - TRACFCOMP(g_trac_xscom,"xscomPerformOp - RESOUCE OCCUPIED LOOP Cntr = %d: OpType 0x%.16llX, Address 0x%llX, MMIO Address 0x%llX", l_retryCtr, static_cast<uint64_t>(i_opType),i_xscomAddr,static_cast<uint64_t>(l_mmioAddr)); + TRACFCOMP(g_trac_xscom,"xscomPerformOp - RESOURCE OCCUPIED LOOP Cntr = %d: OpType 0x%.16llX, Address 0x%llX, MMIO Address 0x%llX, HMER=%.16X", l_retryCtr, static_cast<uint64_t>(i_opType), i_xscomAddr, static_cast<uint64_t>(l_mmioAddr), io_hmer.mRegister ); + // we don't want to hang forever so break out after + // an obscene amount of time + if( l_retryCtr > 500000 ) + { + TRACFCOMP( g_trac_xscom, "Giving up, we're still locked..." ); + break; + } } } while (io_hmer.mXSComStatus == PIB::PIB_RESOURCE_OCCUPIED); |