summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorey Swenson <cswenson@us.ibm.com>2019-08-22 13:00:39 -0500
committerDaniel M Crowell <dcrowell@us.ibm.com>2019-09-13 10:31:35 -0500
commit1434b8952e3a2dbd55a0876ec9d89fe3ffd21da6 (patch)
tree935c37fb415edffa45ffe578ac21c65788bb7b0a
parentce0d29c96c4619e07819760b84c32f0eb7812b5c (diff)
downloadtalos-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.H14
-rw-r--r--src/usr/errl/errludlogregister.C1
-rw-r--r--src/usr/errl/plugins/errludlogregister.H7
-rw-r--r--src/usr/isteps/nvdimm/nvdimm.C61
-rw-r--r--src/usr/isteps/nvdimm/nvdimm_update.C13
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
OpenPOWER on IntegriCloud