summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp
diff options
context:
space:
mode:
authorVan Lee <vanlee@us.ibm.com>2012-10-24 11:45:07 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-10-24 16:32:59 -0500
commitae2fc47103833e91ec7385e1ca89407f04653111 (patch)
tree9f4ceb094b62772138680f6c4a5518ba2f902032 /src/usr/hwpf/hwp
parent9604a1d673182c3edbc83518d795a32bec55b77d (diff)
downloadtalos-hostboot-ae2fc47103833e91ec7385e1ca89407f04653111.tar.gz
talos-hostboot-ae2fc47103833e91ec7385e1ca89407f04653111.zip
Fix proc_setup_bars fails on large config (4 procs 4 centaurs)
Change-Id: I8203c863f26aeb3a0ea20964e4c4bef64802c4e8 RTC: 50426 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/2118 Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Tested-by: Jenkins Server
Diffstat (limited to 'src/usr/hwpf/hwp')
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/dram_initialization.C81
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/makefile1
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C118
-rw-r--r--src/usr/hwpf/hwp/fapiTestHwp.C2
-rwxr-xr-xsrc/usr/hwpf/hwp/initfiles/sample.initfile18
5 files changed, 138 insertions, 82 deletions
diff --git a/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C b/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C
index b2af5d3a9..7f0cc87c0 100644
--- a/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C
+++ b/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C
@@ -57,6 +57,7 @@
#include <fapiPlatHwpInvoker.H>
#include "dram_initialization.H"
+#include <pbusLinkSvc.H>
// Uncomment these files as they become available:
// #include "host_startPRD_dram/host_startPRD_dram.H"
@@ -80,6 +81,7 @@ namespace DRAM_INITIALIZATION
{
using namespace TARGETING;
+using namespace EDI_EI_INITIALIZATION;
using namespace fapi;
@@ -426,59 +428,76 @@ void* call_proc_setup_bars( void *io_pArgs )
// -----------------------------------------------------------------------
std::vector<proc_setup_bars_proc_chip> l_proc_chips;
- for ( size_t i = 0; i < l_cpuTargetList.size(); i++ )
+ TargetPairs_t l_abusLinks;
+ l_errl = PbusLinkSvc::getTheInstance().getPbusConnections(
+ l_abusLinks, TYPE_ABUS, false );
+
+ for ( size_t i = 0; i < l_cpuTargetList.size() && !l_errl; i++ )
{
// make a local copy of the target for ease of use
const TARGETING::Target* l_pCpuTarget = l_cpuTargetList[i];
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "proc_setup_bars: proc %d", i );
- // dump physical path to targets
- EntityPath l_path;
- l_path = l_pCpuTarget->getAttr<ATTR_PHYS_PATH>();
- l_path.dump();
-
// cast OUR type of target to a FAPI type of target.
- const fapi::Target l_fapi_pCpuTarget(
- TARGET_TYPE_MEMBUF_CHIP,
- reinterpret_cast<void *>
- (const_cast<TARGETING::Target*>
- (l_pCpuTarget)) );
- // @todo Create dummy aX targets
- const fapi::Target l_a0_chip;
- const fapi::Target l_a1_chip;
- const fapi::Target l_a2_chip;
-
+ const fapi::Target l_fapi_pCpuTarget( TARGET_TYPE_PROC_CHIP,
+ reinterpret_cast<void *> (const_cast<TARGETING::Target*>
+ (l_pCpuTarget)) );
proc_setup_bars_proc_chip l_proc_chip ;
- l_proc_chip.this_chip = l_fapi_pCpuTarget;
- l_proc_chip.a0_chip = l_a0_chip;
- l_proc_chip.a1_chip = l_a1_chip;
- l_proc_chip.a2_chip = l_a2_chip;
- l_proc_chip.process_f0 = true;
- l_proc_chip.process_f1 = true;
+ l_proc_chip.this_chip = l_fapi_pCpuTarget;
+ l_proc_chip.process_f0 = true;
+ l_proc_chip.process_f1 = true;
+
+ TARGETING::TargetHandleList l_abuses;
+ getChildChiplets( l_abuses, l_pCpuTarget, TYPE_ABUS );
+
+ for (size_t j = 0; j < l_abuses.size(); j++)
+ {
+ TARGETING::Target * l_target = l_abuses[j];
+ uint8_t l_srcID = l_target->getAttr<ATTR_CHIP_UNIT>();
+ TargetPairs_t::iterator l_itr = l_abusLinks.find(l_target);
+ if ( l_itr == l_abusLinks.end() )
+ {
+ continue;
+ }
+
+ const TARGETING::Target *l_pParent = NULL;
+ l_pParent = getParentChip(
+ (const_cast<TARGETING::Target*>(l_itr->second)));
+ fapi::Target l_fapiproc_parent( TARGET_TYPE_PROC_CHIP,
+ (void *)l_pParent );
+
+ switch (l_srcID)
+ {
+ case 0: l_proc_chip.a0_chip = l_fapiproc_parent; break;
+ case 1: l_proc_chip.a1_chip = l_fapiproc_parent; break;
+ case 2: l_proc_chip.a2_chip = l_fapiproc_parent; break;
+ default: break;
+ }
+ }
l_proc_chips.push_back( l_proc_chip );
+ } // endfor
+
+ if (!l_errl)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "call proc_setup_bars");
+
// call the HWP with each fapi::Target
- FAPI_INVOKE_HWP( l_errl,
- proc_setup_bars,
- l_proc_chips,
- true );
+ FAPI_INVOKE_HWP( l_errl, proc_setup_bars, l_proc_chips, true );
if ( l_errl )
{
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"ERROR : proc_setup_bars" );
- // break out with error
- break;
}
else
{
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"SUCCESS : proc_setup-bars" );
}
- } // endfor
+ }
} // end if !l_errl
// @@@@@ END CUSTOM BLOCK: @@@@@
diff --git a/src/usr/hwpf/hwp/dram_initialization/makefile b/src/usr/hwpf/hwp/dram_initialization/makefile
index 57c44f0e3..3f0918a74 100644
--- a/src/usr/hwpf/hwp/dram_initialization/makefile
+++ b/src/usr/hwpf/hwp/dram_initialization/makefile
@@ -32,6 +32,7 @@ EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/hwp
## pointer to common HWP files
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/include
+EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/bus_training
## NOTE: add the base istep dir here.
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dram_initialization
diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C
index 8e3db1748..e3642c1cb 100644
--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C
+++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C
@@ -1,27 +1,26 @@
-/* IBM_PROLOG_BEGIN_TAG
- * This is an automatically generated prolog.
- *
- * $Source: src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C $
- *
- * IBM CONFIDENTIAL
- *
- * COPYRIGHT International Business Machines Corp. 2012
- *
- * p1
- *
- * Object Code Only (OCO) source materials
- * Licensed Internal Code Source Materials
- * IBM HostBoot Licensed Internal Code
- *
- * The source code for this program is not published or other-
- * wise divested of its trade secrets, irrespective of what has
- * been deposited with the U.S. Copyright Office.
- *
- * Origin: 30
- *
- * IBM_PROLOG_END_TAG
- */
-// $Id: proc_setup_bars.C,v 1.5 2012/07/23 17:47:05 jmcgill Exp $
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+// $Id: proc_setup_bars.C,v 1.7 2012/10/09 15:31:38 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_setup_bars.C,v $
//------------------------------------------------------------------------------
// *|
@@ -876,7 +875,7 @@ fapi::ReturnCode proc_setup_bars_nx_get_mmio_bar_attrs(
io_addr_range.size);
if (!rc.ok())
{
- FAPI_ERR("proc_setup_bars_fsp_get_bar_attrs: Error querying ATTR_PROC_NX_MMIO_BAR_SIZE");
+ FAPI_ERR("proc_setup_bars_nx_get_mmio_bar_attrs: Error querying ATTR_PROC_NX_MMIO_BAR_SIZE");
break;
}
@@ -1358,32 +1357,69 @@ fapi::ReturnCode proc_setup_bars_process_chips(
// mark function entry
FAPI_DBG("proc_setup_bars_process_chips: Start");
- // loop over all chips passed from platform to HWP
- std::vector<proc_setup_bars_proc_chip>::iterator iter;
- for (iter = i_proc_chips.begin();
- iter != i_proc_chips.end();
- iter++)
+ do
{
- // process platform provided data in chip argument,
- // query chip specific attributes
- proc_setup_bars_smp_chip smp_chip;
- rc = proc_setup_bars_process_chip(&(*iter),
- smp_chip);
+ // loop over all chips passed from platform to HWP
+ std::vector<proc_setup_bars_proc_chip>::iterator c_iter;
+ for (c_iter = i_proc_chips.begin();
+ c_iter != i_proc_chips.end();
+ c_iter++)
+ {
+ // process platform provided data in chip argument,
+ // query chip specific attributes
+ proc_setup_bars_smp_chip smp_chip;
+ rc = proc_setup_bars_process_chip(&(*c_iter),
+ smp_chip);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_setup_bars_process_chips: Error from proc_setup_bars_process_chip");
+ break;
+ }
+
+ // insert chip into SMP data structure given node & chip ID
+ rc = proc_setup_bars_insert_chip(smp_chip,
+ io_smp);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_setup_bars_process_chips: Error from proc_setup_bars_insert_chip");
+ break;
+ }
+ }
if (!rc.ok())
{
- FAPI_ERR("proc_setup_bars_process_chips: Error from proc_setup_bars_process_chip");
break;
}
- // insert chip into SMP data structure given node & chip ID
- rc = proc_setup_bars_insert_chip(smp_chip,
- io_smp);
+ // perform final power of two adjustment on node specific resources once
+ // all chips have been processed
+ std::map<proc_fab_smp_node_id, proc_setup_bars_smp_node>::iterator n_iter;
+ for (n_iter = io_smp.nodes.begin();
+ n_iter != io_smp.nodes.end();
+ n_iter++)
+ {
+ // update node address ranges (non-mirrored & mirrored)
+ FAPI_DBG("proc_setup_bars_process_chips: Node %d ranges after power of two alignment:",
+ n_iter->first);
+ // ensure range is power of 2 aligned
+ if (n_iter->second.non_mirrored_range.enabled &&
+ !n_iter->second.non_mirrored_range.is_power_of_2())
+ {
+ n_iter->second.non_mirrored_range.round_next_power_of_2();
+ }
+ n_iter->second.non_mirrored_range.print();
+
+ if (n_iter->second.mirrored_range.enabled &&
+ !n_iter->second.mirrored_range.is_power_of_2())
+ {
+ n_iter->second.mirrored_range.round_next_power_of_2();
+ }
+ n_iter->second.mirrored_range.print();
+ }
if (!rc.ok())
{
- FAPI_ERR("proc_setup_bars_process_chips: Error from proc_setup_bars_insert_chip");
break;
}
- }
+ } while(0);
// mark function exit
FAPI_DBG("proc_setup_bars_process_chips: End");
diff --git a/src/usr/hwpf/hwp/fapiTestHwp.C b/src/usr/hwpf/hwp/fapiTestHwp.C
index d7a0b273c..2d299b19b 100644
--- a/src/usr/hwpf/hwp/fapiTestHwp.C
+++ b/src/usr/hwpf/hwp/fapiTestHwp.C
@@ -73,7 +73,7 @@ fapi::ReturnCode hwpInitialTest(const std::vector<fapi::Target> & i_target)
do
{
// Use this SCOM register for testing
- const uint64_t l_addr = 0x13010002;
+ const uint64_t l_addr = 0x14010002;
ecmdDataBufferBase l_ScomData(64);
uint64_t l_originalScomData = 0;
diff --git a/src/usr/hwpf/hwp/initfiles/sample.initfile b/src/usr/hwpf/hwp/initfiles/sample.initfile
index 8bf99a087..32ffc7d08 100755
--- a/src/usr/hwpf/hwp/initfiles/sample.initfile
+++ b/src/usr/hwpf/hwp/initfiles/sample.initfile
@@ -67,7 +67,7 @@ define MBA1 = TGT2;
#--******************************************************************************
#-- Basic SCOM
#--******************************************************************************
-scom 0x0000000013010002 {
+scom 0x0000000014010002 {
scom_data ;
0xAABBC00000000000 ;
}
@@ -76,7 +76,7 @@ scom 0x0000000013010002 {
#-- Basic SCOM with Expression and Attribute
#--******************************************************************************
-scom 0x0000000013030007 {
+scom 0x0000000014030007 {
scom_data, expr ;
0x00000CDE00000000, SYS.ATTR_SCRATCH_UINT8_1 == SYS.ATTR_SCRATCH_UINT8_2 ;
}
@@ -139,7 +139,7 @@ scom 0x000000000006800c {
#--******************************************************************************
#-- Basic SCOM with bits
#--******************************************************************************
-scom 0x0000000013013283 {
+scom 0x0000000014013283 {
bits , scom_data ;
0:11 , 0b001111001001 ;
12 , 0b1 ;
@@ -152,7 +152,7 @@ scom 0x0000000013013283 {
#-- Complext SCOM with Bit Support, define, and attributes
#--******************************************************************************
-scom 0x0000000013013284 {
+scom 0x0000000014013284 {
bits , scom_data, expr ;
0:11 , 0b001111001001, ANY ;
12 , 0b1, def_equal_test ;
@@ -165,7 +165,7 @@ scom 0x0000000013013284 {
#-- Complex SCOM with Bit Support, and logical operators
#--******************************************************************************
-scom 0x0000000013013285 {
+scom 0x0000000014013285 {
bits , scom_data, expr ;
12 , 0b1, def_equal_test && def_not_equal_test ;
12 , 0b0, def_equal_test || def_not_equal_test ;
@@ -183,7 +183,7 @@ scom 0x0000000013013285 {
#-- SCOM with 'ec' column - Use scratch for now since all attributes work
#--******************************************************************************
-scom 0x0000000013013286 {
+scom 0x0000000014013286 {
scom_data, SYS.ATTR_SCRATCH_UINT32_1, SYS.ATTR_SCRATCH_UINT32_2 ;
0x0000000000000192, != 0, >= ENUM_ATTR_SCRATCH_UINT64_ARRAY_2_VAL_B ;
}
@@ -191,7 +191,7 @@ scom 0x0000000013013286 {
#--******************************************************************************
#-- Basic SCOM with an array
#--******************************************************************************
-scom 0x0000000013013287 {
+scom 0x0000000014013287 {
scom_data, expr ;
0x0000000000000182, SYS.ATTR_SCRATCH_UINT8_ARRAY_1[2] == SYS.ATTR_SCRATCH_UINT8_1 ;
}
@@ -199,7 +199,7 @@ scom 0x0000000013013287 {
#--******************************************************************************
#-- SCOM with 'ec' & expr column - Use scratch for now since all attributes work
#--******************************************************************************
-scom 0x0000000013013288 {
+scom 0x0000000014013288 {
scom_data, SYS.ATTR_SCRATCH_UINT32_1, expr;
0x0000000000000192, 3, SYS.ATTR_SCRATCH_UINT8_ARRAY_2[1][2][3] == 0x00000000000000BE;
}
@@ -207,7 +207,7 @@ scom 0x0000000013013288 {
#--******************************************************************************
#-- Complex SCOM with Bit Support, associated attributes and logical operators
#--******************************************************************************
-scom 0x0000000013013289 {
+scom 0x0000000014013289 {
bits, scom_data, MBA1.ATTR_CHIP_UNIT_POS, expr;
23, 0b0, 1, MBA0.ATTR_CHIP_UNIT_POS == 1;
23, MBA1.ATTR_CHIP_UNIT_POS, 1, MBA0.ATTR_CHIP_UNIT_POS == 0;
OpenPOWER on IntegriCloud