summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/hbotcompid.H8
-rw-r--r--src/include/usr/mbox/ipc_msg_types.H39
-rw-r--r--src/include/usr/mbox/ipc_reasoncodes.H42
-rw-r--r--src/include/usr/mbox/mbox_queues.H2
-rw-r--r--src/include/usr/runtime/runtime.H7
-rw-r--r--src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C30
-rw-r--r--src/usr/mbox/ipcSp.C164
-rw-r--r--src/usr/mbox/ipcSp.H85
-rw-r--r--src/usr/mbox/mailboxsp.C3
-rw-r--r--src/usr/mbox/makefile30
-rw-r--r--src/usr/runtime/populate_attributes.C109
-rwxr-xr-xsrc/usr/targeting/common/genHwsvMrwXml.pl22
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types.xml29
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types_hb.xml17
-rw-r--r--src/usr/targeting/common/xmltohb/target_types.xml1
-rw-r--r--src/usr/targeting/common/xmltohb/target_types_hb.xml1
16 files changed, 563 insertions, 26 deletions
diff --git a/src/include/usr/hbotcompid.H b/src/include/usr/hbotcompid.H
index 382cbd685..0484715f1 100644
--- a/src/include/usr/hbotcompid.H
+++ b/src/include/usr/hbotcompid.H
@@ -283,6 +283,14 @@ const compId_t SECURE_COMP_ID = 0x1E00;
const char SECURE_COMP_NAME[] = "secure";
//@}
+/** @name IPC
+ * IPC - Inter Processor Communication component
+ */
+//@{
+const compId_t IPC_COMP_ID = 0x1F00;
+const char IPC_COMP_NAME[] = "ipc";
+//@}
+
/** @name HSVC
* Host Services component
diff --git a/src/include/usr/mbox/ipc_msg_types.H b/src/include/usr/mbox/ipc_msg_types.H
new file mode 100644
index 000000000..306e93d39
--- /dev/null
+++ b/src/include/usr/mbox/ipc_msg_types.H
@@ -0,0 +1,39 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/mbox/ipc_msg_types.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#if !defined(__IPC_MSG_TYPES_H)
+#define __IPC_MSG_TYPES_H
+
+#include <mbox/mbox_queues.H>
+
+namespace IPC
+{
+ /**
+ * IPC message types
+ */
+ enum ipc_msg_type_t
+ {
+ IPC_POPULATE_ATTRIBUTES = MBOX::FIRST_SECURE_MSG + 1,
+ };
+
+}; // namespace IPC
+#endif
diff --git a/src/include/usr/mbox/ipc_reasoncodes.H b/src/include/usr/mbox/ipc_reasoncodes.H
new file mode 100644
index 000000000..1758653e3
--- /dev/null
+++ b/src/include/usr/mbox/ipc_reasoncodes.H
@@ -0,0 +1,42 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/mbox/ipc_reasoncodes.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __IPC_REASONCODES_H
+#define __IPC_REASONCODES_H
+
+#include <hbotcompid.H>
+
+namespace IPC
+{
+ enum IPCModuleId
+ {
+ MOD_IPCSP_MSGHDLR = 0x01, //IpcSp::msgHandler
+ };
+
+ enum IPCReasonCode
+ {
+ RC_INVALID_MSG_TYPE = IPC_COMP_ID | 0x01,
+ };
+
+};
+#endif
+
diff --git a/src/include/usr/mbox/mbox_queues.H b/src/include/usr/mbox/mbox_queues.H
index e662b22c3..3ba4e636f 100644
--- a/src/include/usr/mbox/mbox_queues.H
+++ b/src/include/usr/mbox/mbox_queues.H
@@ -48,6 +48,8 @@ namespace MBOX
HB_HWPF_ATTR_MSGQ = 6, // HWPF Attribute override/sync
HB_TRACE_MSGQ = 7,
HB_LID_MSGQ = 8, //For transferring LIDs from FSP.
+ HB_IPC_MSGQ = 9, //For inter-drawer HB messages
+ HB_POP_ATTR_MSGQ = 10, // populate Attribute response
// Add HB mbox msg queue ids (services) before this line
HB_LAST_VALID_MSGQ, // end of valid HB mbox msgQ ids
diff --git a/src/include/usr/runtime/runtime.H b/src/include/usr/runtime/runtime.H
index 739f2f18d..a72937cbe 100644
--- a/src/include/usr/runtime/runtime.H
+++ b/src/include/usr/runtime/runtime.H
@@ -39,6 +39,13 @@ namespace RUNTIME
errlHndl_t populate_attributes( void );
/**
+ * @brief Populate node attributes in mainstore for HostServices
+ *
+ * @return errlHndl_t NULL on Success
+ */
+errlHndl_t populate_node_attributes( uint64_t i_nodeNum );
+
+/**
* @brief Add the host data mainstore location to VMM
*
* @description If running with the standard PHYP payload this function
diff --git a/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C b/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C
index d30e4295a..ad40ed21a 100644
--- a/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C
+++ b/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C
@@ -52,6 +52,7 @@
// targeting support
#include <targeting/common/commontargeting.H>
#include <smp_unfencing_inter_enclosure_abus_links.H>
+#include <targeting/common/attributes.H>
// fapi support
#include <fapi.H>
@@ -151,6 +152,19 @@ void host_sys_fab_iovalid_processing( msg_t* io_pMsg )
count = drawerData->count;
+ // get FABRIC_TO_PHYSICAL_NODE_MAP
+ TARGETING::Target * sys = NULL;
+ TARGETING::targetService().getTopLevelTarget( sys );
+ assert(sys != NULL);
+
+ uint8_t node_map[8];
+
+ bool rc =
+ sys->tryGetAttr<TARGETING::ATTR_FABRIC_TO_PHYSICAL_NODE_MAP>(node_map);
+ assert(rc == true);
+
+ TARGETING::ATTR_HB_EXISTING_IMAGE_type hb_existing_image = 0;
+
// create a vector with the present drawers
for(uint8_t i = 0; i < count; i++)
{
@@ -158,9 +172,25 @@ void host_sys_fab_iovalid_processing( msg_t* io_pMsg )
"list entry[%d] - %s", i, ptr->toString());
present_drawers.push_back(*ptr);
+
+ TARGETING::EntityPath::PathElement pe =
+ ptr->pathElementOfType(TARGETING::TYPE_NODE);
+
+ // pe.instance is the drawer number - convert to logical node
+ uint8_t logical_node = node_map[pe.instance];
+
+ // set mask to msb of bitmap
+ TARGETING::ATTR_HB_EXISTING_IMAGE_type mask = 0x1 <<
+ ((sizeof(TARGETING::ATTR_HB_EXISTING_IMAGE_type) * 8) -1);
+
+ // set bit for this logical node.
+ hb_existing_image |= (mask >> logical_node);
+
ptr++;
}
+ sys->setAttr<TARGETING::ATTR_HB_EXISTING_IMAGE>(hb_existing_image);
+
// $TODO RTC:63128 - exchange between present drawers to agree
// on valid endpoints
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
diff --git a/src/usr/mbox/ipcSp.C b/src/usr/mbox/ipcSp.C
new file mode 100644
index 000000000..4fc7e120e
--- /dev/null
+++ b/src/usr/mbox/ipcSp.C
@@ -0,0 +1,164 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/mbox/ipcSp.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#include <mbox/ipc_msg_types.H>
+#include "ipcSp.H"
+#include <runtime/runtime.H>
+#include <vfs/vfs.H>
+#include <mbox/ipc_reasoncodes.H>
+#include <mbox/mboxif.H>
+#include <errl/errlmanager.H>
+
+trace_desc_t* g_trac_ipc = NULL;
+TRAC_INIT(&g_trac_ipc, "IPC", KILOBYTE);
+
+using namespace IPC;
+using namespace ERRORLOG;
+
+IpcSp::IpcSp()
+ :
+ iv_msgQ()
+{
+}
+
+IpcSp::~IpcSp()
+{
+ msg_q_destroy(iv_msgQ);
+}
+
+void IpcSp::init(errlHndl_t & o_errl)
+{
+ o_errl = Singleton<IpcSp>::instance()._init();
+}
+
+void* IpcSp::msg_handler(void *unused)
+{
+ Singleton<IpcSp>::instance().msgHandler();
+ return NULL;
+}
+
+errlHndl_t IpcSp::_init()
+{
+ errlHndl_t err = NULL;
+
+ iv_msgQ = msg_q_create();
+ err = MBOX::msgq_register(MBOX::HB_IPC_MSGQ,iv_msgQ);
+
+
+ if(!err)
+ {
+ task_create(IpcSp::msg_handler, NULL);
+ }
+
+ return err;
+}
+
+void IpcSp::msgHandler()
+{
+ errlHndl_t err = NULL;
+ bool mod_loaded = false;
+
+ while(1)
+ {
+ msg_t* msg = msg_wait(iv_msgQ);
+
+ switch(msg->type)
+ {
+ case IPC_POPULATE_ATTRIBUTES:
+ // make sure runtime module is loaded
+ if ( !VFS::module_is_loaded( "libruntime.so" ) )
+ {
+ err = VFS::module_load( "libruntime.so" );
+
+ if ( err )
+ {
+ TRACFCOMP( g_trac_ipc,
+ "Could not load runtime module" );
+ }
+ else
+ {
+ mod_loaded = true;
+ }
+ }
+ if(!err)
+ {
+ err = RUNTIME::populate_node_attributes( msg->data[0] );
+ }
+
+ if (err)
+ {
+ errlCommit(err, IPC_COMP_ID);
+ }
+
+ if(mod_loaded)
+ {
+ err = VFS::module_unload( "libruntime.so" );
+
+ if (err)
+ {
+ errlCommit(err, IPC_COMP_ID);
+ }
+ }
+
+ // Respond
+ err = MBOX::send(MBOX::HB_POP_ATTR_MSGQ, msg, msg->data[1] );
+ if (err)
+ {
+ errlCommit(err,IPC_COMP_ID);
+ }
+
+ break;
+
+ default:
+
+ TRACFCOMP( g_trac_ipc,
+ "IPC received an unexpected message type of %d",
+ msg->type);
+
+ /*@ errorlog tag
+ * @errortype ERRL_SEV_INFORMATIONAL
+ * @moduleid IPC::MOD_IPCSP_MSGHDLR
+ * @reasoncode IPC::RC_INVALID_MSG_TYPE
+ * @userdata1 Message type
+ * @userdata2 <unused>
+ *
+ * @devdesc IPC service provider received an unexpected
+ * message.
+ *
+ */
+ err = new ERRORLOG::ErrlEntry
+ (
+ ERRORLOG::ERRL_SEV_INFORMATIONAL, // severity
+ IPC::MOD_IPCSP_MSGHDLR, // moduleid
+ IPC::RC_INVALID_MSG_TYPE, // reason code
+ msg->type,
+ 0
+ );
+
+ errlCommit(err, IPC_COMP_ID);
+
+ break;
+ }
+ }
+}
+
+
diff --git a/src/usr/mbox/ipcSp.H b/src/usr/mbox/ipcSp.H
new file mode 100644
index 000000000..bbefd5fcc
--- /dev/null
+++ b/src/usr/mbox/ipcSp.H
@@ -0,0 +1,85 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/mbox/ipcSp.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#if !defined(__IPCSP_H)
+#define __IPCSP_H
+
+#include <stdint.h>
+#include <errl/errlentry.H>
+#include <sys/msg.h>
+
+namespace IPC
+{
+
+ /**
+ * Handle IPC messages sent from other nodes
+ */
+ class IpcSp
+ {
+ public:
+
+ /**
+ * Initialize the service provider
+ */
+ static void init(errlHndl_t & o_errl);
+
+ protected:
+
+ /**
+ * Constructor
+ */
+ IpcSp();
+
+ /**
+ * Destructor
+ */
+ ~IpcSp();
+
+ /**
+ * Start message handler
+ *
+ * @note This function is used to spawn a new task.
+ * The args and return value are not used.
+ */
+ static void* msg_handler(void * unused);
+
+ private:
+
+ /**
+ * Intiailze the service provider
+ */
+ errlHndl_t _init();
+
+ /**
+ * The ipc service provider message handler.
+ */
+ void msgHandler();
+
+ /**
+ * The IPC message queue
+ */
+ msg_q_t iv_msgQ;
+
+ };
+}; // namespace IPC
+#endif
+
diff --git a/src/usr/mbox/mailboxsp.C b/src/usr/mbox/mailboxsp.C
index b624f06ca..e79b9faeb 100644
--- a/src/usr/mbox/mailboxsp.C
+++ b/src/usr/mbox/mailboxsp.C
@@ -27,6 +27,7 @@
#include "mailboxsp.H"
#include "mboxdd.H"
+#include "ipcSp.H"
#include <sys/task.h>
#include <initservice/taskargs.H>
#include <initservice/initserviceif.H>
@@ -196,6 +197,8 @@ errlHndl_t MailboxSp::_init()
}
// else leave iv_disabled as true;
+ // Start the the interprocessor communications message handler
+ IPC::IpcSp::init(err);
return err;
}
diff --git a/src/usr/mbox/makefile b/src/usr/mbox/makefile
index 456836c0d..554050677 100644
--- a/src/usr/mbox/makefile
+++ b/src/usr/mbox/makefile
@@ -1,29 +1,29 @@
-# IBM_PROLOG_BEGIN_TAG
-# This is an automatically generated prolog.
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
#
-# $Source: src/usr/mbox/makefile $
+# $Source: src/usr/mbox/makefile $
#
-# IBM CONFIDENTIAL
+# IBM CONFIDENTIAL
#
-# COPYRIGHT International Business Machines Corp. 2012
+# COPYRIGHT International Business Machines Corp. 2012,2013
#
-# p1
+# p1
#
-# Object Code Only (OCO) source materials
-# Licensed Internal Code Source Materials
-# IBM HostBoot Licensed Internal Code
+# Object Code Only (OCO) source materials
+# Licensed Internal Code Source Materials
+# IBM HostBoot Licensed Internal Code
#
-# The source code for this program is not published or other-
-# wise divested of its trade secrets, irrespective of what has
-# been deposited with the U.S. Copyright Office.
+# The source code for this program is not published or otherwise
+# divested of its trade secrets, irrespective of what has been
+# deposited with the U.S. Copyright Office.
#
-# Origin: 30
+# Origin: 30
#
-# IBM_PROLOG_END
+# IBM_PROLOG_END_TAG
ROOTPATH = ../../..
MODULE = mbox
-OBJS = mboxdd.o mailboxsp.o mbox_dma_buffer.o
+OBJS = mboxdd.o mailboxsp.o mbox_dma_buffer.o ipcSp.o
SUBDIRS = test.d
diff --git a/src/usr/runtime/populate_attributes.C b/src/usr/runtime/populate_attributes.C
index 961628dc2..21053101e 100644
--- a/src/usr/runtime/populate_attributes.C
+++ b/src/usr/runtime/populate_attributes.C
@@ -38,7 +38,9 @@
#include <runtime/runtime_reasoncodes.H>
#include <runtime/runtime.H>
#include "common/hsvc_attribute_structs.H"
-//#include <arch/ppc.H> //for MAGIC_INSTRUCTION
+#include <mbox/ipc_msg_types.H>
+#include <sys/task.h>
+#include <kernel/cpu.H> // for KERNEL_MAX_SUPPORTED_CPUS_PER_NODE
trace_desc_t *g_trac_runtime = NULL;
TRAC_INIT(&g_trac_runtime, "RUNTIME", KILOBYTE);
@@ -332,7 +334,7 @@ errlHndl_t populate_node_attributes( uint64_t i_nodeNum )
size_t node_data_size = 0;
errhdl = RUNTIME::get_host_data_section(
RUNTIME::HSVC_NODE_DATA,
- 0,
+ i_nodeNum,
node_data_addr,
node_data_size );
if( errhdl )
@@ -540,24 +542,111 @@ errlHndl_t populate_attributes( void )
errhdl = populate_system_attributes();
if( errhdl )
{
+ TRACFCOMP( g_trac_runtime, "populate_attributes failed" );
break;
}
- // Loop through all nodes
- for( TARGETING::TargetService::iterator it = TARGETING::targetService().begin();
- it != TARGETING::targetService().end(); ++it )
+ TARGETING::Target * sys = NULL;
+ TARGETING::targetService().getTopLevelTarget( sys );
+ assert(sys != NULL);
+
+ TARGETING::ATTR_HB_EXISTING_IMAGE_type hb_images =
+ sys->getAttr<TARGETING::ATTR_HB_EXISTING_IMAGE>();
+
+ // ATTR_HB_EXISTING_IMAGE only gets set on a multi-drawer system.
+ // Currently set up in host_sys_fab_iovalid_processing() which only
+ // gets called if there are multiple physical nodes. It eventually
+ // needs to be setup by a hb routine that snoops for multiple nodes.
+ if(hb_images == 0)
{
- if( (*it)->getAttr<TARGETING::ATTR_TYPE>() == TARGETING::TYPE_NODE )
+ // Single node system
+ errhdl = populate_node_attributes(0);
+
+ if(errhdl != NULL)
{
- //@todo: RTC:50866 : Need an attribute for node position
- errhdl = populate_node_attributes(0);
- if( errhdl )
+ TRACFCOMP( g_trac_runtime, "populate_node_attributes failed" );
+ }
+ break;
+ }
+
+ // continue - multi-node
+
+ // This msgQ catches the reponses to populate the attributes
+ msg_q_t msgQ = msg_q_create();
+ errhdl = MBOX::msgq_register(MBOX::HB_POP_ATTR_MSGQ,msgQ);
+
+ if(errhdl)
+ {
+ TRACFCOMP( g_trac_runtime, "MBOX::msgq_register failed!" );
+ break;
+ }
+
+
+ uint8_t node_map[8];
+
+ sys->tryGetAttr<TARGETING::ATTR_FABRIC_TO_PHYSICAL_NODE_MAP>(node_map);
+
+ uint64_t msg_count = 0;
+
+ // This is a multi-drawer system.
+ // The assertion is that the hostboot instance must be equal to
+ // the logical node we are running on. The ideal would be to have
+ // a function call that would return the HB instance number.
+ uint64_t this_node =
+ task_getcpuid()/KERNEL_MAX_SUPPORTED_CPUS_PER_NODE;
+
+
+ //loop though all possible drawers whether they exist or not
+ // An invalid or non-existant logical node number in that drawer
+ // indicates that the drawer does not exist.
+ for(uint64_t drawer = 0; drawer < sizeof(node_map); ++drawer)
+ {
+ uint64_t node = node_map[drawer];
+
+ if(node < (sizeof(TARGETING::ATTR_HB_EXISTING_IMAGE_type) * 8))
+ {
+
+ // set mask to msb
+ TARGETING::ATTR_HB_EXISTING_IMAGE_type mask = 0x1 <<
+ ((sizeof(TARGETING::ATTR_HB_EXISTING_IMAGE_type) * 8) -1);
+
+ if( 0 != ((mask >> node) & hb_images ) )
{
- break;
+ TRACDCOMP( g_trac_runtime,
+ "populate_attributes-sending msg for drawer %d",
+ drawer );
+ ++msg_count;
+ msg_t * msg = msg_allocate();
+ msg->type = IPC::IPC_POPULATE_ATTRIBUTES;
+ msg->data[0] = drawer; // offset in attribute table
+ msg->data[1] = this_node; // node to send a msg back to
+ errhdl = MBOX::send(MBOX::HB_IPC_MSGQ, msg, node);
+ if (errhdl)
+ {
+ TRACFCOMP( g_trac_runtime, "MBOX::send failed");
+ break;
+ }
}
+ }
+ }
+
+ if(errhdl == NULL)
+ {
+ // wait for all hb images to respond
+ while(msg_count)
+ {
+ msg_t* msg = msg_wait(msgQ);
+ TRACFCOMP( g_trac_runtime,
+ "populate node attributes. drawer %d completed.",
+ msg->data[0]);
+ msg_free(msg);
+ --msg_count;
}
}
+ MBOX::msgq_unregister(MBOX::HB_POP_ATTR_MSGQ);
+ msg_q_destroy(msgQ);
+
} while(0);
return errhdl;
diff --git a/src/usr/targeting/common/genHwsvMrwXml.pl b/src/usr/targeting/common/genHwsvMrwXml.pl
index b9a3e4e38..fb243d60d 100755
--- a/src/usr/targeting/common/genHwsvMrwXml.pl
+++ b/src/usr/targeting/common/genHwsvMrwXml.pl
@@ -1516,6 +1516,28 @@ sub generate_sys
<default>0b11</default>
</attribute>
";
+ # HDAT drawer number (physical node) to
+ # HostBoot Instance number (logical node) map
+ # Index is the hdat drawer number, value is the HB instance number
+ # Only the max drawer system needs to be represented.
+ if ($sysname eq "brazos")
+ {
+ print "
+ <!-- correlate HDAT drawer number to Hostboot Instance number -->
+ <attribute><id>FABRIC_TO_PHYSICAL_NODE_MAP</id>
+ <default>0,1,2,3,255,255,255,255</default>
+ </attribute>
+";
+ }
+ else # single drawer
+ {
+ print "
+ <!-- correlate HDAT drawer number to Hostboot Instance number -->
+ <attribute><id>FABRIC_TO_PHYSICAL_NODE_MAP</id>
+ <default>0,255,255,255,255,255,255,255</default>
+ </attribute>
+";
+ }
# call to do any fsp per-sys attributes
do_plugin('fsp_sys', $sys, $sysname, 0);
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index 52c6097c9..8a1ca787b 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -2070,6 +2070,35 @@
</hwpfToHbAttrMap>
</attribute>
+<attribute>
+ <id>FABRIC_TO_PHYSICAL_NODE_MAP</id>
+ <description>
+ Correlate HDAT node number (physical) to the logical node
+ (based on the PIR) that contains the host boot image.
+ </description>
+ <!-- 8 byte array. The index is the physical node number. The value
+ at that index is the hb instance number, based on the processor PIR, that
+ contains or would contain the host boot image if the drawer exists or were
+ to exist. Host boot uses this value and HB_HRMOR_NODAL_BASE to calculate
+ the HRMOR of the hostboot image for each drawer.
+ If the drawer does NOT physically exist then enter a logical node that
+ does NOT physically exist.
+
+ It's conceivable that there could be more than one logical node contained
+ in a physical drawer, if that is ever the case then the FSP would need to
+ modify this attribute to indicate which logical node contains the hostboot
+ image for each drawer. -->
+ <simpleType>
+ <uint8_t>
+ <!-- Default is for single node system -->
+ <default>0,255,255,255,255,255,255,255</default>
+ </uint8_t>
+ <array>8</array>
+ </simpleType>
+ <persistency>volatile</persistency>
+ <readable/>
+ <writeable/>
+</attribute>
<!-- TARGETING attributes to support mss_setup_bars and proc_setup_bars -->
diff --git a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
index 7c482fe61..2f81d543a 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
@@ -216,7 +216,6 @@
<writeable/>
<hbOnly/>
</attribute>
-
<attribute>
<id>IBSCOM_ENABLE_OVERRIDE</id>
<description>Used to force IBSCOM enabled for lab testing</description>
@@ -229,4 +228,20 @@
<readable/>
<hbOnly/>
</attribute>
+<attribute>
+ <id>HB_EXISTING_IMAGE</id>
+ <description>Indicates which logical nodes have a hostboot image.</description>
+ <!-- Bit position [0-7] (left to right) represents logical node.
+ '1' means the logical node has an active hostboot image.
+ -->
+ <simpleType>
+ <uint8_t>
+ <default>0</default>
+ </uint8_t>
+ </simpleType>
+ <persistency>volatile-zeroed</persistency>
+ <readable/>
+ <writeable/>
+ <hbOnly/>
+</attribute>
</attributes>
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index bd0b32b00..46a4c4131 100644
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -124,6 +124,7 @@
<attribute><id>L3_W_EPS</id></attribute>
<attribute><id>NOMINAL_FREQ_MHZ</id></attribute>
<attribute><id>MNFG_FLAGS</id></attribute>
+ <attribute><id>FABRIC_TO_PHYSICAL_NODE_MAP</id></attribute>
<!-- Start pm_plat_attributes.xml -->
<attribute><id>FREQ_CORE_MAX</id></attribute>
<attribute><id>PM_EXTERNAL_VRM_STEPDELAY</id></attribute>
diff --git a/src/usr/targeting/common/xmltohb/target_types_hb.xml b/src/usr/targeting/common/xmltohb/target_types_hb.xml
index f5c83b76e..05d032116 100644
--- a/src/usr/targeting/common/xmltohb/target_types_hb.xml
+++ b/src/usr/targeting/common/xmltohb/target_types_hb.xml
@@ -34,6 +34,7 @@
<attribute><id>IS_MPIPL_HB</id></attribute>
<attribute><id>IBSCOM_ENABLE_OVERRIDE</id></attribute>
<attribute><id>HB_MUTEX_TEST_LOCK</id></attribute>
+ <attribute><id>HB_EXISTING_IMAGE</id></attribute>
</targetTypeExtension>
<targetTypeExtension>
OpenPOWER on IntegriCloud