From a1e236a422182e81f7877de85f3cb46dff6fc0cd Mon Sep 17 00:00:00 2001 From: Mike Baiocchi Date: Fri, 18 May 2018 15:48:24 -0500 Subject: Improve FFDC for new Node Comm Device Driver This commit adds a new custom Node Comm Device Driver error log user details section and its parser code. It also adds a function to add the target and important HW registers to an error log. Change-Id: I11893af06b7a097b43106117d648e9a431c4f3ea RTC:191008 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59079 Reviewed-by: ILYA SMIRNOV Reviewed-by: Nicholas E. Bofferding Tested-by: Jenkins Server Tested-by: FSP CI Jenkins Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Reviewed-by: William G. Hoffa --- src/usr/secureboot/node_comm/node_comm.C | 70 +++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) (limited to 'src/usr/secureboot/node_comm/node_comm.C') diff --git a/src/usr/secureboot/node_comm/node_comm.C b/src/usr/secureboot/node_comm/node_comm.C index b47f78273..cee5da939 100644 --- a/src/usr/secureboot/node_comm/node_comm.C +++ b/src/usr/secureboot/node_comm/node_comm.C @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -46,7 +47,6 @@ #include "node_comm.H" - using namespace TARGETING; namespace SECUREBOOT @@ -162,6 +162,9 @@ errlHndl_t nodeCommMapAttn(TARGETING::Target* i_pProc, HWAS::NO_DECONFIG, HWAS::GARD_NULL ); + // Collect FFDC + getNodeCommFFDC(i_mode, i_pProc, err); + err->collectTrace(SECURE_COMP_NAME); err->collectTrace(NODECOMM_TRACE_NAME); @@ -194,6 +197,71 @@ errlHndl_t nodeCommMapAttn(TARGETING::Target* i_pProc, } // end of nodeCommMapAttn + +/** + * @brief Add FFDC for the target to an error log + */ +void getNodeCommFFDC( node_comm_modes_t i_mode, + TARGETING::Target* i_pProc, + errlHndl_t &io_log) +{ + TRACFCOMP(g_trac_nc,ENTER_MRK + "getNodeCommFFDC: tgt=0x%X, mode=%s, err_plid=0x%X", + get_huid(i_pProc), + (i_mode == NCDD_MODE_ABUS) + ? NCDD_ABUS_STRING : NCDD_XBUS_STRING, + ERRL_GETPLID_SAFE(io_log)); + + do + { + if (io_log == nullptr) + { + TRACFCOMP(g_trac_nc,INFO_MRK"getNodeCommFFDC: io_log==nullptr, so " + "no FFDC has been collected for tgt=0x%X, mode=%s", + get_huid(i_pProc), + (i_mode == NCDD_MODE_ABUS) + ? NCDD_ABUS_STRING : NCDD_XBUS_STRING); + break; + } + + // Add Target to log + ERRORLOG::ErrlUserDetailsTarget(i_pProc,"Proc Target").addToLog(io_log); + + // Add HW regs + ERRORLOG::ErrlUserDetailsLogRegister ffdc(i_pProc); + + // FIR/Control/Status/Data Registers + ffdc.addData(DEVICE_SCOM_ADDRESS(getLinkMboxRegAddr(NCDD_REG_FIR,i_mode))); + ffdc.addData(DEVICE_SCOM_ADDRESS(getLinkMboxRegAddr(NCDD_REG_CTRL,i_mode))); + ffdc.addData(DEVICE_SCOM_ADDRESS(getLinkMboxRegAddr(NCDD_REG_DATA,i_mode))); + + // Loop Through All of the Mailbox Registers Where the Data Could End Up + uint64_t l_reg = 0; + const auto max_linkId = (i_mode==NCDD_MODE_ABUS) + ? NCDD_MAX_ABUS_LINK_ID + : NCDD_MAX_XBUS_LINK_ID; + + for (size_t linkId=0; linkId <= max_linkId ; ++linkId) + { + for (size_t mboxId=0; mboxId <= NCDD_MAX_MBOX_ID; ++mboxId) + { + l_reg = getLinkMboxReg(linkId, mboxId); + ffdc.addData(DEVICE_SCOM_ADDRESS(getLinkMboxRegAddr(l_reg,i_mode))); + } + } + + ffdc.addToLog(io_log); + + + } while( 0 ); + + TRACFCOMP(g_trac_nc,EXIT_MRK"getNodeCommFFDC"); + + return; + +} // end of getNodeCommFFDC + + } // End NODECOMM namespace } // End SECUREBOOT namespace -- cgit v1.2.3