summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/isteps/istep06/host_set_ipl_parms.C63
-rw-r--r--src/usr/pnor/pnor_hiomapdd.C23
-rw-r--r--src/usr/pnor/pnor_hiomapdd.H3
3 files changed, 85 insertions, 4 deletions
diff --git a/src/usr/isteps/istep06/host_set_ipl_parms.C b/src/usr/isteps/istep06/host_set_ipl_parms.C
index 79262f6d4..72434e5a6 100644
--- a/src/usr/isteps/istep06/host_set_ipl_parms.C
+++ b/src/usr/isteps/istep06/host_set_ipl_parms.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2015,2018 */
+/* Contributors Listed Below - COPYRIGHT 2015,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -36,6 +36,10 @@
#include <console/consoleif.H>
#include <initservice/initserviceif.H>
+#if (defined(CONFIG_PNORDD_IS_BMCMBOX) || defined(CONFIG_PNORDD_IS_IPMI))
+#include <pnor/pnorif.H>
+#endif
+
namespace ISTEP_06
{
@@ -125,6 +129,63 @@ void* host_set_ipl_parms( void *io_pArgs )
}
+#if (defined(CONFIG_PNORDD_IS_BMCMBOX) || defined(CONFIG_PNORDD_IS_IPMI))
+ // Add a check to indicate the BMC does not support HIOMAP pnor-ipmi access
+ // and the BMC firmware should be updated
+ PNOR::hiomapMode l_mode = PNOR::getPnorAccessMode();
+ if( l_mode != PNOR::PNOR_IPMI )
+ {
+#ifdef CONFIG_CONSOLE
+ CONSOLE::displayf(ISTEP_COMP_NAME,
+ "HIOMAP PNOR-IPMI not enabled, BMC firmware needs to be updated.");
+#endif
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "HIOMAP PNOR-IPMI not enabled, BMC firmware needs to be updated.");
+
+#ifdef CONFIG_PNORDD_IS_BMCMBOX
+ bool l_IS_BMCMBOX = true;
+#else
+ bool l_IS_BMCMBOX = false;
+#endif
+
+#ifdef CONFIG_PNORDD_IS_IPMI
+ bool l_IS_IPMI = true;
+#else
+ bool l_IS_IPMI = false;
+#endif
+
+ /*@
+ * @errortype
+ * @moduleid ISTEP::MOD_SET_IPL_PARMS
+ * @reasoncode ISTEP::RC_PNOR_IPMI_NOT_ENABLED
+ * @userdata1 HIOMAP Mode
+ * @userdata2[0-31] CONFIG_PNORDD_IS_BMCMBOX
+ * @userdata2[32:63] CONFIG_PNORDD_IS_IPMI
+ * @devdesc PNOR-IPMI not enabled, BMC firmware needs to be updated
+ * @custdesc PNOR-IPMI not enabled, BMC firmware needs to be updated
+ */
+ l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_PREDICTIVE,
+ ISTEP::MOD_SET_IPL_PARMS,
+ ISTEP::RC_PNOR_IPMI_NOT_ENABLED,
+ l_mode,
+ TWO_UINT32_TO_UINT64(
+ l_IS_BMCMBOX,
+ l_IS_IPMI));
+
+ l_err->addProcedureCallout(HWAS::EPUB_PRC_SP_CODE,
+ HWAS::SRCI_PRIORITY_HIGH);
+
+ l_err->collectTrace(PNOR_COMP_NAME);
+ l_err->collectTrace("ISTEPS_TRACE",256);
+
+ // Create IStep error log and cross ref error that occurred
+ l_stepError.addErrorDetails( l_err );
+ errlCommit( l_err, ISTEP_COMP_ID );
+ }
+#endif
+
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "host_set_ipl_parms exit" );
return l_stepError.getErrorHandle();
diff --git a/src/usr/pnor/pnor_hiomapdd.C b/src/usr/pnor/pnor_hiomapdd.C
index 5f998fca1..2b7acf863 100644
--- a/src/usr/pnor/pnor_hiomapdd.C
+++ b/src/usr/pnor/pnor_hiomapdd.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2011,2018 */
+/* Contributors Listed Below - COPYRIGHT 2011,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -181,6 +181,14 @@ void getPnorInfo( PnorInfo_t& o_pnorInfo )
Singleton<PnorHiomapDD>::instance().getNorSize();
}
+/**
+ * @brief Get HIOMAP PNOR access mode
+ */
+PNOR::hiomapMode getPnorAccessMode(void)
+{
+ return Singleton<PnorHiomapDD>::instance().getAccessMode();
+}
+
// Register access functions to DD framework
DEVICE_REGISTER_ROUTE(DeviceFW::READ,
DeviceFW::PNOR,
@@ -218,18 +226,26 @@ uint32_t PnorHiomapDD::getNorWorkarounds(void)
return iv_pnor->getNorWorkarounds();
}
-static PnorIf* probeHiomapTransport(TARGETING::Target* i_target)
+PNOR::hiomapMode PnorHiomapDD::getAccessMode(void)
+{
+ return iv_mode;
+}
+
+static PnorIf* probeHiomapTransport(TARGETING::Target* i_target,
+ PNOR::hiomapMode& io_mode)
{
PnorIf* pnor;
do {
if ((pnor = PnorIpmiDD::probe(i_target)))
{
+ io_mode = PNOR::PNOR_IPMI;
break;
}
if ((pnor = PnorMboxDD::probe(i_target)))
{
+ io_mode = PNOR::PNOR_MBOX;
break;
}
} while (0);
@@ -250,8 +266,9 @@ static PnorIf* probeHiomapTransport(TARGETING::Target* i_target)
}
PnorHiomapDD::PnorHiomapDD(TARGETING::Target* i_target)
+:iv_mode(PNOR::PNOR_UNKNOWN)
{
- iv_pnor = probeHiomapTransport(i_target);
+ iv_pnor = probeHiomapTransport(i_target, iv_mode);
}
PnorHiomapDD::~PnorHiomapDD()
diff --git a/src/usr/pnor/pnor_hiomapdd.H b/src/usr/pnor/pnor_hiomapdd.H
index 8bda811d5..49e1e824d 100644
--- a/src/usr/pnor/pnor_hiomapdd.H
+++ b/src/usr/pnor/pnor_hiomapdd.H
@@ -49,6 +49,8 @@ class PnorHiomapDD : public PnorIf
PnorHiomapDD(TARGETING::Target* i_target = NULL);
~PnorHiomapDD();
+ PNOR::hiomapMode getAccessMode(void);
+
virtual errlHndl_t readFlash(void* o_buffer,
size_t& io_buflen,
uint64_t i_address);
@@ -63,6 +65,7 @@ class PnorHiomapDD : public PnorIf
private:
PnorIf* iv_pnor;
+ PNOR::hiomapMode iv_mode;
};
#endif
OpenPOWER on IntegriCloud