Enabled pHAL infrastructure to boot the host
IPL (libipl) used for executing hardware procedures
to initilize the power processor based host.
Tested by:
1. ./configure
2. ./configure --enable-phal --enable-openfsi
Change-Id: I57ff64595a757041ee60ccb420092975b064462d
Signed-off-by: Ramesh Iyyar <rameshi1@in.ibm.com>
diff --git a/README.md b/README.md
index 48b29e2..19143a8 100644
--- a/README.md
+++ b/README.md
@@ -8,5 +8,10 @@
2. ./configure ${CONFIGURE_FLAGS}
3. make
+To build with phal feature:
+ 1. ./bootstrap.sh
+ 2. ./configure ${CONFIGURE_FLAGS} --enable-phal --enable-openfsi
+ 3. make
+
To clean the repository run `./bootstrap.sh clean`.
```
diff --git a/configure.ac b/configure.ac
index 7ee59d6..3b5f3c8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -46,6 +46,28 @@
AC_ARG_ENABLE([openfsi], AS_HELP_STRING([--enable-openfsi], [Support Openfsi]))
AS_IF([test "$enable_openfsi" == "yes"], [CHIPS+=" openfsi"])
+AC_ARG_ENABLE([phal], AS_HELP_STRING([--enable-phal], [Use host processor initialisation procedures from PHAL])])
+
+AS_IF([ test "$enable_phal" == "yes" && test "$enable_p9" == "yes"],
+ [ AC_MSG_ERROR([Internal POWER9 and PHAL-provided procedures conflict, please configure only one])]
+ )
+
+AS_IF([test "$enable_phal" == "yes"],
+ [
+ AX_ABSOLUTE_HEADER([libipl.h])
+ if test x"$gl_cv_absolute_libipl_h" == "x" ; then
+ AC_MSG_ERROR([Cannot find libipl.h path])
+ fi
+
+ AC_CHECK_LIB([ipl], [ipl_init])
+ if test x"$ac_cv_lib_ipl_ipl_init" != "xyes" ; then
+ AC_MSG_ERROR([IPL library not found])
+ fi
+
+ CHIPS+=" phal"
+ ]
+ )
+
AS_IF([test "x$CHIPS" == "x"], [CHIPS="p9 openfsi"])
AC_CONFIG_FILES([Makefile.generated],
diff --git a/proc_control.cpp b/proc_control.cpp
index 0035b4f..1afdace 100644
--- a/proc_control.cpp
+++ b/proc_control.cpp
@@ -104,6 +104,12 @@
commit<fsi_error::SlaveDetectionFailure>();
return -1;
}
+ // TODO ibm-openbmc#1470
+ catch (common_error::InternalFailure& e)
+ {
+ commit<common_error::InternalFailure>();
+ return -1;
+ }
return 0;
}
diff --git a/procedures/phal/start_host.cpp b/procedures/phal/start_host.cpp
new file mode 100644
index 0000000..c828309
--- /dev/null
+++ b/procedures/phal/start_host.cpp
@@ -0,0 +1,43 @@
+extern "C" {
+#include <libipl.h>
+}
+
+#include "xyz/openbmc_project/Common/error.hpp"
+
+#include <phosphor-logging/elog-errors.hpp>
+#include <phosphor-logging/log.hpp>
+#include <registration.hpp>
+namespace openpower
+{
+namespace phal
+{
+
+using namespace phosphor::logging;
+using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+
+/**
+ * @brief Starts the self boot engine on POWER processor position 0
+ * to kick off a boot.
+ * @return void
+ */
+void startHost()
+{
+ if (ipl_init() != 0)
+ {
+ log<level::ERR>("ipl_init failed");
+ // TODO ibm-openbmc#1470
+ elog<InternalFailure>();
+ }
+
+ if (ipl_run_major(0) > 0)
+ {
+ log<level::ERR>("step 0 failed to start the host");
+ // TODO ibm-openbmc#1470
+ elog<InternalFailure>();
+ }
+}
+
+REGISTER_PROCEDURE("startHost", startHost);
+
+} // namespace phal
+} // namespace openpower