summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/plat/explorer
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2019-05-29 15:15:25 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2019-06-17 20:28:37 -0500
commitc153a4336ab2dc464ea0e5c5a3a8f392cb2708c6 (patch)
tree496e5aaab696915fc0a46587fe2ac2ebb8af5b0d /src/usr/diag/prdf/common/plat/explorer
parentcffebe48c7b15e67c07fe6e805d240ee9ba6f93b (diff)
downloadtalos-hostboot-c153a4336ab2dc464ea0e5c5a3a8f392cb2708c6.tar.gz
talos-hostboot-c153a4336ab2dc464ea0e5c5a3a8f392cb2708c6.zip
PRD: Initial Explorer Plugin Files
Change-Id: I42191cb8afa66cdb8c2dfe71383f81e20c358bcc RTC: 200583 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/78481 Reviewed-by: Paul Greenwood <paul.greenwood@ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Benjamen G. Tyner <ben.tyner@ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/78994 Tested-by: Zane C. Shelley <zshelle@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf/common/plat/explorer')
-rw-r--r--src/usr/diag/prdf/common/plat/explorer/explorer_ocmb.rule39
-rw-r--r--src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_actions.rule124
-rw-r--r--src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule47
-rw-r--r--src/usr/diag/prdf/common/plat/explorer/prdfExplorerPlugins_common.C317
-rw-r--r--src/usr/diag/prdf/common/plat/explorer/prdf_plat_explorer.mk39
5 files changed, 563 insertions, 3 deletions
diff --git a/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb.rule b/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb.rule
index 1abd08c96..f0974f623 100644
--- a/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb.rule
+++ b/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb.rule
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2018
+# Contributors Listed Below - COPYRIGHT 2018,2019
# [+] International Business Machines Corp.
#
#
@@ -366,6 +366,10 @@ rule rMB_CHIPLET_FIR
(MB_CHIPLET_RE_FIR >> 2) & ~MB_CHIPLET_FIR_MASK & `1fffffffffffffff`;
};
+# NOTE: RDFFIR[14|34] are possible side effects of OCMB_LFIR[38], as such,
+# OCMB_LFIR must be analyzed first for correct handling. If changes are
+# made so the RDFFIR is analyzed first, additional changes to the handling
+# of those bits will be required.
group gMB_CHIPLET_FIR attntype CHECK_STOP, RECOVERABLE
filter singlebit
{
@@ -1222,7 +1226,7 @@ group gTLXFIR
/** TLXFIR[9]
* TLXT recoverable error
*/
- (rTLXFIR, bit(9)) ? defaultMaskedError;
+ (rTLXFIR, bit(9)) ? analyzeTLXERR1;
/** TLXFIR[10]
* TLXT configuration error
@@ -1316,6 +1320,37 @@ group gTLXFIR
};
+rule rTLX_ERR1_REPORT
+{
+ RECOVERABLE:
+ TLX_ERR1_REPORT & ~TLX_ERR1_REPORT_MASK;
+};
+
+group gTLX_ERR1_REPORT
+ filter singlebit,
+ cs_root_cause
+{
+ /** TLX_ERR1_REPORT[37]
+ * TLXT FIFO CE
+ */
+ (rTLXFIR, bit(37)) ? self_th_32perDay;
+
+ /** TLX_ERR1_REPORT[39]
+ * Unexpected Interrupt Response
+ */
+ (rTLXFIR, bit(39)) ? parent_proc_th_32perDay;
+
+ /** TLX_ERR1_REPORT[40]
+ * BDI Poisoned
+ */
+ (rTLXFIR, bit(40)) ? self_th_1;
+
+ /** TLX_ERR1_REPORT[41]
+ * TLXT Metadata UE
+ */
+ (rTLXFIR, bit(41)) ? self_th_1;
+};
+
################################################################################
# Explorer chip OMIDLFIR
################################################################################
diff --git a/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_actions.rule b/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_actions.rule
index 023821b0d..c5e9c96f0 100644
--- a/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_actions.rule
+++ b/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_actions.rule
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2018
+# Contributors Listed Below - COPYRIGHT 2018,2019
# [+] International Business Machines Corp.
#
#
@@ -55,6 +55,12 @@ actionclass threshold32pday
threshold( field(32 / day) );
};
+/** Threshold of 5 per day */
+actionclass threshold5pday
+{
+ threshold( field(5 / day) );
+};
+
################################################################################
# Threshold and Mask policy
################################################################################
@@ -99,6 +105,13 @@ actionclass callout2ndLvlMed
actionclass calloutSelfLowNoGard
{ callout(MRU_LOW, NO_GARD); };
+actionclass omi_bus
+{
+ calloutSelfMedA;
+ callout(connected(TYPE_OMI), MRU_MEDA);
+ funccall("calloutBusInterfacePlugin");
+};
+
################################################################################
# Callouts with thresholds #
################################################################################
@@ -153,6 +166,110 @@ actionclass TBDDefaultCallout
};
################################################################################
+# OCMB Actions #
+################################################################################
+
+/** MCBIST program complete */
+actionclass mcbist_program_complete
+{
+ funccall("McbistCmdComplete");
+};
+
+/** DDR4 PHY Interrupt */
+actionclass ddr4_phy_interrupt
+{
+ calloutSelfHigh;
+ threshold5pday;
+ funccall("Ddr4PhyInterrupt");
+};
+
+/** Foxhound Fatal */
+actionclass foxhound_fatal
+{
+ funccall("FoxhoundFatal");
+ threshold1;
+};
+
+/** OMI-DL Fatal Error */
+actionclass dl_fatal_error
+{
+ try( funccall("DlFatalError"), omi_bus );
+ threshold1;
+};
+
+/** Verify Chip Mark */
+actionclass verify_chip_mark_0 { funccall("AnalyzeFetchMpe_0"); };
+actionclass verify_chip_mark_1 { funccall("AnalyzeFetchMpe_1"); };
+actionclass verify_chip_mark_2 { funccall("AnalyzeFetchMpe_2"); };
+actionclass verify_chip_mark_3 { funccall("AnalyzeFetchMpe_3"); };
+actionclass verify_chip_mark_4 { funccall("AnalyzeFetchMpe_4"); };
+actionclass verify_chip_mark_5 { funccall("AnalyzeFetchMpe_5"); };
+actionclass verify_chip_mark_6 { funccall("AnalyzeFetchMpe_6"); };
+actionclass verify_chip_mark_7 { funccall("AnalyzeFetchMpe_7"); };
+
+# TODO RTC 208211
+/** Mainline NCE/TCE handling */
+actionclass mainline_nce_tce_handling
+{
+ defaultMaskedError;
+};
+
+/** Handle Mainline AUEs/IAUEs */
+actionclass mainline_aue_iaue_handling
+{
+ defaultMaskedError;
+};
+
+/** Mainline UE handling */
+actionclass mainline_ue_handling
+{
+ defaultMaskedError;
+};
+
+/** Handle Mainline IUEs */
+actionclass mainline_iue_handling
+{
+ defaultMaskedError;
+};
+
+actionclass memory_impe_handling
+{
+ defaultMaskedError;
+};
+
+/** Handle Maintenance AUEs */
+actionclass maintenance_aue_handling
+{
+ defaultMaskedError;
+};
+
+/** Handle Maintenance IAUEs */
+actionclass maintenance_iaue_handling
+{
+ defaultMaskedError;
+};
+
+/** RDF RCD Parity Error */
+actionclass rdf_rcd_parity_error
+{
+ funccall("RdfRcdParityError");
+ threshold1;
+};
+
+/** SRQ RCD Parity Error */
+actionclass srq_rcd_parity_error
+{
+ funccall("CalloutAttachedDimmsHigh");
+ callout(connected(TYPE_MEM_PORT,0), MRU_LOW);
+ threshold32pday;
+};
+
+actionclass mem_port_failure
+{
+ defaultMaskedError;
+};
+
+################################################################################
# Analyze groups
################################################################################
@@ -162,5 +279,10 @@ actionclass analyzeSRQFIR { analyze(gSRQFIR); };
actionclass analyzeMCBISTFIR { analyze(gMCBISTFIR); };
actionclass analyzeRDFFIR { analyze(gRDFFIR); };
actionclass analyzeTLXFIR { analyze(gTLXFIR); };
+actionclass analyzeTLXERR1
+{
+ analyze(gTLX_ERR1_REPORT);
+ funccall("clearAndMaskTlxtRe");
+};
actionclass analyzeOMIDLFIR { analyze(gOMIDLFIR); };
diff --git a/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule b/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule
index c302f32cd..ad704f83d 100644
--- a/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule
+++ b/src/usr/diag/prdf/common/plat/explorer/explorer_ocmb_regs.rule
@@ -343,3 +343,50 @@
scomaddr 0x08011C1F;
capture group default;
};
+
+ ###########################################################################
+ # P9 OCMB target OMIDLFIR
+ ###########################################################################
+
+ register DL0_ERROR_HOLD
+ {
+ name "P9 OCMB target DL0 Error Hold Register";
+ scomaddr 0x08012813;
+ capture group default;
+ };
+
+ ###########################################################################
+ # P9 OCMB target TLXFIR
+ ###########################################################################
+
+ register TLXFIR_AND
+ {
+ name "Explorer chip TLXFIR AND";
+ scomaddr 0x08012401;
+ capture group never;
+ access write_only;
+ };
+
+ register TLXFIR_MASK_OR
+ {
+ name "Explorer chip TLXFIR MASK OR";
+ scomaddr 0x08012405;
+ capture group never;
+ access write_only;
+ };
+
+ register TLX_ERR1_REPORT
+ {
+ name "P9 OCMB target TLX Error Report Register";
+ scomaddr 0x0801241D;
+ reset (&, 0x0801241D);
+ mask (|, 0x08012415);
+ capture group default;
+ };
+
+ register TLX_ERR1_REPORT_MASK
+ {
+ name "P9 OCMB target TLX Error Report Register Mask";
+ scomaddr 0x08012415;
+ capture group default;
+ };
diff --git a/src/usr/diag/prdf/common/plat/explorer/prdfExplorerPlugins_common.C b/src/usr/diag/prdf/common/plat/explorer/prdfExplorerPlugins_common.C
new file mode 100644
index 000000000..14da87f59
--- /dev/null
+++ b/src/usr/diag/prdf/common/plat/explorer/prdfExplorerPlugins_common.C
@@ -0,0 +1,317 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/diag/prdf/common/plat/explorer/prdfExplorerPlugins_common.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2019 */
+/* [+] 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 */
+
+// Framework includes
+#include <iipServiceDataCollector.h>
+#include <prdfExtensibleChip.H>
+#include <prdfPluginMap.H>
+
+// Platform includes
+#include <prdfMemDbUtils.H>
+#include <prdfMemEccAnalysis.H>
+#include <prdfPlatServices.H>
+
+using namespace TARGETING;
+
+namespace PRDF
+{
+
+using namespace PlatServices;
+
+namespace explorer_ocmb
+{
+
+//##############################################################################
+//
+// OCMB_LFIR
+//
+//##############################################################################
+
+/**
+ * @brief OCMB_LFIR[38] - DDR4 PHY interrupt
+ * @param i_chip An OCMB chip.
+ * @param io_sc The step code data struct.
+ * @return SUCCESS
+ */
+int32_t Ddr4PhyInterrupt( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc )
+{
+ #define PRDF_FUNC "[explorer_ocmb::Ddr4PhyInterrupt] "
+
+ SCAN_COMM_REGISTER_CLASS * rdffir = i_chip->getRegister( "RDFFIR" );
+
+ // If Mainline UE (RDFFIR[14]) or Maint UE (RDFFIR[34]) are on at the same
+ // time as this:
+ if ( rdffir->IsBitSet(14) || rdffir->IsBitSet(34) )
+ {
+ // callout Explorer on 1st
+ io_sc.service_data->SetThresholdMaskId(0);
+
+ // mask maint and mainline UE which are assumed to be side-effects
+ SCAN_COMM_REGISTER_CLASS * rdffir_mask_or =
+ i_chip->getRegister( "RDFFIR_MASK_OR" );
+
+ rdffir_mask_or->SetBit(14);
+ rdffir_mask_or->SetBit(34);
+
+ if ( SUCCESS != rdffir_mask_or->Write() )
+ {
+ PRDF_ERR( PRDF_FUNC "Write() failed on RDFFIR_MASK_OR: 0x%08x",
+ i_chip->getHuid() );
+ }
+ }
+ else
+ {
+ //TODO RTC 200583
+ // callout Explorer on threshold (5/day)
+ // NOTE: in this case we will have to clear both hw driven checkers
+ // manually before clearing the FIR
+ }
+
+ return SUCCESS;
+
+ #undef PRDF_FUNC
+}
+PRDF_PLUGIN_DEFINE( explorer_ocmb, Ddr4PhyInterrupt );
+
+/**
+ * @brief OCMB_LFIR[39:46] - Foxhound Fatal
+ * @param i_chip An OCMB chip.
+ * @param io_sc The step code data struct.
+ * @return SUCCESS
+ */
+int32_t FoxhoundFatal( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc )
+{
+ #define PRDF_FUNC "[explorer_ocmb::FoxhoundFatal] "
+
+ //TODO RTC 200583
+
+ return SUCCESS;
+
+ #undef PRDF_FUNC
+}
+PRDF_PLUGIN_DEFINE( explorer_ocmb, FoxhoundFatal );
+
+//##############################################################################
+//
+// OMIDLFIR
+//
+//##############################################################################
+
+/**
+ * @brief OMIDLFIR[0] - OMI-DL0 Fatal Error
+ * @param i_chip An OCMB chip.
+ * @param io_sc The step code data struct.
+ * @return PRD_SCAN_COMM_REGISTER_ZERO for the bus callout, else SUCCESS
+ */
+int32_t DlFatalError( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc )
+{
+ #define PRDF_FUNC "[explorer_ocmb::DlFatalError] "
+
+ int32_t rc = SUCCESS;
+
+ do
+ {
+ // Check DL0_ERROR_HOLD[52:63] to determine callout
+ SCAN_COMM_REGISTER_CLASS * dl0_error_hold =
+ i_chip->getRegister( "DL0_ERROR_HOLD" );
+
+ if ( SUCCESS != dl0_error_hold->Read() )
+ {
+ PRDF_ERR( PRDF_FUNC "Read() Failed on DL0_ERROR_HOLD: "
+ "i_chip=0x%08x", i_chip->getHuid() );
+ break;
+ }
+
+ if ( dl0_error_hold->IsBitSet(53) ||
+ dl0_error_hold->IsBitSet(55) ||
+ dl0_error_hold->IsBitSet(57) ||
+ dl0_error_hold->IsBitSet(58) ||
+ dl0_error_hold->IsBitSet(59) ||
+ dl0_error_hold->IsBitSet(60) ||
+ dl0_error_hold->IsBitSet(62) ||
+ dl0_error_hold->IsBitSet(63) )
+ {
+ // callout OCMB
+ io_sc.service_data->SetCallout( i_chip->getTrgt() );
+ }
+ else if ( dl0_error_hold->IsBitSet(54) ||
+ dl0_error_hold->IsBitSet(56) ||
+ dl0_error_hold->IsBitSet(61) )
+ {
+ // callout the OMI target, the OMI bus, and the OCMB.
+ // Return PRD_SCAN_COMM_REGISTER_ZERO so the rule code knows to
+ // make the correct callout.
+ rc = PRD_SCAN_COMM_REGISTER_ZERO;
+ }
+
+ }while(0);
+
+ return rc;
+
+ #undef PRDF_FUNC
+}
+PRDF_PLUGIN_DEFINE( explorer_ocmb, DlFatalError );
+
+//##############################################################################
+//
+// RDFFIR
+//
+//##############################################################################
+
+/**
+ * @brief Adds all attached DIMMs at HIGH priority.
+ * @param i_chip An OCMB chip.
+ * @param io_sc The step code data struct.
+ * @return SUCCESS
+ */
+int32_t CalloutAttachedDimmsHigh( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc )
+{
+ for ( auto & dimm : getConnected(i_chip->getTrgt(), TYPE_DIMM) )
+ io_sc.service_data->SetCallout( dimm, MRU_HIGH );
+
+ return SUCCESS; // nothing to return to rule code
+}
+PRDF_PLUGIN_DEFINE( explorer_ocmb, CalloutAttachedDimmsHigh );
+
+/**
+ * @brief RDF RCD Parity Error
+ * @param i_chip An OCMB chip.
+ * @param io_sc The step code data struct.
+ * @return SUCCESS
+ */
+int32_t RdfRcdParityError( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc )
+{
+ #define PRDF_FUNC "[explorer_ocmb::RdfRcdParityError] "
+
+ do
+ {
+ SCAN_COMM_REGISTER_CLASS * rdffir = i_chip->getRegister( "RDFFIR" );
+ if ( SUCCESS != rdffir->Read() )
+ {
+ PRDF_ERR( PRDF_FUNC "Read() Failed on RDFFIR: "
+ "i_chip=0x%08x", i_chip->getHuid() );
+ break;
+ }
+
+ // If RDFFIR[40] on at the same time, this is 'missing rddata valid'
+ // case, which returns SUE
+ if ( rdffir->IsBitSet(40) )
+ {
+ // callout MEM_PORT on 1st occurrence
+ ExtensibleChip * memPort =
+ getConnectedChild( i_chip, TYPE_MEM_PORT, 0 );
+ io_sc.service_data->SetCallout( memPort->getTrgt() );
+ }
+ // Else this is 'confirmed RCD parity error' case
+ else
+ {
+ // callout DIMM high priority, MEM_PORT low on 1st occurrence
+ CalloutAttachedDimmsHigh( i_chip, io_sc );
+ ExtensibleChip * memPort =
+ getConnectedChild( i_chip, TYPE_MEM_PORT, 0 );
+ io_sc.service_data->SetCallout( memPort->getTrgt(), MRU_LOW );
+ }
+
+ // Mask bit 40 as well
+ SCAN_COMM_REGISTER_CLASS * rdffir_mask_or =
+ i_chip->getRegister( "RDFFIR_MASK_OR" );
+
+ rdffir_mask_or->SetBit(40);
+ if ( SUCCESS != rdffir_mask_or->Write() )
+ {
+ PRDF_ERR( PRDF_FUNC "Write() Failed on RDFFIR_MASK_OR: "
+ "i_chip=0x%08x", i_chip->getHuid() );
+ break;
+ }
+
+ }while(0);
+
+ return SUCCESS;
+
+ #undef PRDF_FUNC
+}
+PRDF_PLUGIN_DEFINE( explorer_ocmb, RdfRcdParityError );
+
+//##############################################################################
+//
+// TLXFIR
+//
+//##############################################################################
+
+/**
+ * @brief Clear/Mask TLXFIR[9]
+ * @param i_chip An OCMB chip.
+ * @param io_sc The step code data struct.
+ * @return SUCCESS
+ */
+int32_t clearAndMaskTlxtRe( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc )
+{
+ #define PRDF_FUNC "[explorer_ocmb::clearAndMaskTlxtRe] "
+
+ do
+ {
+ // If we are at threshold, mask TLXFIR[9].
+ if ( io_sc.service_data->IsAtThreshold() )
+ {
+ SCAN_COMM_REGISTER_CLASS * tlxfir_mask_or =
+ i_chip->getRegister( "TLXFIR_MASK_OR" );
+
+ tlxfir_mask_or->SetBit(9);
+ if ( SUCCESS != tlxfir_mask_or->Write() )
+ {
+ PRDF_ERR( PRDF_FUNC "Write() Failed on TLXFIR_MASK_OR: "
+ "i_chip=0x%08x", i_chip->getHuid() );
+ break;
+ }
+ }
+
+ // Clear TLXFIR[9]
+ SCAN_COMM_REGISTER_CLASS * tlxfir_and =
+ i_chip->getRegister( "TLXFIR_AND" );
+ tlxfir_and->setAllBits();
+
+ tlxfir_and->ClearBit(9);
+ if ( SUCCESS != tlxfir_and->Write() )
+ {
+ PRDF_ERR( PRDF_FUNC "Write() Failed on TLXFIR_AND: "
+ "i_chip=0x%08x", i_chip->getHuid() );
+ break;
+ }
+ }while(0);
+
+ return SUCCESS;
+
+ #undef PRDF_FUNC
+}
+PRDF_PLUGIN_DEFINE( explorer_ocmb, clearAndMaskTlxtRe );
+
+} // end namespace explorer_ocmb
+
+} // end namespace PRDF
+
diff --git a/src/usr/diag/prdf/common/plat/explorer/prdf_plat_explorer.mk b/src/usr/diag/prdf/common/plat/explorer/prdf_plat_explorer.mk
new file mode 100644
index 000000000..b79d5cc30
--- /dev/null
+++ b/src/usr/diag/prdf/common/plat/explorer/prdf_plat_explorer.mk
@@ -0,0 +1,39 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/usr/diag/prdf/common/plat/explorer/prdf_plat_explorer.mk $
+#
+# OpenPOWER HostBoot Project
+#
+# Contributors Listed Below - COPYRIGHT 2019
+# [+] 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
+
+################################################################################
+# Paths common to both FSP and Hostboot
+################################################################################
+
+prd_vpath += ${PRD_SRC_PATH}/common/plat/explorer
+
+prd_incpath += ${PRD_SRC_PATH}/common/plat/explorer
+
+################################################################################
+# Object files common to both FSP and Hostboot
+################################################################################
+
+# rule plugin related
+prd_rule_plugin += prdfExplorerPlugins_common.o
OpenPOWER on IntegriCloud