diff options
author | Mike Baiocchi <mbaiocch@us.ibm.com> | 2018-05-18 15:48:24 -0500 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2018-05-24 09:33:07 -0400 |
commit | a1e236a422182e81f7877de85f3cb46dff6fc0cd (patch) | |
tree | 93f5eff5e3a8df10c7ad3cdb137f2afd320f7e43 /src/usr/secureboot/node_comm | |
parent | 3ad299af08fd1ed6a14c72a9d3fe4b89a5af5eec (diff) | |
download | talos-hostboot-a1e236a422182e81f7877de85f3cb46dff6fc0cd.tar.gz talos-hostboot-a1e236a422182e81f7877de85f3cb46dff6fc0cd.zip |
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 <ismirno@us.ibm.com>
Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/secureboot/node_comm')
-rw-r--r-- | src/usr/secureboot/node_comm/node_comm.C | 70 | ||||
-rw-r--r-- | src/usr/secureboot/node_comm/node_comm.H | 17 | ||||
-rw-r--r-- | src/usr/secureboot/node_comm/node_comm_dd.C | 40 | ||||
-rw-r--r-- | src/usr/secureboot/node_comm/node_comm_dd.H | 9 | ||||
-rw-r--r-- | src/usr/secureboot/node_comm/node_comm_test.C | 5 |
5 files changed, 131 insertions, 10 deletions
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 <errl/errlentry.H> #include <errl/errlmanager.H> #include <errl/errludtarget.H> +#include <errl/errludlogregister.H> #include <targeting/common/targetservice.H> #include <devicefw/userif.H> #include <devicefw/driverif.H> @@ -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 diff --git a/src/usr/secureboot/node_comm/node_comm.H b/src/usr/secureboot/node_comm/node_comm.H index 60a6dcae7..4e8cc97a6 100644 --- a/src/usr/secureboot/node_comm/node_comm.H +++ b/src/usr/secureboot/node_comm/node_comm.H @@ -72,8 +72,8 @@ enum node_comm_registers_t : uint64_t NCDD_REG_CTRL = 0x501342E, NCDD_REG_DATA = 0x501342F, - //MailBox Registers: - NCDD_REG_LINK_MBOX_00 = 0x5013430, //(secure) + //MailBox Registers: + NCDD_REG_LINK_MBOX_00 = 0x5013430, //(secure) /* These registers are calculated by getLinkMboxReg() below NCDD_REG_LINK_MBOX_01 = 0x5013431, @@ -154,6 +154,19 @@ errlHndl_t nodeCommMapAttn(TARGETING::Target* i_pProc, uint64_t & o_linkId, uint64_t & o_mboxId); +/** + * @brief Add FFDC for the target to an error log + * + * @param[in] i_mode Specifies XBUS or ABUS mode + * @param[in] i_pProc Proc Chip Target used to collect info from + * @param[in,out] io_log Error Log to add FFDC to + * + * @return void + */ +void getNodeCommFFDC(node_comm_modes_t i_mode, + TARGETING::Target* i_pProc, + errlHndl_t &io_log); + } // end NODECOMM namespace } // end SECUREBOOT namespace diff --git a/src/usr/secureboot/node_comm/node_comm_dd.C b/src/usr/secureboot/node_comm/node_comm_dd.C index 5029068fc..f2eac3572 100644 --- a/src/usr/secureboot/node_comm/node_comm_dd.C +++ b/src/usr/secureboot/node_comm/node_comm_dd.C @@ -42,8 +42,10 @@ #include <devicefw/userif.H> #include <devicefw/driverif.H> #include <secureboot/secure_reasoncodes.H> + #include "node_comm_dd.H" #include "node_comm.H" +#include "../common/errlud_secure.H" // ---------------------------------------------- // Globals @@ -197,7 +199,19 @@ errlHndl_t nodeCommPerformOp( DeviceFW::OperationType i_opType, err->collectTrace(SECURE_COMP_NAME); err->collectTrace(NODECOMM_TRACE_NAME); - // @TODO RTC:191008 Add FFDC - call to new UserDetails Section + UdNodeCommInfo(i_opType, + io_buflen, + i_accessType, + node_comm_args) + .addToLog(err); + + if (err->reasonCode() != RC_NCDD_INVALID_ARGS) + { + // Collect FFDC - Target and Registers + getNodeCommFFDC(node_comm_args.mode, + node_comm_args.tgt, + err); + } } TRACFCOMP (g_trac_nc, EXIT_MRK"nodeCommPerformOp: %s: %s: " @@ -531,6 +545,30 @@ errlHndl_t ncddWaitForCmdComp (node_comm_args_t & i_args) } // end ncddWaitForCmdComp + +void ncddHandleError( errlHndl_t & io_err, + node_comm_args_t & i_args ) +{ + TRACFCOMP( g_trac_nc,ENTER_MRK"ncddHandleError: " + TRACE_ERR_FMT, + TRACE_ERR_ARGS(io_err)); + + do + { +// @TODO RTC:191008 Implement simple reset functionality + + } while (0); + + TRACFCOMP( g_trac_nc,EXIT_MRK"ncddHandleError: " + TRACE_ERR_FMT, + TRACE_ERR_ARGS(io_err)); + + return; + +} // end ncddHandleError + + + errlHndl_t ncddRegisterOp ( DeviceFW::OperationType i_opType, uint64_t * io_data_64, uint64_t i_reg, diff --git a/src/usr/secureboot/node_comm/node_comm_dd.H b/src/usr/secureboot/node_comm/node_comm_dd.H index a42ce7fd0..10b6be99e 100644 --- a/src/usr/secureboot/node_comm/node_comm_dd.H +++ b/src/usr/secureboot/node_comm/node_comm_dd.H @@ -179,14 +179,13 @@ errlHndl_t ncddWaitForCmdComp (node_comm_args_t & i_args); * @brief Analyzes an error handle object and performs any * reset activity, if necessary * - * @param[in] i_err - The error to analyze - * @param[in] i_args - miscellaneous arguments + * @param[in/out] io_err - The error to analyze + * @param[in] i_args - miscellaneous arguments * * @return void */ -// @TODO RTC:191008 Implement simple reset functionality -void ncddHandleError( errlHndl_t & i_err, - node_comm_args_t & i_args ){}; +void ncddHandleError( errlHndl_t & io_err, + node_comm_args_t & i_args ); /** diff --git a/src/usr/secureboot/node_comm/node_comm_test.C b/src/usr/secureboot/node_comm/node_comm_test.C index 6b034361a..3c9842138 100644 --- a/src/usr/secureboot/node_comm/node_comm_test.C +++ b/src/usr/secureboot/node_comm/node_comm_test.C @@ -263,6 +263,9 @@ errlHndl_t nodeCommXbus2ProcTest(void) HWAS::NO_DECONFIG, HWAS::GARD_NULL ); + // Collect FFDC + getNodeCommFFDC(mode,read_tgt, err); + } } while( 0 ); @@ -278,7 +281,7 @@ errlHndl_t nodeCommXbus2ProcTest(void) err->collectTrace(SECURE_COMP_NAME); err->collectTrace(NODECOMM_TRACE_NAME); - // @TODO RTC:191008 Delete for now as it will fail in simics and + // @TODO RTC:184518 Delete for now as it will fail in simics and // cause a processor deconfig. delete err; err = nullptr; |