diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2014-01-24 15:47:52 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-02-14 12:32:47 -0600 |
commit | 5850220077f29041920e83de66ec458dac9c82a7 (patch) | |
tree | 5b89744aa9e0f7c07ba9f2c341a66d4954b04f8d /src/usr/scan | |
parent | 54fe1fd5efa72aa626419e56e89d68e83480a0db (diff) | |
download | talos-hostboot-5850220077f29041920e83de66ec458dac9c82a7.tar.gz talos-hostboot-5850220077f29041920e83de66ec458dac9c82a7.zip |
Finalize callouts for scan and scom drivers
Change-Id: Iaa603e8464d4e342fa256560da3c9d529aae8be4
RTC: 47014
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8340
Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com>
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/scan')
-rw-r--r-- | src/usr/scan/scandd.C | 123 |
1 files changed, 90 insertions, 33 deletions
diff --git a/src/usr/scan/scandd.C b/src/usr/scan/scandd.C index 4b5d891b8..871a9c017 100644 --- a/src/usr/scan/scandd.C +++ b/src/usr/scan/scandd.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2013 */ +/* COPYRIGHT International Business Machines Corp. 2011,2014 */ /* */ /* p1 */ /* */ @@ -41,6 +41,7 @@ #include <scan/scan_reasoncodes.H> #include <scan/scanif.H> #include "scandd.H" +#include <errl/errludtarget.H> // ---------------------------------------------- // Globals @@ -50,10 +51,10 @@ // Trace definitions // ---------------------------------------------- trace_desc_t* g_trac_scandd = NULL; -TRAC_INIT( & g_trac_scandd, "SCANDD", KILOBYTE ); +TRAC_INIT( & g_trac_scandd, SCANDD_TRACE_BUF, KILOBYTE ); trace_desc_t* g_trac_scanddr = NULL; -TRAC_INIT( & g_trac_scanddr, "SCANDDR", KILOBYTE ); +TRAC_INIT( & g_trac_scanddr, SCANDD_RTRACE_BUF, KILOBYTE ); // ---------------------------------------------- @@ -112,9 +113,13 @@ errlHndl_t scanPerformOp( DeviceFW::OperationType i_opType, SCAN::MOD_SCANDD_DDOP, SCAN::RC_INVALID_LENGTH, i_ring, - i_ringlength); + i_ringlength, + true/*SW Error*/); + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); - l_err->collectTrace("SCANDD",1024); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } @@ -135,9 +140,13 @@ errlHndl_t scanPerformOp( DeviceFW::OperationType i_opType, SCAN::MOD_SCANDD_DDOP, SCAN::RC_INVALID_RING_ADDRESS, i_ring, - TARGETING::get_huid(i_target)); + TARGETING::get_huid(i_target), + true/*SW Error*/); + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); - l_err->collectTrace("SCANDD",1024); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } @@ -158,9 +167,13 @@ errlHndl_t scanPerformOp( DeviceFW::OperationType i_opType, SCAN::MOD_SCANDD_DDOP, SCAN::RC_INVALID_BUF_SIZE, io_buflen, - i_ringlength); + i_ringlength, + true/*SW Error*/); + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); - l_err->collectTrace("SCANDD",1024); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } @@ -196,8 +209,12 @@ errlHndl_t scanPerformOp( DeviceFW::OperationType i_opType, SCAN::MOD_SCANDD_DDOP, SCAN::RC_INVALID_OPERATION, i_ring, - TO_UINT64(i_opType)); - l_err->collectTrace("SCANDD",1024); + TO_UINT64(i_opType), + true/*SW Error*/); + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } @@ -288,8 +305,10 @@ errlHndl_t scanDoScan( DeviceFW::OperationType i_opType, { TRACFCOMP( g_trac_scandd, ERR_MRK "SCAN::scanDoScan> SCOM Write to scan select register failed. i_ring=%lX, scanTypeData=%lX,scanTypeAddr=%lX, target =%.8X", i_ring, l_scanTypeData,l_scanTypeAddr, TARGETING::get_huid(i_target) ); - - // TODO: Add usrDetails + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } @@ -337,8 +356,10 @@ errlHndl_t scanDoScan( DeviceFW::OperationType i_opType, if(l_err) { TRACFCOMP( g_trac_scandd, ERR_MRK"SCAN::scanDoScan> ERROR i_ring=%.8X, target=%.8X , scanTypeData=%.8X, l_HeaderDataAddr=%.8X", i_ring, TARGETING::get_huid(i_target), l_buffer[0], l_headerDataAddr); - - // TODO: Add usrDetails + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } } @@ -360,8 +381,10 @@ errlHndl_t scanDoScan( DeviceFW::OperationType i_opType, if(l_err) { TRACFCOMP( g_trac_scandd, ERR_MRK"SCAN::scanDoScan> ERROR i_ring=%.8X, target=%.8X , scanTypeData=%.8X, l_HeaderDataAddr=%.8X", i_ring, TARGETING::get_huid(i_target), l_buffer[0], l_headerDataAddr); - - // TODO: Add usrDetails + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } @@ -453,8 +476,10 @@ errlHndl_t scanDoScan( DeviceFW::OperationType i_opType, if(l_err) { TRACFCOMP( g_trac_scandd,ERR_MRK "SCAN::scanDoScan: Device OP error> i_ring=%.8X, target=%.8X , scanTypeData=%.8X, i_flag=%.8X,", i_ring, TARGETING::get_huid(i_target), l_scanDataAddr, i_flag ); - - // TODO: Add user details + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } @@ -534,8 +559,10 @@ errlHndl_t scanDoScan( DeviceFW::OperationType i_opType, if(l_err) { TRACFCOMP( g_trac_scandd, ERR_MRK "SCAN::scanDoScan: OP and shift of < 32bits i_ring=%.8X, scanTypeDataAddr=%.8X, l_lastDataBits=%.8X, target=%.8X", i_ring, l_scanDataAddr, l_lastDataBits, TARGETING::get_huid(i_target) ); - - // TODO: Add user details + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } @@ -615,8 +642,7 @@ errlHndl_t scanDoScan( DeviceFW::OperationType i_opType, if(l_err) { TRACFCOMP( g_trac_scandd,ERR_MRK "SCAN::scanDoScan> ERROR i_ring=%.8X, HeaderDataAddr=%.8X, i_flag=%.8X, target=%.8X", i_ring, l_headerDataAddr, i_flag, TARGETING::get_huid(i_target) ); - - // TODO: Add user details + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } @@ -626,9 +652,8 @@ errlHndl_t scanDoScan( DeviceFW::OperationType i_opType, // If the header data did not match.. if ((l_buffer[0] != HEADER_CHECK_DATA)) { - TRACDCOMP( g_trac_scandd,"SCAN::scanDoScan> Header Check Failed expect deadbeef.. i_ring=%.8X, i_opType=%.8X , ring data=%.8X, i_flag=%.8X,", i_ring, i_opType, l_buffer[0], i_flag ); - - TRACFCOMP( g_trac_scandd,"SCAN: HEADER DATA FAILED!! %.8x = %.8x %.8x",l_headerDataAddr , l_buffer[0], l_buffer[1]); + TRACFCOMP( g_trac_scandd, "SCAN::scanDoScan> Header Check Failed on %.8X: i_ring=%.8X, i_opType=%.8X, i_flag=%.8X,", TARGETING::get_huid(i_target), i_ring, i_opType, i_flag ); + TRACFCOMP( g_trac_scandd, "%.8X = %.8X_%.8X (expected 0xDEADBEEF)", l_headerDataAddr , l_buffer[0], l_buffer[1] ); /*@ * @errortype @@ -636,14 +661,46 @@ errlHndl_t scanDoScan( DeviceFW::OperationType i_opType, * @reasoncode SCAN::RC_HEADER_DATA_MISMATCH * @userdata1 SCAN Ring Address * @userdata2 Operation Type (i_opType) - * @devdesc ScanDD::scanDoScan> Got a data mismatch when reading back the header + * @devdesc ScanDD::scanDoScan> Got a data mismatch + * when reading back the header */ - l_err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE, - SCAN::MOD_SCANDD_DOSCAN, - SCAN::RC_HEADER_DATA_MISMATCH, - i_ring, - TO_UINT64(i_opType)); - l_err->collectTrace("SCANDD",1024); + l_err = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, + SCAN::MOD_SCANDD_DOSCAN, + SCAN::RC_HEADER_DATA_MISMATCH, + i_ring, + TO_UINT64(i_opType) ); + //Most like cause (based on experience) is some kind + // of a clock issue + TARGETING::TYPE type = + i_target->getAttr<TARGETING::ATTR_TYPE>(); + if( type == TARGETING::TYPE_PROC) + { + l_err->addClockCallout(i_target, + HWAS::OSCREFCLK_TYPE, + HWAS::SRCI_PRIORITY_HIGH); + } + else if( type == TARGETING::TYPE_MEMBUF ) + { + l_err->addClockCallout(i_target, + HWAS::MEMCLK_TYPE, + HWAS::SRCI_PRIORITY_HIGH); + } + else // for anything else, just blame the refclock + { + l_err->addClockCallout(i_target, + HWAS::OSCREFCLK_TYPE, + HWAS::SRCI_PRIORITY_HIGH); + } + //Could also be a busted chip + l_err->addHwCallout( i_target, + HWAS::SRCI_PRIORITY_LOW, + HWAS::DECONFIG, //allows us to continue + HWAS::GARD_NULL ); + //Add this target to the FFDC + ERRORLOG::ErrlUserDetailsTarget(i_target,"Scan Target") + .addToLog(l_err); + l_err->collectTrace(SCANDD_TRACE_BUF,1024); break; } |