summaryrefslogtreecommitdiffstats
path: root/src/sbefw/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/sbefw/core')
-rw-r--r--src/sbefw/core/corefiles.mk3
-rw-r--r--src/sbefw/core/ipl.C2
-rw-r--r--src/sbefw/core/sbeIPLStatusLPC.C91
-rw-r--r--src/sbefw/core/sbeIPLStatusLPC.H58
-rw-r--r--src/sbefw/core/sbeglobals.C4
-rw-r--r--src/sbefw/core/sbeglobals.H4
6 files changed, 162 insertions, 0 deletions
diff --git a/src/sbefw/core/corefiles.mk b/src/sbefw/core/corefiles.mk
index b14d0b0f..ef5a76bb 100644
--- a/src/sbefw/core/corefiles.mk
+++ b/src/sbefw/core/corefiles.mk
@@ -62,6 +62,9 @@ endif
ifeq ($(SBE_CONSOLE_SUPPORT), 1)
CORESEEPROM-CPP-SOURCES += sbeConsole.C
endif
+ifeq ($(SBE_IPL_STATUS_LPC_SUPPORT), 1)
+CORESEEPROM-CPP-SOURCES += sbeIPLStatusLPC.C
+endif
CORESEEPROM-C-SOURCES =
CORESEEPROM-S-SOURCES =
diff --git a/src/sbefw/core/ipl.C b/src/sbefw/core/ipl.C
index 14dd3162..68ce3401 100644
--- a/src/sbefw/core/ipl.C
+++ b/src/sbefw/core/ipl.C
@@ -29,6 +29,7 @@
#include "ipl.H"
#include "sbeConsole.H"
+#include "sbeIPLStatusLPC.H"
#include "sbeglobals.H"
#include "p9n2_perv_scom_addresses.H"
@@ -122,6 +123,7 @@ void sbeDoContinuousIpl()
auto istepMap = &istepTableEntry->istepMinorArr[step-1];
if(istepMap->istepWrapper != NULL)
{
+ SBE_PUT_ISTEP_LPC(istepTableEntry->istepMajorNum, step);
SBE_MSG_CONSOLE("istep ", istepTableEntry->istepMajorNum, ".", step);
rc = istepMap->istepWrapper(istepMap->istepHwp);
}
diff --git a/src/sbefw/core/sbeIPLStatusLPC.C b/src/sbefw/core/sbeIPLStatusLPC.C
new file mode 100644
index 00000000..499e795f
--- /dev/null
+++ b/src/sbefw/core/sbeIPLStatusLPC.C
@@ -0,0 +1,91 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/sbefw/core/sbeConsole.C $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018-2019 */
+/* [+] International Business Machines Corp. */
+/* [+] Raptor Engineering, LLC */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+#include "sbetrace.H"
+#include "fapi2.H"
+
+#include "sbeIPLStatusLPC.H"
+
+#include "p9_perv_scom_addresses.H"
+#include "p9_perv_scom_addresses_fld.H"
+#include "p9_misc_scom_addresses.H"
+#include "p9_misc_scom_addresses_fld.H"
+
+#include "sberegaccess.H"
+#include "sbeglobals.H"
+#include "p9_lpc_utils.H"
+
+using namespace fapi2;
+
+static uint32_t writeLPCReg(uint8_t i_addr,
+ uint8_t i_data)
+{
+ uint32_t rc = SBE_SEC_OPERATION_SUCCESSFUL;
+
+ do {
+ Target<TARGET_TYPE_PROC_CHIP > proc = plat_getChipTarget();
+
+ buffer<uint32_t> data = 0;
+ data.insert(i_data, 0, 8);
+
+ ReturnCode fapiRc = lpc_rw(proc,
+ LPC_IO_SPACE + i_addr,
+ sizeof(uint8_t),
+ false,
+ false,
+ data);
+ if(fapiRc != FAPI2_RC_SUCCESS)
+ {
+ rc = SBE_SEC_LPC_ACCESS_FAILED;
+ break;
+ }
+ } while(0);
+
+ return rc;
+}
+
+void postPutIStep(char major, char minor)
+{
+ #define SBE_FUNC "postPutIStep"
+ uint32_t rc = SBE_SEC_OPERATION_SUCCESSFUL;
+ do {
+ rc = writeLPCReg(0x81, major);
+ if(rc != SBE_SEC_OPERATION_SUCCESSFUL)
+ {
+ SBE_ERROR(SBE_FUNC " failure to write IPL status 1");
+ break;
+ }
+
+ rc = writeLPCReg(0x82, minor);
+ if(rc != SBE_SEC_OPERATION_SUCCESSFUL)
+ {
+ SBE_ERROR(SBE_FUNC " failure to write IPL status 2");
+ break;
+ }
+
+ } while(0);
+
+ #undef SBE_FUNC
+}
diff --git a/src/sbefw/core/sbeIPLStatusLPC.H b/src/sbefw/core/sbeIPLStatusLPC.H
new file mode 100644
index 00000000..ba3533cb
--- /dev/null
+++ b/src/sbefw/core/sbeIPLStatusLPC.H
@@ -0,0 +1,58 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/sbefw/core/sbeConsole.H $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] International Business Machines Corp. */
+/* [+] Raptor Engineering, LLC */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+#pragma once
+
+#include "sbe_sp_intf.H"
+#include "sbe_build_info.H"
+
+#ifndef SBE_IPL_STATUS_LPC_SUPPORT
+
+#define SBE_ISTEP_LPC_INIT
+#define SBE_ISTEP_LPC_DISABLE
+#define SBE_PUT_ISTEP_LPC(major, minor)
+
+#else
+
+#define SBE_ISTEP_LPC_INIT { \
+ SBE_GLOBAL->sbeLPCActive = true; \
+}
+
+#define SBE_ISTEP_LPC_DISABLE { \
+ SBE_GLOBAL->sbeLPCActive = false; \
+}
+
+#define SBE_PUT_ISTEP_LPC(major, minor) \
+ if(SBE_GLOBAL->sbeLPCActive) \
+ { \
+ postPutIStep(major, minor); \
+ }
+
+#define LPC_IO_SPACE 0xD0010000
+#define LPC_MAX_IO_SPACE (64*1024)
+
+void postPutIStep(char major, char minor);
+
+#endif // SBE_IPL_STATUS_LPC_SUPPORT
diff --git a/src/sbefw/core/sbeglobals.C b/src/sbefw/core/sbeglobals.C
index d4640107..79dc0255 100644
--- a/src/sbefw/core/sbeglobals.C
+++ b/src/sbefw/core/sbeglobals.C
@@ -56,6 +56,10 @@ uint8_t SBEGlobalsSingleton::failedCmd = 0;
bool SBEGlobalsSingleton::isHreset = false;
+#ifdef SBE_IPL_STATUS_LPC_SUPPORT
+bool SBEGlobalsSingleton::sbeLPCActive = false;
+#endif
+
#ifdef SBE_CONSOLE_SUPPORT
bool SBEGlobalsSingleton::sbeUartActive = false;
#endif
diff --git a/src/sbefw/core/sbeglobals.H b/src/sbefw/core/sbeglobals.H
index 3b2b0ad9..72f9222c 100644
--- a/src/sbefw/core/sbeglobals.H
+++ b/src/sbefw/core/sbeglobals.H
@@ -85,6 +85,10 @@ class SBEGlobalsSingleton
*/
PkSemaphore sbeSemAsyncProcess;
+ #ifdef SBE_IPL_STATUS_LPC_SUPPORT
+ static bool sbeLPCActive;
+ #endif
+
#ifdef SBE_CONSOLE_SUPPORT
// Binary semaphore to protect uart access
PkSemaphore sbeUartBinSem;
OpenPOWER on IntegriCloud