summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp
diff options
context:
space:
mode:
authorMatt Ploetz <maploetz@us.ibm.com>2014-03-10 13:00:56 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-03-13 14:13:59 -0500
commitfd579042a3d2f4a865f0f3c6c329e7948bc02b4b (patch)
tree5945ee7e1e17f36cd6e6c79c712859cdd798a0e5 /src/usr/hwpf/hwp/activate_powerbus/proc_build_smp
parent28d4676d9b0928a81717bc636a789c0383f80568 (diff)
downloadtalos-hostboot-fd579042a3d2f4a865f0f3c6c329e7948bc02b4b.tar.gz
talos-hostboot-fd579042a3d2f4a865f0f3c6c329e7948bc02b4b.zip
INITPROC: Hostboot - SW249242 RAS update Horton 2 and 3/8
Change-Id: Ib82fe45e26959586fb3b2a7c527f29a2c6396bc7 CQ: SW249242 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9450 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/activate_powerbus/proc_build_smp')
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C281
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H74
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.C277
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.H54
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.C173
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.H123
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml339
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.C461
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.H162
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C507
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H500
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.C200
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.H195
13 files changed, 2085 insertions, 1261 deletions
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C
index f7955914e..44dd7fdc0 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp.C,v 1.13 2013/11/13 01:44:13 jmcgill Exp $
+// $Id: proc_build_smp.C,v 1.15 2014/02/26 18:13:01 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp.C,v $
//------------------------------------------------------------------------------
// *|
@@ -39,12 +39,13 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp.H"
-#include "proc_build_smp_epsilon.H"
-#include "proc_build_smp_fbc_nohp.H"
-#include "proc_build_smp_fbc_ab.H"
-#include "proc_build_smp_fbc_cd.H"
-#include "proc_build_smp_adu.H"
+#include <proc_build_smp.H>
+#include <proc_build_smp_epsilon.H>
+#include <proc_build_smp_fbc_nohp.H>
+#include <proc_build_smp_fbc_ab.H>
+#include <proc_build_smp_fbc_cd.H>
+#include <proc_build_smp_adu.H>
+
extern "C"
{
@@ -72,8 +73,10 @@ extern "C"
// invalid,
// RC_PROC_BUILD_SMP_CORE_FLOOR_FREQ_RATIO_ERR if cache/nest frequency
// ratio is unsupported,
+// RC_PROC_BUILD_SMP_CORE_FREQ_RANGE_ERR if invalid relationship exists
+// between ceiling/nominal/floor core frequency attributes,
// RC_PROC_FAB_SMP_ASYNC_SAFE_MODE_ATTR_ERR if attribute value is
-// invalid,
+// invalid,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_process_system(
@@ -89,8 +92,6 @@ fapi::ReturnCode proc_build_smp_process_system(
do
{
-
- // ToDO: link to attribute if PB AVP mode support is needed
io_smp.avp_mode = false;
// get PB frequency attribute
@@ -162,9 +163,9 @@ fapi::ReturnCode proc_build_smp_process_system(
if (!((io_smp.freq_core_ceiling >= io_smp.freq_core_nom) &&
(io_smp.freq_core_nom >= io_smp.freq_core_floor)))
{
- const uint32_t& CEILING = io_smp.freq_core_ceiling;
- const uint32_t& NOM = io_smp.freq_core_nom;
- const uint32_t& FLOOR = io_smp.freq_core_floor;
+ const uint32_t& FREQ_CORE_CEILING = io_smp.freq_core_ceiling;
+ const uint32_t& FREQ_CORE_NOM = io_smp.freq_core_nom;
+ const uint32_t& FREQ_CORE_FLOOR = io_smp.freq_core_floor;
FAPI_SET_HWP_ERROR(rc,
RC_PROC_BUILD_SMP_CORE_FREQ_RANGE_ERR);
break;
@@ -232,11 +233,11 @@ fapi::ReturnCode proc_build_smp_process_system(
{
case 1:
io_smp.pump_mode = PROC_FAB_SMP_PUMP_MODE1;
- FAPI_DBG("proc_build_smp_process_system: ATTR_FABRIC_PROC_PUMP_MODE = NODAL_IS_CHIP_GROUP_IS_GROUP");
+ FAPI_DBG("proc_build_smp_process_system: ATTR_PROC_FABRIC_PUMP_MODE = NODAL_IS_CHIP_GROUP_IS_GROUP");
break;
case 2:
io_smp.pump_mode = PROC_FAB_SMP_PUMP_MODE2;
- FAPI_DBG("proc_build_smp_process_system: ATTR_FABRIC_PROC_PUMP_MODE = NODAL_AND_GROUP_IS_GROUP");
+ FAPI_DBG("proc_build_smp_process_system: ATTR_PROC_FABRIC_PUMP_MODE = NODAL_AND_GROUP_IS_GROUP");
break;
default:
FAPI_ERR("proc_build_smp_process_system: Invalid fabric pump mode attribute value 0x%02X",
@@ -424,11 +425,11 @@ fapi::ReturnCode proc_build_smp_process_system(
{
case 0:
io_smp.async_safe_mode = false;
- FAPI_DBG("proc_build_smp_process_system: ATTR_FABRIC_PROC_ASYNC_SAFE_MODE = false");
+ FAPI_DBG("proc_build_smp_process_system: ATTR_PROC_FABRIC_ASYNC_SAFE_MODE = false");
break;
case 1:
io_smp.async_safe_mode = true;
- FAPI_DBG("proc_build_smp_process_system: ATTR_FABRIC_PROC_ASYNC_SAFE_MODE = true");
+ FAPI_DBG("proc_build_smp_process_system: ATTR_PROC_FABRIC_ASYNC_SAFE_MODE = true");
break;
default:
FAPI_ERR("proc_build_smp_process_system: Invalid fabric async safe mode attribute value 0x%02X",
@@ -708,7 +709,7 @@ fapi::ReturnCode proc_build_smp_process_chip(
nx_enabled);
if (!rc.ok())
{
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_PROC_NX_ENABLE");
+ FAPI_ERR("proc_build_smp_process_chip: Error querying ATTR_PROC_NX_ENABLE");
break;
}
@@ -718,7 +719,7 @@ fapi::ReturnCode proc_build_smp_process_chip(
x_enabled);
if (!rc.ok())
{
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_PROC_X_ENABLE");
+ FAPI_ERR("proc_build_smp_process_chip: Error querying ATTR_PROC_X_ENABLE");
break;
}
@@ -728,7 +729,7 @@ fapi::ReturnCode proc_build_smp_process_chip(
a_enabled);
if (!rc.ok())
{
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_PROC_A_ENABLE");
+ FAPI_ERR("proc_build_smp_process_chip: Error querying ATTR_PROC_A_ENABLE");
break;
}
@@ -738,7 +739,7 @@ fapi::ReturnCode proc_build_smp_process_chip(
pcie_enabled);
if (!rc.ok())
{
- FAPI_ERR("proc_setup_bars_process_chip: Error querying ATTR_PROC_PCIE_ENABLE");
+ FAPI_ERR("proc_build_smp_process_chip: Error querying ATTR_PROC_PCIE_ENABLE");
break;
}
@@ -773,7 +774,7 @@ fapi::ReturnCode proc_build_smp_process_chip(
// are valid,
// RC_PROC_BUILD_SMP_MASTER_DESIGNATION_ERR if node/system master
// error is detected based on chip state and input paramters,
-// RC_PROC_BUILD_SMP_INVALID_OPERATION if an unsupported operation
+// RC_PROC_BUILD_SMP_INVALID_OPERATION_ERR if an unsupported operation
// is specified
// RC_PROC_BUILD_SMP_HOTPLUG_SHADOW_ERR if shadow registers are not
// equivalent,
@@ -887,6 +888,7 @@ fapi::ReturnCode proc_build_smp_set_master_config(
if (rc.ok() && error)
{
FAPI_ERR("proc_build_smp_set_master_config: Node/system master designation error");
+ const fapi::Target& TARGET = io_smp_chip.chip->this_chip;
const uint8_t& OP = i_op;
const bool& MASTER_CHIP_SYS_CURR = io_smp_chip.master_chip_sys_curr;
const bool& MASTER_CHIP_NODE_CURR = io_smp_chip.master_chip_node_curr;
@@ -918,7 +920,7 @@ fapi::ReturnCode proc_build_smp_set_master_config(
// fabric node/chip IDs are detected,
// RC_PROC_BUILD_SMP_MASTER_DESIGNATION_ERR if node/system master
// is detected based on chip state and input paramters,
-// RC_PROC_BUILD_SMP_INVALID_OPERATION if an unsupported operation
+// RC_PROC_BUILD_SMP_INVALID_OPERATION_ERR if an unsupported operation
// is specified
// RC_PROC_BUILD_SMP_HOTPLUG_SHADOW_ERR if shadow registers are not
// equivalent,
@@ -966,6 +968,8 @@ fapi::ReturnCode proc_build_smp_insert_chip(
if (!ret.second)
{
FAPI_ERR("proc_build_smp_insert_chip: Error encountered adding node to SMP");
+ const fapi::Target & TARGET = io_smp_chip.chip->this_chip;
+ const proc_fab_smp_node_id & NODE_ID = node_id;
FAPI_SET_HWP_ERROR(rc,
RC_PROC_BUILD_SMP_NODE_ADD_INTERNAL_ERR);
break;
@@ -983,8 +987,10 @@ fapi::ReturnCode proc_build_smp_insert_chip(
if (p_iter != io_smp.nodes[node_id].chips.end())
{
FAPI_ERR("proc_build_smp_insert_chip: Duplicate fabric node ID / chip ID found");
- const uint8_t& NODE_ID = node_id;
- const uint8_t& CHIP_ID = chip_id;
+ const fapi::Target & TARGET1 = io_smp_chip.chip->this_chip;
+ const fapi::Target & TARGET2 = p_iter->second.chip->this_chip;
+ const proc_fab_smp_node_id & NODE_ID = node_id;
+ const proc_fab_smp_chip_id & CHIP_ID = chip_id;
FAPI_SET_HWP_ERROR(rc,
RC_PROC_BUILD_SMP_DUPLICATE_FABRIC_ID_ERR);
break;
@@ -998,7 +1004,7 @@ fapi::ReturnCode proc_build_smp_insert_chip(
io_smp);
if (!rc.ok())
{
- FAPI_ERR("proc_build_smp_insert_chip: Error from proc_fab_smp_set_master_config");
+ FAPI_ERR("proc_build_smp_insert_chip: Error from proc_build_smp_set_master_config");
break;
}
@@ -1034,10 +1040,18 @@ fapi::ReturnCode proc_build_smp_insert_chip(
// do not specify a new fabric system master,
// RC_PROC_BUILD_SMP_MASTER_DESIGNATION_ERR if node/system master
// error is detected based on chip state and input paramters,
-// RC_PROC_BUILD_SMP_INVALID_OPERATION if an unsupported operation
+// RC_PROC_BUILD_SMP_INVALID_OPERATION_ERR if an unsupported operation
// is specified
// RC_PROC_BUILD_SMP_HOTPLUG_SHADOW_ERR if shadow registers are not
// equivalent,
+// RC_PROC_BUILD_SMP_AX_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_PCIE_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_LINK_TARGET_TYPE_ERR if link target type is
+// unsupported,
+// RC_PROC_BUILD_SMP_INVALID_TOPOLOGY if specified fabric topology
+// is illegal,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_process_chips(
@@ -1047,6 +1061,7 @@ fapi::ReturnCode proc_build_smp_process_chips(
{
// return code
fapi::ReturnCode rc;
+ uint32_t rc_ecmd = 0;
// mark function entry
FAPI_DBG("proc_build_smp_process_chips: Start");
@@ -1088,6 +1103,7 @@ fapi::ReturnCode proc_build_smp_process_chips(
break;
}
+ // ensure that new master was designated
if (!io_smp.master_chip_curr_set)
{
FAPI_ERR("proc_build_smp_process_chips: No system master specified!");
@@ -1098,12 +1114,15 @@ fapi::ReturnCode proc_build_smp_process_chips(
break;
}
+ // based on master designation, and operation phase,
+ // determine whether each chip will be quiesced as a result
+ // of switch activity
for (n_iter = io_smp.nodes.begin();
- (n_iter != io_smp.nodes.end()) && (rc.ok());
+ n_iter != io_smp.nodes.end();
n_iter++)
{
for (p_iter = n_iter->second.chips.begin();
- (p_iter != n_iter->second.chips.end()) && (rc.ok());
+ p_iter != n_iter->second.chips.end();
p_iter++)
{
if (((i_op == SMP_ACTIVATE_PHASE1) &&
@@ -1119,10 +1138,210 @@ fapi::ReturnCode proc_build_smp_process_chips(
}
}
}
- if (!rc.ok())
+
+ // check that fabric topology is logically valid
+ // 1) in a given node, all chips are connected to every other
+ // chip in the node, by an X bus
+ // 2) each chip is connected to its partner chip (with same chip id)
+ // in every other node, by an A bus
+
+ // build set of all valid node ids in system
+ FAPI_DBG("proc_build_smp_process_chips: Checking fabric topology");
+ ecmdDataBufferBase node_ids_in_system(PROC_FAB_SMP_NUM_NODE_IDS);
+ for (n_iter = io_smp.nodes.begin();
+ n_iter != io_smp.nodes.end();
+ n_iter++)
{
+ FAPI_DBG("proc_build_smp_process_chips: Adding n%d", n_iter->first);
+ rc_ecmd |= node_ids_in_system.setBit(n_iter->first);
+ }
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Error 0x%x forming system node ID set data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
break;
}
+
+ // iterate over all nodes
+ for (n_iter = io_smp.nodes.begin();
+ n_iter != io_smp.nodes.end();
+ n_iter++)
+ {
+ // build set of all valid chip ids in node
+ ecmdDataBufferBase chip_ids_in_node(PROC_FAB_SMP_NUM_CHIP_IDS);
+ for (p_iter = n_iter->second.chips.begin();
+ p_iter != n_iter->second.chips.end();
+ p_iter++)
+ {
+ FAPI_DBG("proc_build_smp_process_chips: Adding n%d:p%d",
+ n_iter->first, p_iter->first);
+ rc_ecmd |= chip_ids_in_node.setBit(p_iter->first);
+ }
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Error 0x%x forming node %d chip ID set data buffer",
+ rc_ecmd, n_iter->first);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ // iterate over all chips in current node
+ for (p_iter = n_iter->second.chips.begin();
+ p_iter != n_iter->second.chips.end();
+ p_iter++)
+ {
+ FAPI_DBG("proc_build_smp_process_chips: Processing links for n%d:p%d",
+ n_iter->first, p_iter->first);
+ std::vector<fapi::Target *> x_link_targets;
+ x_link_targets.push_back(&(p_iter->second.chip->x0_chip));
+ x_link_targets.push_back(&(p_iter->second.chip->x1_chip));
+ x_link_targets.push_back(&(p_iter->second.chip->x2_chip));
+ x_link_targets.push_back(&(p_iter->second.chip->x3_chip));
+
+ std::vector<fapi::Target *> a_link_targets;
+ a_link_targets.push_back(&(p_iter->second.chip->a0_chip));
+ a_link_targets.push_back(&(p_iter->second.chip->a1_chip));
+ a_link_targets.push_back(&(p_iter->second.chip->a2_chip));
+
+ // process X-connected chips
+ ecmdDataBufferBase x_connected_chip_ids(PROC_FAB_SMP_NUM_CHIP_IDS);
+ for (std::vector<fapi::Target*>::iterator l = x_link_targets.begin();
+ l != x_link_targets.end();
+ l++)
+ {
+ bool link_is_enabled;
+ proc_fab_smp_node_id dest_node_id;
+ proc_fab_smp_chip_id dest_chip_id;
+ rc = proc_build_smp_query_link_state(p_iter->second,
+ (l - x_link_targets.begin()),
+ *l,
+ link_is_enabled,
+ dest_node_id,
+ dest_chip_id);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Error from proc_build_smp_query_link_state (X)");
+ break;
+ }
+
+ if (link_is_enabled)
+ {
+ rc_ecmd |= x_connected_chip_ids.writeBit(
+ (uint8_t) dest_chip_id,
+ ((((uint8_t) dest_node_id) == n_iter->first)?(1):(0)));
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Error 0x%x writing n%d:p%d X connected chip ID set data buffer",
+ rc_ecmd, n_iter->first, p_iter->first);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ FAPI_DBG("proc_build_smp_process_chips: n%d:p%d X%d -> n%d:p%d",
+ n_iter->first, p_iter->first, (l - x_link_targets.begin()),
+ dest_node_id, dest_chip_id);
+ }
+ }
+ if (!rc.ok())
+ {
+ break;
+ }
+
+ // process A-connected chips
+ ecmdDataBufferBase a_connected_node_ids(PROC_FAB_SMP_NUM_NODE_IDS);
+ for (std::vector<fapi::Target*>::iterator l = a_link_targets.begin();
+ l != a_link_targets.end();
+ l++)
+ {
+ bool link_is_enabled;
+ proc_fab_smp_node_id dest_node_id;
+ proc_fab_smp_chip_id dest_chip_id;
+ rc = proc_build_smp_query_link_state(p_iter->second,
+ (l - a_link_targets.begin()),
+ *l,
+ link_is_enabled,
+ dest_node_id,
+ dest_chip_id);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Error from proc_build_smp_query_link_state (A)");
+ break;
+ }
+
+ if (link_is_enabled)
+ {
+ rc_ecmd |= a_connected_node_ids.writeBit(
+ (uint8_t) dest_node_id,
+ ((((uint8_t) dest_chip_id) == p_iter->first)?(1):(0)));
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Error 0x%x writing n%d:p%d A connected node ID set data buffer",
+ rc_ecmd, n_iter->first, p_iter->first);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ FAPI_DBG("proc_build_smp_process_chips: n%d:p%d A%d -> n%d:p%d",
+ n_iter->first, p_iter->first, (l - a_link_targets.begin()),
+ dest_node_id, dest_chip_id);
+ }
+ }
+ if (!rc.ok())
+ {
+ break;
+ }
+
+ // add IDs associated with current chip, to make direct set comparison easy
+ FAPI_DBG("proc_build_smp_process_chips: Checking connectivity for n%d:p%d",
+ n_iter->first, p_iter->first);
+ rc_ecmd |= a_connected_node_ids.setBit(n_iter->first);
+ rc_ecmd |= x_connected_chip_ids.setBit(p_iter->first);
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Error 0x%x writing n%d:p%d connected ID set data buffer (self)",
+ rc_ecmd, n_iter->first, p_iter->first);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ // compare ID sets, exit if they don't match
+ bool internode_set_match = (node_ids_in_system == a_connected_node_ids);
+ bool intranode_set_match = (chip_ids_in_node == x_connected_chip_ids);
+ if (!internode_set_match ||
+ !intranode_set_match)
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Invalid fabric topology detected!");
+ if (!intranode_set_match)
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Target %s is not fully connected (X) to all other chips in its node",
+ p_iter->second.chip->this_chip.toEcmdString());
+ }
+ if (!internode_set_match)
+ {
+ FAPI_ERR("proc_build_smp_process_chips: Target %s is not fully connected (A) to all other nodes",
+ p_iter->second.chip->this_chip.toEcmdString());
+ }
+
+ const fapi::Target& TARGET = p_iter->second.chip->this_chip;
+ const bool& A_CONNECTIONS_OK = internode_set_match;
+ const ecmdDataBufferBase& A_CONNECTED_NODE_IDS = a_connected_node_ids;
+ const bool& X_CONNECTIONS_OK = intranode_set_match;
+ const ecmdDataBufferBase& X_CONNECTED_NODE_IDS = x_connected_chip_ids;
+ FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_INVALID_TOPOLOGY);
+ break;
+ }
+ }
+ if (!rc.ok())
+ {
+ break;
+ }
+ }
+ if (!rc.ok())
+ {
+ break;
+ }
+
} while(0);
// mark function exit
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H
index f7e24d68a..980df00f1 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp.H,v 1.13 2013/11/13 01:41:53 jmcgill Exp $
+// $Id: proc_build_smp.H,v 1.14 2014/02/23 21:41:06 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp.H,v $
//------------------------------------------------------------------------------
// *|
@@ -57,8 +57,6 @@
// *! (switch A/B)
// *!
//------------------------------------------------------------------------------
-// *! TODO:: support for manufacturing AVP mode configurations
-//------------------------------------------------------------------------------
#ifndef _PROC_BUILD_SMP_H_
#define _PROC_BUILD_SMP_H_
@@ -69,8 +67,8 @@
#include <vector>
#include <map>
#include <fapi.H>
-#include "proc_fab_smp.H"
-#include "p8_scom_addresses.H"
+#include <proc_fab_smp.H>
+#include <p8_scom_addresses.H>
//------------------------------------------------------------------------------
@@ -120,6 +118,7 @@ struct proc_build_smp_proc_chip
proc_fab_smp_node_id f1_node_id;
};
+
// structure to represent fabric connectivty & properites for a single chip
// in the SMP topology
struct proc_build_smp_chip
@@ -158,6 +157,23 @@ struct proc_build_smp_node
proc_fab_smp_node_id node_id;
};
+// structure to encapsulate system epsilon configuration
+struct proc_build_smp_eps_cfg
+{
+ // epsilon configuration inputs
+ bool gb_positive;
+ uint8_t gb_percentage;
+ proc_fab_smp_eps_table_type table_type;
+ // target epsilon values
+ uint32_t r_t0; // read, tier0 (np)
+ uint32_t r_t1; // read, tier1 (gp)
+ uint32_t r_t2; // read, tier2 (sp)
+ uint32_t r_f; // read, foreign (f)
+ uint32_t w_t2; // write, tier2 (sp)
+ uint32_t w_f; // write, foreign (f)
+ uint32_t p; // pre
+};
+
// core/nest frequency ratio cutpoints (epsilon)
enum proc_build_smp_core_ratio
{
@@ -170,8 +186,6 @@ enum proc_build_smp_core_ratio
};
// core floor/nest frequency ratio cutpoints (CPU delay)
-const uint8_t PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS = 13;
-
enum proc_build_smp_cpu_delay
{
PROC_BUILD_SMP_CPU_DELAY_4800_2400 = 0,
@@ -189,23 +203,6 @@ enum proc_build_smp_cpu_delay
PROC_BUILD_SMP_CPU_DELAY_2400_2400 = 12
};
-// structure to encapsulate system epsilon configuration
-struct proc_build_smp_eps_cfg
-{
- // epsilon configuration inputs
- bool gb_positive;
- uint8_t gb_percentage;
- proc_fab_smp_eps_table_type table_type;
- // target epsilon values
- uint32_t r_t0; // read, tier0 (np)
- uint32_t r_t1; // read, tier1 (gp)
- uint32_t r_t2; // read, tier2 (sp)
- uint32_t r_f; // read, foreign (f)
- uint32_t w_t2; // write, tier2 (sp)
- uint32_t w_f; // write, foreign (f)
- uint32_t p; // pre
-};
-
// structure to represent collection of nodes in SMP topology
struct proc_build_smp_system
{
@@ -259,6 +256,9 @@ typedef fapi::ReturnCode
// PB shadow register constant definition
const uint8_t PROC_BUILD_SMP_NUM_SHADOWS = 3;
+// core floor/nest frequency ratio cutpoints (CPU delay)
+const uint8_t PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS = 13;
+
extern "C"
{
@@ -276,9 +276,19 @@ extern "C"
// (SMP_ACTIVATE_PHASE1 = HBI,
// SMP_ACTIVATE_PHASE2 = FSP)
// returns: FAPI_RC_SUCCESS if SMP build operation is successful,
+// FAPI_RC_PLAT_ERR_ADU_LOCKED if operation failed due to state of
+// ADU atomic lock,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_OPERATION if an unsupported operation
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_ATTEMPTS if invalid number of attempts
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_FBC_OP if invalid fabric operation
+// parameters are specified,
+// RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH if ADU status mismatches
+// for switch operation,
// RC_PROC_FAB_SMP_X_BUS_WIDTH_ATTR_ERR if attribute value is
// invalid,
-// RC_PROC_FAB_SMP_PUMP_TYPE_ATTR_ERR if attribute value is
+// RC_PROC_FAB_SMP_PUMP_MODE_ATTR_ERR if attribute value is
// invalid,
// RC_PROC_FAB_SMP_MCS_INTERLEAVED_ATTR_ERR if attribute value is
// invalid,
@@ -288,6 +298,8 @@ extern "C"
// invalid,
// RC_PROC_BUILD_SMP_CORE_FLOOR_FREQ_RATIO_ERR if cache/nest frequency
// ratio is unsupported,
+// RC_PROC_BUILD_SMP_CORE_FREQ_RANGE_ERR if invalid relationship exists
+// between ceiling/nominal/floor core frequency attributes,
// RC_PROC_BUILD_SMP_CORE_CEILING_FREQ_RATIO_ERR if cache/nest frequency
// ratio is unsupported,
// RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR if cache/nest frequency
@@ -309,7 +321,7 @@ extern "C"
// do not specify a new fabric system master,
// RC_PROC_BUILD_SMP_MASTER_DESIGNATION_ERR if node/system master
// error is detected based on chip state and input paramters,
-// RC_PROC_BUILD_SMP_INVALID_OPERATION if an unsupported operation
+// RC_PROC_BUILD_SMP_INVALID_OPERATION_ERR if an unsupported operation
// is specified
// RC_PROC_BUILD_SMP_HOTPLUG_SHADOW_ERR if HP shadow registers are not
// equivalent,
@@ -329,6 +341,14 @@ extern "C"
// is invalid,
// RC_PROC_BUILD_SMP_X_CMD_RATE_ERR if calculated X link command rate
// is invalid,
+// RC_PROC_BUILD_SMP_AX_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_PCIE_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_LINK_TARGET_TYPE_ERR if link target type is
+// unsupported,
+// RC_PROC_BUILD_SMP_INVALID_TOPOLOGY if specified fabric topology
+// is illegal,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp(
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.C b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.C
index ad1080a6d..b5f8dd4dd 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_adu.C,v 1.8 2013/09/26 18:00:08 jmcgill Exp $
+// $Id: proc_build_smp_adu.C,v 1.9 2014/02/23 21:41:06 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_adu.C,v $
//------------------------------------------------------------------------------
// *|
@@ -40,8 +40,60 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp_adu.H"
-#include "proc_adu_utils.H"
+#include <proc_build_smp_adu.H>
+#include <proc_adu_utils.H>
+
+//------------------------------------------------------------------------------
+// Constants
+//------------------------------------------------------------------------------
+
+const uint32_t PROC_BUILD_SMP_MAX_STATUS_POLLS = 5;
+
+const uint32_t PROC_BUILD_SMP_PHASE1_ADU_LOCK_ATTEMPTS = 1;
+const bool PROC_BUILD_SMP_PHASE1_ADU_PICK_LOCK = false;
+const uint32_t PROC_BUILD_SMP_PHASE1_POST_QUIESCE_DELAY = 128;
+const uint32_t PROC_BUILD_SMP_PHASE1_PRE_INIT_DELAY = 128;
+
+const uint32_t PROC_BUILD_SMP_PHASE2_ADU_LOCK_ATTEMPTS = 5;
+const bool PROC_BUILD_SMP_PHASE2_ADU_PICK_LOCK = true;
+const uint32_t PROC_BUILD_SMP_PHASE2_POST_QUIESCE_DELAY = 4096;
+const uint32_t PROC_BUILD_SMP_PHASE2_PRE_INIT_DELAY = 512;
+
+// ADU pMISC Mode register field/bit definitions
+const uint32_t ADU_PMISC_MODE_ENABLE_PB_SWITCH_AB_BIT = 30;
+const uint32_t ADU_PMISC_MODE_ENABLE_PB_SWITCH_CD_BIT = 31;
+
+// FFDC logging on ADU switch fails
+const uint8_t PROC_BUILD_SMP_FFDC_NUM_REGS = 11;
+const uint32_t PROC_BUILD_SMP_FFDC_REGS[PROC_BUILD_SMP_FFDC_NUM_REGS] =
+{
+ PB_MODE_CENT_0x02010C4A,
+ PB_HP_MODE_NEXT_CENT_0x02010C4B,
+ PB_HP_MODE_CURR_CENT_0x02010C4C,
+ PB_HPX_MODE_NEXT_CENT_0x02010C4D,
+ PB_HPX_MODE_CURR_CENT_0x02010C4E,
+ X_GP0_0x04000000,
+ PB_X_MODE_0x04010C0A,
+ A_GP0_0x08000000,
+ ADU_IOS_LINK_EN_0x02020019,
+ PB_A_MODE_0x0801080A,
+ ADU_PMISC_MODE_0x0202000B
+};
+enum proc_build_smp_ffdc_reg_index
+{
+ PB_MODE_CENT_DATA_INDEX = 0,
+ PB_HP_MODE_NEXT_CENT_DATA_INDEX = 1,
+ PB_HP_MODE_CURR_CENT_DATA_INDEX = 2,
+ PB_HPX_MODE_NEXT_CENT_DATA_INDEX = 3,
+ PB_HPX_MODE_CURR_CENT_DATA_INDEX = 4,
+ X_GP0_DATA_INDEX = 5,
+ PB_X_MODE_DATA_INDEX = 6,
+ A_GP0_DATA_INDEX = 7,
+ ADU_IOS_LINK_EN_DATA_INDEX = 8,
+ PB_A_MODE_DATA_INDEX = 9,
+ ADU_PMISC_MODE_DATA_INDEX = 10
+};
+
extern "C"
{
@@ -85,12 +137,12 @@ fapi::ReturnCode proc_build_smp_adu_set_switch_action(
i_switch_cd);
rc_ecmd |= pmisc_mask.setBit(
ADU_PMISC_MODE_ENABLE_PB_SWITCH_CD_BIT);
- rc.setEcmdError(rc_ecmd);
- if (!rc.ok())
+ if (rc_ecmd)
{
FAPI_ERR("proc_build_smp_adu_set_switch_action: Error 0x%x setting up ADU pMisc Mode register data buffer",
rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
break;
}
// write ADU pMisc Mode register content
@@ -100,7 +152,7 @@ fapi::ReturnCode proc_build_smp_adu_set_switch_action(
pmisc_mask);
if (!rc.ok())
{
- FAPI_ERR("proc_build_smp_adu_set_switch_action: fapiPutUnderMask error (ADU_PMISC_MODE_0x0202000B)");
+ FAPI_ERR("proc_build_smp_adu_set_switch_action: fapiPutScomUnderMask error (ADU_PMISC_MODE_0x0202000B)");
break;
}
} while(0);
@@ -120,10 +172,10 @@ fapi::ReturnCode proc_build_smp_adu_set_switch_action(
// returns: FAPI_RC_SUCCESS if lock is successfully acquired,
// FAPI_RC_PLAT_ERR_ADU_LOCKED if operation failed due to state of
// ADU atomic lock,
-// RC_PROC_ADU_UTILS_INVALID_ARGS if invalid number of lock attempts
+// RC_PROC_ADU_UTILS_INVALID_LOCK_OPERATION if an unsupported operation
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_ATTEMPTS if invalid number of attempts
// is specified,
-// RC_PROC_ADU_UTILS_INTERNAL_ERR if an unexpected internal
-// logic error occurs,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_adu_acquire_lock(
@@ -223,10 +275,10 @@ fapi::ReturnCode proc_build_smp_adu_reset(
// returns: FAPI_RC_SUCCESS if lock is successfully released,
// FAPI_RC_PLAT_ERR_ADU_LOCKED if operation failed due to state of
// ADU atomic lock,
-// RC_PROC_ADU_UTILS_INVALID_ARGS if invalid number of unlock attempts
+// RC_PROC_ADU_UTILS_INVALID_LOCK_OPERATION if an unsupported operation
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_ATTEMPTS if invalid number of attempts
// is specified,
-// RC_PROC_ADU_UTILS_INTERNAL_ERR if an unexpected internal
-// logic error occurs,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_adu_release_lock(
@@ -270,44 +322,35 @@ fapi::ReturnCode proc_build_smp_adu_release_lock(
//------------------------------------------------------------------------------
// function: check ADU status matches expected state/value
// NOTE: intended to be run while holding ADU lock
-// parameters: i_target => P8 chip target
-// i_read_not_write => desired operation (read=true, write=false)
+// parameters: i_target => P8 chip target
+// i_smp => structure encapsulating SMP topology
+// i_dump_all_targets => dump FFDC for all targets in SMP?
+// true=yes, false=no, only for i_target
// returns: FAPI_RC_SUCCESS if status matches expected value,
// RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH if status mismatches,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_adu_check_status(
- const fapi::Target& i_target)
+ const fapi::Target& i_target,
+ proc_build_smp_system& i_smp,
+ const bool i_dump_all_targets)
{
fapi::ReturnCode rc;
- proc_adu_utils_adu_status status_exp, status_act;
+ uint32_t rc_ecmd = 0;
+ proc_adu_utils_adu_status status;
bool match = false;
uint8_t num_polls = 0;
FAPI_DBG("proc_build_smp_adu_check_status: Start");
do
{
- // build expected status structure
- status_exp.busy = ADU_STATUS_BIT_CLEAR;
- status_exp.wait_cmd_arbit = ADU_STATUS_BIT_CLEAR;
- status_exp.addr_done = ADU_STATUS_BIT_SET;
- status_exp.data_done = ADU_STATUS_BIT_CLEAR;
- status_exp.wait_resp = ADU_STATUS_BIT_CLEAR;
- status_exp.overrun_err = ADU_STATUS_BIT_CLEAR;
- status_exp.autoinc_err = ADU_STATUS_BIT_CLEAR;
- status_exp.command_err = ADU_STATUS_BIT_CLEAR;
- status_exp.address_err = ADU_STATUS_BIT_CLEAR;
- status_exp.command_hang_err = ADU_STATUS_BIT_CLEAR;
- status_exp.data_hang_err = ADU_STATUS_BIT_CLEAR;
- status_exp.pbinit_missing = ADU_STATUS_BIT_DONT_CARE;
-
// retreive actual status value
while (num_polls < PROC_BUILD_SMP_MAX_STATUS_POLLS)
{
FAPI_DBG("proc_build_smp_adu_check_status: Calling library to read ADU status (poll %d)",
num_polls+1);
rc = proc_adu_utils_get_adu_status(i_target,
- status_act);
+ status);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_adu_check_status: Error from proc_adu_utils_get_adu_status");
@@ -315,7 +358,7 @@ fapi::ReturnCode proc_build_smp_adu_check_status(
}
// status reported as busy, poll again
- if (status_act.busy)
+ if (status.busy)
{
num_polls++;
}
@@ -332,62 +375,139 @@ fapi::ReturnCode proc_build_smp_adu_check_status(
// check status bits versus expected pattern
match =
- (((status_exp.busy == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.busy == status_act.busy)) &&
- ((status_exp.wait_cmd_arbit == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.wait_cmd_arbit == status_act.wait_cmd_arbit)) &&
- ((status_exp.addr_done == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.addr_done == status_act.addr_done)) &&
- ((status_exp.data_done == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.data_done == status_act.data_done)) &&
- ((status_exp.wait_resp == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.wait_resp == status_act.wait_resp)) &&
- ((status_exp.overrun_err == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.overrun_err == status_act.overrun_err)) &&
- ((status_exp.autoinc_err == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.autoinc_err == status_act.autoinc_err)) &&
- ((status_exp.command_err == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.command_err == status_act.command_err)) &&
- ((status_exp.address_err == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.address_err == status_act.address_err)) &&
- ((status_exp.command_hang_err == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.command_hang_err == status_act.command_hang_err)) &&
- ((status_exp.data_hang_err == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.data_hang_err == status_act.data_hang_err)) &&
- ((status_exp.pbinit_missing == ADU_STATUS_BIT_DONT_CARE) ||
- (status_exp.pbinit_missing == status_act.pbinit_missing)));
+ ((status.busy == ADU_STATUS_BIT_CLEAR) &&
+ (status.wait_cmd_arbit == ADU_STATUS_BIT_CLEAR) &&
+ (status.addr_done == ADU_STATUS_BIT_SET) &&
+ (status.data_done == ADU_STATUS_BIT_CLEAR) &&
+ (status.wait_resp == ADU_STATUS_BIT_CLEAR) &&
+ (status.overrun_err == ADU_STATUS_BIT_CLEAR) &&
+ (status.autoinc_err == ADU_STATUS_BIT_CLEAR) &&
+ (status.command_err == ADU_STATUS_BIT_CLEAR) &&
+ (status.address_err == ADU_STATUS_BIT_CLEAR) &&
+ (status.command_hang_err == ADU_STATUS_BIT_CLEAR) &&
+ (status.data_hang_err == ADU_STATUS_BIT_CLEAR));
if (!match)
{
FAPI_ERR("proc_adu_utils_check_adu_status: Status mismatch detected");
FAPI_ERR("proc_adu_utils_check_adu_status: ADU Status bits:");
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_BUSY = %d",
- (status_act.busy == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.busy == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_WAIT_CMD_ARBIT = %d",
- (status_act.wait_cmd_arbit == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.wait_cmd_arbit == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_ADDR_DONE = %d",
- (status_act.addr_done == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.addr_done == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_DATA_DONE = %d",
- (status_act.data_done == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.data_done == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_WAIT_RESP = %d",
- (status_act.wait_resp == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.wait_resp == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: ADU Error bits:");
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_OVERRUN_ERROR = %d",
- (status_act.overrun_err == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.overrun_err == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_AUTOINC_ERROR = %d",
- (status_act.autoinc_err == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.autoinc_err == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_COMMAND_ERROR = %d",
- (status_act.command_err == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.command_err == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_ADDRESS_ERROR = %d",
- (status_act.address_err == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.address_err == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_COMMAND_HANG_ERROR = %d",
- (status_act.command_hang_err == ADU_STATUS_BIT_SET)?(1)
+ (status.command_hang_err == ADU_STATUS_BIT_SET)?(1)
:(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_DATA_HANG_ERROR = %d",
- (status_act.data_hang_err == ADU_STATUS_BIT_SET)?(1):(0));
+ (status.data_hang_err == ADU_STATUS_BIT_SET)?(1):(0));
FAPI_ERR("proc_adu_utils_check_adu_status: FBC_ALTD_PBINIT_MISSING_ERROR = %d",
- (status_act.pbinit_missing == ADU_STATUS_BIT_SET)?(1):(0));
- const proc_adu_utils_adu_status & STATUS_DATA = status_act;
- const uint8_t & NUM_POLLS = num_polls;
+ (status.pbinit_missing == ADU_STATUS_BIT_SET)?(1):(0));
+
+ // dump FFDC
+ // there is no clean way to represent the collection in XML (given an arbitrary number of chips),
+ // so collect manually and store into data buffers which can be post-processed from the error log
+ std::map<proc_fab_smp_node_id, proc_build_smp_node>::iterator n_iter;
+ std::map<proc_fab_smp_chip_id, proc_build_smp_chip>::iterator p_iter;
+ std::vector<fapi::Target*> targets_to_collect;
+ ecmdDataBufferBase scom_data(64);
+ ecmdDataBufferBase chip_ids;
+ ecmdDataBufferBase ffdc_reg_data[PROC_BUILD_SMP_FFDC_NUM_REGS];
+ bool ffdc_scom_error = false;
+
+ // determine set of chips to collect
+ for (n_iter = i_smp.nodes.begin();
+ n_iter != i_smp.nodes.end();
+ n_iter++)
+ {
+ for (p_iter = n_iter->second.chips.begin();
+ p_iter != n_iter->second.chips.end();
+ p_iter++)
+ {
+ if (i_dump_all_targets ||
+ (p_iter->second.chip->this_chip == i_target))
+ {
+ targets_to_collect.push_back(&(p_iter->second.chip->this_chip));
+ }
+ }
+ }
+
+ // size FFDC buffers
+ rc_ecmd |= chip_ids.setByteLength(targets_to_collect.size());
+ for (uint8_t i = 0; i < PROC_BUILD_SMP_FFDC_NUM_REGS; i++)
+ {
+ rc_ecmd |= ffdc_reg_data[i].setDoubleWordLength(targets_to_collect.size());
+ }
+
+ // extract FFDC data
+ for (std::vector<fapi::Target*>::iterator t = targets_to_collect.begin();
+ t != targets_to_collect.end();
+ t++)
+ {
+ // log node/chip ID
+ for (n_iter = i_smp.nodes.begin();
+ n_iter != i_smp.nodes.end();
+ n_iter++)
+ {
+ for (p_iter = n_iter->second.chips.begin();
+ p_iter != n_iter->second.chips.end();
+ p_iter++)
+ {
+ if ((&(p_iter->second.chip->this_chip)) == *t)
+ {
+ uint8_t id = ((n_iter->first & 0x3) << 4) |
+ (p_iter->first & 0x3);
+
+ rc_ecmd |= chip_ids.setByte(t - targets_to_collect.begin(), id);
+ }
+ }
+ }
+
+ // collect SCOM data
+ for (uint8_t i = 0; i < PROC_BUILD_SMP_FFDC_NUM_REGS; i++)
+ {
+ rc = fapiGetScom(*(*t), PROC_BUILD_SMP_FFDC_REGS[i], scom_data);
+ if (!rc.ok())
+ {
+ ffdc_scom_error = true;
+ }
+ rc_ecmd |= scom_data.extractPreserve(
+ ffdc_reg_data[i],
+ 0, 64,
+ 64*(t - targets_to_collect.begin()));
+ }
+ }
+
+ const fapi::Target& TARGET = i_target;
+ const proc_adu_utils_adu_status& ADU_STATUS_DATA = status;
+ const uint8_t& ADU_NUM_POLLS = num_polls;
+ const uint8_t& NUM_CHIPS = targets_to_collect.size();
+ const uint8_t& FFDC_VALID = !rc_ecmd && !ffdc_scom_error;
+ const ecmdDataBufferBase& CHIP_IDS = chip_ids;
+ const ecmdDataBufferBase& PB_MODE_CENT_DATA = ffdc_reg_data[0];
+ const ecmdDataBufferBase& PB_HP_MODE_NEXT_CENT_DATA = ffdc_reg_data[1];
+ const ecmdDataBufferBase& PB_HP_MODE_CURR_CENT_DATA = ffdc_reg_data[2];
+ const ecmdDataBufferBase& PB_HPX_MODE_NEXT_CENT_DATA = ffdc_reg_data[3];
+ const ecmdDataBufferBase& PB_HPX_MODE_CURR_CENT_DATA = ffdc_reg_data[4];
+ const ecmdDataBufferBase& X_GP0_DATA = ffdc_reg_data[5];
+ const ecmdDataBufferBase& PB_X_MODE_DATA = ffdc_reg_data[6];
+ const ecmdDataBufferBase& A_GP0_DATA = ffdc_reg_data[7];
+ const ecmdDataBufferBase& ADU_IOS_LINK_EN_DATA = ffdc_reg_data[8];
+ const ecmdDataBufferBase& PB_A_MODE_DATA = ffdc_reg_data[9];
+ const ecmdDataBufferBase& ADU_PMISC_MODE_DATA = ffdc_reg_data[10];
FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH);
break;
}
@@ -400,7 +520,8 @@ fapi::ReturnCode proc_build_smp_adu_check_status(
// NOTE: see comments above function prototype in header
fapi::ReturnCode proc_build_smp_switch_cd(
- proc_build_smp_chip& i_smp_chip)
+ proc_build_smp_chip& i_smp_chip,
+ proc_build_smp_system& i_smp)
{
fapi::ReturnCode rc;
// ADU status/control information
@@ -483,7 +604,7 @@ fapi::ReturnCode proc_build_smp_switch_cd(
}
// check status
- rc = proc_build_smp_adu_check_status(i_smp_chip.chip->this_chip);
+ rc = proc_build_smp_adu_check_status(i_smp_chip.chip->this_chip, i_smp, false);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_switch_cd: Error from proc_build_smp_adu_check_status");
@@ -636,7 +757,10 @@ fapi::ReturnCode proc_build_smp_quiesce_pb(
}
// check status
- rc = proc_build_smp_adu_check_status(p_iter->second.chip->this_chip);
+ rc = proc_build_smp_adu_check_status(
+ p_iter->second.chip->this_chip,
+ i_smp,
+ (i_op == SMP_ACTIVATE_PHASE2));
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_quiesce_pb: Error from proc_build_smp_adu_check_status");
@@ -820,7 +944,10 @@ fapi::ReturnCode proc_build_smp_switch_ab(
}
// check status
- rc = proc_build_smp_adu_check_status(i_smp.nodes[i_smp.master_chip_curr_node_id].chips[i_smp.master_chip_curr_chip_id].chip->this_chip);
+ rc = proc_build_smp_adu_check_status(
+ i_smp.nodes[i_smp.master_chip_curr_node_id].chips[i_smp.master_chip_curr_chip_id].chip->this_chip,
+ i_smp,
+ true);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_switch_ab: Error from proc_build_smp_adu_check_status");
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.H b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.H
index b102f8213..f988d64c6 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.H
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_adu.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_adu.H,v 1.4 2013/09/26 18:00:09 jmcgill Exp $
+// $Id: proc_build_smp_adu.H,v 1.5 2014/02/23 21:41:06 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_adu.H,v $
//------------------------------------------------------------------------------
// *|
@@ -43,27 +43,7 @@
// Includes
//------------------------------------------------------------------------------
#include <fapi.H>
-#include "proc_build_smp.H"
-
-//------------------------------------------------------------------------------
-// Constants
-//------------------------------------------------------------------------------
-
-const uint32_t PROC_BUILD_SMP_MAX_STATUS_POLLS = 5;
-
-const uint32_t PROC_BUILD_SMP_PHASE1_ADU_LOCK_ATTEMPTS = 1;
-const bool PROC_BUILD_SMP_PHASE1_ADU_PICK_LOCK = false;
-const uint32_t PROC_BUILD_SMP_PHASE1_POST_QUIESCE_DELAY = 128;
-const uint32_t PROC_BUILD_SMP_PHASE1_PRE_INIT_DELAY = 128;
-
-const uint32_t PROC_BUILD_SMP_PHASE2_ADU_LOCK_ATTEMPTS = 5;
-const bool PROC_BUILD_SMP_PHASE2_ADU_PICK_LOCK = true;
-const uint32_t PROC_BUILD_SMP_PHASE2_POST_QUIESCE_DELAY = 4096;
-const uint32_t PROC_BUILD_SMP_PHASE2_PRE_INIT_DELAY = 512;
-
-// ADU pMISC Mode register field/bit definitions
-const uint32_t ADU_PMISC_MODE_ENABLE_PB_SWITCH_AB_BIT = 30;
-const uint32_t ADU_PMISC_MODE_ENABLE_PB_SWITCH_CD_BIT = 31;
+#include <proc_build_smp.H>
extern "C" {
@@ -74,19 +54,21 @@ extern "C" {
//------------------------------------------------------------------------------
// function: perform fabric C/D configuration switch on a single chip
// parameters: i_smp_chip => structure encapsulating chip
+// i_smp => structure encapsulating SMP
// returns: FAPI_RC_SUCCESS if fabric reconfiguration is successful,
// FAPI_RC_PLAT_ERR_ADU_LOCKED if operation failed due to state of
// ADU atomic lock,
-// RC_PROC_ADU_UTILS_INVALID_ARGS if invalid parameters are detected
-// by ADU library code,
-// RC_PROC_ADU_UTILS_INTERNAL_ERR if an unexpected internal
-// logic error occurs in ADU library code,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_OPERATION if an unsupported operation
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_ATTEMPTS if invalid number of attempts
+// is specified,
// RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH if ADU status mismatches
// for switch operation,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_switch_cd(
- proc_build_smp_chip& i_smp_chip);
+ proc_build_smp_chip& i_smp_chip,
+ proc_build_smp_system& i_smp);
//------------------------------------------------------------------------------
@@ -101,10 +83,10 @@ fapi::ReturnCode proc_build_smp_switch_cd(
// returns: FAPI_RC_SUCCESS if fabric reconfiguration is successful,
// FAPI_RC_PLAT_ERR_ADU_LOCKED if operation failed due to state of
// ADU atomic lock,
-// RC_PROC_ADU_UTILS_INVALID_ARGS if invalid parameters are detected
-// by ADU library code,
-// RC_PROC_ADU_UTILS_INTERNAL_ERR if an unexpected internal
-// logic error occurs in ADU library code,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_OPERATION if an unsupported operation
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_ATTEMPTS if invalid number of attempts
+// is specified,
// RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH if ADU status mismatches
// for switch operation,
// else error
@@ -126,10 +108,10 @@ fapi::ReturnCode proc_build_smp_quiesce_pb(
// returns: FAPI_RC_SUCCESS if fabric reconfiguration is successful,
// FAPI_RC_PLAT_ERR_ADU_LOCKED if operation failed due to state of
// ADU atomic lock,
-// RC_PROC_ADU_UTILS_INVALID_ARGS if invalid parameters are detected
-// by ADU library code,
-// RC_PROC_ADU_UTILS_INTERNAL_ERR if an unexpected internal
-// logic error occurs in ADU library code,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_OPERATION if an unsupported operation
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_ATTEMPTS if invalid number of attempts
+// is specified,
// RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH if ADU status mismatches
// for switch operation,
// else error
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.C b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.C
index 2984fc0ae..3fb3577c8 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_epsilon.C,v 1.9 2013/11/13 01:46:55 jmcgill Exp $
+// $Id: proc_build_smp_epsilon.C,v 1.10 2014/02/23 21:41:06 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_epsilon.C,v $
//------------------------------------------------------------------------------
// *|
@@ -39,12 +39,155 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp_epsilon.H"
+#include <proc_build_smp_epsilon.H>
extern "C" {
//------------------------------------------------------------------------------
+// Constant definitions
+//------------------------------------------------------------------------------
+
+//
+// table of base epsilon values
+//
+
+const uint32_t PROC_BUILD_SMP_EPSILON_MIN_VALUE = 0x1;
+const uint32_t PROC_BUILD_SMP_EPSILON_MAX_VALUE = 0xFFFFFFFF;
+
+// HE epsilon (4 chips per-group)
+const uint32_t PROC_BUILD_SMP_EPSILON_R_T0_HE[] = { 6, 6, 7, 8, 9, 15 };
+const uint32_t PROC_BUILD_SMP_EPSILON_R_T1_HE[] = { 56, 58, 60, 62, 65, 84 };
+const uint32_t PROC_BUILD_SMP_EPSILON_R_T2_HE[] = { 102, 104, 105, 108, 111, 130 };
+const uint32_t PROC_BUILD_SMP_EPSILON_R_F_HE[] = { 66, 67, 69, 71, 75, 93 };
+const uint32_t PROC_BUILD_SMP_EPSILON_W_HE[] = { 46, 47, 47, 48, 50, 55 };
+const uint32_t PROC_BUILD_SMP_EPSILON_W_F_HE[] = { 37, 38, 39, 40, 40, 46 };
+
+// LE epsilon (2 chips per-group)
+const uint32_t PROC_BUILD_SMP_EPSILON_R_T0_LE[] = { 6, 6, 7, 8, 9, 15 };
+const uint32_t PROC_BUILD_SMP_EPSILON_R_T1_LE[] = { 47, 49, 50, 53, 56, 75 };
+const uint32_t PROC_BUILD_SMP_EPSILON_R_T2_LE[] = { 93, 95, 96, 99, 102, 120 };
+const uint32_t PROC_BUILD_SMP_EPSILON_R_F_LE[] = { 66, 67, 69, 71, 75, 93 };
+const uint32_t PROC_BUILD_SMP_EPSILON_W_LE[] = { 46, 47, 47, 48, 50, 55 };
+const uint32_t PROC_BUILD_SMP_EPSILON_W_F_LE[] = { 37, 38, 39, 40, 40, 46 };
+
+// Stradale epsilon (1 chip per-group)
+const uint32_t PROC_BUILD_SMP_EPSILON_R_T0_1S[] = { 6, 6, 7, 8, 9, 15 };
+const uint32_t PROC_BUILD_SMP_EPSILON_R_T1_1S[] = { 6, 6, 7, 8, 9, 15 };
+const uint32_t PROC_BUILD_SMP_EPSILON_R_T2_1S[] = { 63, 64, 65, 68, 72, 90 };
+const uint32_t PROC_BUILD_SMP_EPSILON_R_F_1S[] = { 66, 67, 69, 71, 75, 93 };
+const uint32_t PROC_BUILD_SMP_EPSILON_W_1S[] = { 14, 14, 15, 15, 16, 23 };
+const uint32_t PROC_BUILD_SMP_EPSILON_W_F_1S[] = { 37, 38, 39, 40, 40, 46 };
+
+
+//
+// unit specific epsilon range constants
+//
+
+enum proc_build_smp_epsilon_unit
+{
+ PROC_BUILD_SMP_EPSILON_UNIT_L2_R_T2,
+ PROC_BUILD_SMP_EPSILON_UNIT_L2_W_T2,
+ PROC_BUILD_SMP_EPSILON_UNIT_L2_R_T0,
+ PROC_BUILD_SMP_EPSILON_UNIT_L2_R_T1,
+ PROC_BUILD_SMP_EPSILON_UNIT_L3_R_T2,
+ PROC_BUILD_SMP_EPSILON_UNIT_L3_W_T2,
+ PROC_BUILD_SMP_EPSILON_UNIT_L3_R_T0,
+ PROC_BUILD_SMP_EPSILON_UNIT_L3_R_T1,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCS_R_T0,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCS_R_T1,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCS_R_T2,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCS_R_F,
+ PROC_BUILD_SMP_EPSILON_UNIT_NX_W_T2,
+ PROC_BUILD_SMP_EPSILON_UNIT_HCA_W_T2,
+ PROC_BUILD_SMP_EPSILON_UNIT_CAPP_R_T2,
+ PROC_BUILD_SMP_EPSILON_UNIT_CAPP_W_T2,
+ PROC_BUILD_SMP_EPSILON_UNIT_CAPP_R_T0,
+ PROC_BUILD_SMP_EPSILON_UNIT_CAPP_R_T1,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCD_P
+};
+
+// L2
+const uint32_t PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_R_T0 = 512;
+const uint32_t PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_R_T1 = 512;
+const uint32_t PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_R_T2 = 2048;
+const uint32_t PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_W_T2 = 128;
+
+// L3
+const uint32_t PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_R_T0 = 512;
+const uint32_t PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_R_T1 = 512;
+const uint32_t PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_R_T2 = 2048;
+const uint32_t PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_W_T2 = 128;
+
+// MCS
+const uint32_t PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_T0 = 1016;
+const uint32_t PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_T1 = 1016;
+const uint32_t PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_T2 = 1016;
+const uint32_t PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_F = 1016;
+
+const uint8_t PROC_BUILD_SMP_EPSILON_MCS_JITTER = 0x1;
+
+// NX
+const uint32_t PROC_BUILD_SMP_EPSILON_NX_MAX_VALUE_W_T2 = 448;
+
+// HCA
+const uint32_t PROC_BUILD_SMP_EPSILON_HCA_MAX_VALUE_W_T2 = 512;
+
+// CAPP
+const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T0 = 512;
+const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T1 = 512;
+const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T2 = 512;
+const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_W_T2 = 128;
+
+const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_FORCE_T2 = 0x1;
+
+// MCD
+const uint32_t PROC_BUILD_SMP_EPSILON_MCD_MAX_VALUE_P = 65520;
+
+
+//
+// unit specific register field/bit definition constants
+//
+
+// MCS MCEPS register field/bit definitions
+const uint32_t MCEPS_JITTER_EPSILON_START_BIT = 0;
+const uint32_t MCEPS_JITTER_EPSILON_END_BIT = 7;
+const uint32_t MCEPS_NODAL_EPSILON_START_BIT = 8;
+const uint32_t MCEPS_NODAL_EPSILON_END_BIT = 15;
+const uint32_t MCEPS_GROUP_EPSILON_START_BIT = 16;
+const uint32_t MCEPS_GROUP_EPSILON_END_BIT = 23;
+const uint32_t MCEPS_SYSTEM_EPSILON_START_BIT = 24;
+const uint32_t MCEPS_SYSTEM_EPSILON_END_BIT = 31;
+const uint32_t MCEPS_FOREIGN_EPSILON_START_BIT = 32;
+const uint32_t MCEPS_FOREIGN_EPSILON_END_BIT = 39;
+
+// NX CQ Epsilon Scale register field/bit definitions
+const uint32_t NX_CQ_EPSILON_SCALE_EPSILON_START_BIT = 0;
+const uint32_t NX_CQ_EPSILON_SCALE_EPSILON_END_BIT = 5;
+
+// HCA Mode register field/bit definitions
+const uint32_t HCA_MODE_EPSILON_START_BIT = 21;
+const uint32_t HCA_MODE_EPSILON_END_BIT = 29;
+
+// CAPP CXA Snoop Control register field/bit definitions
+const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER0_START_BIT = 3;
+const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER0_END_BIT = 11;
+const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER1_START_BIT = 15;
+const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER1_END_BIT = 23;
+const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER2_START_BIT = 25;
+const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER2_END_BIT = 35;
+const uint32_t CAPP_CXA_SNP_READ_EPSILON_MODE_BIT = 0;
+
+// CAPP APC Master PB Control register field/bit definitions
+const uint32_t CAPP_APC_MASTER_CONTROL_EPSILON_START_BIT = 39;
+const uint32_t CAPP_APC_MASTER_CONTROL_EPSILON_END_BIT = 45;
+
+// MCD Recovery Pre Epsilon Configuration register field/bit definitions
+const uint32_t MCD_RECOVERY_PRE_EPS_CONFIG_EPSILON_START_BIT = 52;
+const uint32_t MCD_RECOVERY_PRE_EPS_CONFIG_EPSILON_END_BIT = 63;
+
+
+//------------------------------------------------------------------------------
// Function definitions
//------------------------------------------------------------------------------
@@ -127,6 +270,7 @@ void proc_build_smp_guardband_epsilon(
// underlying register storage
// i_must_fit => raise error if true and target value
// cannot be represented in underlying storage
+// i_unit => unit enum for FFDC
// o_does_fit => boolean indicating comparison result
// returns: FAPI_RC_SUCCESS if value can be represented in HW storage (or
// i_must_fit is false)
@@ -137,6 +281,7 @@ fapi::ReturnCode proc_build_smp_check_epsilon(
const uint32_t i_target_value,
const uint32_t i_max_hw_value,
const bool i_must_fit,
+ const proc_build_smp_epsilon_unit i_unit,
bool& o_does_fit)
{
fapi::ReturnCode rc;
@@ -154,6 +299,7 @@ fapi::ReturnCode proc_build_smp_check_epsilon(
i_target_value, i_max_hw_value);
const uint32_t& VALUE = i_target_value;
const uint32_t& MAX_HW_VALUE = i_max_hw_value;
+ const proc_build_smp_epsilon_unit& UNIT = i_unit;
FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_EPSILON_RANGE_ERR);
break;
}
@@ -213,6 +359,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_l2(
i_eps_cfg.r_t2,
PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_R_T2,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_L2_R_T2,
r_t2_fits);
if (!rc.ok())
@@ -225,6 +372,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_l2(
i_eps_cfg.w_t2,
PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_W_T2,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_L2_W_T2,
w_t2_fits);
if (!rc.ok())
@@ -240,11 +388,13 @@ fapi::ReturnCode proc_build_smp_set_epsilons_l2(
i_eps_cfg.r_t0,
PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_R_T0,
false,
+ PROC_BUILD_SMP_EPSILON_UNIT_L2_R_T0,
r_t0_fits);
(void) proc_build_smp_check_epsilon(
i_eps_cfg.r_t1,
PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_R_T1,
false,
+ PROC_BUILD_SMP_EPSILON_UNIT_L2_R_T1,
r_t1_fits);
// set attributes based on unit implementation
@@ -387,6 +537,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_l3(
i_eps_cfg.r_t2,
PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_R_T2,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_L3_R_T2,
r_t2_fits);
if (!rc.ok())
@@ -399,6 +550,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_l3(
i_eps_cfg.w_t2,
PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_W_T2,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_L3_W_T2,
w_t2_fits);
if (!rc.ok())
@@ -414,11 +566,13 @@ fapi::ReturnCode proc_build_smp_set_epsilons_l3(
i_eps_cfg.r_t0,
PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_R_T0,
false,
+ PROC_BUILD_SMP_EPSILON_UNIT_L3_R_T0,
r_t0_fits);
(void) proc_build_smp_check_epsilon(
i_eps_cfg.r_t1,
PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_R_T1,
false,
+ PROC_BUILD_SMP_EPSILON_UNIT_L3_R_T1,
r_t1_fits);
// set attributes based on unit implementation
@@ -552,6 +706,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_mcs(
i_eps_cfg.r_t0,
PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_T0,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCS_R_T0,
r_t0_fits);
if (!rc.ok())
@@ -564,6 +719,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_mcs(
i_eps_cfg.r_t1,
PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_T1,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCS_R_T1,
r_t1_fits);
if (!rc.ok())
@@ -576,6 +732,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_mcs(
i_eps_cfg.r_t2,
PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_T2,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCS_R_T2,
r_t2_fits);
if (!rc.ok())
@@ -588,6 +745,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_mcs(
i_eps_cfg.r_f,
PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_F,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCS_R_F,
r_f_fits);
if (!rc.ok())
@@ -705,6 +863,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_nx(
i_eps_cfg.w_t2,
PROC_BUILD_SMP_EPSILON_NX_MAX_VALUE_W_T2,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_NX_W_T2,
w_t2_fits);
if (!rc.ok())
@@ -791,6 +950,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_hca(
i_eps_cfg.w_t2,
PROC_BUILD_SMP_EPSILON_HCA_MAX_VALUE_W_T2,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_HCA_W_T2,
w_t2_fits);
if (!rc.ok())
@@ -881,6 +1041,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_capp(
i_eps_cfg.r_t2,
PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T2,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_CAPP_R_T2,
r_t2_fits);
if (!rc.ok())
@@ -893,6 +1054,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_capp(
i_eps_cfg.w_t2,
PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_W_T2,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_CAPP_W_T2,
w_t2_fits);
if (!rc.ok())
@@ -908,11 +1070,13 @@ fapi::ReturnCode proc_build_smp_set_epsilons_capp(
i_eps_cfg.r_t0,
PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T0,
false,
+ PROC_BUILD_SMP_EPSILON_UNIT_CAPP_R_T0,
r_t0_fits);
(void) proc_build_smp_check_epsilon(
i_eps_cfg.r_t1,
PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T1,
false,
+ PROC_BUILD_SMP_EPSILON_UNIT_CAPP_R_T1,
r_t1_fits);
// program write epsilon register based on unit implementation
@@ -950,7 +1114,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_capp(
// program read epsilon register based on unit implementation
rc_ecmd = data.flushTo0();
- rc_ecmd = mask.flushTo0();
+ rc_ecmd |= mask.flushTo0();
rc_ecmd |= data.insertFromRight(
((i_eps_cfg.r_t2 == PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T2)?
@@ -1060,6 +1224,7 @@ fapi::ReturnCode proc_build_smp_set_epsilons_mcd(
i_eps_cfg.p,
PROC_BUILD_SMP_EPSILON_MCD_MAX_VALUE_P,
true,
+ PROC_BUILD_SMP_EPSILON_UNIT_MCD_P,
p_fits);
if (!rc.ok())
@@ -1184,6 +1349,7 @@ fapi::ReturnCode proc_build_smp_calc_epsilons(
break;
default:
FAPI_ERR("proc_build_smp_calc_epsilons: Invalid epsilon table type");
+ const proc_fab_smp_eps_table_type& TABLE_TYPE = io_smp.eps_cfg.table_type;
FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_EPSILON_INVALID_TABLE_ERR);
break;
}
@@ -1289,6 +1455,7 @@ fapi::ReturnCode proc_build_smp_calc_epsilons(
((io_smp.eps_cfg.w_f > io_smp.eps_cfg.w_t2) && (io_smp.eps_cfg.table_type != PROC_FAB_SMP_EPSILON_TABLE_TYPE_1S)))
{
FAPI_ERR("proc_build_smp_calc_epsilons: Invalid relationship between base epsilon values");
+ const proc_fab_smp_eps_table_type& TABLE_TYPE = io_smp.eps_cfg.table_type;
FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_EPSILON_INVALID_TABLE_ERR);
break;
}
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.H b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.H
index 00a3ae2e2..f79c8c764 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.H
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_epsilon.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_epsilon.H,v 1.7 2013/11/13 01:49:53 jmcgill Exp $
+// $Id: proc_build_smp_epsilon.H,v 1.8 2014/02/23 21:41:06 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_epsilon.H,v $
//------------------------------------------------------------------------------
// *|
@@ -41,128 +41,9 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp.H"
+#include <proc_build_smp.H>
-//------------------------------------------------------------------------------
-// Constant definitions
-//------------------------------------------------------------------------------
-
-//
-// table of base epsilon values
-//
-
-const uint32_t PROC_BUILD_SMP_EPSILON_MIN_VALUE = 0x1;
-const uint32_t PROC_BUILD_SMP_EPSILON_MAX_VALUE = 0xFFFFFFFF;
-
-// HE epsilon (4 chips per-group)
-const uint32_t PROC_BUILD_SMP_EPSILON_R_T0_HE[] = { 6, 6, 7, 8, 9, 15 };
-const uint32_t PROC_BUILD_SMP_EPSILON_R_T1_HE[] = { 56, 58, 60, 62, 65, 84 };
-const uint32_t PROC_BUILD_SMP_EPSILON_R_T2_HE[] = { 102, 104, 105, 108, 111, 130 };
-const uint32_t PROC_BUILD_SMP_EPSILON_R_F_HE[] = { 66, 67, 69, 71, 75, 93 };
-const uint32_t PROC_BUILD_SMP_EPSILON_W_HE[] = { 46, 47, 47, 48, 50, 55 };
-const uint32_t PROC_BUILD_SMP_EPSILON_W_F_HE[] = { 37, 38, 39, 40, 40, 46 };
-
-// LE epsilon (2 chips per-group)
-const uint32_t PROC_BUILD_SMP_EPSILON_R_T0_LE[] = { 6, 6, 7, 8, 9, 15 };
-const uint32_t PROC_BUILD_SMP_EPSILON_R_T1_LE[] = { 47, 49, 50, 53, 56, 75 };
-const uint32_t PROC_BUILD_SMP_EPSILON_R_T2_LE[] = { 93, 95, 96, 99, 102, 120 };
-const uint32_t PROC_BUILD_SMP_EPSILON_R_F_LE[] = { 66, 67, 69, 71, 75, 93 };
-const uint32_t PROC_BUILD_SMP_EPSILON_W_LE[] = { 46, 47, 47, 48, 50, 55 };
-const uint32_t PROC_BUILD_SMP_EPSILON_W_F_LE[] = { 37, 38, 39, 40, 40, 46 };
-
-// Stradale epsilon (1 chip per-group)
-const uint32_t PROC_BUILD_SMP_EPSILON_R_T0_1S[] = { 6, 6, 7, 8, 9, 15 };
-const uint32_t PROC_BUILD_SMP_EPSILON_R_T1_1S[] = { 6, 6, 7, 8, 9, 15 };
-const uint32_t PROC_BUILD_SMP_EPSILON_R_T2_1S[] = { 63, 64, 65, 68, 72, 90 };
-const uint32_t PROC_BUILD_SMP_EPSILON_R_F_1S[] = { 66, 67, 69, 71, 75, 93 };
-const uint32_t PROC_BUILD_SMP_EPSILON_W_1S[] = { 14, 14, 15, 15, 16, 23 };
-const uint32_t PROC_BUILD_SMP_EPSILON_W_F_1S[] = { 37, 38, 39, 40, 40, 46 };
-
-
-//
-// unit specific epsilon range constants
-//
-
-// L2
-const uint32_t PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_R_T0 = 512;
-const uint32_t PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_R_T1 = 512;
-const uint32_t PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_R_T2 = 2048;
-const uint32_t PROC_BUILD_SMP_EPSILON_L2_MAX_VALUE_W_T2 = 128;
-
-// L3
-const uint32_t PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_R_T0 = 512;
-const uint32_t PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_R_T1 = 512;
-const uint32_t PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_R_T2 = 2048;
-const uint32_t PROC_BUILD_SMP_EPSILON_L3_MAX_VALUE_W_T2 = 128;
-
-// MCS
-const uint32_t PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_T0 = 1016;
-const uint32_t PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_T1 = 1016;
-const uint32_t PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_T2 = 1016;
-const uint32_t PROC_BUILD_SMP_EPSILON_MCS_MAX_VALUE_R_F = 1016;
-
-const uint8_t PROC_BUILD_SMP_EPSILON_MCS_JITTER = 0x1;
-
-// NX
-const uint32_t PROC_BUILD_SMP_EPSILON_NX_MAX_VALUE_W_T2 = 448;
-
-// HCA
-const uint32_t PROC_BUILD_SMP_EPSILON_HCA_MAX_VALUE_W_T2 = 512;
-
-// CAPP
-const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T0 = 512;
-const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T1 = 512;
-const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_R_T2 = 512;
-const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_MAX_VALUE_W_T2 = 128;
-
-const uint32_t PROC_BUILD_SMP_EPSILON_CAPP_FORCE_T2 = 0x1;
-
-// MCD
-const uint32_t PROC_BUILD_SMP_EPSILON_MCD_MAX_VALUE_P = 65520;
-
-
-//
-// unit specific register field/bit definition constants
-//
-
-// MCS MCEPS register field/bit definitions
-const uint32_t MCEPS_JITTER_EPSILON_START_BIT = 0;
-const uint32_t MCEPS_JITTER_EPSILON_END_BIT = 7;
-const uint32_t MCEPS_NODAL_EPSILON_START_BIT = 8;
-const uint32_t MCEPS_NODAL_EPSILON_END_BIT = 15;
-const uint32_t MCEPS_GROUP_EPSILON_START_BIT = 16;
-const uint32_t MCEPS_GROUP_EPSILON_END_BIT = 23;
-const uint32_t MCEPS_SYSTEM_EPSILON_START_BIT = 24;
-const uint32_t MCEPS_SYSTEM_EPSILON_END_BIT = 31;
-const uint32_t MCEPS_FOREIGN_EPSILON_START_BIT = 32;
-const uint32_t MCEPS_FOREIGN_EPSILON_END_BIT = 39;
-
-// NX CQ Epsilon Scale register field/bit definitions
-const uint32_t NX_CQ_EPSILON_SCALE_EPSILON_START_BIT = 0;
-const uint32_t NX_CQ_EPSILON_SCALE_EPSILON_END_BIT = 5;
-
-// HCA Mode register field/bit definitions
-const uint32_t HCA_MODE_EPSILON_START_BIT = 21;
-const uint32_t HCA_MODE_EPSILON_END_BIT = 29;
-
-// CAPP CXA Snoop Control register field/bit definitions
-const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER0_START_BIT = 3;
-const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER0_END_BIT = 11;
-const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER1_START_BIT = 15;
-const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER1_END_BIT = 23;
-const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER2_START_BIT = 25;
-const uint32_t CAPP_CXA_SNP_READ_EPSILON_TIER2_END_BIT = 35;
-const uint32_t CAPP_CXA_SNP_READ_EPSILON_MODE_BIT = 0;
-
-// CAPP APC Master PB Control register field/bit definitions
-const uint32_t CAPP_APC_MASTER_CONTROL_EPSILON_START_BIT = 39;
-const uint32_t CAPP_APC_MASTER_CONTROL_EPSILON_END_BIT = 45;
-
-// MCD Recovery Pre Epsilon Configuration register field/bit definitions
-const uint32_t MCD_RECOVERY_PRE_EPS_CONFIG_EPSILON_START_BIT = 52;
-const uint32_t MCD_RECOVERY_PRE_EPS_CONFIG_EPSILON_END_BIT = 63;
-
extern "C"
{
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml
index 4d8783a95..be4494a83 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_errors.xml
@@ -5,7 +5,7 @@
<!-- -->
<!-- IBM CONFIDENTIAL -->
<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2012,2013 -->
+<!-- COPYRIGHT International Business Machines Corp. 2012,2014 -->
<!-- -->
<!-- p1 -->
<!-- -->
@@ -20,92 +20,222 @@
<!-- Origin: 30 -->
<!-- -->
<!-- IBM_PROLOG_END_TAG -->
-<!-- $Id: proc_build_smp_errors.xml,v 1.7 2013/11/13 13:59:51 jmcgill Exp $ -->
+<!-- $Id: proc_build_smp_errors.xml,v 1.9 2014/02/26 18:14:12 jmcgill Exp $ -->
<!-- Error definitions for proc_build_smp -->
<hwpErrors>
<!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_NODE_ADD_INTERNAL_ERR</rc>
- <description>Internal Error. Error encountered adding node to SMP structure.</description>
+ <rc>RC_PROC_BUILD_SMP_CORE_FREQ_RANGE_ERR</rc>
+ <description>Invalid relationship between ceiling/nominal/floor core frequency attributes.</description>
+ <ffdc>FREQ_CORE_CEILING</ffdc>
+ <ffdc>FREQ_CORE_NOM</ffdc>
+ <ffdc>FREQ_CORE_FLOOR</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_DUPLICATE_FABRIC_ID_ERR</rc>
- <description>Multiple chips found with identifcal fabric node/chip ID attribute values.</description>
- <ffdc>NODE_ID</ffdc>
- <ffdc>CHIP_ID</ffdc>
+ <rc>RC_PROC_BUILD_SMP_CORE_FLOOR_FREQ_RATIO_ERR</rc>
+ <description>Unsupported core floor to PB frequency ratio.</description>
+ <ffdc>FREQ_PB</ffdc>
+ <ffdc>FREQ_CORE_FLOOR</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
+ <hwpError>
+ <rc>RC_PROC_BUILD_SMP_CORE_CEILING_FREQ_RATIO_ERR</rc>
+ <description>Unsupported core ceiling to PB frequency ratio.</description>
+ <ffdc>FREQ_PB</ffdc>
+ <ffdc>FREQ_CORE_CEILING</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
<rc>RC_PROC_BUILD_SMP_INVALID_OPERATION_ERR</rc>
<description>Unsupported SMP build operation presented.</description>
<ffdc>OP</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
<rc>RC_PROC_BUILD_SMP_MASTER_DESIGNATION_ERR</rc>
<description>Node or system master chip designation error.</description>
+ <ffdc>TARGET</ffdc>
<ffdc>OP</ffdc>
<ffdc>MASTER_CHIP_SYS_CURR</ffdc>
<ffdc>MASTER_CHIP_NODE_CURR</ffdc>
<ffdc>MASTER_CHIP_SYS_NEXT</ffdc>
<ffdc>MASTER_CHIP_NODE_NEXT</ffdc>
<ffdc>SYS_RECONFIG_MASTER_SET</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+ <!-- *********************************************************************** -->
+ <hwpError>
+ <rc>RC_PROC_BUILD_SMP_NODE_ADD_INTERNAL_ERR</rc>
+ <description>Internal Error. Error encountered adding node to SMP structure.</description>
+ <ffdc>TARGET</ffdc>
+ <ffdc>NODE_ID</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+ <!-- *********************************************************************** -->
+ <hwpError>
+ <rc>RC_PROC_BUILD_SMP_DUPLICATE_FABRIC_ID_ERR</rc>
+ <description>Multiple chips found with identifcal fabric node/chip ID attribute values.</description>
+ <ffdc>TARGET1</ffdc>
+ <ffdc>TARGET2</ffdc>
+ <ffdc>NODE_ID</ffdc>
+ <ffdc>CHIP_ID</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
<rc>RC_PROC_BUILD_SMP_NO_MASTER_SPECIFIED_ERR</rc>
<description>Input parameters do not specify a new fabric system master.</description>
<ffdc>OP</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
+ <hwpError>
+ <rc>RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH</rc>
+ <description>Status mismatch detected on ADU operation executed for SMP configuration.</description>
+ <ffdc>TARGET</ffdc>
+ <ffdc>ADU_STATUS_DATA</ffdc>
+ <ffdc>ADU_NUM_POLLS</ffdc>
+ <ffdc>FFDC_VALID</ffdc>
+ <ffdc>NUM_CHIPS</ffdc>
+ <ffdc>CHIP_IDS</ffdc>
+ <ffdc>PB_MODE_CENT_DATA</ffdc>
+ <ffdc>PB_HP_MODE_NEXT_CENT_DATA</ffdc>
+ <ffdc>PB_HP_MODE_CURR_CENT_DATA</ffdc>
+ <ffdc>PB_HPX_MODE_NEXT_CENT_DATA</ffdc>
+ <ffdc>PB_HPX_MODE_CURR_CENT_DATA</ffdc>
+ <ffdc>X_GP0_DATA</ffdc>
+ <ffdc>PB_X_MODE_DATA</ffdc>
+ <ffdc>A_GP0_DATA</ffdc>
+ <ffdc>ADU_IOS_LINK_EN_DATA</ffdc>
+ <ffdc>PB_A_MODE_DATA</ffdc>
+ <ffdc>ADU_PMISC_MODE_DATA</ffdc>
+ <callout>
+ <procedure>LVL_SUPPORT</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
<rc>RC_PROC_BUILD_SMP_EPSILON_RANGE_ERR</rc>
<description>Target epsilon value exceeds maximum value supported by HW capabilities.</description>
<ffdc>VALUE</ffdc>
<ffdc>MAX_HW_VALUE</ffdc>
+ <ffdc>UNIT</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
<rc>RC_PROC_BUILD_SMP_EPSILON_INVALID_TABLE_ERR</rc>
<description>Invalid epsilon table type or content detected.</description>
+ <ffdc>TABLE_TYPE</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_PACING_RATE_TABLE_ERR</rc>
- <description>Command rate pacing table lookup error.</description>
- </hwpError>
- <hwpError>
- <rc>RC_PROC_BUILD_SMP_CORE_FREQ_RANGE_ERR</rc>
- <description>Invalid relationship between ceiling/nominal/floor core frequency attributes.</description>
- <ffdc>CEILING</ffdc>
- <ffdc>NOM</ffdc>
- <ffdc>FLOOR</ffdc>
+ <rc>RC_PROC_BUILD_SMP_INVALID_AGGREGATE_CONFIG_ERR</rc>
+ <description>Invalid aggregate link configuration detected.</description>
+ <ffdc>TARGET</ffdc>
+ <ffdc>X_NOT_A</ffdc>
+ <ffdc>ALLOW_AGGREGATE</ffdc>
+ <ffdc>AGGREGATE_DEST_ID1</ffdc>
+ <ffdc>AGGREGATE_DEST_ID2</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_CORE_FLOOR_FREQ_RATIO_ERR</rc>
- <description>Unsupported core floor to PB frequency ratio.</description>
+ <rc>RC_PROC_BUILD_SMP_X_CMD_RATE_ERR</rc>
+ <description>Target link command rate value is out of range.</description>
<ffdc>FREQ_PB</ffdc>
- <ffdc>FREQ_CORE_FLOOR</ffdc>
+ <ffdc>FREQ_X</ffdc>
+ <ffdc>X_IS_8B</ffdc>
+ <ffdc>X_AGGREGATE</ffdc>
+ <ffdc>N</ffdc>
+ <ffdc>D</ffdc>
+ <ffdc>CMD_RATE</ffdc>
+ <ffdc>MIN_CMD_RATE</ffdc>
+ <ffdc>MAX_CMD_RATE</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_CORE_CEILING_FREQ_RATIO_ERR</rc>
- <description>Unsupported core ceiling to PB frequency ratio.</description>
+ <rc>RC_PROC_BUILD_SMP_A_CMD_RATE_ERR</rc>
+ <description>Target link command rate value is out of range.</description>
<ffdc>FREQ_PB</ffdc>
- <ffdc>FREQ_CORE_CEILING</ffdc>
- </hwpError>
- <hwpError>
- <rc>RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR</rc>
- <description>Unsupported core floor frequency enumerated value.</description>
- <ffdc>CORE_FLOOR_RATIO</ffdc>
- </hwpError>
- <hwpError>
- <rc>RC_PROC_BUILD_SMP_CORE_CEILING_RATIO_ERR</rc>
- <description>Unsupported core ceiling frequency enumerated value.</description>
- <ffdc>CORE_CEILING_RATIO</ffdc>
- </hwpError>
- <hwpError>
- <rc>RC_PROC_BUILD_SMP_INVALID_GROUP_SIZE_ERR</rc>
- <description>Invalid chips per group configuration detected.</description>
- <ffdc>SIZE</ffdc>
+ <ffdc>FREQ_A</ffdc>
+ <ffdc>A_OW_PACK</ffdc>
+ <ffdc>A_OW_PACK_PRIORITY</ffdc>
+ <ffdc>A_AGGREGATE</ffdc>
+ <ffdc>N</ffdc>
+ <ffdc>D</ffdc>
+ <ffdc>CMD_RATE</ffdc>
+ <ffdc>MIN_CMD_RATE</ffdc>
+ <ffdc>MAX_CMD_RATE</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_INVALID_AGGREGATE_CONFIG_ERR</rc>
- <description>Invalid aggregate link configuration detected.</description>
+ <rc>RC_PROC_BUILD_SMP_F_CMD_RATE_ERR</rc>
+ <description>Target link command rate value is out of range.</description>
+ <ffdc>FREQ_PB</ffdc>
+ <ffdc>FREQ_F</ffdc>
+ <ffdc>F_OW_PACK</ffdc>
+ <ffdc>F_OW_PACK_PRIORITY</ffdc>
+ <ffdc>F_AGGREGATE</ffdc>
+ <ffdc>N</ffdc>
+ <ffdc>D</ffdc>
+ <ffdc>CMD_RATE</ffdc>
+ <ffdc>MIN_CMD_RATE</ffdc>
+ <ffdc>MAX_CMD_RATE</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
<rc>RC_PROC_BUILD_SMP_HOTPLUG_SHADOW_ERR</rc>
<description>Inconsistent state in hotplug (CURR) shadow copies.</description>
@@ -113,38 +243,129 @@
<ffdc>ADDRESS1</ffdc>
<ffdc>DATA0</ffdc>
<ffdc>DATA1</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_X_CMD_RATE_ERR</rc>
- <description>Target link command rate value is out of range.</description>
- <ffdc>CMD_RATE</ffdc>
+ <rc>RC_PROC_BUILD_SMP_AX_PARTIAL_GOOD_ERR</rc>
+ <description>A/X bus partial good attribute state does not allow for action on target.</description>
+ <ffdc>SOURCE_CHIP_TARGET</ffdc>
+ <ffdc>CHIPLET_ID</ffdc>
+ <ffdc>SOURCE_LINK_ID</ffdc>
+ <ffdc>REGION_ENABLED</ffdc>
+ <ffdc>REGIONS_TO_ENABLE</ffdc>
+ <ffdc>REGIONS_TO_ENABLE_VALID</ffdc>
+ <ffdc>DEST_LINK_TARGET</ffdc>
+ <callout>
+ <target>SOURCE_CHIP_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ <deconfigure>
+ <target>SOURCE_CHIP_TARGET</target>
+ </deconfigure>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_A_CMD_RATE_ERR</rc>
- <description>Target link command rate value is out of range.</description>
- <ffdc>CMD_RATE</ffdc>
+ <rc>RC_PROC_BUILD_SMP_LINK_TARGET_TYPE_ERR</rc>
+ <description>Invalid destination link target type detected in input parameters.</description>
+ <ffdc>SOURCE_CHIP_TARGET</ffdc>
+ <ffdc>SOURCE_LINK_ID</ffdc>
+ <ffdc>DEST_LINK_TARGET</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_F_CMD_RATE_ERR</rc>
- <description>Target link command rate value is out of range.</description>
- <ffdc>CMD_RATE</ffdc>
+ <rc>RC_PROC_BUILD_SMP_PCIE_PARTIAL_GOOD_ERR</rc>
+ <description>PCIE partial good attribute state does not allow for action on target.</description>
+ <ffdc>SOURCE_CHIP_TARGET</ffdc>
+ <ffdc>CHIPLET_ID</ffdc>
+ <ffdc>SOURCE_LINK_ID</ffdc>
+ <ffdc>REGION_ENABLED</ffdc>
+ <ffdc>REGIONS_TO_ENABLE</ffdc>
+ <ffdc>REGIONS_TO_ENABLE_VALID</ffdc>
+ <ffdc>DEST_NODE_ID</ffdc>
+ <callout>
+ <target>SOURCE_CHIP_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ <deconfigure>
+ <target>SOURCE_CHIP_TARGET</target>
+ </deconfigure>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH</rc>
- <description>Status mismatch detected on ADU operation executed for SMP configuration.</description>
- <ffdc>NUM_POLLS</ffdc>
- <ffdc>STATUS_DATA</ffdc>
+ <rc>RC_PROC_BUILD_SMP_CORE_CEILING_RATIO_ERR</rc>
+ <description>Unsupported core ceiling frequency enumerated value.</description>
+ <ffdc>FREQ_PB</ffdc>
+ <ffdc>FREQ_CORE_CEILING</ffdc>
+ <ffdc>CORE_CEILING_RATIO</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+ <!-- *********************************************************************** -->
+ <hwpError>
+ <rc>RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR</rc>
+ <description>Unsupported core floor frequency enumerated value.</description>
+ <ffdc>FREQ_PB</ffdc>
+ <ffdc>FREQ_CORE_FLOOR</ffdc>
+ <ffdc>CORE_FLOOR_RATIO</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_X_PARTIAL_GOOD_ERR</rc>
- <description>X bus partial good attribute state does not allow for action on target.</description>
+ <rc>RC_PROC_BUILD_SMP_INVALID_GROUP_SIZE_ERR</rc>
+ <description>Invalid chips per group configuration detected.</description>
+ <ffdc>TARGET</ffdc>
+ <ffdc>GROUP_SIZE</ffdc>
+ <ffdc>NODE_ID</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_A_PARTIAL_GOOD_ERR</rc>
- <description>A bus partial good attribute state does not allow for action on target.</description>
+ <rc>RC_PROC_BUILD_SMP_PACING_RATE_TABLE_ERR</rc>
+ <description>Command rate pacing table lookup error.</description>
+ <ffdc>TARGET</ffdc>
+ <ffdc>GROUP_SIZE</ffdc>
+ <ffdc>NODE_ID</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
+ <!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_BUILD_SMP_PCIE_PARTIAL_GOOD_ERR</rc>
- <description>PCIE partial good attribute state does not allow for action on target.</description>
+ <rc>RC_PROC_BUILD_SMP_INVALID_TOPOLOGY</rc>
+ <description>Invalid fabric topology specified by input parameters.</description>
+ <ffdc>TARGET</ffdc>
+ <ffdc>A_CONNECTIONS_OK</ffdc>
+ <ffdc>A_CONNECTED_NODE_IDS</ffdc>
+ <ffdc>X_CONNECTIONS_OK</ffdc>
+ <ffdc>X_CONNECTED_NODE_IDS</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
</hwpError>
</hwpErrors>
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.C b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.C
index fb198f0e5..852d301f5 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_ab.C,v 1.9 2013/10/24 19:59:08 jmcgill Exp $
+// $Id: proc_build_smp_fbc_ab.C,v 1.11 2014/02/26 18:12:57 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_ab.C,v $
//------------------------------------------------------------------------------
// *|
@@ -39,18 +39,126 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp_fbc_ab.H"
-#include "proc_build_smp_epsilon.H"
-#include "proc_build_smp_adu.H"
+#include <proc_build_smp_fbc_ab.H>
+#include <proc_build_smp_epsilon.H>
+#include <proc_build_smp_adu.H>
-extern "C" {
+//------------------------------------------------------------------------------
+// Constant definitions
+//------------------------------------------------------------------------------
+
+// PB Hotplug Mode register field/bit definitions
+const uint32_t PB_HP_MODE_LINK_A_EN_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 1, 2, 3 };
+const uint32_t PB_HP_MODE_LINK_A_ADDR_DIS_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 4, 5, 6 };
+const uint32_t PB_HP_MODE_LINK_A_ID_START_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 7, 10, 13 };
+const uint32_t PB_HP_MODE_LINK_A_ID_END_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 9, 12, 15 };
+
+const uint32_t PB_HP_MODE_PCIE_NOT_DSMP_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 38, 39 };
+const uint32_t PB_HP_MODE_LINK_F_MASTER_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 42, 43 };
+const uint32_t PB_HP_MODE_LINK_F_EN_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 44, 45 };
+const uint32_t PB_HP_MODE_LINK_F_ADDR_DIS_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 46, 47 };
+const uint32_t PB_HP_MODE_LINK_F_ID_START_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 48, 51 };
+const uint32_t PB_HP_MODE_LINK_F_ID_END_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 50, 53 };
+
+const uint32_t PB_HP_MODE_A_AGGREGATE_BIT = 16;
+const uint32_t PB_HP_MODE_TM_MASTER_BIT = 17;
+const uint32_t PB_HP_MODE_CHG_RATE_SP_MASTER_BIT = 19;
+const uint32_t PB_HP_MODE_PUMP_MODE_BIT = 20;
+const uint32_t PB_HP_MODE_SINGLE_MC_BIT = 21;
+const uint32_t PB_HP_MODE_DCACHE_CAPP_MODE_BIT = 22;
+const uint32_t PB_HP_MODE_A_CMD_RATE_START_BIT = 24;
+const uint32_t PB_HP_MODE_A_CMD_RATE_END_BIT = 31;
+const uint32_t PB_HP_MODE_A_CMD_RATE_MIN_VALUE = 1;
+const uint32_t PB_HP_MODE_A_CMD_RATE_MAX_VALUE = 0x7F;
+const uint32_t PB_HP_MODE_A_GATHER_ENABLE_BIT = 32;
+const uint32_t PB_HP_MODE_A_GATHER_DLY_CNT_START_BIT = 33;
+const uint32_t PB_HP_MODE_A_GATHER_DLY_CNT_END_BIT = 37;
+const uint32_t PB_HP_MODE_GATHER_ENABLE_BIT = 40;
+const uint32_t PB_HP_MODE_F_AGGREGATE_BIT = 55;
+const uint32_t PB_HP_MODE_F_CMD_RATE_START_BIT = 56;
+const uint32_t PB_HP_MODE_F_CMD_RATE_END_BIT = 63;
+const uint32_t PB_HP_MODE_F_CMD_RATE_MIN_VALUE = 1;
+const uint32_t PB_HP_MODE_F_CMD_RATE_MAX_VALUE = 0x7F;
+
+const bool PB_HP_MODE_DCACHE_CAPP_EN = false;
+const bool PB_HP_MODE_A_GATHER_ENABLE = true;
+const uint8_t PB_HP_MODE_A_GATHER_DLY_CNT = 0x04;
+const bool PB_HP_MODE_GATHER_ENABLE = true;
+
+const uint32_t PB_HP_MODE_NEXT_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
+{
+ PB_HP_MODE_NEXT_WEST_0x02010C0B,
+ PB_HP_MODE_NEXT_CENT_0x02010C4B,
+ PB_HP_MODE_NEXT_EAST_0x02010C8B
+};
+const uint32_t PB_HP_MODE_CURR_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
+{
+ PB_HP_MODE_CURR_WEST_0x02010C0C,
+ PB_HP_MODE_CURR_CENT_0x02010C4C,
+ PB_HP_MODE_CURR_EAST_0x02010C8C
+};
+
+// PB Hotplug Extension Mode register field/bit definitions
+const uint32_t PB_HPX_MODE_LINK_X_EN_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 0, 1, 2, 3 };
+const uint32_t PB_HPX_MODE_LINK_X_ADDR_DIS_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 5, 6, 7, 8 };
+const uint32_t PB_HPX_MODE_LINK_X_CHIPID_START_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 10, 13, 16, 19 };
+const uint32_t PB_HPX_MODE_LINK_X_CHIPID_END_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 12, 15, 18, 21 };
+
+const uint32_t PB_HPX_MODE_X_AGGREGATE_BIT = 25;
+const uint32_t PB_HPX_MODE_X_INDIRECT_EN_BIT = 26;
+const uint32_t PB_HPX_MODE_X_GATHER_ENABLE_BIT = 32;
+const uint32_t PB_HPX_MODE_X_GATHER_DLY_CNT_START_BIT = 33;
+const uint32_t PB_HPX_MODE_X_GATHER_DLY_CNT_END_BIT = 37;
+const uint32_t PB_HPX_MODE_X_ONNODE_12QUEUES_BIT = 38;
+const uint32_t PB_HPX_MODE_X_CMD_RATE_START_BIT = 56;
+const uint32_t PB_HPX_MODE_X_CMD_RATE_END_BIT = 63;
+const uint32_t PB_HPX_MODE_X_CMD_RATE_MIN_VALUE = 1;
+const uint32_t PB_HPX_MODE_X_CMD_RATE_MAX_VALUE = 0x7F;
+
+const bool PB_HPX_MODE_X_INDIRECT_EN = true;
+const bool PB_HPX_MODE_X_GATHER_ENABLE = true;
+const uint8_t PB_HPX_MODE_X_GATHER_DLY_CNT = 0x04;
+const bool PB_HPX_MODE_X_ONNODE_12QUEUES = true;
+
+const uint32_t PB_HPX_MODE_NEXT_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
+{
+ PB_HPX_MODE_NEXT_WEST_0x02010C0D,
+ PB_HPX_MODE_NEXT_CENT_0x02010C4D,
+ PB_HPX_MODE_NEXT_EAST_0x02010C8D
+};
+const uint32_t PB_HPX_MODE_CURR_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
+{
+ PB_HPX_MODE_CURR_WEST_0x02010C0E,
+ PB_HPX_MODE_CURR_CENT_0x02010C4E,
+ PB_HPX_MODE_CURR_EAST_0x02010C8E
+};
+
+// PB X Link Mode register field/bit definitions
+const uint32_t PB_X_MODE_LINK_DELAY_START_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 24, 32, 40, 48 };
+const uint32_t PB_X_MODE_LINK_DELAY_END_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 31, 39, 47, 55 };
+// PB A Link Mode register field/bit definitions
+const uint32_t PB_A_MODE_LINK_DELAY_START_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 40, 48, 56 };
+const uint32_t PB_A_MODE_LINK_DELAY_END_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 47, 55, 63 };
+
+// PB A Link Framer Configuration register field/bit definitions
+const uint32_t PB_A_FMR_CFG_OW_PACK_BIT = 24;
+const uint32_t PB_A_FMR_CFG_OW_PACK_PRIORITY_BIT = 25;
+
+// PB IOF Link Mode register field/bit definitions
+const uint32_t PB_IOF_MODE_LINK_DELAY_START_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 32, 48 };
+const uint32_t PB_IOF_MODE_LINK_DELAY_END_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 47, 63 };
+
+// PB F Link Framer Configuration register field/bit definitions
+const uint32_t PB_F_FMR_CFG_OW_PACK_BIT = 20;
+const uint32_t PB_F_FMR_CFG_OW_PACK_PRIORITY_BIT = 21;
+
+extern "C" {
//------------------------------------------------------------------------------
// Function definitions
//------------------------------------------------------------------------------
-
//------------------------------------------------------------------------------
// function: read PB A Link Framer Configuration register and determine
// OW packing setup
@@ -152,7 +260,7 @@ fapi::ReturnCode proc_build_smp_get_f_owpack_config(
// i_link_en => per-link enable values
// i_link_target => link endpoint targets
// o_link_delay_local => array of link round trip delay values
-// (measured by local chip)
+// (measured by local chip)
// o_link_delay_remote => array of link round trip delay values
// (measured by remote chips)
// o_link_number_remote => array of link numbers
@@ -289,7 +397,128 @@ fapi::ReturnCode proc_build_smp_get_link_delays(
} while(0);
// mark function exit
- FAPI_DBG("proc_build_smp_get_link_delays: Start");
+ FAPI_DBG("proc_build_smp_get_link_delays: End");
+ return rc;
+}
+
+
+//------------------------------------------------------------------------------
+// function: determine paramters of link/destination chip
+// parameters: i_smp_chip => structure encapsulating SMP chip
+// i_source_link_id => link identifier for FFDC
+// i_dest_target => pointer to destination link endpoint target
+// o_link_is_enabled => true=link enabled, false=link disabled
+// o_dest_target_node_id => node ID of destination chip
+// o_dest_target_chip_id => chip ID of destination chip
+// returns: FAPI_RC_SUCCESS if output values are valid,
+// RC_PROC_FAB_SMP_FABRIC_CHIP_ID_ATTR_ERR if attribute value is
+// invalid,
+// RC_PROC_FAB_SMP_FABRIC_NODE_ID_ATTR_ERR if attribute value is
+// invalid,
+// RC_PROC_BUILD_SMP_AX_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_LINK_TARGET_TYPE_ERR if link target type is
+// unsupported,
+// else error
+//------------------------------------------------------------------------------
+fapi::ReturnCode proc_build_smp_query_link_state(
+ const proc_build_smp_chip& i_smp_chip,
+ const uint8_t i_source_link_id,
+ fapi::Target* i_dest_target,
+ bool& o_link_is_enabled,
+ proc_fab_smp_node_id& o_dest_target_node_id,
+ proc_fab_smp_chip_id& o_dest_target_chip_id)
+{
+ fapi::ReturnCode rc;
+ fapi::TargetType dest_target_type = i_dest_target->getType();
+ bool src_link_region_pg = false;
+ uint8_t src_link_chiplet_id = 0xFF;
+
+ FAPI_DBG("proc_build_smp_query_link_state: Start");
+
+ do
+ {
+ switch (dest_target_type)
+ {
+ case (fapi::TARGET_TYPE_NONE):
+ o_link_is_enabled = false;
+ o_dest_target_node_id = FBC_NODE_ID_0;
+ o_dest_target_chip_id = FBC_CHIP_ID_0;
+ break;
+ case (fapi::TARGET_TYPE_ABUS_ENDPOINT):
+ case (fapi::TARGET_TYPE_XBUS_ENDPOINT):
+ // destination target is valid, so mark link as enabled
+ o_link_is_enabled = true;
+
+ // extract chip/node ID from destination chip
+ rc = proc_fab_smp_get_node_id_attr(i_dest_target, o_dest_target_node_id);
+ if (rc)
+ {
+ FAPI_ERR("proc_build_smp_query_link_state: Error from proc_fab_smp_get_node_id_attr");
+ break;
+ }
+
+ rc = proc_fab_smp_get_chip_id_attr(i_dest_target, o_dest_target_chip_id);
+ if (rc)
+ {
+ FAPI_ERR("proc_build_smp_query_link_state: Error from proc_fab_smp_get_chip_id_attr");
+ break;
+ }
+
+ // perform partial good attribute checking
+ // ABUS
+ if (dest_target_type == fapi::TARGET_TYPE_ABUS_ENDPOINT)
+ {
+ src_link_region_pg = i_smp_chip.a_enabled;
+ src_link_chiplet_id = 0x8;
+ }
+ // XBUS
+ else
+ {
+ src_link_region_pg = i_smp_chip.x_enabled;
+ src_link_chiplet_id = 0x4;
+ }
+
+ // destination target is valid, but region on source chip containing
+ // connected link logic is not enabled, given state of partial good
+ // attributes
+ if (!src_link_region_pg)
+ {
+ // obtain VPD partial good attribute for FFDC
+ uint64_t src_link_region_pg_attr[32];
+ rc = FAPI_ATTR_GET(ATTR_CHIP_REGIONS_TO_ENABLE,
+ &(i_smp_chip.chip->this_chip),
+ src_link_region_pg_attr);
+
+ FAPI_ERR("proc_build_smp_query_link_state: Partial good attribute error (chiplet ID = 0x%02X)",
+ src_link_chiplet_id);
+ const fapi::Target& SOURCE_CHIP_TARGET = i_smp_chip.chip->this_chip;
+ const uint8_t& CHIPLET_ID = src_link_chiplet_id;
+ const uint8_t& SOURCE_LINK_ID = i_source_link_id;
+ const bool& REGION_ENABLED = src_link_region_pg;
+ const uint64_t& REGIONS_TO_ENABLE = src_link_region_pg_attr[src_link_chiplet_id];
+ const bool& REGIONS_TO_ENABLE_VALID = rc.ok();
+ const fapi::Target& DEST_LINK_TARGET = *(i_dest_target);
+ FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_AX_PARTIAL_GOOD_ERR);
+ break;
+ }
+ break;
+ default:
+ FAPI_ERR("proc_build_smp_query_link_state: Unsupported destination link target type!");
+ const fapi::Target& SOURCE_CHIP_TARGET = i_smp_chip.chip->this_chip;
+ const uint8_t& SOURCE_LINK_ID = i_source_link_id;
+ const fapi::Target& DEST_LINK_TARGET = *(i_dest_target);
+ FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_LINK_TARGET_TYPE_ERR);
+ break;
+ }
+ if (!rc.ok())
+ {
+ break;
+ }
+
+ } while(0);
+
+ FAPI_DBG("proc_build_smp_query_link_state: End");
return rc;
}
@@ -373,7 +602,21 @@ fapi::ReturnCode proc_build_smp_calc_link_setup(
// currently procedure does not support aggregate F links
if (!i_allow_aggregate || o_link_aggregate)
{
+ uint8_t first_id = 0;
+ for (first_id = 0; first_id < id; first_id++)
+ {
+ if (id_active_count[first_id] > 1)
+ {
+ break;
+ }
+ }
+
FAPI_ERR("proc_build_smp_calc_link_setup: Invalid aggregate link configuration");
+ const fapi::Target& TARGET = i_smp_chip.chip->this_chip;
+ const bool& X_NOT_A = i_x_not_a;
+ const bool& ALLOW_AGGREGATE = i_allow_aggregate;
+ const uint8_t& AGGREGATE_DEST_ID1 = first_id;
+ const uint8_t& AGGREGATE_DEST_ID2 = id;
FAPI_SET_HWP_ERROR(
rc,
RC_PROC_BUILD_SMP_INVALID_AGGREGATE_CONFIG_ERR);
@@ -550,7 +793,15 @@ fapi::ReturnCode proc_build_smp_calc_x_cmd_rate(
(cmd_rate > PB_HPX_MODE_X_CMD_RATE_MAX_VALUE))
{
FAPI_ERR("proc_build_smp_calc_x_cmd_rate: X link command rate is out of range");
- const uint32_t & CMD_RATE = cmd_rate;
+ const uint32_t& FREQ_PB = i_freq_pb;
+ const uint32_t& FREQ_X = i_freq_x;
+ const bool& X_IS_8B = i_x_is_8B;
+ const bool& X_AGGREGATE = i_x_aggregate;
+ const uint32_t& N = n;
+ const uint32_t& D = d;
+ const uint32_t& CMD_RATE = cmd_rate;
+ const uint32_t& MIN_CMD_RATE = PB_HPX_MODE_X_CMD_RATE_MIN_VALUE;
+ const uint32_t& MAX_CMD_RATE = PB_HPX_MODE_X_CMD_RATE_MAX_VALUE;
FAPI_SET_HWP_ERROR(rc,
RC_PROC_BUILD_SMP_X_CMD_RATE_ERR);
break;
@@ -615,7 +866,16 @@ fapi::ReturnCode proc_build_smp_calc_a_cmd_rate(
(cmd_rate > PB_HP_MODE_A_CMD_RATE_MAX_VALUE))
{
FAPI_ERR("proc_build_smp_calc_a_cmd_rate: A link command rate is out of range");
- const uint32_t & CMD_RATE = cmd_rate;
+ const uint32_t& FREQ_PB = i_freq_pb;
+ const uint32_t& FREQ_A = i_freq_a;
+ const bool& A_OW_PACK = i_a_ow_pack;
+ const bool& A_OW_PACK_PRIORITY = i_a_ow_pack_priority;
+ const bool& A_AGGREGATE = i_a_aggregate;
+ const uint32_t& N = n;
+ const uint32_t& D = d;
+ const uint32_t& CMD_RATE = cmd_rate;
+ const uint32_t& MIN_CMD_RATE = PB_HP_MODE_A_CMD_RATE_MIN_VALUE;
+ const uint32_t& MAX_CMD_RATE = PB_HP_MODE_A_CMD_RATE_MAX_VALUE;
FAPI_SET_HWP_ERROR(rc,
RC_PROC_BUILD_SMP_A_CMD_RATE_ERR);
break;
@@ -625,7 +885,7 @@ fapi::ReturnCode proc_build_smp_calc_a_cmd_rate(
o_a_cmd_rate = (uint8_t) cmd_rate;
// mark function exit
- FAPI_DBG("proc_build_smp_calc_a_cmd_rate: Start");
+ FAPI_DBG("proc_build_smp_calc_a_cmd_rate: End");
return rc;
}
@@ -655,7 +915,7 @@ fapi::ReturnCode proc_build_smp_calc_f_cmd_rate(
uint32_t n_ow_pack = 0;
uint32_t cmd_rate;
- // mark function exit
+ // mark function entry
FAPI_DBG("proc_build_smp_calc_f_cmd_rate: Start");
do
@@ -683,7 +943,16 @@ fapi::ReturnCode proc_build_smp_calc_f_cmd_rate(
(cmd_rate > PB_HP_MODE_F_CMD_RATE_MAX_VALUE))
{
FAPI_ERR("proc_build_smp_calc_f_cmd_rate: F link command rate is out of range");
- const uint32_t & CMD_RATE = cmd_rate;
+ const uint32_t& FREQ_PB = i_freq_pb;
+ const uint32_t& FREQ_F = i_freq_f;
+ const bool& F_OW_PACK = i_f_ow_pack;
+ const bool& F_OW_PACK_PRIORITY = i_f_ow_pack_priority;
+ const bool& F_AGGREGATE = i_f_aggregate;
+ const uint32_t& N = n;
+ const uint32_t& D = d;
+ const uint32_t& CMD_RATE = cmd_rate;
+ const uint32_t& MIN_CMD_RATE = PB_HP_MODE_F_CMD_RATE_MIN_VALUE;
+ const uint32_t& MAX_CMD_RATE = PB_HP_MODE_F_CMD_RATE_MAX_VALUE;
FAPI_SET_HWP_ERROR(rc,
RC_PROC_BUILD_SMP_F_CMD_RATE_ERR);
break;
@@ -774,6 +1043,7 @@ fapi::ReturnCode proc_build_smp_get_hotplug_curr_reg(
ecmdDataBufferBase& o_data)
{
fapi::ReturnCode rc;
+ uint32_t rc_ecmd = 0;
ecmdDataBufferBase data(64);
// mark function entry
@@ -817,7 +1087,14 @@ fapi::ReturnCode proc_build_smp_get_hotplug_curr_reg(
}
// set output (will be used to compare with next HW read)
- data.copy(o_data);
+ rc_ecmd |= data.copy(o_data);
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_build_smp_get_hotplug_curr_reg: Error 0x%x copying register data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
}
// mark function exit
@@ -827,49 +1104,52 @@ fapi::ReturnCode proc_build_smp_get_hotplug_curr_reg(
//------------------------------------------------------------------------------
-// function: reset (copy CURR->NEXT) PB Hotplug Mode register
-// parameters: i_smp_chip => structure encapsulating SMP chip
+// function: reset (copy CURR->NEXT) PB Hotplug Mode/Mode Extension register
+// parameters: i_smp_chip => structure encapsulating SMP chip
+// i_hp_not_hpx => choose HP/HPX register set (true=HP,
+// false=HPX)
// returns: FAPI_RC_SUCCESS if register programming is successful,
// RC_PROC_BUILD_SMP_HOTPLUG_SHADOW_ERR if shadow registers are not
// equivalent,
// else error
//------------------------------------------------------------------------------
-fapi::ReturnCode proc_build_smp_reset_pb_hp_mode(
- const proc_build_smp_chip& i_smp_chip)
+fapi::ReturnCode proc_build_smp_reset_hotplug_next_reg(
+ const proc_build_smp_chip& i_smp_chip,
+ const bool i_hp_not_hpx)
{
fapi::ReturnCode rc;
ecmdDataBufferBase data(64);
// mark function entry
- FAPI_DBG("proc_build_smp_reset_pb_hp_mode: Start");
+ FAPI_DBG("proc_build_smp_reset_hotplug_next_reg: Start");
do
{
// read CURR state
rc = proc_build_smp_get_hotplug_curr_reg(i_smp_chip,
- true,
+ i_hp_not_hpx,
data);
if (!rc.ok())
{
- FAPI_ERR("proc_build_smp_reset_pb_hp_mode: proc_build_smp_get_hotplug_curr_reg");
+ FAPI_ERR("proc_build_smp_reset_hotplug_next_reg: proc_build_smp_get_hotplug_curr_reg");
break;
}
// write NEXT state
rc = proc_build_smp_set_hotplug_reg(i_smp_chip,
false,
- true,
+ i_hp_not_hpx,
data);
if (!rc.ok())
{
- FAPI_ERR("proc_build_smp_reset_pb_hp_mode: proc_build_smp_set_hotplug_reg");
+ FAPI_ERR("proc_build_smp_reset_hotplug_next_reg: proc_build_smp_set_hotplug_reg");
break;
}
} while(0);
// mark function exit
- FAPI_DBG("proc_build_smp_reset_pb_hp_mode: End");
+ FAPI_DBG("proc_build_smp_reset_hotplug_next_reg: End");
return rc;
}
@@ -889,6 +1169,12 @@ fapi::ReturnCode proc_build_smp_reset_pb_hp_mode(
// is invalid,
// RC_PROC_BUILD_SMP_F_CMD_RATE_ERR if calculated F link command rate
// is invalid,
+// RC_PROC_BUILD_SMP_AX_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_PCIE_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_LINK_TARGET_TYPE_ERR if link target type is
+// unsupported,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_set_pb_hp_mode(
@@ -935,26 +1221,20 @@ fapi::ReturnCode proc_build_smp_set_pb_hp_mode(
a_target[2] = &(i_smp_chip.chip->a2_chip);
for (uint8_t l = 0; l < PROC_FAB_SMP_NUM_A_LINKS; l++)
{
- // determine link enable
- a_en[l] = (a_target[l]->getType() != fapi::TARGET_TYPE_NONE);
- if (a_en[l] && !i_smp_chip.a_enabled)
+ // determine link enable/ID
+ proc_fab_smp_node_id dest_node_id;
+ proc_fab_smp_chip_id dest_chip_id;
+ rc = proc_build_smp_query_link_state(i_smp_chip,
+ l,
+ a_target[l],
+ a_en[l],
+ dest_node_id,
+ dest_chip_id);
+ if (!rc.ok())
{
- FAPI_ERR("proc_build_smp_set_pb_hp_mode: Partial good attribute error (A)");
- FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_A_PARTIAL_GOOD_ERR);
+ FAPI_ERR("proc_build_smp_set_pb_hp_mode: Error from proc_build_smp_query_link_state");
break;
}
-
- // determine link ID
- proc_fab_smp_node_id dest_node_id = FBC_NODE_ID_0;
- if (a_en[l])
- {
- rc = proc_fab_smp_get_node_id_attr(a_target[l], dest_node_id);
- if (rc)
- {
- FAPI_ERR("proc_build_smp_set_pb_hp_mode: Error from proc_fab_smp_get_node_id_attr");
- break;
- }
- }
a_id[l] = (uint8_t) dest_node_id;
}
if (rc)
@@ -975,7 +1255,21 @@ fapi::ReturnCode proc_build_smp_set_pb_hp_mode(
{
if (f_en[l] && !i_smp_chip.pcie_enabled)
{
+ // obtain partial good attribute for FFDC
+ uint8_t src_link_chiplet_id = 0x9;
+ uint64_t src_link_region_pg_attr[32];
+ rc = FAPI_ATTR_GET(ATTR_CHIP_REGIONS_TO_ENABLE,
+ &(i_smp_chip.chip->this_chip),
+ src_link_region_pg_attr);
+
FAPI_ERR("proc_build_smp_set_pb_hp_mode: Partial good attribute error (PCIE)");
+ const fapi::Target& SOURCE_CHIP_TARGET = i_smp_chip.chip->this_chip;
+ const uint8_t& CHIPLET_ID = src_link_chiplet_id;
+ const uint8_t& SOURCE_LINK_ID = l;
+ const bool& REGION_ENABLED = i_smp_chip.pcie_enabled;
+ const uint64_t& REGIONS_TO_ENABLE = src_link_region_pg_attr[src_link_chiplet_id];
+ const bool& REGIONS_TO_ENABLE_VALID = rc.ok();
+ const uint8_t& DEST_NODE_ID = f_id[l];
FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_PCIE_PARTIAL_GOOD_ERR);
break;
}
@@ -1229,53 +1523,6 @@ fapi::ReturnCode proc_build_smp_set_pb_hp_mode(
//------------------------------------------------------------------------------
-// function: reset (copy CURR->NEXT) PB Hotplug Extension Mode register
-// parameters: i_smp_chip => structure encapsulating SMP chip
-// returns: FAPI_RC_SUCCESS if register programming is successful,
-// RC_PROC_BUILD_SMP_HOTPLUG_SHADOW_ERR if shadow registers are not
-// equivalent,
-// else error
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_build_smp_reset_pb_hpx_mode(
- const proc_build_smp_chip& i_smp_chip)
-{
- fapi::ReturnCode rc;
- ecmdDataBufferBase data(64);
-
- // mark function entry
- FAPI_DBG("proc_build_smp_reset_pb_hpx_mode: Start");
-
- do
- {
- // read CURR state
- rc = proc_build_smp_get_hotplug_curr_reg(i_smp_chip,
- false,
- data);
- if (!rc.ok())
- {
- FAPI_ERR("proc_build_smp_reset_pb_hpx_mode: proc_build_smp_get_hotplug_curr_reg");
- break;
- }
-
- // write NEXT state
- rc = proc_build_smp_set_hotplug_reg(i_smp_chip,
- false,
- false,
- data);
- if (!rc.ok())
- {
- FAPI_ERR("proc_build_smp_reset_pb_hpx_mode: proc_build_smp_set_hotplug_reg");
- break;
- }
- } while(0);
-
- // mark function exit
- FAPI_DBG("proc_build_smp_reset_pb_hpx_mode: End");
- return rc;
-}
-
-
-//------------------------------------------------------------------------------
// function: program PB Hotplug Extension Mode register
// parameters: i_smp_chip => structure encapsulating SMP chip
// i_smp => structure encapsulating SMP topology
@@ -1288,6 +1535,10 @@ fapi::ReturnCode proc_build_smp_reset_pb_hpx_mode(
// specifies invalid aggregate link setup,
// RC_PROC_BUILD_SMP_X_CMD_RATE_ERR if calculated X link command rate
// is invalid,
+// RC_PROC_BUILD_SMP_AX_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_LINK_TARGET_TYPE_ERR if link target type is
+// unsupported,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_set_pb_hpx_mode(
@@ -1324,26 +1575,20 @@ fapi::ReturnCode proc_build_smp_set_pb_hpx_mode(
x_target[3] = &(i_smp_chip.chip->x3_chip);
for (uint8_t l = 0; l < PROC_FAB_SMP_NUM_X_LINKS; l++)
{
- // determine link enable
- x_en[l] = (x_target[l]->getType() != fapi::TARGET_TYPE_NONE);
- if (x_en[l] && !i_smp_chip.x_enabled)
+ // determine link enable/ID
+ proc_fab_smp_node_id dest_node_id;
+ proc_fab_smp_chip_id dest_chip_id;
+ rc = proc_build_smp_query_link_state(i_smp_chip,
+ l,
+ x_target[l],
+ x_en[l],
+ dest_node_id,
+ dest_chip_id);
+ if (!rc.ok())
{
- FAPI_ERR("proc_build_smp_set_pb_hpx_mode: Partial good attribute error (X)");
- FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_X_PARTIAL_GOOD_ERR);
+ FAPI_ERR("proc_build_smp_set_pb_hpx_mode: Error from proc_build_smp_query_link_state");
break;
}
-
- // determine link ID
- proc_fab_smp_chip_id dest_chip_id = FBC_CHIP_ID_0;
- if (x_en[l])
- {
- rc = proc_fab_smp_get_chip_id_attr(x_target[l], dest_chip_id);
- if (rc)
- {
- FAPI_ERR("proc_build_smp_set_pb_hpx_mode: Error from proc_fab_smp_get_chip_id_attr");
- break;
- }
- }
x_id[l] = (uint8_t) dest_chip_id;
}
if (rc)
@@ -1558,14 +1803,14 @@ fapi::ReturnCode proc_build_smp_set_fbc_ab(
(p_iter != n_iter->second.chips.end()) && (rc.ok());
p_iter++)
{
- rc = proc_build_smp_reset_pb_hp_mode(p_iter->second);
+ rc = proc_build_smp_reset_hotplug_next_reg(p_iter->second, true);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_set_fbc_ab: Error from proc_build_smp_reset_pb_hp_mode");
break;
}
- rc = proc_build_smp_reset_pb_hpx_mode(p_iter->second);
+ rc = proc_build_smp_reset_hotplug_next_reg(p_iter->second, false);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_set_fbc_ab: Error from proc_build_smp_reset_pb_hpx_mode");
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.H b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.H
index 0959343ef..389da1c34 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.H
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_ab.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_ab.H,v 1.2 2012/09/05 03:12:18 jmcgill Exp $
+// $Id: proc_build_smp_fbc_ab.H,v 1.3 2014/02/23 21:41:07 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_ab.H,v $
//------------------------------------------------------------------------------
// *|
@@ -41,12 +41,8 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp.H"
-#include "p8_scom_addresses.H"
-
-//------------------------------------------------------------------------------
-// Structure definitions
-//------------------------------------------------------------------------------
+#include <proc_build_smp.H>
+#include <p8_scom_addresses.H>
//------------------------------------------------------------------------------
@@ -54,112 +50,8 @@
//------------------------------------------------------------------------------
// PB Hotplug Mode register field/bit definitions
-const uint32_t PB_HP_MODE_LINK_A_EN_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 1, 2, 3 };
-const uint32_t PB_HP_MODE_LINK_A_ADDR_DIS_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 4, 5, 6 };
-const uint32_t PB_HP_MODE_LINK_A_ID_START_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 7, 10, 13 };
-const uint32_t PB_HP_MODE_LINK_A_ID_END_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 9, 12, 15 };
-
-const uint32_t PB_HP_MODE_PCIE_NOT_DSMP_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 38, 39 };
-const uint32_t PB_HP_MODE_LINK_F_MASTER_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 42, 43 };
-const uint32_t PB_HP_MODE_LINK_F_EN_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 44, 45 };
-const uint32_t PB_HP_MODE_LINK_F_ADDR_DIS_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 46, 47 };
-const uint32_t PB_HP_MODE_LINK_F_ID_START_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 48, 51 };
-const uint32_t PB_HP_MODE_LINK_F_ID_END_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 50, 53 };
-
const uint32_t PB_HP_MODE_MASTER_CHIP_BIT = 0;
-const uint32_t PB_HP_MODE_A_AGGREGATE_BIT = 16;
-const uint32_t PB_HP_MODE_TM_MASTER_BIT = 17;
const uint32_t PB_HP_MODE_CHG_RATE_GP_MASTER_BIT = 18;
-const uint32_t PB_HP_MODE_CHG_RATE_SP_MASTER_BIT = 19;
-const uint32_t PB_HP_MODE_PUMP_MODE_BIT = 20;
-const uint32_t PB_HP_MODE_SINGLE_MC_BIT = 21;
-const uint32_t PB_HP_MODE_DCACHE_CAPP_MODE_BIT = 22;
-const uint32_t PB_HP_MODE_A_CMD_RATE_START_BIT = 24;
-const uint32_t PB_HP_MODE_A_CMD_RATE_END_BIT = 31;
-const uint32_t PB_HP_MODE_A_CMD_RATE_MIN_VALUE = 1;
-const uint32_t PB_HP_MODE_A_CMD_RATE_MAX_VALUE = 0x7F;
-const uint32_t PB_HP_MODE_A_GATHER_ENABLE_BIT = 32;
-const uint32_t PB_HP_MODE_A_GATHER_DLY_CNT_START_BIT = 33;
-const uint32_t PB_HP_MODE_A_GATHER_DLY_CNT_END_BIT = 37;
-const uint32_t PB_HP_MODE_GATHER_ENABLE_BIT = 40;
-const uint32_t PB_HP_MODE_F_AGGREGATE_BIT = 55;
-const uint32_t PB_HP_MODE_F_CMD_RATE_START_BIT = 56;
-const uint32_t PB_HP_MODE_F_CMD_RATE_END_BIT = 63;
-const uint32_t PB_HP_MODE_F_CMD_RATE_MIN_VALUE = 1;
-const uint32_t PB_HP_MODE_F_CMD_RATE_MAX_VALUE = 0x7F;
-
-const bool PB_HP_MODE_DCACHE_CAPP_EN = false;
-const bool PB_HP_MODE_A_GATHER_ENABLE = true;
-const uint8_t PB_HP_MODE_A_GATHER_DLY_CNT = 0x04;
-const bool PB_HP_MODE_GATHER_ENABLE = true;
-
-const uint32_t PB_HP_MODE_NEXT_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
-{
- PB_HP_MODE_NEXT_WEST_0x02010C0B,
- PB_HP_MODE_NEXT_CENT_0x02010C4B,
- PB_HP_MODE_NEXT_EAST_0x02010C8B
-};
-const uint32_t PB_HP_MODE_CURR_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
-{
- PB_HP_MODE_CURR_WEST_0x02010C0C,
- PB_HP_MODE_CURR_CENT_0x02010C4C,
- PB_HP_MODE_CURR_EAST_0x02010C8C
-};
-
-// PB Hotplug Extension Mode register field/bit definitions
-const uint32_t PB_HPX_MODE_LINK_X_EN_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 0, 1, 2, 3 };
-const uint32_t PB_HPX_MODE_LINK_X_ADDR_DIS_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 5, 6, 7, 8 };
-const uint32_t PB_HPX_MODE_LINK_X_CHIPID_START_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 10, 13, 16, 19 };
-const uint32_t PB_HPX_MODE_LINK_X_CHIPID_END_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 12, 15, 18, 21 };
-
-const uint32_t PB_HPX_MODE_X_AGGREGATE_BIT = 25;
-const uint32_t PB_HPX_MODE_X_INDIRECT_EN_BIT = 26;
-const uint32_t PB_HPX_MODE_X_GATHER_ENABLE_BIT = 32;
-const uint32_t PB_HPX_MODE_X_GATHER_DLY_CNT_START_BIT = 33;
-const uint32_t PB_HPX_MODE_X_GATHER_DLY_CNT_END_BIT = 37;
-const uint32_t PB_HPX_MODE_X_ONNODE_12QUEUES_BIT = 38;
-const uint32_t PB_HPX_MODE_X_CMD_RATE_START_BIT = 56;
-const uint32_t PB_HPX_MODE_X_CMD_RATE_END_BIT = 63;
-const uint32_t PB_HPX_MODE_X_CMD_RATE_MIN_VALUE = 1;
-const uint32_t PB_HPX_MODE_X_CMD_RATE_MAX_VALUE = 0x7F;
-
-const bool PB_HPX_MODE_X_INDIRECT_EN = true;
-const bool PB_HPX_MODE_X_GATHER_ENABLE = true;
-const uint8_t PB_HPX_MODE_X_GATHER_DLY_CNT = 0x04;
-const bool PB_HPX_MODE_X_ONNODE_12QUEUES = true;
-
-const uint32_t PB_HPX_MODE_NEXT_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
-{
- PB_HPX_MODE_NEXT_WEST_0x02010C0D,
- PB_HPX_MODE_NEXT_CENT_0x02010C4D,
- PB_HPX_MODE_NEXT_EAST_0x02010C8D
-};
-const uint32_t PB_HPX_MODE_CURR_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
-{
- PB_HPX_MODE_CURR_WEST_0x02010C0E,
- PB_HPX_MODE_CURR_CENT_0x02010C4E,
- PB_HPX_MODE_CURR_EAST_0x02010C8E
-};
-
-// PB X Link Mode register field/bit definitions
-const uint32_t PB_X_MODE_LINK_DELAY_START_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 24, 32, 40, 48 };
-const uint32_t PB_X_MODE_LINK_DELAY_END_BIT[PROC_FAB_SMP_NUM_X_LINKS] = { 31, 39, 47, 55 };
-
-// PB A Link Mode register field/bit definitions
-const uint32_t PB_A_MODE_LINK_DELAY_START_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 40, 48, 56 };
-const uint32_t PB_A_MODE_LINK_DELAY_END_BIT[PROC_FAB_SMP_NUM_A_LINKS] = { 47, 55, 63 };
-
-// PB A Link Framer Configuration register field/bit definitions
-const uint32_t PB_A_FMR_CFG_OW_PACK_BIT = 24;
-const uint32_t PB_A_FMR_CFG_OW_PACK_PRIORITY_BIT = 25;
-
-// PB IOF Link Mode register field/bit definitions
-const uint32_t PB_IOF_MODE_LINK_DELAY_START_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 32, 48 };
-const uint32_t PB_IOF_MODE_LINK_DELAY_END_BIT[PROC_FAB_SMP_NUM_F_LINKS] = { 47, 63 };
-
-// PB F Link Framer Configuration register field/bit definitions
-const uint32_t PB_F_FMR_CFG_OW_PACK_BIT = 20;
-const uint32_t PB_F_FMR_CFG_OW_PACK_PRIORITY_BIT = 21;
extern "C"
{
@@ -169,6 +61,34 @@ extern "C"
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
+// function: determine paramters of link/destination chip
+// parameters: i_smp_chip => structure encapsulating SMP chip
+// i_source_link_id => link identifier for FFDC
+// i_dest_target => pointer to destination link endpoint target
+// o_link_is_enabled => true=link enabled, false=link disabled
+// o_dest_target_node_id => node ID of destination chip
+// o_dest_target_chip_id => chip ID of destination chip
+// returns: FAPI_RC_SUCCESS if output values are valid,
+// RC_PROC_FAB_SMP_FABRIC_CHIP_ID_ATTR_ERR if attribute value is
+// invalid,
+// RC_PROC_FAB_SMP_FABRIC_NODE_ID_ATTR_ERR if attribute value is
+// invalid,
+// RC_PROC_BUILD_SMP_AX_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_LINK_TARGET_TYPE_ERR if link target type is
+// unsupported,
+// else error
+//------------------------------------------------------------------------------
+fapi::ReturnCode proc_build_smp_query_link_state(
+ const proc_build_smp_chip& i_smp_chip,
+ const uint8_t i_source_link_id,
+ fapi::Target* i_dest_target,
+ bool& o_link_is_enabled,
+ proc_fab_smp_node_id& o_dest_target_node_id,
+ proc_fab_smp_chip_id& o_dest_target_chip_id);
+
+
+//------------------------------------------------------------------------------
// function: utility function to read set of PB CURR hotplug registers
// parameters: i_smp_chip => structure encapsulating SMP chip
// i_hp_not_hpx => choose HP/HPX register set (true=HP,
@@ -192,6 +112,16 @@ fapi::ReturnCode proc_build_smp_get_hotplug_curr_reg(
// i_op => enumerated type representing SMP build phase
// returns: FAPI_RC_SUCCESS if register reads are successful and all shadow
// registers are equivalent,
+// FAPI_RC_PLAT_ERR_ADU_LOCKED if operation failed due to state of
+// ADU atomic lock,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_OPERATION if an unsupported operation
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_ATTEMPTS if invalid number of attempts
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_FBC_OP if invalid fabric operation
+// parameters are specified,
+// RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH if ADU status mismatches
+// for switch operation,
// RC_PROC_FAB_SMP_FABRIC_CHIP_ID_ATTR_ERR if attribute value is
// invalid,
// RC_PROC_FAB_SMP_FABRIC_NODE_ID_ATTR_ERR if attribute value is
@@ -206,6 +136,14 @@ fapi::ReturnCode proc_build_smp_get_hotplug_curr_reg(
// is invalid,
// RC_PROC_BUILD_SMP_X_CMD_RATE_ERR if calculated X link command rate
// is invalid,
+// RC_PROC_BUILD_SMP_AX_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_PCIE_PARTIAL_GOOD_ERR if partial good attribute
+// state does not allow for action on target,
+// RC_PROC_BUILD_SMP_LINK_TARGET_TYPE_ERR if link target type is
+// unsupported,
+// RC_PROC_BUILD_SMP_INVALID_TOPOLOGY if specified fabric topology
+// is illegal,
// else error
//------------------------------------------------------------------------------
fapi::ReturnCode proc_build_smp_set_fbc_ab(
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C
index 67e76d127..bb004df12 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_cd.C,v 1.14 2014/01/18 18:31:03 jmcgill Exp $
+// $Id: proc_build_smp_fbc_cd.C,v 1.15 2014/02/23 21:41:07 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_cd.C,v $
//------------------------------------------------------------------------------
// *|
@@ -39,11 +39,500 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp_fbc_cd.H"
-#include "proc_build_smp_adu.H"
+#include <proc_build_smp_fbc_cd.H>
+#include <proc_build_smp_adu.H>
extern "C" {
+
+//------------------------------------------------------------------------------
+// Structure definitions
+//------------------------------------------------------------------------------
+
+// structure encapsulating serial configuration load programming
+struct proc_build_smp_sconfig_def
+{
+ uint8_t select; // ID/select for chain
+ uint8_t length; // number of bits to load
+ bool use_slow_clock; // use 16:1 slow clock? (EX)
+ bool use_shadow[PROC_BUILD_SMP_NUM_SHADOWS]; // define which shadows to set
+};
+
+
+//------------------------------------------------------------------------------
+// Constant definitions
+//------------------------------------------------------------------------------
+
+//
+// PB Serial Configuration Load register field/bit definitions
+//
+
+// hang level constants
+const uint8_t PB_SCONFIG_NUM_HANG_LEVELS = 7;
+
+// CPU ratio constants
+const uint8_t PB_SCONFIG_NUM_CPU_RATIOS = 4;
+
+
+const uint32_t PB_SCONFIG_LOAD[PROC_BUILD_SMP_NUM_SHADOWS] =
+{
+ PB_SCONFIG_LOAD_WEST_0x02010C16,
+ PB_SCONFIG_LOAD_CENT_0x02010C6D,
+ PB_SCONFIG_LOAD_EAST_0x02010C96
+};
+
+const uint32_t PB_SCONFIG_LOAD_START_BIT = 0;
+const uint32_t PB_SCONFIG_LOAD_SLOW_BIT = 1;
+const uint32_t PB_SCONFIG_SHIFT_COUNT_START_BIT = 2;
+const uint32_t PB_SCONFIG_SHIFT_COUNT_END_BIT = 7;
+const uint32_t PB_SCONFIG_SELECT_START_BIT = 8;
+const uint32_t PB_SCONFIG_SELECT_END_BIT = 11;
+const uint32_t PB_SCONFIG_SHIFT_DATA_START_BIT = 12;
+const uint32_t PB_SCONFIG_SHIFT_DATA_END_BIT = 63;
+
+
+//
+// PBH_CMD_SNOOPER (center, chain #4) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_C4_DEF = { 0x4, 50, false, { false, true, false} };
+
+const uint32_t PB_SCONFIG_C4_GP_LO_RTY_THRESHOLD_START_BIT = 14;
+const uint32_t PB_SCONFIG_C4_GP_LO_RTY_THRESHOLD_END_BIT = 23;
+const uint32_t PB_SCONFIG_C4_GP_HI_RTY_THRESHOLD_START_BIT = 24;
+const uint32_t PB_SCONFIG_C4_GP_HI_RTY_THRESHOLD_END_BIT = 33;
+const uint32_t PB_SCONFIG_C4_RGP_LO_RTY_THRESHOLD_START_BIT = 34;
+const uint32_t PB_SCONFIG_C4_RGP_LO_RTY_THRESHOLD_END_BIT = 43;
+const uint32_t PB_SCONFIG_C4_RGP_HI_RTY_THRESHOLD_START_BIT = 44;
+const uint32_t PB_SCONFIG_C4_RGP_HI_RTY_THRESHOLD_END_BIT = 53;
+const uint32_t PB_SCONFIG_C4_SP_LO_RTY_THRESHOLD_START_BIT = 54;
+const uint32_t PB_SCONFIG_C4_SP_LO_RTY_THRESHOLD_END_BIT = 63;
+
+const uint32_t PB_SCONFIG_C4_GP_LO_RTY_THRESHOLD = 0x7;
+const uint32_t PB_SCONFIG_C4_GP_HI_RTY_THRESHOLD = 0x5;
+const uint32_t PB_SCONFIG_C4_RGP_LO_RTY_THRESHOLD = 0x5;
+const uint32_t PB_SCONFIG_C4_RGP_HI_RTY_THRESHOLD = 0x4;
+const uint32_t PB_SCONFIG_C4_SP_LO_RTY_THRESHOLD = 0x5;
+
+
+//
+// PBH_CMD_SNOOPER (center, chain #5) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_C5_DEF = { 0x5, 46, false, { false, true, false} };
+
+const uint32_t PB_SCONFIG_C5_SP_HI_RTY_THRESHOLD_START_BIT = 18;
+const uint32_t PB_SCONFIG_C5_SP_HI_RTY_THRESHOLD_END_BIT = 27;
+const uint32_t PB_SCONFIG_C5_GP_CRESP_SAMPLE_TIME_START_BIT = 28;
+const uint32_t PB_SCONFIG_C5_GP_CRESP_SAMPLE_TIME_END_BIT = 39;
+const uint32_t PB_SCONFIG_C5_RGP_CRESP_SAMPLE_TIME_START_BIT = 40;
+const uint32_t PB_SCONFIG_C5_RGP_CRESP_SAMPLE_TIME_END_BIT = 51;
+const uint32_t PB_SCONFIG_C5_SP_CRESP_SAMPLE_TIME_START_BIT = 52;
+const uint32_t PB_SCONFIG_C5_SP_CRESP_SAMPLE_TIME_END_BIT = 63;
+
+const uint32_t PB_SCONFIG_C5_SP_HI_RTY_THRESHOLD = 0x4;
+const uint32_t PB_SCONFIG_C5_GP_CRESP_SAMPLE_TIME = 321;
+const uint32_t PB_SCONFIG_C5_RGP_CRESP_SAMPLE_TIME = 539;
+const uint32_t PB_SCONFIG_C5_SP_CRESP_SAMPLE_TIME = 781;
+
+
+//
+// PBH_CMD_SNOOPER (center, chain #6) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_C6_DEF = { 0x6, 42, false, { false, true, false} };
+
+const uint32_t PB_SCONFIG_C6_GP_REQ_SAMPLE_TIME_START_BIT = 22;
+const uint32_t PB_SCONFIG_C6_GP_REQ_SAMPLE_TIME_END_BIT = 33;
+const uint32_t PB_SCONFIG_C6_SP_REQ_SAMPLE_TIME_START_BIT = 34;
+const uint32_t PB_SCONFIG_C6_SP_REQ_SAMPLE_TIME_END_BIT = 45;
+const uint32_t PB_SCONFIG_C6_GP_LO_JUMP_START_BIT = 46;
+const uint32_t PB_SCONFIG_C6_GP_LO_JUMP_END_BIT = 48;
+const uint32_t PB_SCONFIG_C6_GP_HI_JUMP_START_BIT = 49;
+const uint32_t PB_SCONFIG_C6_GP_HI_JUMP_END_BIT = 51;
+const uint32_t PB_SCONFIG_C6_SP_LO_JUMP_START_BIT = 52;
+const uint32_t PB_SCONFIG_C6_SP_LO_JUMP_END_BIT = 54;
+const uint32_t PB_SCONFIG_C6_SP_HI_JUMP_START_BIT = 55;
+const uint32_t PB_SCONFIG_C6_SP_HI_JUMP_END_BIT = 57;
+const uint32_t PB_SCONFIG_C6_RGP_LO_JUMP_START_BIT = 58;
+const uint32_t PB_SCONFIG_C6_RGP_LO_JUMP_END_BIT = 60;
+const uint32_t PB_SCONFIG_C6_RGP_HI_JUMP_START_BIT = 61;
+const uint32_t PB_SCONFIG_C6_RGP_HI_JUMP_END_BIT = 63;
+
+const uint32_t PB_SCONFIG_C6_GP_REQ_SAMPLE_TIME = 1024;
+const uint32_t PB_SCONFIG_C6_SP_REQ_SAMPLE_TIME = 1024;
+const uint32_t PB_SCONFIG_C6_GP_LO_JUMP = 0x2;
+const uint32_t PB_SCONFIG_C6_GP_HI_JUMP = 0x2;
+const uint32_t PB_SCONFIG_C6_SP_LO_JUMP = 0x2;
+const uint32_t PB_SCONFIG_C6_SP_HI_JUMP = 0x2;
+const uint32_t PB_SCONFIG_C6_RGP_LO_JUMP = 0x2;
+const uint32_t PB_SCONFIG_C6_RGP_HI_JUMP = 0x2;
+
+
+//
+// PBH_CMD_SNOOPER (center, chain #7) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_C7_DEF = { 0x7, 36, false, { false, true, false } };
+
+const uint32_t PB_SCONFIG_C7_HANG_CMD_RATE_START_BIT[PB_SCONFIG_NUM_HANG_LEVELS] = { 28, 33, 38, 43, 48, 53, 58 };
+const uint32_t PB_SCONFIG_C7_HANG_CMD_RATE_END_BIT[PB_SCONFIG_NUM_HANG_LEVELS] = { 32, 37, 42, 47, 52, 57, 62 };
+const uint32_t PB_SCONFIG_C7_SLOW_GO_RATE_BIT = 63;
+
+// PB_CFG_HANG0_CMD_RATE = 0x00 = 127/128
+// PB_CFG_HANG1_CMD_RATE = 0x06 = 1/2
+// PB_CFG_HANG2_CMD_RATE = 0x0D = 1/512
+// PB_CFG_HANG3_CMD_RATE = 0x00 = 127/128
+// PB_CFG_HANG4_CMD_RATE = 0x1E = 1/4096 (toad mode)
+// PB_CFG_HANG5_CMD_RATE = 0x19 = 1/8 (toad mode)
+// PB_CFG_HANG6_CMD_RATE = 0x00 = 127/128
+const uint8_t PB_SCONFIG_C7_HANG_CMD_RATE[PB_SCONFIG_NUM_HANG_LEVELS] = { 0x00, 0x06, 0x0D, 0x00, 0x1E, 0x19, 0x00 };
+const bool PB_SCONFIG_C7_SLOW_GO_RATE = true;
+
+
+//
+// PBH_CMD_SNOOPER (center, chain #8) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF_VER1 = { 0x8, 37, false, { false, true, false } };
+const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF_VER2 = { 0x8, 39, false, { false, true, false } };
+const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF_VER3 = { 0x8, 43, false, { false, true, false } };
+
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER1[PB_SCONFIG_NUM_HANG_LEVELS] = { 27, 31, 35, 39, 43, 47, 51 };
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER1[PB_SCONFIG_NUM_HANG_LEVELS] = { 30, 34, 38, 42, 46, 50, 54 };
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER1 = 55;
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER1 = 57;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER1 = 58;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER1 = 63;
+
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER2[PB_SCONFIG_NUM_HANG_LEVELS] = { 25, 29, 33, 37, 41, 45, 49 };
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER2[PB_SCONFIG_NUM_HANG_LEVELS] = { 28, 32, 36, 40, 44, 48, 52 };
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER2 = 53;
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER2 = 55;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER2 = 56;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER2 = 61;
+const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT_VER2 = 62;
+const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT_VER2 = 63;
+
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER3[PB_SCONFIG_NUM_HANG_LEVELS] = { 21, 25, 29, 33, 37, 41, 45 };
+const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER3[PB_SCONFIG_NUM_HANG_LEVELS] = { 24, 28, 32, 36, 40, 44, 48 };
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER3 = 49;
+const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER3 = 51;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER3 = 52;
+const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER3 = 57;
+const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT_VER3 = 58;
+const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT_VER3 = 59;
+const uint32_t PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT_VER3 = 60;
+const uint32_t PB_SCONFIG_C8_RTY_PERCENTAGE_END_BIT_VER3 = 62;
+const uint32_t PB_SCONFIG_C8_INCLUDE_LPC_RTY_BIT_VER3 = 63;
+
+const uint8_t PB_SCONFIG_C8_HANG_CMD_RATE[PB_SCONFIG_NUM_HANG_LEVELS] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+const uint8_t PB_SCONFIG_C8_CPO_JUMP_LEVEL = 0x7;
+const uint8_t PB_SCONFIG_C8_CPO_RTY_LEVEL = 0x4;
+
+const uint8_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF = 0x2; // backoff_1k
+
+const uint8_t PB_SCONFIG_C8_RTY_PERCENTAGE = 0x0; // 000
+const uint8_t PB_SCONFIG_C8_INCLUDE_LPC_RTY = 0x0; // off
+
+//
+// PBH_CMD_CENTRAL_ARB (center, chain #9) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_C9_DEF = { 0x9, 44, false, { false, true, false } };
+
+const uint32_t PB_SCONFIG_C9_CP_STARVE_LIMIT_START_BIT = 20;
+const uint32_t PB_SCONFIG_C9_CP_STARVE_LIMIT_END_BIT = 27;
+const uint32_t PB_SCONFIG_C9_GP_STARVE_LIMIT_START_BIT = 28;
+const uint32_t PB_SCONFIG_C9_GP_STARVE_LIMIT_END_BIT = 35;
+const uint32_t PB_SCONFIG_C9_RGP_STARVE_LIMIT_START_BIT = 36;
+const uint32_t PB_SCONFIG_C9_RGP_STARVE_LIMIT_END_BIT = 43;
+const uint32_t PB_SCONFIG_C9_SP_STARVE_LIMIT_START_BIT = 44;
+const uint32_t PB_SCONFIG_C9_SP_STARVE_LIMIT_END_BIT = 51;
+const uint32_t PB_SCONFIG_C9_FP_STARVE_LIMIT_START_BIT = 52;
+const uint32_t PB_SCONFIG_C9_FP_STARVE_LIMIT_END_BIT = 59;
+const uint32_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_START_BIT = 60;
+const uint32_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_END_BIT = 61;
+const uint32_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE_START_BIT = 62;
+const uint32_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE_END_BIT = 63;
+
+const uint8_t PB_SCONFIG_C9_CP_STARVE_LIMIT = 0x10;
+const uint8_t PB_SCONFIG_C9_GP_STARVE_LIMIT = 0x10;
+const uint8_t PB_SCONFIG_C9_RGP_STARVE_LIMIT = 0x10;
+const uint8_t PB_SCONFIG_C9_SP_STARVE_LIMIT = 0x10;
+const uint8_t PB_SCONFIG_C9_FP_STARVE_LIMIT = 0x10;
+const uint8_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_LFSR = 0x0; // LFSR_ONLY
+const uint8_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_RR = 0x1; // RR_ONLY
+const uint8_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_LFSR_ON_STARVATION_ELSE_RR = 0x2; // LFSR_ON_STARVATION_ELSE_RR
+const uint8_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_RR_ON_STARVATION_ELSE_LFSR = 0x3; // RR_ON_STARVATION_ELSE_LFSR
+const uint8_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE = 0x2; // LFSR_ON_STARVATION_ELSE_RR
+
+
+//
+// PBH_CMD_CENTRAL_ARB (center, chain #10) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_C10_DEF_VER1 = { 0xA, 20, false, { false, true, false } };
+const proc_build_smp_sconfig_def PB_SCONFIG_C10_DEF_VER2 = { 0xA, 23, false, { false, true, false } };
+
+const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT_VER1[PB_SCONFIG_NUM_CPU_RATIOS] = { 59, 54, 49, 44 };
+const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT_VER1[PB_SCONFIG_NUM_CPU_RATIOS] = { 63, 58, 53, 48 };
+
+const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT_VER2[PB_SCONFIG_NUM_CPU_RATIOS] = { 56, 51, 46, 41 };
+const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT_VER2[PB_SCONFIG_NUM_CPU_RATIOS] = { 60, 55, 50, 45 };
+const uint32_t PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE_BIT_VER2 = 61;
+const uint32_t PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE_BIT_VER2 = 62;
+const uint32_t PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER_BIT_VER2 = 63;
+
+const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO_TABLE[PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS] = { 15, 14, 13, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7 };
+
+const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO_QUARTER = 3;
+const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO_HALF = 7;
+const uint8_t PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE = 0x0; // disable
+const uint8_t PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE = 0x0; // disable
+const uint8_t PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER = 0x0; // x2
+
+
+//
+// PBH_RSP_CRESP_ARB (center, chain #11) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_C11_DEF = { 0xB, 20, false, { false, true, false } };
+
+const uint32_t PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[PB_SCONFIG_NUM_CPU_RATIOS] = { 59, 54, 49, 44 };
+const uint32_t PB_SCONFIG_C11_RSP_CPU_RATIO_END_BIT[PB_SCONFIG_NUM_CPU_RATIOS] = { 63, 58, 53, 48 };
+
+const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO_TABLE[PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS] = { 16, 15, 14, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8 };
+
+const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO_QUARTER = 4;
+const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO_HALF = 8;
+
+//
+// PBH_PBIEX_EH (east/west, chain #0) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_WE0_DEF = { 0x0, 52, false, { true, false, true } };
+
+const uint32_t PB_SCONFIG_WE0_CMD_C2I_DONE_LAUNCH_START_BIT = 12;
+const uint32_t PB_SCONFIG_WE0_CMD_C2I_DONE_LAUNCH_END_BIT = 14;
+const uint32_t PB_SCONFIG_WE0_CMD_C2I_LATE_RD_MODE_BIT = 15;
+const uint32_t PB_SCONFIG_WE0_CMD_C2I_DELAY_SP_RD_START_BIT = 16;
+const uint32_t PB_SCONFIG_WE0_CMD_C2I_DELAY_SP_RD_END_BIT = 17;
+const uint32_t PB_SCONFIG_WE0_CMD_C2I_SPARE_MODE_BIT = 18;
+const uint32_t PB_SCONFIG_WE0_PRSP_C2I_DONE_LAUNCH_BIT = 19;
+const uint32_t PB_SCONFIG_WE0_PRSP_C2I_HW070772_DIS_BIT = 20;
+const uint32_t PB_SCONFIG_WE0_PRSP_C2I_NOP_MODE_START_BIT = 21;
+const uint32_t PB_SCONFIG_WE0_PRSP_C2I_NOP_MODE_END_BIT = 22;
+const uint32_t PB_SCONFIG_WE0_PRSP_C2I_SPARE_MODE_BIT = 23;
+const uint32_t PB_SCONFIG_WE0_CRSP_I2C_DVAL_LAUNCH_START_BIT = 24;
+const uint32_t PB_SCONFIG_WE0_CRSP_I2C_DVAL_LAUNCH_END_BIT = 25;
+const uint32_t PB_SCONFIG_WE0_CRSP_I2C_HSHAKE_BIT = 26;
+const uint32_t PB_SCONFIG_WE0_CRSP_I2C_SPARE_MODE_BIT = 27;
+const uint32_t PB_SCONFIG_WE0_DATA_I2C_DVAL_LAUNCH_START_BIT = 28;
+const uint32_t PB_SCONFIG_WE0_DATA_I2C_DVAL_LAUNCH_END_BIT = 29;
+const uint32_t PB_SCONFIG_WE0_DATA_I2C_SPARE_MODE_BIT = 30;
+const uint32_t PB_SCONFIG_WE0_DATA_I2C_FORCE_FA_ALLOC_BIT = 31;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_DONE_LAUNCH_START_BIT = 32;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_DONE_LAUNCH_END_BIT = 33;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_INITIAL_REQ_DLY_START_BIT = 34;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_INITIAL_REQ_DLY_END_BIT = 36;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_DCTR_LAUNCH_START_BIT = 37;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_DCTR_LAUNCH_END_BIT = 38;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_OUTSTANDING_REQ_COUNT_BIT = 39;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_REQ_ID_ASSIGNMENT_MODE_BIT = 40;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_ALLOW_FRAGMENTATION_BIT = 41;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_SERIAL_DREQ_ID_BIT = 42;
+const uint32_t PB_SCONFIG_WE0_DATA_C2I_SPARE_MODE_BIT = 43;
+const uint32_t PB_SCONFIG_WE0_RCMD_I2C_DVAL_LAUNCH_START_BIT = 44;
+const uint32_t PB_SCONFIG_WE0_RCMD_I2C_DVAL_LAUNCH_END_BIT = 45;
+const uint32_t PB_SCONFIG_WE0_RCMD_I2C_HSHAKE_BIT = 46;
+const uint32_t PB_SCONFIG_WE0_RCMD_I2C_SPARE_MODE_BIT = 47;
+const uint32_t PB_SCONFIG_WE0_FP_I2C_DVAL_LAUNCH_START_BIT = 48;
+const uint32_t PB_SCONFIG_WE0_FP_I2C_DVAL_LAUNCH_END_BIT = 49;
+const uint32_t PB_SCONFIG_WE0_FP_I2C_HSHAKE_BIT = 50;
+const uint32_t PB_SCONFIG_WE0_FP_I2C_SPARE_MODE_BIT = 51;
+const uint32_t PB_SCONFIG_WE0_FP_C2I_DONE_LAUNCH_BIT = 52;
+const uint32_t PB_SCONFIG_WE0_FP_C2I_SPARE_MODE_BIT = 53;
+const uint32_t PB_SCONFIG_WE0_CPU_DELAY_FULL_START_BIT = 54;
+const uint32_t PB_SCONFIG_WE0_CPU_DELAY_FULL_END_BIT = 58;
+const uint32_t PB_SCONFIG_WE0_CPU_DELAY_NOM_START_BIT = 59;
+const uint32_t PB_SCONFIG_WE0_CPU_DELAY_NOM_END_BIT = 63;
+
+const bool PB_SCONFIG_WE0_CMD_C2I_LATE_RD_MODE = true; // on
+const uint8_t PB_SCONFIG_WE0_CMD_C2I_DELAY_SP_RD = 0x0; // rc_p1
+const bool PB_SCONFIG_WE0_CMD_C2I_SPARE_MODE = false; // spare
+const uint8_t PB_SCONFIG_WE0_PRSP_C2I_DONE_LAUNCH = 0x0; // rc_p1
+const bool PB_SCONFIG_WE0_PRSP_C2I_HW070772_DIS = true; // on
+const uint8_t PB_SCONFIG_WE0_PRSP_C2I_NOP_MODE = 0x0; // 16c
+const bool PB_SCONFIG_WE0_PRSP_C2I_SPARE_MODE = false; // spare
+const bool PB_SCONFIG_WE0_CRSP_I2C_HSHAKE = false; // off
+const bool PB_SCONFIG_WE0_CRSP_I2C_SPARE_MODE = false; // spare
+const bool PB_SCONFIG_WE0_DATA_I2C_SPARE_MODE = false; // spare
+const bool PB_SCONFIG_WE0_DATA_I2C_FORCE_FA_ALLOC = false; // off
+const uint8_t PB_SCONFIG_WE0_DATA_C2I_INITIAL_REQ_DLY = 0x7; // 7c
+const bool PB_SCONFIG_WE0_DATA_C2I_OUTSTANDING_REQ_COUNT = false; // 8
+const bool PB_SCONFIG_WE0_DATA_C2I_REQ_ID_ASSIGNMENT_MODE = false; // FA
+const bool PB_SCONFIG_WE0_DATA_C2I_ALLOW_FRAGMENTATION = true; // on
+const bool PB_SCONFIG_WE0_DATA_C2I_SERIAL_DREQ_ID = true; // on
+const bool PB_SCONFIG_WE0_DATA_C2I_SPARE_MODE = false; // spare
+const bool PB_SCONFIG_WE0_RCMD_I2C_HSHAKE = false; // off
+const bool PB_SCONFIG_WE0_RCMD_I2C_SPARE_MODE = false; // spare
+const uint8_t PB_SCONFIG_WE0_FP_I2C_DVAL_LAUNCH = 0x0; // wc_p1
+const uint8_t PB_SCONFIG_WE0_FP_I2C_HSHAKE = false; // off
+const bool PB_SCONFIG_WE0_FP_I2C_SPARE_MODE = false; // spare
+const uint8_t PB_SCONFIG_WE0_FP_C2I_DONE_LAUNCH = 0x0; // rc_p1
+const bool PB_SCONFIG_WE0_FP_C2I_SPARE_MODE = false; // spare
+
+const uint8_t PB_SCONFIG_WE0_CPU_DELAY_TABLE[PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS] = { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 };
+
+
+//
+// PBH_PBIEX_EX (east/west, chain #1) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_WE1_DEF = { 0x1, 38, true, { true, false, true } };
+
+const uint32_t PB_SCONFIG_WE1_CMD_C2I_DVAL_LAUNCH_START_BIT = 26;
+const uint32_t PB_SCONFIG_WE1_CMD_C2I_DVAL_LAUNCH_END_BIT = 27;
+const uint32_t PB_SCONFIG_WE1_CMD_C2I_EARLY_REQ_MODE_BIT = 28;
+const uint32_t PB_SCONFIG_WE1_CMD_C2I_SPARE_BIT = 29;
+const uint32_t PB_SCONFIG_WE1_CMD_C2I_SPARE_MODE_BIT = 30;
+const uint32_t PB_SCONFIG_WE1_PRSP_C2I_DVAL_LAUNCH_START_BIT = 31;
+const uint32_t PB_SCONFIG_WE1_PRSP_C2I_DVAL_LAUNCH_END_BIT = 32;
+const uint32_t PB_SCONFIG_WE1_PRSP_C2I_HSHAKE_BIT = 33;
+const uint32_t PB_SCONFIG_WE1_PRSP_C2I_SPARE_MODE_BIT = 34;
+const uint32_t PB_SCONFIG_WE1_CRSP_I2C_DONE_LAUNCH_BIT = 35;
+const uint32_t PB_SCONFIG_WE1_CRSP_I2C_PTY_RD_CAPTURE_START_BIT = 36;
+const uint32_t PB_SCONFIG_WE1_CRSP_I2C_PTY_RD_CAPTURE_END_BIT = 37;
+const uint32_t PB_SCONFIG_WE1_CRSP_I2C_SPARE_MODE_BIT = 38;
+const uint32_t PB_SCONFIG_WE1_DATA_I2C_DONE_LAUNCH_START_BIT = 39;
+const uint32_t PB_SCONFIG_WE1_DATA_I2C_DONE_LAUNCH_END_BIT = 40;
+const uint32_t PB_SCONFIG_WE1_DATA_I2C_DCTR_LAUNCH_START_BIT = 41;
+const uint32_t PB_SCONFIG_WE1_DATA_I2C_DCTR_LAUNCH_END_BIT = 42;
+const uint32_t PB_SCONFIG_WE1_DATA_I2C_SPARE_MODE_BIT = 43;
+const uint32_t PB_SCONFIG_WE1_DATA_C2I_DVAL_LAUNCH_START_BIT = 44;
+const uint32_t PB_SCONFIG_WE1_DATA_C2I_DVAL_LAUNCH_END_BIT = 45;
+const uint32_t PB_SCONFIG_WE1_DATA_C2I_DREQ_LAUNCH_START_BIT = 46;
+const uint32_t PB_SCONFIG_WE1_DATA_C2I_DREQ_LAUNCH_END_BIT = 47;
+const uint32_t PB_SCONFIG_WE1_DATA_C2I_SPARE_MODE_BIT = 48;
+const uint32_t PB_SCONFIG_WE1_RCMD_I2C_DONE_LAUNCH_BIT = 49;
+const uint32_t PB_SCONFIG_WE1_RCMD_I2C_L3_NOT_USE_DCBFL_BIT = 50;
+const uint32_t PB_SCONFIG_WE1_RCMD_I2C_PTY_RD_CAPTURE_START_BIT = 51;
+const uint32_t PB_SCONFIG_WE1_RCMD_I2C_PTY_RD_CAPTURE_END_BIT = 52;
+const uint32_t PB_SCONFIG_WE1_RCMD_I2C_PTY_INJECT_BIT = 53;
+const uint32_t PB_SCONFIG_WE1_RCMD_I2C_SPARE_MODE_BIT = 54;
+const uint32_t PB_SCONFIG_WE1_FP_I2C_DONE_LAUNCH_BIT = 55;
+const uint32_t PB_SCONFIG_WE1_FP_I2C_SPARE_BIT = 56;
+const uint32_t PB_SCONFIG_WE1_FP_I2C_PTY_RD_CAPTURE_START_BIT = 57;
+const uint32_t PB_SCONFIG_WE1_FP_I2C_PTY_RD_CAPTURE_END_BIT = 58;
+const uint32_t PB_SCONFIG_WE1_FP_I2C_SPARE_MODE_BIT = 59;
+const uint32_t PB_SCONFIG_WE1_FP_C2I_DVAL_LAUNCH_START_BIT = 60;
+const uint32_t PB_SCONFIG_WE1_FP_C2I_DVAL_LAUNCH_END_BIT = 61;
+const uint32_t PB_SCONFIG_WE1_FP_C2I_HSHAKE_BIT = 62;
+const uint32_t PB_SCONFIG_WE1_FP_C2I_SPARE_MODE_BIT = 63;
+
+const bool PB_SCONFIG_WE1_CMD_C2I_EARLY_REQ_MODE = false; // off
+const bool PB_SCONFIG_WE1_CMD_C2I_SPARE = false; // spare
+const bool PB_SCONFIG_WE1_CMD_C2I_SPARE_MODE = false; // spare
+const uint8_t PB_SCONFIG_WE1_PRSP_C2I_DVAL_LAUNCH = 0x0; // rc_p1
+const bool PB_SCONFIG_WE1_PRSP_C2I_HSHAKE = false; // off
+const bool PB_SCONFIG_WE1_PRSP_C2I_SPARE_MODE = false; // spare
+const bool PB_SCONFIG_WE1_CRSP_I2C_SPARE_MODE = false; // spare
+const bool PB_SCONFIG_WE1_DATA_I2C_SPARE_MODE = false; // spare
+const uint8_t PB_SCONFIG_WE1_DATA_C2I_DREQ_LAUNCH = 0x0; // rc_d3
+const bool PB_SCONFIG_WE1_DATA_C2I_SPARE_MODE = false; // off
+const bool PB_SCONFIG_WE1_RCMD_I2C_L3_NOT_USE_DCBFL = false; // off
+const bool PB_SCONFIG_WE1_RCMD_I2C_PTY_INJECT = false; // off
+const bool PB_SCONFIG_WE1_RCMD_I2C_SPARE_MODE = false; // off
+const bool PB_SCONFIG_WE1_FP_I2C_DONE_LAUNCH = false; // rc_p1
+const bool PB_SCONFIG_WE1_FP_I2C_SPARE = false; // spare
+const uint8_t PB_SCONFIG_WE1_FP_I2C_PTY_RD_CAPTURE = 0x0; // rc
+const bool PB_SCONFIG_WE1_FP_I2C_SPARE_MODE = false; // off
+const uint8_t PB_SCONFIG_WE1_FP_C2I_DVAL_LAUNCH = 0x0; // wc_p1
+const bool PB_SCONFIG_WE1_FP_C2I_HSHAKE = false; // off
+const bool PB_SCONFIG_WE1_FP_C2I_SPARE_MODE = false; // spare
+
+
+//
+// PBH_DAT_ARB_EM (east/west, chain #5) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_WE5_DEF_VER1 = { 0x5, 51, false, { true, false, true } };
+const proc_build_smp_sconfig_def PB_SCONFIG_WE5_DEF_VER2 = { 0x5, 52, false, { true, false, true } };
+
+const uint32_t PB_SCONFIG_WE5_LOCK_ON_LINKS_BIT_VER1 = 13;
+const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_START_BIT_VER1 = 14;
+const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_END_BIT_VER1 = 17;
+const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_START_BIT_VER1 = 18;
+const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_END_BIT_VER1 = 21;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_START_BIT_VER1 = 22;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_END_BIT_VER1 = 25;
+const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_START_BIT_VER1 = 26;
+const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_END_BIT_VER1 = 29;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_START_BIT_VER1 = 30;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_END_BIT_VER1 = 33;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_ENABLE_BIT_VER1 = 34;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_START_BIT_VER1 = 35;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_END_BIT_VER1 = 42;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_START_BIT_VER1 = 43;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_END_BIT_VER1 = 50;
+const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_START_BIT_VER1 = 51;
+const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_END_BIT_VER1 = 54;
+const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_START_BIT_VER1 = 55;
+const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_END_BIT_VER1 = 58;
+const uint32_t PB_SCONFIG_WE5_EM_FP_ENABLE_BIT_VER1 = 59;
+const uint32_t PB_SCONFIG_WE5_SPARE_START_BIT_VER1 = 60;
+const uint32_t PB_SCONFIG_WE5_SPARE_END_BIT_VER1 = 61;
+const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_START_BIT_VER1 = 62;
+const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_END_BIT_VER1 = 63;
+
+const uint32_t PB_SCONFIG_WE5_LOCK_ON_LINKS_BIT_VER2 = 12;
+const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_START_BIT_VER2 = 13;
+const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_END_BIT_VER2 = 16;
+const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_START_BIT_VER2 = 17;
+const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_END_BIT_VER2 = 20;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_START_BIT_VER2 = 21;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_END_BIT_VER2 = 24;
+const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_START_BIT_VER2 = 25;
+const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_END_BIT_VER2 = 28;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_START_BIT_VER2 = 29;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_END_BIT_VER2 = 32;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_ENABLE_BIT_VER2 = 33;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_START_BIT_VER2 = 34;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_END_BIT_VER2 = 41;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_START_BIT_VER2 = 42;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_END_BIT_VER2 = 49;
+const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_START_BIT_VER2 = 50;
+const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_END_BIT_VER2 = 53;
+const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_START_BIT_VER2 = 54;
+const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_END_BIT_VER2 = 57;
+const uint32_t PB_SCONFIG_WE5_EM_FP_ENABLE_BIT_VER2 = 58;
+const uint32_t PB_SCONFIG_WE5_SPARE_START_BIT_VER2 = 59;
+const uint32_t PB_SCONFIG_WE5_SPARE_END_BIT_VER2 = 59;
+const uint32_t PB_SCONFIG_WE5_A_IND_THRESHOLD_BIT_VER2 = 60;
+const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_START_BIT_VER2 = 61;
+const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_END_BIT_VER2 = 62;
+const uint32_t PB_SCONFIG_WE5_X_OFF_SEL_BIT_VER2 = 63;
+
+const bool PB_SCONFIG_WE5_LOCK_ON_LINKS = true; // lock
+const uint8_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD = 0x4; // cnt_4
+const uint8_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD = 0x4; // cnt_4
+const uint8_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD = 0x4; // cnt_4
+const uint8_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD = 0x0; // cnt_0
+const uint8_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD = 0x0; // cnt_0
+const bool PB_SCONFIG_WE5_PASSTHRU_ENABLE = true; // enable
+const uint8_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY = 0xFE; // cnt_7to1
+const uint8_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY = 0xFE; // cnt_7to1
+const uint8_t PB_SCONFIG_WE5_A_TOK_INIT = 0x8; // cnt_8
+const uint8_t PB_SCONFIG_WE5_F_TOK_INIT = 0x4; // cnt_4
+const bool PB_SCONFIG_WE5_EM_FP_ENABLE = true; // enable
+const uint8_t PB_SCONFIG_WE5_SPARE = 0x0; // spare
+const uint8_t PB_SCONFIG_WE5_MEM_STV_PRIORITY = 0x2; // stv
+
+const uint8_t PB_SCONFIG_WE5_A_IND_THRESHOLD = 0x0; // gt4
+const uint8_t PB_SCONFIG_WE5_X_OFF_SEL = 0x0; // disable
+
+
//------------------------------------------------------------------------------
// Function definitions
//------------------------------------------------------------------------------
@@ -977,9 +1466,11 @@ fapi::ReturnCode proc_build_smp_set_sconfig_we0(
case PROC_BUILD_SMP_CORE_RATIO_2_8:
break;
default:
- FAPI_ERR("proc_build_smp_set_sconfig_we0: Unsupported core floor frequency ratio enum (%d)",
- i_smp.core_floor_ratio);
- const uint32_t& CORE_CEILING_RATIO = i_smp.core_floor_ratio;
+ FAPI_ERR("proc_build_smp_set_sconfig_we0: Unsupported core ceiling frequency ratio enum (%d)",
+ i_smp.core_ceiling_ratio);
+ const uint32_t& FREQ_PB = i_smp.freq_pb;
+ const uint32_t& FREQ_CORE_CEILING = i_smp.freq_core_ceiling;
+ const uint32_t& CORE_CEILING_RATIO = i_smp.core_ceiling_ratio;
FAPI_SET_HWP_ERROR(rc,
RC_PROC_BUILD_SMP_CORE_CEILING_RATIO_ERR);
break;
@@ -1267,6 +1758,8 @@ fapi::ReturnCode proc_build_smp_set_sconfig_we1(
default:
FAPI_ERR("proc_build_smp_set_sconfig_we1: Unsupported core floor frequency ratio enum (%d)",
i_smp.core_floor_ratio);
+ const uint32_t& FREQ_PB = i_smp.freq_pb;
+ const uint32_t& FREQ_CORE_FLOOR = i_smp.freq_core_floor;
const uint32_t& CORE_FLOOR_RATIO = i_smp.core_floor_ratio;
FAPI_SET_HWP_ERROR(rc,
RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR);
@@ -1859,7 +2352,7 @@ fapi::ReturnCode proc_build_smp_set_fbc_cd(
}
// issue single switch CD to force all updates to occur
- rc = proc_build_smp_switch_cd(p_iter->second);
+ rc = proc_build_smp_switch_cd(p_iter->second, i_smp);
if (!rc.ok())
{
FAPI_ERR("proc_build_smp_set_fbc_cd: Error from proc_build_smp_switch_cd");
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H
index 69fec2e11..f0c023739 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_cd.H,v 1.16 2014/01/18 18:31:12 jmcgill Exp $
+// $Id: proc_build_smp_fbc_cd.H,v 1.17 2014/02/23 21:41:07 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_cd.H,v $
//------------------------------------------------------------------------------
// *|
@@ -41,492 +41,8 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp.H"
-#include "p8_scom_addresses.H"
-
-//------------------------------------------------------------------------------
-// Structure definitions
-//------------------------------------------------------------------------------
-
-// structure encapsulating serial configuration load programming
-struct proc_build_smp_sconfig_def
-{
- uint8_t select; // ID/select for chain
- uint8_t length; // number of bits to load
- bool use_slow_clock; // use 16:1 slow clock? (EX)
- bool use_shadow[PROC_BUILD_SMP_NUM_SHADOWS]; // define which shadows to set
-};
-
-//------------------------------------------------------------------------------
-// Constant definitions
-//------------------------------------------------------------------------------
-
-//
-// PB Serial Configuration Load register field/bit definitions
-//
-
-// hang level constants
-const uint8_t PB_SCONFIG_NUM_HANG_LEVELS = 7;
-
-// CPU ratio constants
-const uint8_t PB_SCONFIG_NUM_CPU_RATIOS = 4;
-
-
-const uint32_t PB_SCONFIG_LOAD[PROC_BUILD_SMP_NUM_SHADOWS] =
-{
- PB_SCONFIG_LOAD_WEST_0x02010C16,
- PB_SCONFIG_LOAD_CENT_0x02010C6D,
- PB_SCONFIG_LOAD_EAST_0x02010C96
-};
-
-const uint32_t PB_SCONFIG_LOAD_START_BIT = 0;
-const uint32_t PB_SCONFIG_LOAD_SLOW_BIT = 1;
-const uint32_t PB_SCONFIG_SHIFT_COUNT_START_BIT = 2;
-const uint32_t PB_SCONFIG_SHIFT_COUNT_END_BIT = 7;
-const uint32_t PB_SCONFIG_SELECT_START_BIT = 8;
-const uint32_t PB_SCONFIG_SELECT_END_BIT = 11;
-const uint32_t PB_SCONFIG_SHIFT_DATA_START_BIT = 12;
-const uint32_t PB_SCONFIG_SHIFT_DATA_END_BIT = 63;
-
-
-//
-// PBH_CMD_SNOOPER (center, chain #4) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_C4_DEF = { 0x4, 50, false, { false, true, false} };
-
-const uint32_t PB_SCONFIG_C4_GP_LO_RTY_THRESHOLD_START_BIT = 14;
-const uint32_t PB_SCONFIG_C4_GP_LO_RTY_THRESHOLD_END_BIT = 23;
-const uint32_t PB_SCONFIG_C4_GP_HI_RTY_THRESHOLD_START_BIT = 24;
-const uint32_t PB_SCONFIG_C4_GP_HI_RTY_THRESHOLD_END_BIT = 33;
-const uint32_t PB_SCONFIG_C4_RGP_LO_RTY_THRESHOLD_START_BIT = 34;
-const uint32_t PB_SCONFIG_C4_RGP_LO_RTY_THRESHOLD_END_BIT = 43;
-const uint32_t PB_SCONFIG_C4_RGP_HI_RTY_THRESHOLD_START_BIT = 44;
-const uint32_t PB_SCONFIG_C4_RGP_HI_RTY_THRESHOLD_END_BIT = 53;
-const uint32_t PB_SCONFIG_C4_SP_LO_RTY_THRESHOLD_START_BIT = 54;
-const uint32_t PB_SCONFIG_C4_SP_LO_RTY_THRESHOLD_END_BIT = 63;
-
-const uint32_t PB_SCONFIG_C4_GP_LO_RTY_THRESHOLD = 0x7;
-const uint32_t PB_SCONFIG_C4_GP_HI_RTY_THRESHOLD = 0x5;
-const uint32_t PB_SCONFIG_C4_RGP_LO_RTY_THRESHOLD = 0x5;
-const uint32_t PB_SCONFIG_C4_RGP_HI_RTY_THRESHOLD = 0x4;
-const uint32_t PB_SCONFIG_C4_SP_LO_RTY_THRESHOLD = 0x5;
-
-
-//
-// PBH_CMD_SNOOPER (center, chain #5) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_C5_DEF = { 0x5, 46, false, { false, true, false} };
-
-const uint32_t PB_SCONFIG_C5_SP_HI_RTY_THRESHOLD_START_BIT = 18;
-const uint32_t PB_SCONFIG_C5_SP_HI_RTY_THRESHOLD_END_BIT = 27;
-const uint32_t PB_SCONFIG_C5_GP_CRESP_SAMPLE_TIME_START_BIT = 28;
-const uint32_t PB_SCONFIG_C5_GP_CRESP_SAMPLE_TIME_END_BIT = 39;
-const uint32_t PB_SCONFIG_C5_RGP_CRESP_SAMPLE_TIME_START_BIT = 40;
-const uint32_t PB_SCONFIG_C5_RGP_CRESP_SAMPLE_TIME_END_BIT = 51;
-const uint32_t PB_SCONFIG_C5_SP_CRESP_SAMPLE_TIME_START_BIT = 52;
-const uint32_t PB_SCONFIG_C5_SP_CRESP_SAMPLE_TIME_END_BIT = 63;
-
-const uint32_t PB_SCONFIG_C5_SP_HI_RTY_THRESHOLD = 0x4;
-const uint32_t PB_SCONFIG_C5_GP_CRESP_SAMPLE_TIME = 321;
-const uint32_t PB_SCONFIG_C5_RGP_CRESP_SAMPLE_TIME = 539;
-const uint32_t PB_SCONFIG_C5_SP_CRESP_SAMPLE_TIME = 781;
-
-
-//
-// PBH_CMD_SNOOPER (center, chain #6) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_C6_DEF = { 0x6, 42, false, { false, true, false} };
-
-const uint32_t PB_SCONFIG_C6_GP_REQ_SAMPLE_TIME_START_BIT = 22;
-const uint32_t PB_SCONFIG_C6_GP_REQ_SAMPLE_TIME_END_BIT = 33;
-const uint32_t PB_SCONFIG_C6_SP_REQ_SAMPLE_TIME_START_BIT = 34;
-const uint32_t PB_SCONFIG_C6_SP_REQ_SAMPLE_TIME_END_BIT = 45;
-const uint32_t PB_SCONFIG_C6_GP_LO_JUMP_START_BIT = 46;
-const uint32_t PB_SCONFIG_C6_GP_LO_JUMP_END_BIT = 48;
-const uint32_t PB_SCONFIG_C6_GP_HI_JUMP_START_BIT = 49;
-const uint32_t PB_SCONFIG_C6_GP_HI_JUMP_END_BIT = 51;
-const uint32_t PB_SCONFIG_C6_SP_LO_JUMP_START_BIT = 52;
-const uint32_t PB_SCONFIG_C6_SP_LO_JUMP_END_BIT = 54;
-const uint32_t PB_SCONFIG_C6_SP_HI_JUMP_START_BIT = 55;
-const uint32_t PB_SCONFIG_C6_SP_HI_JUMP_END_BIT = 57;
-const uint32_t PB_SCONFIG_C6_RGP_LO_JUMP_START_BIT = 58;
-const uint32_t PB_SCONFIG_C6_RGP_LO_JUMP_END_BIT = 60;
-const uint32_t PB_SCONFIG_C6_RGP_HI_JUMP_START_BIT = 61;
-const uint32_t PB_SCONFIG_C6_RGP_HI_JUMP_END_BIT = 63;
-
-const uint32_t PB_SCONFIG_C6_GP_REQ_SAMPLE_TIME = 1024;
-const uint32_t PB_SCONFIG_C6_SP_REQ_SAMPLE_TIME = 1024;
-const uint32_t PB_SCONFIG_C6_GP_LO_JUMP = 0x2;
-const uint32_t PB_SCONFIG_C6_GP_HI_JUMP = 0x2;
-const uint32_t PB_SCONFIG_C6_SP_LO_JUMP = 0x2;
-const uint32_t PB_SCONFIG_C6_SP_HI_JUMP = 0x2;
-const uint32_t PB_SCONFIG_C6_RGP_LO_JUMP = 0x2;
-const uint32_t PB_SCONFIG_C6_RGP_HI_JUMP = 0x2;
-
-
-//
-// PBH_CMD_SNOOPER (center, chain #7) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_C7_DEF = { 0x7, 36, false, { false, true, false } };
-
-const uint32_t PB_SCONFIG_C7_HANG_CMD_RATE_START_BIT[PB_SCONFIG_NUM_HANG_LEVELS] = { 28, 33, 38, 43, 48, 53, 58 };
-const uint32_t PB_SCONFIG_C7_HANG_CMD_RATE_END_BIT[PB_SCONFIG_NUM_HANG_LEVELS] = { 32, 37, 42, 47, 52, 57, 62 };
-const uint32_t PB_SCONFIG_C7_SLOW_GO_RATE_BIT = 63;
-
-// PB_CFG_HANG0_CMD_RATE = 0x00 = 127/128
-// PB_CFG_HANG1_CMD_RATE = 0x06 = 1/2
-// PB_CFG_HANG2_CMD_RATE = 0x0D = 1/512
-// PB_CFG_HANG3_CMD_RATE = 0x00 = 127/128
-// PB_CFG_HANG4_CMD_RATE = 0x1E = 1/4096 (toad mode)
-// PB_CFG_HANG5_CMD_RATE = 0x19 = 1/8 (toad mode)
-// PB_CFG_HANG6_CMD_RATE = 0x00 = 127/128
-const uint8_t PB_SCONFIG_C7_HANG_CMD_RATE[PB_SCONFIG_NUM_HANG_LEVELS] = { 0x00, 0x06, 0x0D, 0x00, 0x1E, 0x19, 0x00 };
-const bool PB_SCONFIG_C7_SLOW_GO_RATE = true;
-
-
-//
-// PBH_CMD_SNOOPER (center, chain #8) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF_VER1 = { 0x8, 37, false, { false, true, false } };
-const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF_VER2 = { 0x8, 39, false, { false, true, false } };
-const proc_build_smp_sconfig_def PB_SCONFIG_C8_DEF_VER3 = { 0x8, 43, false, { false, true, false } };
-
-const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER1[PB_SCONFIG_NUM_HANG_LEVELS] = { 27, 31, 35, 39, 43, 47, 51 };
-const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER1[PB_SCONFIG_NUM_HANG_LEVELS] = { 30, 34, 38, 42, 46, 50, 54 };
-const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER1 = 55;
-const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER1 = 57;
-const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER1 = 58;
-const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER1 = 63;
-
-const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER2[PB_SCONFIG_NUM_HANG_LEVELS] = { 25, 29, 33, 37, 41, 45, 49 };
-const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER2[PB_SCONFIG_NUM_HANG_LEVELS] = { 28, 32, 36, 40, 44, 48, 52 };
-const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER2 = 53;
-const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER2 = 55;
-const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER2 = 56;
-const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER2 = 61;
-const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT_VER2 = 62;
-const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT_VER2 = 63;
-
-const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_START_BIT_VER3[PB_SCONFIG_NUM_HANG_LEVELS] = { 21, 25, 29, 33, 37, 41, 45 };
-const uint32_t PB_SCONFIG_C8_HANG_CMD_RATE_END_BIT_VER3[PB_SCONFIG_NUM_HANG_LEVELS] = { 24, 28, 32, 36, 40, 44, 48 };
-const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_START_BIT_VER3 = 49;
-const uint32_t PB_SCONFIG_C8_CPO_JUMP_LEVEL_END_BIT_VER3 = 51;
-const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_START_BIT_VER3 = 52;
-const uint32_t PB_SCONFIG_C8_CPO_RTY_LEVEL_END_BIT_VER3 = 57;
-const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_START_BIT_VER3 = 58;
-const uint32_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF_END_BIT_VER3 = 59;
-const uint32_t PB_SCONFIG_C8_RTY_PERCENTAGE_START_BIT_VER3 = 60;
-const uint32_t PB_SCONFIG_C8_RTY_PERCENTAGE_END_BIT_VER3 = 62;
-const uint32_t PB_SCONFIG_C8_INCLUDE_LPC_RTY_BIT_VER3 = 63;
-
-const uint8_t PB_SCONFIG_C8_HANG_CMD_RATE[PB_SCONFIG_NUM_HANG_LEVELS] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-const uint8_t PB_SCONFIG_C8_CPO_JUMP_LEVEL = 0x7;
-const uint8_t PB_SCONFIG_C8_CPO_RTY_LEVEL = 0x4;
-
-const uint8_t PB_SCONFIG_C8_P7_SLEEP_BACKOFF = 0x2; // backoff_1k
-
-const uint8_t PB_SCONFIG_C8_RTY_PERCENTAGE = 0x0; // 000
-const uint8_t PB_SCONFIG_C8_INCLUDE_LPC_RTY = 0x0; // off
-
-//
-// PBH_CMD_CENTRAL_ARB (center, chain #9) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_C9_DEF = { 0x9, 44, false, { false, true, false } };
-
-const uint32_t PB_SCONFIG_C9_CP_STARVE_LIMIT_START_BIT = 20;
-const uint32_t PB_SCONFIG_C9_CP_STARVE_LIMIT_END_BIT = 27;
-const uint32_t PB_SCONFIG_C9_GP_STARVE_LIMIT_START_BIT = 28;
-const uint32_t PB_SCONFIG_C9_GP_STARVE_LIMIT_END_BIT = 35;
-const uint32_t PB_SCONFIG_C9_RGP_STARVE_LIMIT_START_BIT = 36;
-const uint32_t PB_SCONFIG_C9_RGP_STARVE_LIMIT_END_BIT = 43;
-const uint32_t PB_SCONFIG_C9_SP_STARVE_LIMIT_START_BIT = 44;
-const uint32_t PB_SCONFIG_C9_SP_STARVE_LIMIT_END_BIT = 51;
-const uint32_t PB_SCONFIG_C9_FP_STARVE_LIMIT_START_BIT = 52;
-const uint32_t PB_SCONFIG_C9_FP_STARVE_LIMIT_END_BIT = 59;
-const uint32_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_START_BIT = 60;
-const uint32_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_END_BIT = 61;
-const uint32_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE_START_BIT = 62;
-const uint32_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE_END_BIT = 63;
-
-const uint8_t PB_SCONFIG_C9_CP_STARVE_LIMIT = 0x10;
-const uint8_t PB_SCONFIG_C9_GP_STARVE_LIMIT = 0x10;
-const uint8_t PB_SCONFIG_C9_RGP_STARVE_LIMIT = 0x10;
-const uint8_t PB_SCONFIG_C9_SP_STARVE_LIMIT = 0x10;
-const uint8_t PB_SCONFIG_C9_FP_STARVE_LIMIT = 0x10;
-const uint8_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_LFSR = 0x0; // LFSR_ONLY
-const uint8_t PB_SCONFIG_C9_UX_SCOPE_ARB_MODE_RR = 0x1; // RR_ONLY
-const uint8_t PB_SCONFIG_C9_UX_LOCAL_ARB_MODE = 0x2; // LFSR_ON_STARVATION_ELSE_RR
-
-
-//
-// PBH_CMD_CENTRAL_ARB (center, chain #10) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_C10_DEF_VER1 = { 0xA, 20, false, { false, true, false } };
-const proc_build_smp_sconfig_def PB_SCONFIG_C10_DEF_VER2 = { 0xA, 23, false, { false, true, false } };
-
-const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT_VER1[PB_SCONFIG_NUM_CPU_RATIOS] = { 59, 54, 49, 44 };
-const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT_VER1[PB_SCONFIG_NUM_CPU_RATIOS] = { 63, 58, 53, 48 };
-
-const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_START_BIT_VER2[PB_SCONFIG_NUM_CPU_RATIOS] = { 56, 51, 46, 41 };
-const uint32_t PB_SCONFIG_C10_CMD_CPU_RATIO_END_BIT_VER2[PB_SCONFIG_NUM_CPU_RATIOS] = { 60, 55, 50, 45 };
-const uint32_t PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE_BIT_VER2 = 61;
-const uint32_t PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE_BIT_VER2 = 62;
-const uint32_t PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER_BIT_VER2 = 63;
-
-const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO_TABLE[PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS] = { 15, 14, 13, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7 };
-
-const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO_QUARTER = 3;
-const uint8_t PB_SCONFIG_C10_CMD_CPU_RATIO_HALF = 7;
-const uint8_t PB_SCONFIG_C10_DAT_X_LINK_HOLDOFF_ENABLE = 0x0; // disable
-const uint8_t PB_SCONFIG_C10_DAT_A_LINK_HOLDOFF_ENABLE = 0x0; // disable
-const uint8_t PB_SCONFIG_C10_DAT_LINK_HOLDOFF_MULTIPLIER = 0x0; // x2
-
-
-//
-// PBH_RSP_CRESP_ARB (center, chain #11) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_C11_DEF = { 0xB, 20, false, { false, true, false } };
-
-const uint32_t PB_SCONFIG_C11_RSP_CPU_RATIO_START_BIT[PB_SCONFIG_NUM_CPU_RATIOS] = { 59, 54, 49, 44 };
-const uint32_t PB_SCONFIG_C11_RSP_CPU_RATIO_END_BIT[PB_SCONFIG_NUM_CPU_RATIOS] = { 63, 58, 53, 48 };
-
-const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO_TABLE[PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS] = { 16, 15, 14, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8 };
-
-const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO_QUARTER = 4;
-const uint8_t PB_SCONFIG_C11_RSP_CPU_RATIO_HALF = 8;
-
-//
-// PBH_PBIEX_EH (east/west, chain #0) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_WE0_DEF = { 0x0, 52, false, { true, false, true } };
-
-const uint32_t PB_SCONFIG_WE0_CMD_C2I_DONE_LAUNCH_START_BIT = 12;
-const uint32_t PB_SCONFIG_WE0_CMD_C2I_DONE_LAUNCH_END_BIT = 14;
-const uint32_t PB_SCONFIG_WE0_CMD_C2I_LATE_RD_MODE_BIT = 15;
-const uint32_t PB_SCONFIG_WE0_CMD_C2I_DELAY_SP_RD_START_BIT = 16;
-const uint32_t PB_SCONFIG_WE0_CMD_C2I_DELAY_SP_RD_END_BIT = 17;
-const uint32_t PB_SCONFIG_WE0_CMD_C2I_SPARE_MODE_BIT = 18;
-const uint32_t PB_SCONFIG_WE0_PRSP_C2I_DONE_LAUNCH_BIT = 19;
-const uint32_t PB_SCONFIG_WE0_PRSP_C2I_HW070772_DIS_BIT = 20;
-const uint32_t PB_SCONFIG_WE0_PRSP_C2I_NOP_MODE_START_BIT = 21;
-const uint32_t PB_SCONFIG_WE0_PRSP_C2I_NOP_MODE_END_BIT = 22;
-const uint32_t PB_SCONFIG_WE0_PRSP_C2I_SPARE_MODE_BIT = 23;
-const uint32_t PB_SCONFIG_WE0_CRSP_I2C_DVAL_LAUNCH_START_BIT = 24;
-const uint32_t PB_SCONFIG_WE0_CRSP_I2C_DVAL_LAUNCH_END_BIT = 25;
-const uint32_t PB_SCONFIG_WE0_CRSP_I2C_HSHAKE_BIT = 26;
-const uint32_t PB_SCONFIG_WE0_CRSP_I2C_SPARE_MODE_BIT = 27;
-const uint32_t PB_SCONFIG_WE0_DATA_I2C_DVAL_LAUNCH_START_BIT = 28;
-const uint32_t PB_SCONFIG_WE0_DATA_I2C_DVAL_LAUNCH_END_BIT = 29;
-const uint32_t PB_SCONFIG_WE0_DATA_I2C_SPARE_MODE_BIT = 30;
-const uint32_t PB_SCONFIG_WE0_DATA_I2C_FORCE_FA_ALLOC_BIT = 31;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_DONE_LAUNCH_START_BIT = 32;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_DONE_LAUNCH_END_BIT = 33;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_INITIAL_REQ_DLY_START_BIT = 34;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_INITIAL_REQ_DLY_END_BIT = 36;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_DCTR_LAUNCH_START_BIT = 37;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_DCTR_LAUNCH_END_BIT = 38;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_OUTSTANDING_REQ_COUNT_BIT = 39;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_REQ_ID_ASSIGNMENT_MODE_BIT = 40;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_ALLOW_FRAGMENTATION_BIT = 41;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_SERIAL_DREQ_ID_BIT = 42;
-const uint32_t PB_SCONFIG_WE0_DATA_C2I_SPARE_MODE_BIT = 43;
-const uint32_t PB_SCONFIG_WE0_RCMD_I2C_DVAL_LAUNCH_START_BIT = 44;
-const uint32_t PB_SCONFIG_WE0_RCMD_I2C_DVAL_LAUNCH_END_BIT = 45;
-const uint32_t PB_SCONFIG_WE0_RCMD_I2C_HSHAKE_BIT = 46;
-const uint32_t PB_SCONFIG_WE0_RCMD_I2C_SPARE_MODE_BIT = 47;
-const uint32_t PB_SCONFIG_WE0_FP_I2C_DVAL_LAUNCH_START_BIT = 48;
-const uint32_t PB_SCONFIG_WE0_FP_I2C_DVAL_LAUNCH_END_BIT = 49;
-const uint32_t PB_SCONFIG_WE0_FP_I2C_HSHAKE_BIT = 50;
-const uint32_t PB_SCONFIG_WE0_FP_I2C_SPARE_MODE_BIT = 51;
-const uint32_t PB_SCONFIG_WE0_FP_C2I_DONE_LAUNCH_BIT = 52;
-const uint32_t PB_SCONFIG_WE0_FP_C2I_SPARE_MODE_BIT = 53;
-const uint32_t PB_SCONFIG_WE0_CPU_DELAY_FULL_START_BIT = 54;
-const uint32_t PB_SCONFIG_WE0_CPU_DELAY_FULL_END_BIT = 58;
-const uint32_t PB_SCONFIG_WE0_CPU_DELAY_NOM_START_BIT = 59;
-const uint32_t PB_SCONFIG_WE0_CPU_DELAY_NOM_END_BIT = 63;
-
-const bool PB_SCONFIG_WE0_CMD_C2I_LATE_RD_MODE = true; // on
-const uint8_t PB_SCONFIG_WE0_CMD_C2I_DELAY_SP_RD = 0x0; // rc_p1
-const bool PB_SCONFIG_WE0_CMD_C2I_SPARE_MODE = false; // spare
-const uint8_t PB_SCONFIG_WE0_PRSP_C2I_DONE_LAUNCH = 0x0; // rc_p1
-const bool PB_SCONFIG_WE0_PRSP_C2I_HW070772_DIS = true; // on
-const uint8_t PB_SCONFIG_WE0_PRSP_C2I_NOP_MODE = 0x0; // 16c
-const bool PB_SCONFIG_WE0_PRSP_C2I_SPARE_MODE = false; // spare
-const bool PB_SCONFIG_WE0_CRSP_I2C_HSHAKE = false; // off
-const bool PB_SCONFIG_WE0_CRSP_I2C_SPARE_MODE = false; // spare
-const bool PB_SCONFIG_WE0_DATA_I2C_SPARE_MODE = false; // spare
-const bool PB_SCONFIG_WE0_DATA_I2C_FORCE_FA_ALLOC = false; // off
-const uint8_t PB_SCONFIG_WE0_DATA_C2I_INITIAL_REQ_DLY = 0x7; // 7c
-const bool PB_SCONFIG_WE0_DATA_C2I_OUTSTANDING_REQ_COUNT = false; // 8
-const bool PB_SCONFIG_WE0_DATA_C2I_REQ_ID_ASSIGNMENT_MODE = false; // FA
-const bool PB_SCONFIG_WE0_DATA_C2I_ALLOW_FRAGMENTATION = true; // on
-const bool PB_SCONFIG_WE0_DATA_C2I_SERIAL_DREQ_ID = true; // on
-const bool PB_SCONFIG_WE0_DATA_C2I_SPARE_MODE = false; // spare
-const bool PB_SCONFIG_WE0_RCMD_I2C_HSHAKE = false; // off
-const bool PB_SCONFIG_WE0_RCMD_I2C_SPARE_MODE = false; // spare
-const uint8_t PB_SCONFIG_WE0_FP_I2C_DVAL_LAUNCH = 0x0; // wc_p1
-const uint8_t PB_SCONFIG_WE0_FP_I2C_HSHAKE = false; // off
-const bool PB_SCONFIG_WE0_FP_I2C_SPARE_MODE = false; // spare
-const uint8_t PB_SCONFIG_WE0_FP_C2I_DONE_LAUNCH = 0x0; // rc_p1
-const bool PB_SCONFIG_WE0_FP_C2I_SPARE_MODE = false; // spare
-
-const uint8_t PB_SCONFIG_WE0_CPU_DELAY_TABLE[PROC_BUILD_SMP_CPU_DELAY_NUM_SETPOINTS] = { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 };
-
-
-//
-// PBH_PBIEX_EX (east/west, chain #1) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_WE1_DEF = { 0x1, 38, true, { true, false, true } };
-
-const uint32_t PB_SCONFIG_WE1_CMD_C2I_DVAL_LAUNCH_START_BIT = 26;
-const uint32_t PB_SCONFIG_WE1_CMD_C2I_DVAL_LAUNCH_END_BIT = 27;
-const uint32_t PB_SCONFIG_WE1_CMD_C2I_EARLY_REQ_MODE_BIT = 28;
-const uint32_t PB_SCONFIG_WE1_CMD_C2I_SPARE_BIT = 29;
-const uint32_t PB_SCONFIG_WE1_CMD_C2I_SPARE_MODE_BIT = 30;
-const uint32_t PB_SCONFIG_WE1_PRSP_C2I_DVAL_LAUNCH_START_BIT = 31;
-const uint32_t PB_SCONFIG_WE1_PRSP_C2I_DVAL_LAUNCH_END_BIT = 32;
-const uint32_t PB_SCONFIG_WE1_PRSP_C2I_HSHAKE_BIT = 33;
-const uint32_t PB_SCONFIG_WE1_PRSP_C2I_SPARE_MODE_BIT = 34;
-const uint32_t PB_SCONFIG_WE1_CRSP_I2C_DONE_LAUNCH_BIT = 35;
-const uint32_t PB_SCONFIG_WE1_CRSP_I2C_PTY_RD_CAPTURE_START_BIT = 36;
-const uint32_t PB_SCONFIG_WE1_CRSP_I2C_PTY_RD_CAPTURE_END_BIT = 37;
-const uint32_t PB_SCONFIG_WE1_CRSP_I2C_SPARE_MODE_BIT = 38;
-const uint32_t PB_SCONFIG_WE1_DATA_I2C_DONE_LAUNCH_START_BIT = 39;
-const uint32_t PB_SCONFIG_WE1_DATA_I2C_DONE_LAUNCH_END_BIT = 40;
-const uint32_t PB_SCONFIG_WE1_DATA_I2C_DCTR_LAUNCH_START_BIT = 41;
-const uint32_t PB_SCONFIG_WE1_DATA_I2C_DCTR_LAUNCH_END_BIT = 42;
-const uint32_t PB_SCONFIG_WE1_DATA_I2C_SPARE_MODE_BIT = 43;
-const uint32_t PB_SCONFIG_WE1_DATA_C2I_DVAL_LAUNCH_START_BIT = 44;
-const uint32_t PB_SCONFIG_WE1_DATA_C2I_DVAL_LAUNCH_END_BIT = 45;
-const uint32_t PB_SCONFIG_WE1_DATA_C2I_DREQ_LAUNCH_START_BIT = 46;
-const uint32_t PB_SCONFIG_WE1_DATA_C2I_DREQ_LAUNCH_END_BIT = 47;
-const uint32_t PB_SCONFIG_WE1_DATA_C2I_SPARE_MODE_BIT = 48;
-const uint32_t PB_SCONFIG_WE1_RCMD_I2C_DONE_LAUNCH_BIT = 49;
-const uint32_t PB_SCONFIG_WE1_RCMD_I2C_L3_NOT_USE_DCBFL_BIT = 50;
-const uint32_t PB_SCONFIG_WE1_RCMD_I2C_PTY_RD_CAPTURE_START_BIT = 51;
-const uint32_t PB_SCONFIG_WE1_RCMD_I2C_PTY_RD_CAPTURE_END_BIT = 52;
-const uint32_t PB_SCONFIG_WE1_RCMD_I2C_PTY_INJECT_BIT = 53;
-const uint32_t PB_SCONFIG_WE1_RCMD_I2C_SPARE_MODE_BIT = 54;
-const uint32_t PB_SCONFIG_WE1_FP_I2C_DONE_LAUNCH_BIT = 55;
-const uint32_t PB_SCONFIG_WE1_FP_I2C_SPARE_BIT = 56;
-const uint32_t PB_SCONFIG_WE1_FP_I2C_PTY_RD_CAPTURE_START_BIT = 57;
-const uint32_t PB_SCONFIG_WE1_FP_I2C_PTY_RD_CAPTURE_END_BIT = 58;
-const uint32_t PB_SCONFIG_WE1_FP_I2C_SPARE_MODE_BIT = 59;
-const uint32_t PB_SCONFIG_WE1_FP_C2I_DVAL_LAUNCH_START_BIT = 60;
-const uint32_t PB_SCONFIG_WE1_FP_C2I_DVAL_LAUNCH_END_BIT = 61;
-const uint32_t PB_SCONFIG_WE1_FP_C2I_HSHAKE_BIT = 62;
-const uint32_t PB_SCONFIG_WE1_FP_C2I_SPARE_MODE_BIT = 63;
-
-const bool PB_SCONFIG_WE1_CMD_C2I_EARLY_REQ_MODE = false; // off
-const bool PB_SCONFIG_WE1_CMD_C2I_SPARE = false; // spare
-const bool PB_SCONFIG_WE1_CMD_C2I_SPARE_MODE = false; // spare
-const uint8_t PB_SCONFIG_WE1_PRSP_C2I_DVAL_LAUNCH = 0x0; // rc_p1
-const bool PB_SCONFIG_WE1_PRSP_C2I_HSHAKE = false; // off
-const bool PB_SCONFIG_WE1_PRSP_C2I_SPARE_MODE = false; // spare
-const bool PB_SCONFIG_WE1_CRSP_I2C_SPARE_MODE = false; // spare
-const bool PB_SCONFIG_WE1_DATA_I2C_SPARE_MODE = false; // spare
-const uint8_t PB_SCONFIG_WE1_DATA_C2I_DREQ_LAUNCH = 0x0; // rc_d3
-const bool PB_SCONFIG_WE1_DATA_C2I_SPARE_MODE = false; // off
-const bool PB_SCONFIG_WE1_RCMD_I2C_L3_NOT_USE_DCBFL = false; // off
-const bool PB_SCONFIG_WE1_RCMD_I2C_PTY_INJECT = false; // off
-const bool PB_SCONFIG_WE1_RCMD_I2C_SPARE_MODE = false; // off
-const bool PB_SCONFIG_WE1_FP_I2C_DONE_LAUNCH = false; // rc_p1
-const bool PB_SCONFIG_WE1_FP_I2C_SPARE = false; // spare
-const uint8_t PB_SCONFIG_WE1_FP_I2C_PTY_RD_CAPTURE = 0x0; // rc
-const bool PB_SCONFIG_WE1_FP_I2C_SPARE_MODE = false; // off
-const uint8_t PB_SCONFIG_WE1_FP_C2I_DVAL_LAUNCH = 0x0; // wc_p1
-const bool PB_SCONFIG_WE1_FP_C2I_HSHAKE = false; // off
-const bool PB_SCONFIG_WE1_FP_C2I_SPARE_MODE = false; // spare
-
-
-//
-// PBH_DAT_ARB_EM (east/west, chain #5) field/bit definitions
-//
-
-const proc_build_smp_sconfig_def PB_SCONFIG_WE5_DEF_VER1 = { 0x5, 51, false, { true, false, true } };
-const proc_build_smp_sconfig_def PB_SCONFIG_WE5_DEF_VER2 = { 0x5, 52, false, { true, false, true } };
-
-const uint32_t PB_SCONFIG_WE5_LOCK_ON_LINKS_BIT_VER1 = 13;
-const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_START_BIT_VER1 = 14;
-const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_END_BIT_VER1 = 17;
-const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_START_BIT_VER1 = 18;
-const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_END_BIT_VER1 = 21;
-const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_START_BIT_VER1 = 22;
-const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_END_BIT_VER1 = 25;
-const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_START_BIT_VER1 = 26;
-const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_END_BIT_VER1 = 29;
-const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_START_BIT_VER1 = 30;
-const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_END_BIT_VER1 = 33;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_ENABLE_BIT_VER1 = 34;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_START_BIT_VER1 = 35;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_END_BIT_VER1 = 42;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_START_BIT_VER1 = 43;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_END_BIT_VER1 = 50;
-const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_START_BIT_VER1 = 51;
-const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_END_BIT_VER1 = 54;
-const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_START_BIT_VER1 = 55;
-const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_END_BIT_VER1 = 58;
-const uint32_t PB_SCONFIG_WE5_EM_FP_ENABLE_BIT_VER1 = 59;
-const uint32_t PB_SCONFIG_WE5_SPARE_START_BIT_VER1 = 60;
-const uint32_t PB_SCONFIG_WE5_SPARE_END_BIT_VER1 = 61;
-const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_START_BIT_VER1 = 62;
-const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_END_BIT_VER1 = 63;
-
-const uint32_t PB_SCONFIG_WE5_LOCK_ON_LINKS_BIT_VER2 = 12;
-const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_START_BIT_VER2 = 13;
-const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_END_BIT_VER2 = 16;
-const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_START_BIT_VER2 = 17;
-const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_END_BIT_VER2 = 20;
-const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_START_BIT_VER2 = 21;
-const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_END_BIT_VER2 = 24;
-const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_START_BIT_VER2 = 25;
-const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_END_BIT_VER2 = 28;
-const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_START_BIT_VER2 = 29;
-const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_END_BIT_VER2 = 32;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_ENABLE_BIT_VER2 = 33;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_START_BIT_VER2 = 34;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_END_BIT_VER2 = 41;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_START_BIT_VER2 = 42;
-const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_END_BIT_VER2 = 49;
-const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_START_BIT_VER2 = 50;
-const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_END_BIT_VER2 = 53;
-const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_START_BIT_VER2 = 54;
-const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_END_BIT_VER2 = 57;
-const uint32_t PB_SCONFIG_WE5_EM_FP_ENABLE_BIT_VER2 = 58;
-const uint32_t PB_SCONFIG_WE5_SPARE_START_BIT_VER2 = 59;
-const uint32_t PB_SCONFIG_WE5_SPARE_END_BIT_VER2 = 59;
-const uint32_t PB_SCONFIG_WE5_A_IND_THRESHOLD_BIT_VER2 = 60;
-const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_START_BIT_VER2 = 61;
-const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_END_BIT_VER2 = 62;
-const uint32_t PB_SCONFIG_WE5_X_OFF_SEL_BIT_VER2 = 63;
-
-const bool PB_SCONFIG_WE5_LOCK_ON_LINKS = true; // lock
-const uint8_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD = 0x4; // cnt_4
-const uint8_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD = 0x4; // cnt_4
-const uint8_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD = 0x4; // cnt_4
-const uint8_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD = 0x0; // cnt_0
-const uint8_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD = 0x0; // cnt_0
-const bool PB_SCONFIG_WE5_PASSTHRU_ENABLE = true; // enable
-const uint8_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY = 0xFE; // cnt_7to1
-const uint8_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY = 0xFE; // cnt_7to1
-const uint8_t PB_SCONFIG_WE5_A_TOK_INIT = 0x8; // cnt_8
-const uint8_t PB_SCONFIG_WE5_F_TOK_INIT = 0x4; // cnt_4
-const bool PB_SCONFIG_WE5_EM_FP_ENABLE = true; // enable
-const uint8_t PB_SCONFIG_WE5_SPARE = 0x0; // spare
-const uint8_t PB_SCONFIG_WE5_MEM_STV_PRIORITY = 0x2; // stv
-
-const uint8_t PB_SCONFIG_WE5_A_IND_THRESHOLD = 0x0; // gt4
-const uint8_t PB_SCONFIG_WE5_X_OFF_SEL = 0x0; // disable
+#include <proc_build_smp.H>
+#include <p8_scom_addresses.H>
extern "C"
{
@@ -541,6 +57,16 @@ extern "C"
// parameters: i_smp => structure encapsulating SMP topology
// returns: FAPI_RC_SUCCESS if register reads are successful and all shadow
// registers are equivalent,
+// FAPI_RC_PLAT_ERR_ADU_LOCKED if operation failed due to state of
+// ADU atomic lock,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_OPERATION if an unsupported operation
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_LOCK_ATTEMPTS if invalid number of attempts
+// is specified,
+// RC_PROC_ADU_UTILS_INVALID_FBC_OP if invalid fabric operation
+// parameters are specified,
+// RC_PROC_BUILD_SMP_ADU_STATUS_MISMATCH if ADU status mismatches
+// for switch operation,
// RC_PROC_BUILD_SMP_CORE_FLOOR_RATIO_ERR if cache/nest frequency
// ratio is unsupported,
// RC_PROC_BUILD_SMP_CORE_CEILING_RATIO_ERR if cache/nest frequency
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.C b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.C
index eb8c33392..9662fe015 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_nohp.C,v 1.5 2013/01/21 03:11:34 jmcgill Exp $
+// $Id: proc_build_smp_fbc_nohp.C,v 1.6 2014/02/23 21:41:07 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_nohp.C,v $
//------------------------------------------------------------------------------
// *|
@@ -39,12 +39,151 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp_fbc_nohp.H"
+#include <proc_build_smp_fbc_nohp.H>
+
+
+//------------------------------------------------------------------------------
+// Structure definitions
+//------------------------------------------------------------------------------
+
+// enumerate chips per group configurations
+enum proc_build_smp_chips_per_group {
+ PROC_BUILD_SMP_1CPG = 0x0,
+ PROC_BUILD_SMP_2CPG = 0x1,
+ PROC_BUILD_SMP_4CPG = 0x2
+};
//------------------------------------------------------------------------------
// Constant definitions
//------------------------------------------------------------------------------
+
+//
+// PB Mode register field/bit definitions
+//
+
+const uint32_t PB_MODE_CHIP_IS_SYSTEM_BIT = 4;
+
+const uint32_t PB_MODE_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
+{
+ PB_MODE_WEST_0x02010C0A,
+ PB_MODE_CENT_0x02010C4A,
+ PB_MODE_EAST_0x02010C8A
+};
+
+
+//
+// Group/Remote Group/System Command Pacing Rate register field/bit definitions
+//
+
+const uint8_t PROC_BUILD_SMP_DP_LEVELS = 8;
+
+const uint8_t PB_GP_CMD_RATE_DP_LO_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 1, 2, 3, 4, 5, 6, 7, 8 };
+const uint8_t PB_GP_CMD_RATE_DP_HI_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 2, 4, 6, 8, 8, 8, 8, 8 };
+const uint8_t PB_RGP_CMD_RATE_DP_LO_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 9, 9, 9, 10, 10, 11, 12 };
+const uint8_t PB_RGP_CMD_RATE_DP_HI_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 10, 11, 12, 13, 14, 15, 16 };
+const uint8_t PB_SP_CMD_RATE_DP_LO_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 10, 11, 12, 13, 14, 15, 16 };
+const uint8_t PB_SP_CMD_RATE_DP_HI_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 13, 14, 16, 18, 20, 22, 24 };
+
+const uint8_t PB_GP_CMD_RATE_DP_LO_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 3, 4, 5, 6, 7, 8, 10, 16 };
+const uint8_t PB_GP_CMD_RATE_DP_HI_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 4, 5, 6, 7, 8, 10, 12, 16 };
+const uint8_t PB_RGP_CMD_RATE_DP_LO_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 10, 11, 12, 13, 14, 16, 32 };
+const uint8_t PB_RGP_CMD_RATE_DP_HI_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 13, 14, 15, 16, 20, 32, 32 };
+const uint8_t PB_SP_CMD_RATE_DP_LO_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 13, 14, 15, 16, 20, 32, 64 };
+const uint8_t PB_SP_CMD_RATE_DP_HI_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 20, 22, 24, 26, 32, 40, 64, 64 };
+
+const uint8_t PB_GP_CMD_RATE_DP_LO_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 3, 4, 5, 6, 8, 10, 16, 32 };
+const uint8_t PB_GP_CMD_RATE_DP_HI_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 4, 6, 8, 12, 16, 20, 32, 32 };
+const uint8_t PB_RGP_CMD_RATE_DP_LO_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 10, 11, 12, 16, 20, 32, 64 };
+const uint8_t PB_RGP_CMD_RATE_DP_HI_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 14, 16, 24, 32, 40, 64, 64 };
+const uint8_t PB_SP_CMD_RATE_DP_LO_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 14, 16, 24, 32, 40, 64, 128 };
+const uint8_t PB_SP_CMD_RATE_DP_HI_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 20, 24, 32, 48, 64, 80, 128, 128 };
+
+const uint32_t PB_SCOPE_COMMAND_PACING_LVL_START_BIT[PROC_BUILD_SMP_DP_LEVELS] = { 0, 8, 16, 24, 32, 40, 48, 56 };
+const uint32_t PB_SCOPE_COMMAND_PACING_LVL_END_BIT[PROC_BUILD_SMP_DP_LEVELS] = { 7, 15, 23, 31, 39, 47, 55, 63 };
+
+
+// define set of group scope command pacing rate settings
+struct proc_build_smp_gp_low_pacing_table
+{
+ static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
+ {
+ std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
+ m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_GP_CMD_RATE_DP_LO_1CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_GP_CMD_RATE_DP_LO_2CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_GP_CMD_RATE_DP_LO_4CPG));
+ return m;
+ }
+ static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
+};
+
+struct proc_build_smp_gp_high_pacing_table
+{
+ static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
+ {
+ std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
+ m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_GP_CMD_RATE_DP_HI_1CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_GP_CMD_RATE_DP_HI_2CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_GP_CMD_RATE_DP_HI_4CPG));
+ return m;
+ }
+ static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
+};
+
+struct proc_build_smp_sp_low_pacing_table
+{
+ static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
+ {
+ std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
+ m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_SP_CMD_RATE_DP_LO_1CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_SP_CMD_RATE_DP_LO_2CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_SP_CMD_RATE_DP_LO_4CPG));
+ return m;
+ }
+ static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
+};
+
+struct proc_build_smp_sp_high_pacing_table
+{
+ static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
+ {
+ std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
+ m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_SP_CMD_RATE_DP_HI_1CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_SP_CMD_RATE_DP_HI_2CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_SP_CMD_RATE_DP_HI_4CPG));
+ return m;
+ }
+ static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
+};
+
+struct proc_build_smp_rgp_low_pacing_table
+{
+ static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
+ {
+ std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
+ m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_RGP_CMD_RATE_DP_LO_1CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_RGP_CMD_RATE_DP_LO_2CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_RGP_CMD_RATE_DP_LO_4CPG));
+ return m;
+ }
+ static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
+};
+
+struct proc_build_smp_rgp_high_pacing_table
+{
+ static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
+ {
+ std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
+ m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_RGP_CMD_RATE_DP_HI_1CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_RGP_CMD_RATE_DP_HI_2CPG));
+ m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_RGP_CMD_RATE_DP_HI_4CPG));
+ return m;
+ }
+ static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
+};
+
+
+
const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> proc_build_smp_gp_low_pacing_table::xlate_map =
proc_build_smp_gp_low_pacing_table::create_map();
@@ -64,6 +203,54 @@ const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> proc_build_s
proc_build_smp_rgp_high_pacing_table::create_map();
+//
+// X Link Mode register field/bit definitions
+//
+
+const uint32_t PB_X_MODE_TRACE_ENABLE_BIT = 4;
+const uint32_t PB_X_MODE_TRACE_SELECT_START_BIT = 5;
+const uint32_t PB_X_MODE_TRACE_SELECT_END_BIT = 7;
+
+
+//
+// A Link Trace register field/bit definitions
+//
+
+const uint32_t PB_A_TRACE_A0_OUT_SEL0_START_BIT = 0;
+const uint32_t PB_A_TRACE_A0_OUT_SEL0_END_BIT = 1;
+const uint32_t PB_A_TRACE_A0_OUT_SEL1_START_BIT = 2;
+const uint32_t PB_A_TRACE_A0_OUT_SEL1_END_BIT = 3;
+const uint32_t PB_A_TRACE_A0_OUT_SEL2_START_BIT = 4;
+const uint32_t PB_A_TRACE_A0_OUT_SEL2_END_BIT = 5;
+const uint32_t PB_A_TRACE_A1_OUT_SEL0_START_BIT = 6;
+const uint32_t PB_A_TRACE_A1_OUT_SEL0_END_BIT = 7;
+const uint32_t PB_A_TRACE_A1_OUT_SEL1_START_BIT = 8;
+const uint32_t PB_A_TRACE_A1_OUT_SEL1_END_BIT = 9;
+const uint32_t PB_A_TRACE_A1_OUT_SEL2_START_BIT = 10;
+const uint32_t PB_A_TRACE_A1_OUT_SEL2_END_BIT = 11;
+const uint32_t PB_A_TRACE_A2_OUT_SEL0_START_BIT = 12;
+const uint32_t PB_A_TRACE_A2_OUT_SEL0_END_BIT = 13;
+const uint32_t PB_A_TRACE_A2_OUT_SEL1_START_BIT = 14;
+const uint32_t PB_A_TRACE_A2_OUT_SEL1_END_BIT = 15;
+const uint32_t PB_A_TRACE_A2_OUT_SEL2_START_BIT = 16;
+const uint32_t PB_A_TRACE_A2_OUT_SEL2_END_BIT = 17;
+
+//
+// F Link Trace register field/bit definitions
+//
+
+const uint32_t PB_F_TRACE_F0_OUT_SEL0_START_BIT = 0;
+const uint32_t PB_F_TRACE_F0_OUT_SEL0_END_BIT = 3;
+const uint32_t PB_F_TRACE_F0_OUT_SEL1_START_BIT = 8;
+const uint32_t PB_F_TRACE_F0_OUT_SEL1_END_BIT = 11;
+const uint32_t PB_F_TRACE_F1_OUT_SEL0_START_BIT = 16;
+const uint32_t PB_F_TRACE_F1_OUT_SEL0_END_BIT = 19;
+const uint32_t PB_F_TRACE_F1_OUT_SEL1_START_BIT = 24;
+const uint32_t PB_F_TRACE_F1_OUT_SEL1_END_BIT = 27;
+const uint32_t PB_F_TRACE_F0_OBS_SEL = 32;
+const uint32_t PB_F_TRACE_F1_OBS_SEL = 33;
+
+
extern "C" {
//------------------------------------------------------------------------------
@@ -109,7 +296,9 @@ fapi::ReturnCode proc_build_smp_calc_chips_per_group(
default:
FAPI_ERR("proc_build_smp_calc_chips_per_group: Unsupported group size (=%d)",
chips_per_group_exact);
- const uint8_t& SIZE = chips_per_group_exact;
+ const fapi::Target& TARGET = i_smp_chip.chip->this_chip;
+ const uint8_t& GROUP_SIZE = chips_per_group_exact;
+ const proc_fab_smp_node_id & NODE_ID = i_smp_chip.node_id;
FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_INVALID_GROUP_SIZE_ERR);
break;
}
@@ -155,6 +344,9 @@ fapi::ReturnCode proc_build_smp_set_pacing_rate(
if (m == i_map_table.end())
{
FAPI_ERR("proc_build_smp_set_pacing_rate: Pacing rate map table lookup failed");
+ const fapi::Target& TARGET = i_smp_chip.chip->this_chip;
+ const proc_build_smp_chips_per_group& GROUP_SIZE = i_chips_per_group;
+ const proc_fab_smp_node_id& NODE_ID = i_smp_chip.node_id;
FAPI_SET_HWP_ERROR(rc, RC_PROC_BUILD_SMP_PACING_RATE_TABLE_ERR);
break;
}
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.H b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.H
index 29545ae2e..927578c7e 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.H
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_nohp.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_nohp.H,v 1.2 2012/09/05 03:13:18 jmcgill Exp $
+// $Id: proc_build_smp_fbc_nohp.H,v 1.3 2014/02/23 21:41:07 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_nohp.H,v $
//------------------------------------------------------------------------------
// *|
@@ -41,195 +41,8 @@
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include "proc_build_smp.H"
-#include "p8_scom_addresses.H"
-
-//------------------------------------------------------------------------------
-// Structure definitions
-//------------------------------------------------------------------------------
-
-// enumerate chips per group configurations
-enum proc_build_smp_chips_per_group {
- PROC_BUILD_SMP_1CPG = 0x0,
- PROC_BUILD_SMP_2CPG = 0x1,
- PROC_BUILD_SMP_4CPG = 0x2
-};
-
-//------------------------------------------------------------------------------
-// Constant definitions
-//------------------------------------------------------------------------------
-
-//
-// PB Mode register field/bit definitions
-//
-
-const uint32_t PB_MODE_CHIP_IS_SYSTEM_BIT = 4;
-
-const uint32_t PB_MODE_SHADOWS[PROC_BUILD_SMP_NUM_SHADOWS] =
-{
- PB_MODE_WEST_0x02010C0A,
- PB_MODE_CENT_0x02010C4A,
- PB_MODE_EAST_0x02010C8A
-};
-
-
-//
-// Group/Remote Group/System Command Pacing Rate register field/bit definitions
-//
-
-const uint8_t PROC_BUILD_SMP_DP_LEVELS = 8;
-
-const uint8_t PB_GP_CMD_RATE_DP_LO_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 1, 2, 3, 4, 5, 6, 7, 8 };
-const uint8_t PB_GP_CMD_RATE_DP_HI_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 2, 4, 6, 8, 8, 8, 8, 8 };
-const uint8_t PB_RGP_CMD_RATE_DP_LO_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 9, 9, 9, 10, 10, 11, 12 };
-const uint8_t PB_RGP_CMD_RATE_DP_HI_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 10, 11, 12, 13, 14, 15, 16 };
-const uint8_t PB_SP_CMD_RATE_DP_LO_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 10, 11, 12, 13, 14, 15, 16 };
-const uint8_t PB_SP_CMD_RATE_DP_HI_1CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 13, 14, 16, 18, 20, 22, 24 };
-
-const uint8_t PB_GP_CMD_RATE_DP_LO_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 3, 4, 5, 6, 7, 8, 10, 16 };
-const uint8_t PB_GP_CMD_RATE_DP_HI_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 4, 5, 6, 7, 8, 10, 12, 16 };
-const uint8_t PB_RGP_CMD_RATE_DP_LO_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 10, 11, 12, 13, 14, 16, 32 };
-const uint8_t PB_RGP_CMD_RATE_DP_HI_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 13, 14, 15, 16, 20, 32, 32 };
-const uint8_t PB_SP_CMD_RATE_DP_LO_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 13, 14, 15, 16, 20, 32, 64 };
-const uint8_t PB_SP_CMD_RATE_DP_HI_2CPG[PROC_BUILD_SMP_DP_LEVELS] = { 20, 22, 24, 26, 32, 40, 64, 64 };
-
-const uint8_t PB_GP_CMD_RATE_DP_LO_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 3, 4, 5, 6, 8, 10, 16, 32 };
-const uint8_t PB_GP_CMD_RATE_DP_HI_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 4, 6, 8, 12, 16, 20, 32, 32 };
-const uint8_t PB_RGP_CMD_RATE_DP_LO_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 9, 10, 11, 12, 16, 20, 32, 64 };
-const uint8_t PB_RGP_CMD_RATE_DP_HI_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 14, 16, 24, 32, 40, 64, 64 };
-const uint8_t PB_SP_CMD_RATE_DP_LO_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 12, 14, 16, 24, 32, 40, 64, 128 };
-const uint8_t PB_SP_CMD_RATE_DP_HI_4CPG[PROC_BUILD_SMP_DP_LEVELS] = { 20, 24, 32, 48, 64, 80, 128, 128 };
-
-const uint32_t PB_SCOPE_COMMAND_PACING_LVL_START_BIT[PROC_BUILD_SMP_DP_LEVELS] = { 0, 8, 16, 24, 32, 40, 48, 56 };
-const uint32_t PB_SCOPE_COMMAND_PACING_LVL_END_BIT[PROC_BUILD_SMP_DP_LEVELS] = { 7, 15, 23, 31, 39, 47, 55, 63 };
-
-
-// define set of group scope command pacing rate settings
-struct proc_build_smp_gp_low_pacing_table
-{
- static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
- {
- std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
- m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_GP_CMD_RATE_DP_LO_1CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_GP_CMD_RATE_DP_LO_2CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_GP_CMD_RATE_DP_LO_4CPG));
- return m;
- }
- static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
-};
-
-struct proc_build_smp_gp_high_pacing_table
-{
- static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
- {
- std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
- m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_GP_CMD_RATE_DP_HI_1CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_GP_CMD_RATE_DP_HI_2CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_GP_CMD_RATE_DP_HI_4CPG));
- return m;
- }
- static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
-};
-
-struct proc_build_smp_sp_low_pacing_table
-{
- static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
- {
- std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
- m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_SP_CMD_RATE_DP_LO_1CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_SP_CMD_RATE_DP_LO_2CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_SP_CMD_RATE_DP_LO_4CPG));
- return m;
- }
- static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
-};
-
-struct proc_build_smp_sp_high_pacing_table
-{
- static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
- {
- std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
- m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_SP_CMD_RATE_DP_HI_1CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_SP_CMD_RATE_DP_HI_2CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_SP_CMD_RATE_DP_HI_4CPG));
- return m;
- }
- static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
-};
-
-struct proc_build_smp_rgp_low_pacing_table
-{
- static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
- {
- std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
- m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_RGP_CMD_RATE_DP_LO_1CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_RGP_CMD_RATE_DP_LO_2CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_RGP_CMD_RATE_DP_LO_4CPG));
- return m;
- }
- static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
-};
-
-struct proc_build_smp_rgp_high_pacing_table
-{
- static std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> create_map()
- {
- std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> m;
- m.insert(std::make_pair(PROC_BUILD_SMP_1CPG, &PB_RGP_CMD_RATE_DP_HI_1CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_2CPG, &PB_RGP_CMD_RATE_DP_HI_2CPG));
- m.insert(std::make_pair(PROC_BUILD_SMP_4CPG, &PB_RGP_CMD_RATE_DP_HI_4CPG));
- return m;
- }
- static const std::map<uint8_t, const uint8_t(*)[PROC_BUILD_SMP_DP_LEVELS]> xlate_map;
-};
-
-
-//
-// X Link Mode register field/bit definitions
-//
-
-const uint32_t PB_X_MODE_TRACE_ENABLE_BIT = 4;
-const uint32_t PB_X_MODE_TRACE_SELECT_START_BIT = 5;
-const uint32_t PB_X_MODE_TRACE_SELECT_END_BIT = 7;
-
-
-//
-// A Link Trace register field/bit definitions
-//
-
-const uint32_t PB_A_TRACE_A0_OUT_SEL0_START_BIT = 0;
-const uint32_t PB_A_TRACE_A0_OUT_SEL0_END_BIT = 1;
-const uint32_t PB_A_TRACE_A0_OUT_SEL1_START_BIT = 2;
-const uint32_t PB_A_TRACE_A0_OUT_SEL1_END_BIT = 3;
-const uint32_t PB_A_TRACE_A0_OUT_SEL2_START_BIT = 4;
-const uint32_t PB_A_TRACE_A0_OUT_SEL2_END_BIT = 5;
-const uint32_t PB_A_TRACE_A1_OUT_SEL0_START_BIT = 6;
-const uint32_t PB_A_TRACE_A1_OUT_SEL0_END_BIT = 7;
-const uint32_t PB_A_TRACE_A1_OUT_SEL1_START_BIT = 8;
-const uint32_t PB_A_TRACE_A1_OUT_SEL1_END_BIT = 9;
-const uint32_t PB_A_TRACE_A1_OUT_SEL2_START_BIT = 10;
-const uint32_t PB_A_TRACE_A1_OUT_SEL2_END_BIT = 11;
-const uint32_t PB_A_TRACE_A2_OUT_SEL0_START_BIT = 12;
-const uint32_t PB_A_TRACE_A2_OUT_SEL0_END_BIT = 13;
-const uint32_t PB_A_TRACE_A2_OUT_SEL1_START_BIT = 14;
-const uint32_t PB_A_TRACE_A2_OUT_SEL1_END_BIT = 15;
-const uint32_t PB_A_TRACE_A2_OUT_SEL2_START_BIT = 16;
-const uint32_t PB_A_TRACE_A2_OUT_SEL2_END_BIT = 17;
-
-//
-// F Link Trace register field/bit definitions
-//
-
-const uint32_t PB_F_TRACE_F0_OUT_SEL0_START_BIT = 0;
-const uint32_t PB_F_TRACE_F0_OUT_SEL0_END_BIT = 3;
-const uint32_t PB_F_TRACE_F0_OUT_SEL1_START_BIT = 8;
-const uint32_t PB_F_TRACE_F0_OUT_SEL1_END_BIT = 11;
-const uint32_t PB_F_TRACE_F1_OUT_SEL0_START_BIT = 16;
-const uint32_t PB_F_TRACE_F1_OUT_SEL0_END_BIT = 19;
-const uint32_t PB_F_TRACE_F1_OUT_SEL1_START_BIT = 24;
-const uint32_t PB_F_TRACE_F1_OUT_SEL1_END_BIT = 27;
-const uint32_t PB_F_TRACE_F0_OBS_SEL = 32;
-const uint32_t PB_F_TRACE_F1_OBS_SEL = 33;
+#include <proc_build_smp.H>
+#include <p8_scom_addresses.H>
extern "C"
OpenPOWER on IntegriCloud