diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/include/usr/hbotcompid.H | 8 | ||||
-rw-r--r-- | src/include/usr/mbox/ipc_msg_types.H | 39 | ||||
-rw-r--r-- | src/include/usr/mbox/ipc_reasoncodes.H | 42 | ||||
-rw-r--r-- | src/include/usr/mbox/mbox_queues.H | 2 | ||||
-rw-r--r-- | src/include/usr/runtime/runtime.H | 7 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C | 30 | ||||
-rw-r--r-- | src/usr/mbox/ipcSp.C | 164 | ||||
-rw-r--r-- | src/usr/mbox/ipcSp.H | 85 | ||||
-rw-r--r-- | src/usr/mbox/mailboxsp.C | 3 | ||||
-rw-r--r-- | src/usr/mbox/makefile | 30 | ||||
-rw-r--r-- | src/usr/runtime/populate_attributes.C | 109 | ||||
-rwxr-xr-x | src/usr/targeting/common/genHwsvMrwXml.pl | 22 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/attribute_types.xml | 29 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/attribute_types_hb.xml | 17 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/target_types.xml | 1 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/target_types_hb.xml | 1 |
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> |