summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarty Gloff <mgloff@us.ibm.com>2017-07-07 16:52:37 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-07-17 11:07:38 -0400
commit735531f69b8db22ec2acc8b0aa1b73106a892f77 (patch)
tree3f664e2b18c3f8f4e59f1ff6260882507318be84 /src
parent9ecbdfd70311bd7074ce341201779791a14e381c (diff)
downloadtalos-hostboot-735531f69b8db22ec2acc8b0aa1b73106a892f77.tar.gz
talos-hostboot-735531f69b8db22ec2acc8b0aa1b73106a892f77.zip
Log build level for SBE and HCODE customization
Extract build information from the XIP header for the SBE and HCODE images. Trace the information. Also use it as FFDC for related error logs. Save the SBE build information in the SB keyword of MVPD. Change-Id: I600a71ae6cbf342643261da14f6b3b2e6bf3cbf1 RTC: 168827 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42951 Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/sbe/sbe_update.H15
-rw-r--r--src/include/usr/util/utilxipimage.H65
-rw-r--r--src/usr/isteps/istep15/host_build_stop_image.C17
-rw-r--r--src/usr/isteps/pm/pm_common.C20
-rw-r--r--src/usr/sbe/sbe_update.C30
-rw-r--r--src/usr/util/makefile4
-rw-r--r--src/usr/util/runtime/makefile4
-rw-r--r--src/usr/util/utilxipimage.C57
8 files changed, 209 insertions, 3 deletions
diff --git a/src/include/usr/sbe/sbe_update.H b/src/include/usr/sbe/sbe_update.H
index 1d5a6a784..02cebeedb 100644
--- a/src/include/usr/sbe/sbe_update.H
+++ b/src/include/usr/sbe/sbe_update.H
@@ -31,6 +31,7 @@
#include <errl/errlentry.H>
#include <pnor/pnorif.H>
#include <pnor/ecc.H>
+#include <util/utilxipimage.H>
#include <vmmconst.h>
#include <targeting/common/targetservice.H>
#include <i2c/eepromif.H>
@@ -266,12 +267,21 @@ namespace SBE
uint32_t seeprom_1_data_crc;
uint8_t seeprom_1_short_version[SBE_MVPD_SHORT_IMAGE_VERSION_SIZE];
+
+ Util::imageBuild_t seeprom_0_build;
+
+ Util::imageBuild_t seeprom_1_build;
+
uint8_t mvpdSbPad[MVPD_SB_RECORD_SIZE - sizeof(flags)
- sizeof(seeprom_0_data_crc)
- sizeof(seeprom_1_data_crc)
- - (SBE_MVPD_SHORT_IMAGE_VERSION_SIZE * 2)];
+ - (SBE_MVPD_SHORT_IMAGE_VERSION_SIZE * 2)
+ - (sizeof(Util::imageBuild_t) * 2)];
} PACKED;
+ // This line forces a compile fail if struct is too large
+ static_assert(sizeof(mvpdSbKeyword_t) <= MVPD_SB_RECORD_SIZE,
+ "mvpdSbKeyword_t is too large");
/**
* @brief Contains the SBE state for a given target
@@ -308,6 +318,7 @@ namespace SBE
sbeSeepromVersionInfo_t new_seeprom_ver;
bool new_readBack_check;
+ Util::imageBuild_t new_imageBuild;
uint32_t err_plid;
uint32_t err_eid;
@@ -442,7 +453,7 @@ namespace SBE
/**
* @brief Determines which Seeprom was used to boot the SBE
*
- * @param[in] i_target Target processor to customize
+ * @param[in] i_target Target processor to customize.
*
* @param[out] o_bootSide The Seeprom the SBE booted from
*
diff --git a/src/include/usr/util/utilxipimage.H b/src/include/usr/util/utilxipimage.H
new file mode 100644
index 000000000..54aa77d03
--- /dev/null
+++ b/src/include/usr/util/utilxipimage.H
@@ -0,0 +1,65 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/util/utilxipimage.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* 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 */
+/**
+ * @file util/utilxipimage.H
+ *
+ * @brief Provides utility functions for XIP images.
+ */
+#ifndef __UTIL_XIP_IMAGE_H
+#define __UTIL_XIP_IMAGE_H
+
+//******************************************************************************
+// Includes
+//******************************************************************************
+#include <trace/interface.H>
+
+namespace Util
+{
+
+ /**
+ * @brief Structure for XIP image build information
+ */
+ struct imageBuild_t
+ {
+ uint32_t buildDate; // Generated by `date +%Y%m%d`, eg, 20110630
+ uint32_t buildTime; // Generated by `date +%H%M`, eg, 0756
+ char buildTag[20]; // Generated when releasing image to fw
+ } PACKED;
+
+ /**
+ * @brief Pull build information from XIP header and trace it.
+ * @param[in] i_imagePtr Pointer to image with XIP header.
+ *
+ * @param[out] o_imageBuild Build information for input image.
+ *
+ * @param[in] i_traceDesc Trace descriptor for trace buffer to use.
+ * Defaults to nullptr and not tracing.
+ */
+ void pullTraceBuildInfo(void* i_imagePtr,
+ imageBuild_t& o_imageBuild,
+ trace_desc_t* i_traceDesc = nullptr);
+}
+
+#endif \ No newline at end of file
diff --git a/src/usr/isteps/istep15/host_build_stop_image.C b/src/usr/isteps/istep15/host_build_stop_image.C
index b63fc4390..720f0f31d 100644
--- a/src/usr/isteps/istep15/host_build_stop_image.C
+++ b/src/usr/isteps/istep15/host_build_stop_image.C
@@ -33,11 +33,15 @@
#include <isteps/pm/pm_common_ext.H>
#include <config.h>
+//Utilities
+#include <util/utilxipimage.H>
+
//Error handling and tracing
#include <errl/errlentry.H>
#include <errl/errluserdetails.H>
#include <errl/errludtarget.H>
#include <errl/errlmanager.H>
+#include <errl/errlreasoncodes.H>
#include <isteps/hwpisteperror.H>
#include <initservice/isteps_trace.H>
@@ -447,6 +451,12 @@ void* host_build_stop_image (void *io_pArgs)
unload_hcode_pnor_section = true;
#endif
+ // Pull build information from XIP header and trace it
+ Util::imageBuild_t l_imageBuild;
+ Util::pullTraceBuildInfo(l_pHcodeImage,
+ l_imageBuild,
+ ISTEPS_TRACE::g_trac_isteps_trace);
+
// Loop through all functional Procs and generate images for them.
//get a list of all the functional Procs
TARGETING::TargetHandleList l_procChips;
@@ -570,6 +580,13 @@ void* host_build_stop_image (void *io_pArgs)
// capture the target data in the elog
ErrlUserDetailsTarget(l_procChip).addToLog( l_errl );
+ l_errl->addFFDC( HWPF_COMP_ID,
+ reinterpret_cast<void *>(&l_imageBuild),
+ sizeof(Util::imageBuild_t),
+ 0, // Version
+ ERRL_UDT_NOFORMAT, // parser ignores data
+ false ); // merge
+
// Create IStep error log and cross ref error that occurred
l_StepError.addErrorDetails( l_errl );
diff --git a/src/usr/isteps/pm/pm_common.C b/src/usr/isteps/pm/pm_common.C
index 15a91c5a1..c7170fbd1 100644
--- a/src/usr/isteps/pm/pm_common.C
+++ b/src/usr/isteps/pm/pm_common.C
@@ -29,10 +29,14 @@
#include <initservice/taskargs.H>
#include <errl/errlentry.H>
+#include <errl/errlreasoncodes.H>
#include <sys/misc.h>
#include <sys/mm.h>
-#include <sys/time.h>
+#include <sys/time.h>
+
+#include <util/utilxipimage.H>
+
// targeting support
#include <targeting/common/commontargeting.H>
#include <targeting/common/utilFilter.H>
@@ -61,6 +65,8 @@
#include <p9_hcode_image_build.H>
#include <p9_hcode_image_defines.H>
+#include <p9_xip_image.h>
+
#include <arch/ppc.H>
#include <isteps/pm/occAccess.H>
@@ -297,6 +303,12 @@ namespace HBPM
l_pImageIn,
l_lidId);
+ // Pull build information from XIP header and trace it
+ Util::imageBuild_t l_imageBuild;
+ Util::pullTraceBuildInfo(l_pImageIn,
+ l_imageBuild,
+ ISTEPS_TRACE::g_trac_isteps_trace);
+
ImageType_t l_imgType;
// Check if we have a valid ring override section and
@@ -332,6 +344,12 @@ namespace HBPM
{
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
ERR_MRK"loadHcode: p9_hcode_image_build failed!" );
+ l_errl->addFFDC( ISTEP_COMP_ID,
+ reinterpret_cast<void *>(&l_imageBuild),
+ sizeof(Util::imageBuild_t),
+ 0, // Version
+ ERRORLOG::ERRL_UDT_NOFORMAT, // parser ignores
+ false ); // merge
l_errl->collectTrace("ISTEPS_TRACE",256);
break;
diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C
index b3366adf0..6fe32951d 100644
--- a/src/usr/sbe/sbe_update.C
+++ b/src/usr/sbe/sbe_update.C
@@ -38,6 +38,7 @@
#include <util/align.H>
#include <util/crc32.H>
#include <util/misc.H>
+#include <util/utilxipimage.H>
#include <errno.h>
#include <pnor/pnorif.H>
#include <pnor/ecc.H>
@@ -1750,6 +1751,13 @@ namespace SBE
errlHndl_t err = NULL;
void *sbeHbblImgPtr = NULL;
+ // Clear build information
+ io_sbeState.new_imageBuild.buildDate = 0;
+ io_sbeState.new_imageBuild.buildTime = 0;
+ memset(io_sbeState.new_imageBuild.buildTag,
+ '\0',
+ sizeof(io_sbeState.new_imageBuild.buildTag) );
+
do{
/************************************************************/
@@ -1832,6 +1840,11 @@ namespace SBE
TRACFCOMP( g_trac_sbe, "getSbeInfoState() - "
"sbePnorPtr=%p, sbePnorImageSize=0x%08X (%d)",
sbePnorPtr, sbePnorImageSize, sbePnorImageSize);
+
+ // Pull build information from XIP header and trace it
+ Util::pullTraceBuildInfo(sbePnorPtr,
+ io_sbeState.new_imageBuild,
+ g_trac_sbe);
}
// copy tmp_pnorVersion to the main structure
@@ -2190,6 +2203,17 @@ namespace SBE
}while(0);
+ if(err && (io_sbeState.new_imageBuild.buildDate != 0) &&
+ (io_sbeState.new_imageBuild.buildTime != 0))
+ {
+ err->addFFDC(SBE_COMP_ID,
+ &(io_sbeState.new_imageBuild),
+ sizeof(io_sbeState.new_imageBuild),
+ 0, // Version
+ ERRL_UDT_NOFORMAT, // parser ignores data
+ false ); // merge
+ }
+
return err;
}
@@ -2700,6 +2724,12 @@ namespace SBE
&io_sbeState.new_seeprom_ver,
sbeInfoSize );
+ // Also update with new Build date, time, and tag for MVPD
+ memcpy( io_sbeState.seeprom_side_to_update == EEPROM::SBE_PRIMARY
+ ? &io_sbeState.mvpdSbKeyword.seeprom_0_build
+ : &io_sbeState.mvpdSbKeyword.seeprom_1_build,
+ &io_sbeState.new_imageBuild,
+ sizeof(Util::imageBuild_t) );
}while(0);
// Free allocated memory
diff --git a/src/usr/util/makefile b/src/usr/util/makefile
index 6f6623d6f..d2c86d816 100644
--- a/src/usr/util/makefile
+++ b/src/usr/util/makefile
@@ -25,6 +25,9 @@
ROOTPATH = ../../..
MODULE = util
+## pointer to common HWP files
+EXTRAINCDIR += ${ROOTPATH}/src/import/chips/p9/xip/
+
OBJS += threadpool.o
OBJS += utilbase.o
OBJS += utilstream.o
@@ -36,6 +39,7 @@ OBJS += utilmbox_scratch.o
OBJS += utiltcemgr.o
OBJS += utilsemipersist.o
OBJS += utilrsvdmem.o
+OBJS += utilxipimage.o
SUBDIRS += test.d
SUBDIRS += runtime.d
diff --git a/src/usr/util/runtime/makefile b/src/usr/util/runtime/makefile
index c9bc4b0ef..3f2ea4e4b 100644
--- a/src/usr/util/runtime/makefile
+++ b/src/usr/util/runtime/makefile
@@ -26,6 +26,9 @@ HOSTBOOT_RUNTIME = 1
ROOTPATH = ../../../..
MODULE = util_rt
+## pointer to common HWP files
+EXTRAINCDIR += ${ROOTPATH}/src/import/chips/p9/xip/
+
OBJS += utilbase.o
OBJS += utilstream.o
OBJS += utilmem.o
@@ -35,6 +38,7 @@ OBJS += utillidpnor.o
OBJS += rt_cmds.o
OBJS += util_rt.o
OBJS += utilrsvdmem.o
+OBJS += utilxipimage.o
SUBDIRS += test.d
diff --git a/src/usr/util/utilxipimage.C b/src/usr/util/utilxipimage.C
new file mode 100644
index 000000000..b8b9fdf85
--- /dev/null
+++ b/src/usr/util/utilxipimage.C
@@ -0,0 +1,57 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/util/utilxipimage.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* 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 <string.h>
+#include <util/utilxipimage.H>
+
+//Procedures
+#include <p9_xip_image.h>
+
+namespace Util
+{
+ void pullTraceBuildInfo(void* i_imagePtr,
+ imageBuild_t& o_imageBuild,
+ trace_desc_t* i_traceDesc)
+ {
+ // Pull build information from XIP header
+ P9XipHeader* l_xipHeader = reinterpret_cast<P9XipHeader *>(i_imagePtr);
+
+ o_imageBuild.buildDate = l_xipHeader->iv_buildDate;
+ o_imageBuild.buildTime = l_xipHeader->iv_buildTime;
+ memcpy(o_imageBuild.buildTag,
+ l_xipHeader->iv_buildTag,
+ sizeof(o_imageBuild.buildTag) );
+
+ // Trace build information if trace parameter supplied
+ if(i_traceDesc != nullptr)
+ {
+ TRACFCOMP(i_traceDesc, "pullTraceBuildInfo: image build date "
+ "= %8d, build time = %04d, build tag = %-.20s",
+ o_imageBuild.buildDate,
+ o_imageBuild.buildTime,
+ o_imageBuild.buildTag);
+ }
+ }
+} \ No newline at end of file
OpenPOWER on IntegriCloud