diff options
Diffstat (limited to 'src/usr/diag/attn/ipl/test/attnfakeprd.C')
-rw-r--r-- | src/usr/diag/attn/ipl/test/attnfakeprd.C | 68 |
1 files changed, 65 insertions, 3 deletions
diff --git a/src/usr/diag/attn/ipl/test/attnfakeprd.C b/src/usr/diag/attn/ipl/test/attnfakeprd.C index 0f4bd9a3d..5c9bd6340 100644 --- a/src/usr/diag/attn/ipl/test/attnfakeprd.C +++ b/src/usr/diag/attn/ipl/test/attnfakeprd.C @@ -1,11 +1,11 @@ /* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ -/* $Source: src/usr/diag/attn/hostboot/test/attnfakeprd.C $ */ +/* $Source: src/usr/diag/attn/ipl/test/attnfakeprd.C $ */ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014 */ +/* Contributors Listed Below - COPYRIGHT 2014,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -32,6 +32,7 @@ #include "attninject.H" #include "../../common/attnops.H" #include "../../common/attnlist.H" +#include "../../common/attntrace.H" #include <sys/time.h> using namespace PRDF; @@ -73,7 +74,68 @@ struct Clear errlHndl_t FakePrd::callPrd(const AttentionList & i_attentions) { - return i_attentions.forEach(Clear(*iv_injectSink)).err; + errlHndl_t l_elog = i_attentions.forEach(Clear(*iv_injectSink)).err; + + AttnList l_attnList; + i_attentions.getAttnList(l_attnList); + + // ----------------------------------------------------- + // asdf bjs @TODO: RTC:151004 (this is FAKE code only) + // If you do the EC/MODEL check, it crashes in CXX testcase. + // Kind of thinking some library missing that is needed when + // adding these calls, For now, I will just leave them out + // and we could probably scrap this test now that it runs + // successfully (see attntestproc.H) + // (Maybe add to 'fake target service' for these ATTRs) + // ----------------------------------------------------- + // For the initial NIMBUS chip, there is a HW issue + // which requires us to clear the "Combined Global + // interrupt register" on recoverable errors. + // This also affects Checkstop/Special Attns, but + // the FSP handles those and already clears the reg. + // The issue does not apply to host/unit cs attns. +// uint8_t l_ecLevel = 0; + AttnList::iterator l_attnIter = l_attnList.begin(); + + // Shouldn't be mixing NIMBUS with CUMULUS,etc... + // so probably don't need to repeat this call per chip. +// bool l_isNimbus = ( (*l_attnIter).targetHndl-> +// getAttr<ATTR_MODEL>() == MODEL_NIMBUS ); + + // Iterate thru all chips in case PRD handled + // a chip other than the first one. + while(l_attnIter != l_attnList.end()) + { +// l_ecLevel = (*l_attnIter).targetHndl->getAttr<ATTR_EC>(); + + + if ( (RECOVERABLE == (*l_attnIter).attnType) +// && (true == l_isNimbus) && (l_ecLevel < 0x11) + ) + { + errlHndl_t l_scomErr = NULL; + uint64_t l_clrAllBits = 0; + + l_scomErr = putScom( (*l_attnIter).targetHndl, + PIB_INTR_TYPE_REG, + l_clrAllBits + ); + + if (NULL != l_scomErr) + { + ATTN_ERR("Clear PibIntrReg failed, HUID:0X%08X", + get_huid( (*l_attnIter).targetHndl) ); + errlCommit(l_scomErr, ATTN_COMP_ID); + } // failed to clear PIB intr reg + + } // if recoverable attn + + ++l_attnIter; + + } // end while looping thru attn list + + + return l_elog; } FakePrd::FakePrd(InjectSink & i_injectSink) : |