diff options
author | Corey Swenson <cswenson@us.ibm.com> | 2019-08-22 13:00:39 -0500 |
---|---|---|
committer | Daniel M Crowell <dcrowell@us.ibm.com> | 2019-09-13 10:31:35 -0500 |
commit | 1434b8952e3a2dbd55a0876ec9d89fe3ffd21da6 (patch) | |
tree | 935c37fb415edffa45ffe578ac21c65788bb7b0a | |
parent | ce0d29c96c4619e07819760b84c32f0eb7812b5c (diff) | |
download | talos-hostboot-1434b8952e3a2dbd55a0876ec9d89fe3ffd21da6.tar.gz talos-hostboot-1434b8952e3a2dbd55a0876ec9d89fe3ffd21da6.zip |
NVDIMM: FW_UPDATE: New FFDC for SECURITY_ERROR
For any command error or timeout during FW_UPDATE
add regs to error log. Registers specified in
NVDIMM IPL Error Handling Document.
CQ:SW473060
Change-Id: I3ca8933b9c62f0b12bebefbae06357400e8e436e
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/83590
Tested-by: Jenkins Server <pfd-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>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
-rw-r--r-- | src/include/usr/isteps/nvdimm/nvdimm.H | 14 | ||||
-rw-r--r-- | src/usr/errl/errludlogregister.C | 1 | ||||
-rw-r--r-- | src/usr/errl/plugins/errludlogregister.H | 7 | ||||
-rw-r--r-- | src/usr/isteps/nvdimm/nvdimm.C | 61 | ||||
-rw-r--r-- | src/usr/isteps/nvdimm/nvdimm_update.C | 13 |
5 files changed, 94 insertions, 2 deletions
diff --git a/src/include/usr/isteps/nvdimm/nvdimm.H b/src/include/usr/isteps/nvdimm/nvdimm.H index ce79e9026..9ccfa0e7f 100644 --- a/src/include/usr/isteps/nvdimm/nvdimm.H +++ b/src/include/usr/isteps/nvdimm/nvdimm.H @@ -331,6 +331,7 @@ errlHndl_t notifyNvdimmProtectionChange(TARGETING::Target* i_target, errlHndl_t getOperOpsTimeout(TARGETING::Target* i_nvdimm, uint16_t& o_timeout); + /** * @brief Wait for operational unit operation to complete * @@ -412,6 +413,19 @@ void nvdimmAddVendorLog(TARGETING::Target *i_nvdimm, errlHndl_t& io_err); /** + * @brief Add NVDIMM Update regs to FFDC for errors encountered + * during NVDIMM firmware update process + * Regs specified in NVDIMM IPL Error Handling Document + * + * @param[in] i_nvdimm - nvdimm target + * + * @param[in] io_err - error log to add FFDC data + * + */ +void nvdimmAddUpdateRegs(TARGETING::Target *i_nvdimm, errlHndl_t& io_err); + + +/** * @brief Function to add some NVDIMM Page 4 status regs to errorlog FFDC * PANIC_CNT Counts FPGA firmware events * PARITY_ERROR_COUNT Counts FPGA SRAM parity errors diff --git a/src/usr/errl/errludlogregister.C b/src/usr/errl/errludlogregister.C index 0db5aaca9..e908b0d4d 100644 --- a/src/usr/errl/errludlogregister.C +++ b/src/usr/errl/errludlogregister.C @@ -223,6 +223,7 @@ void ErrlUserDetailsLogRegister::copyRegisterData( case DeviceFW::SCOM: // userif.H case DeviceFW::FSI: // userif.H case DeviceFW::SPD: // userif.H + case DeviceFW::NVDIMM: // userif.H case DeviceFW::XSCOM: // driverif.H case DeviceFW::FSISCOM: // driverif.H case DeviceFW::IBSCOM: // driverif.H diff --git a/src/usr/errl/plugins/errludlogregister.H b/src/usr/errl/plugins/errludlogregister.H index f795a9643..b201e05d9 100644 --- a/src/usr/errl/plugins/errludlogregister.H +++ b/src/usr/errl/plugins/errludlogregister.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2014 */ +/* Contributors Listed Below - COPYRIGHT 2013,2019 */ /* [+] Google Inc. */ /* [+] International Business Machines Corp. */ /* */ @@ -122,6 +122,11 @@ public: numArgs = 1; addrParams.push_back(" SPD keyword enumaration"); break; + case DeviceFW::NVDIMM: // userif.H + i_parser.PrintString("AccessType", "DeviceFW::NVDIMM"); + numArgs = 1; + addrParams.push_back(" NVDIMM address"); + break; case DeviceFW::XSCOM: // driverif.H i_parser.PrintString("AccessType", "DeviceFW::XSCOM"); numArgs = 1; diff --git a/src/usr/isteps/nvdimm/nvdimm.C b/src/usr/isteps/nvdimm/nvdimm.C index 2c2629d22..0a35b1151 100644 --- a/src/usr/isteps/nvdimm/nvdimm.C +++ b/src/usr/isteps/nvdimm/nvdimm.C @@ -4383,6 +4383,67 @@ void nvdimmAddPage4Regs( TARGETING::Target* i_nvdimm, errlHndl_t& io_err ) /* + * @brief Add NVDIMM Update regs to FFDC for errors encountered + * during NVDIMM update process + */ +void nvdimmAddUpdateRegs( TARGETING::Target* i_nvdimm, errlHndl_t& io_err ) +{ + errlHndl_t l_err = nullptr; + + ERRORLOG::ErrlUserDetailsLogRegister l_regUD(i_nvdimm); + const uint32_t l_regList[] = { + NVDIMM_READY, + FIRMWARE_OPS_STATUS, + NVDIMM_CMD_STATUS0, + FIRMWARE_OPS_TIMEOUT0, + FIRMWARE_OPS_TIMEOUT1, + FW_REGION_CRC0, + FW_REGION_CRC1, + MODULE_HEALTH, + MODULE_HEALTH_STATUS0, + MODULE_HEALTH_STATUS1, + ERROR_THRESHOLD_STATUS, + ENCRYPTION_CONFIG_STATUS, + FW_SLOT_INFO, + SLOT0_ES_FWREV0, + SLOT0_ES_FWREV1, + SLOT1_ES_FWREV0, + SLOT1_ES_FWREV1, + SLOT1_SUBFWREV, + CSAVE_INFO, + CSAVE_FAIL_INFO1, + RESTORE_STATUS, + RESTORE_FAIL_INFO, + }; + uint8_t l_readData = 0; + + for (auto l_reg : l_regList) + { + l_err = nvdimmReadReg(i_nvdimm, + l_regList[l_reg], + l_readData); + if (l_err) + { + TRACFCOMP(g_trac_nvdimm, ERR_MRK + "nvdimmAddUpdateRegs() nvdimm[%X] error reading 0x%X", + get_huid(i_nvdimm), l_reg); + + // Don't commit, just delete the error and continue + delete l_err; + l_err = nullptr; + continue; + } + + l_regUD.addDataBuffer(&l_readData, + sizeof(l_readData), + DEVICE_NVDIMM_ADDRESS(l_reg)); + } + + l_regUD.addToLog(io_err); +} + + +/* * @brief Utility function to send the value of * ATTR_NVDIMM_ARMED to the FSP */ diff --git a/src/usr/isteps/nvdimm/nvdimm_update.C b/src/usr/isteps/nvdimm/nvdimm_update.C index 9cda59f8c..70ad7bcf1 100644 --- a/src/usr/isteps/nvdimm/nvdimm_update.C +++ b/src/usr/isteps/nvdimm/nvdimm_update.C @@ -407,6 +407,7 @@ errlHndl_t NvdimmInstalledImage::updateImage(NvdimmLidImage * i_lidImage) l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); break; } @@ -585,6 +586,7 @@ errlHndl_t NvdimmInstalledImage::updateImage(NvdimmLidImage * i_lidImage) l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); break; } @@ -794,6 +796,7 @@ errlHndl_t NvdimmInstalledImage::updateImageData(NvdimmLidImage * i_lidImage) ERRORLOG::ErrlEntry::ADD_SW_CALLOUT ); l_err->collectTrace( NVDIMM_COMP_NAME, 256 ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); break; } @@ -957,6 +960,7 @@ errlHndl_t NvdimmInstalledImage::updateImageData(NvdimmLidImage * i_lidImage) l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); break; } @@ -1028,6 +1032,7 @@ errlHndl_t NvdimmInstalledImage::changeFwUpdateMode(fw_update_mode i_mode) l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); } } } @@ -1112,6 +1117,7 @@ errlHndl_t NvdimmInstalledImage::waitFwOpsBlockReceived() l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); } return l_err; @@ -1192,6 +1198,7 @@ errlHndl_t NvdimmInstalledImage::waitFwOpsComplete() l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); } } return l_err; @@ -1560,6 +1567,7 @@ errlHndl_t NvdimmInstalledImage::validateFwHeader() l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); } } } @@ -1611,6 +1619,7 @@ errlHndl_t NvdimmInstalledImage::commitFwRegion() l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); } } } @@ -1663,6 +1672,7 @@ errlHndl_t NvdimmInstalledImage::clearFwDataBlock() l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); + nvdimmAddUpdateRegs(iv_dimm,l_err); } } } @@ -1714,7 +1724,7 @@ errlHndl_t NvdimmInstalledImage::validateFwImage() l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(iv_dimm,l_err); - + nvdimmAddUpdateRegs(iv_dimm,l_err); } } } @@ -2001,6 +2011,7 @@ bool NvdimmsUpdate::runUpdate(void) l_err->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, HWAS::SRCI_PRIORITY_LOW ); nvdimmAddPage4Regs(l_nvdimm,l_err); + nvdimmAddUpdateRegs(l_nvdimm,l_err); ERRORLOG::errlCommit(l_err, NVDIMM_COMP_ID); // Delete the unused NvdimmInstalledImage object |