Skip to content

Commit

Permalink
NVDIMM: Additional FFDC for NVDIMM/BPM callouts
Browse files Browse the repository at this point in the history
Add page 4 SMART regs to error log FFDC
for all NVDIMM HW errors.  Add attribute to
prevent recursively executing the function.

Change-Id: I2cdd89436a2647c440f900a729596b522829aca6
CQ:SW470690
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/82599
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
  • Loading branch information
cvswen authored and dcrowell77 committed Sep 12, 2019
1 parent e85d6dd commit 26c32cb
Show file tree
Hide file tree
Showing 8 changed files with 189 additions and 1 deletion.
21 changes: 21 additions & 0 deletions src/include/usr/isteps/nvdimm/nvdimm.H
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,27 @@ enum nvdimm_protection_t
errlHndl_t notifyNvdimmProtectionChange(TARGETING::Target* i_target,
const nvdimm_protection_t i_state);

/**
* @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
* FLASH_ERROR_COUNT0 Counts FLASH read/write errors
* FLASH_ERROR_COUNT1
* FLASH_ERROR_COUNT2
* FLASH_BAD_BLOCK_COUNT0 Counts bad blocks within the flash array
* FLASH_BAD_BLOCK_COUNT1
* SCAP_STATUS BackupPowerModule/SuperCap state
* STATUS_EVENT_INT_INFO1 NVDIMM error info
* STATUS_EVENT_INT_INFO2
*
* @param[in] i_nvdimm - nvdimm target
*
* @param[inout] io_err - error log to add FFDC data
*
*/
void nvdimmAddPage4Regs(TARGETING::Target *i_nvdimm, errlHndl_t& io_err);


/**
* @brief Entry function to NVDIMM initialization
* - Checks for ready state
Expand Down
22 changes: 22 additions & 0 deletions src/usr/isteps/nvdimm/bpm_update.C
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "bpm_update.H"
#include "nvdimm_update.H"

#include <isteps/nvdimm/nvdimm.H>
#include <errl/hberrltypes.H>
#include <errl/errlmanager.H>
#include <endian.h>
Expand Down Expand Up @@ -737,6 +738,7 @@ errlHndl_t Bpm::issueCommand(const uint8_t i_command,
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -864,6 +866,7 @@ errlHndl_t Bpm::issueCommand(const uint8_t i_command,
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}
}
Expand Down Expand Up @@ -1185,6 +1188,7 @@ errlHndl_t Bpm::inUpdateMode()
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -1247,6 +1251,7 @@ errlHndl_t Bpm::enterUpdateMode()
BPM_RC::BPM_ENTER_UPDATE_MODE,
TARGETING::get_huid(iv_nvdimm));
infoErrl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
ERRORLOG::errlCommit(infoErrl, BPM_COMP_ID);

} while(0);
Expand Down Expand Up @@ -1340,6 +1345,7 @@ errlHndl_t Bpm::exitUpdateMode()
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
infoErrl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
ERRORLOG::errlCommit(infoErrl, BPM_COMP_ID);

} while(0);
Expand Down Expand Up @@ -1501,6 +1507,7 @@ errlHndl_t Bpm::updateFirmware(BpmFirmwareLidImage i_image)
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);

// Change the state of iv_attemptAnotherUpdate to signal
// if another update attempt should occur.
Expand Down Expand Up @@ -1692,6 +1699,7 @@ errlHndl_t Bpm::enterBootstrapLoaderMode()
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -1786,6 +1794,7 @@ errlHndl_t Bpm::setupPayload(payload_t & o_payload,
MAX_PAYLOAD_DATA_SIZE),
TARGETING::get_huid(iv_nvdimm));
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -2131,6 +2140,7 @@ errlHndl_t Bpm::writeViaScapRegister(uint8_t const i_reg, uint8_t const i_data)
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -2225,6 +2235,7 @@ errlHndl_t Bpm::writeViaScapRegister(uint8_t const i_reg, uint8_t const i_data)
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -2296,6 +2307,7 @@ errlHndl_t Bpm::disableWriteProtection()
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -2469,6 +2481,7 @@ errlHndl_t Bpm::writeToMagicRegisters(
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -2564,6 +2577,7 @@ errlHndl_t Bpm::dumpSegment(uint16_t const i_segmentCode,
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);

break;
}
Expand Down Expand Up @@ -2687,6 +2701,7 @@ errlHndl_t Bpm::dumpSegment(uint16_t const i_segmentCode,
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
setAttemptAnotherUpdate();
break;
}
Expand Down Expand Up @@ -3153,6 +3168,7 @@ errlHndl_t Bpm::getResponse(uint8_t * const o_responseData,
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -3415,6 +3431,7 @@ errlHndl_t Bpm::blockWriteRetry(payload_t i_payload)
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);

}

Expand Down Expand Up @@ -3486,6 +3503,7 @@ errlHndl_t Bpm::waitForCommandStatusBitReset(
HWAS::BPM_PART_TYPE,
HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -3528,6 +3546,7 @@ errlHndl_t Bpm::waitForCommandStatusBitReset(
error,
TARGETING::get_huid(iv_nvdimm));
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;

}
Expand Down Expand Up @@ -3591,6 +3610,7 @@ errlHndl_t Bpm::verifyGoodBpmState()
TARGETING::get_huid(iv_nvdimm),
status.full);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
}

return errl;
Expand Down Expand Up @@ -3643,6 +3663,7 @@ errlHndl_t Bpm::waitForBusyBit()
BPM_RC::BPM_EXCEEDED_RETRY_LIMIT,
TARGETING::get_huid(iv_nvdimm));
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down Expand Up @@ -3950,6 +3971,7 @@ errlHndl_t Bpm::checkFirmwareCrc()
responseData[2],
0),
TARGETING::get_huid(iv_nvdimm));
nvdimmAddPage4Regs(iv_nvdimm,errl);
break;
}

Expand Down

0 comments on commit 26c32cb

Please sign in to comment.