summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Derksen <mderkse1@us.ibm.com>2019-09-24 13:34:16 -0500
committerDaniel M Crowell <dcrowell@us.ibm.com>2020-01-10 12:18:01 -0600
commit45cb275198bbb6bd2bbd25ec9eaa4a40dbdfeb86 (patch)
treee61cf0b309169c985c8c7d9b4159e90d251cee85
parent2a1b24bafdff08c976156fd81f9595536ae3b3e6 (diff)
downloadtalos-hostboot-45cb275198bbb6bd2bbd25ec9eaa4a40dbdfeb86.tar.gz
talos-hostboot-45cb275198bbb6bd2bbd25ec9eaa4a40dbdfeb86.zip
NVDIMM: Mask mbacalfir at the beginning of restore step during mpipl
Mask MBACALFIR[8]: EVENT_N: MBACALFIR_MASK_OR = 0x0080000000000000 at the beginning of nvdimm_restore() to avoid PRD errors. This mask is normal for non-mpipl path, so just needed for mpipl. CQ: SW477028 Change-Id: I3368b89af67f58edecb42dd0a99ca7799679e84d Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/84190 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Reviewed-by: TSUNG K YEUNG <tyeung@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: Corey V Swenson <cswenson@us.ibm.com> Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
-rw-r--r--src/usr/isteps/nvdimm/nvdimm.C34
-rw-r--r--src/usr/isteps/nvdimm/nvdimm.H10
2 files changed, 41 insertions, 3 deletions
diff --git a/src/usr/isteps/nvdimm/nvdimm.C b/src/usr/isteps/nvdimm/nvdimm.C
index 6576b5a63..273aa04e9 100644
--- a/src/usr/isteps/nvdimm/nvdimm.C
+++ b/src/usr/isteps/nvdimm/nvdimm.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014,2019 */
+/* Contributors Listed Below - COPYRIGHT 2014,2020 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -1134,6 +1134,32 @@ errlHndl_t nvdimmValidImage(Target *i_nvdimm, bool &o_imgValid)
return l_err;
}
+void maskMbacalfir_eventn(TARGETING::Target* i_nvdimm)
+{
+ errlHndl_t l_err = nullptr;
+ TargetHandleList l_mcaList;
+ uint64_t l_writeData;
+ uint32_t l_writeAddress;
+ size_t l_writeSize = sizeof(l_writeData);
+
+ getParentAffinityTargets(l_mcaList, i_nvdimm, CLASS_UNIT, TYPE_MCA);
+ assert(l_mcaList.size(), "maskMbacalfir_eventn() failed to find parent MCA.");
+
+ l_writeAddress = MBACALFIR_OR_MASK_REG;
+ l_writeData = MBACALFIR_EVENTN_OR_BIT;
+ l_err = deviceWrite(l_mcaList[0], &l_writeData, l_writeSize,
+ DEVICE_SCOM_ADDRESS(l_writeAddress));
+ if(l_err)
+ {
+ TRACFCOMP(g_trac_nvdimm,
+ ERR_MRK "Failed to mask MBACALFIR EventN using address "
+ "0x%08x on NVDIMM 0x%08X MCA 0x%08X",
+ l_writeAddress, get_huid(i_nvdimm), get_huid(l_mcaList[0]));
+ l_err->collectTrace(NVDIMM_COMP_NAME);
+ errlCommit( l_err, NVDIMM_COMP_ID );
+ }
+}
+
#ifndef __HOSTBOOT_RUNTIME
/**
* @brief This function handles all the restore related operations.
@@ -1175,6 +1201,11 @@ errlHndl_t nvdimmRestore(TargetHandleList& io_nvdimmList, uint8_t &i_mpipl)
if (i_mpipl)
{
TRACFCOMP(g_trac_nvdimm, "nvdimmRestore(): in MPIPL");
+
+ // To avoid PRD error during mpipl need to Mask MBACALFIR EventN
+ // Note: a regular IPL will already have this masked
+ maskMbacalfir_eventn(*it);
+
FAPI_INVOKE_HWP(l_err, mss::ddr_resetn, l_fapi_mca, HIGH);
if (l_err)
@@ -1755,7 +1786,6 @@ errlHndl_t nvdimmEpowSetup(TargetHandleList &i_nvdimmList)
}
-
/**
* @brief Entry function to NVDIMM restore
* - Restore image from NVDIMM NAND flash to DRAM
diff --git a/src/usr/isteps/nvdimm/nvdimm.H b/src/usr/isteps/nvdimm/nvdimm.H
index 683763087..1e4e1596c 100644
--- a/src/usr/isteps/nvdimm/nvdimm.H
+++ b/src/usr/isteps/nvdimm/nvdimm.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014,2019 */
+/* Contributors Listed Below - COPYRIGHT 2014,2020 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -513,6 +513,14 @@ enum mbacal_bitmask_values : uint64_t
MBACALFIR_UNMASK_BIT = 0xff7fffffffffffff,
};
+
+/**
+ * @brief Mask MCBACALFIR Event N to prevent PRD from handling event
+ *
+ * @param[in] - i_nvdimm - nvdimm target for operation on its parent MCA
+ */
+void maskMbacalfir_eventn(TARGETING::Target* i_nvdimm);
+
/**
* @brief Wrapper to call deviceOp to read the NV controller via I2C
*
OpenPOWER on IntegriCloud