Skip to content

Commit

Permalink
NVDIMM: FW_UPDATE: New FFDC for SECURITY_ERROR
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
cvswen authored and dcrowell77 committed Sep 13, 2019
1 parent ce0d29c commit 1434b89
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 2 deletions.
14 changes: 14 additions & 0 deletions src/include/usr/isteps/nvdimm/nvdimm.H
Expand Up @@ -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
*
Expand Down Expand Up @@ -411,6 +412,19 @@ errlHndl_t compareCksum(TARGETING::Target* i_nvdimm,
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
Expand Down
1 change: 1 addition & 0 deletions src/usr/errl/errludlogregister.C
Expand Up @@ -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
Expand Down
7 changes: 6 additions & 1 deletion src/usr/errl/plugins/errludlogregister.H
Expand Up @@ -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. */
/* */
Expand Down Expand Up @@ -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;
Expand Down
61 changes: 61 additions & 0 deletions src/usr/isteps/nvdimm/nvdimm.C
Expand Up @@ -4382,6 +4382,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
Expand Down
13 changes: 12 additions & 1 deletion src/usr/isteps/nvdimm/nvdimm_update.C
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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);
}
}
}
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
}
}
Expand Down Expand Up @@ -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);
}
}
}
Expand Down Expand Up @@ -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);
}
}
}
Expand Down Expand Up @@ -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);
}
}
}
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 1434b89

Please sign in to comment.