diff options
author | Doug Gilbert <dgilbert@us.ibm.com> | 2014-01-22 14:46:04 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-03-02 13:21:47 -0600 |
commit | 8e4ae1fa8e7378af70d0927068b5d27d3f3c8c68 (patch) | |
tree | 1a5c793c7951734662a15c1a71e4c0606e4a5295 /src/include | |
parent | ef737aaa136524bcc9fc9145a294bdea50d56fce (diff) | |
download | talos-hostboot-8e4ae1fa8e7378af70d0927068b5d27d3f3c8c68.tar.gz talos-hostboot-8e4ae1fa8e7378af70d0927068b5d27d3f3c8c68.zip |
Handle pending interrupts across nodes in mpipl
RTC: 80988
Change-Id: I7ef9feaa3d163d6956576f30538e2fe001e892a1
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8441
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/sys/internode.h | 58 | ||||
-rw-r--r-- | src/include/usr/intr/interrupt.H | 10 | ||||
-rw-r--r-- | src/include/usr/intr/intr_reasoncodes.H | 7 | ||||
-rw-r--r-- | src/include/usr/vmmconst.h | 12 |
4 files changed, 84 insertions, 3 deletions
diff --git a/src/include/sys/internode.h b/src/include/sys/internode.h new file mode 100644 index 000000000..3d4c6bf65 --- /dev/null +++ b/src/include/sys/internode.h @@ -0,0 +1,58 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/sys/internode.h $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2014 */ +/* */ +/* 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 __INTERNODE_H +#define __INTERNODE_H +// Memory area preserved on MPIPL + +#include <vmmconst.h> + +enum internode_info_vals_t +{ + MAX_NODES_PER_SYS = 8, +}; + +enum intr_mpipl_sync_t +{ + INTR_MPIPL_SYNC_CLEAR = 0, + INTR_MPIPL_UPSTREAM_DISABLED = 1, + INTR_MPIPL_DRAINED = 2, +}; + + +/** + * Node information needed across MPIPLs + */ +struct internode_info_t +{ + uint64_t eye_catcher; + uint64_t version; + bool exist[ MAX_NODES_PER_SYS ]; //!< true if HB node exists + volatile intr_mpipl_sync_t mpipl_intr_sync; //!< at sync point +}; + +#define NODE_INFO_EYE_CATCHER 0x4e4f444544415441ul // "NODEDATA" +#define NODE_INFO_VERSION 1 + +#define INTERNODE_INFO_SIZE (sizeof(internode_info_t)) + +#endif diff --git a/src/include/usr/intr/interrupt.H b/src/include/usr/intr/interrupt.H index f8dd202ac..b8ab621b2 100644 --- a/src/include/usr/intr/interrupt.H +++ b/src/include/usr/intr/interrupt.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2013 */ +/* COPYRIGHT International Business Machines Corp. 2011,2014 */ /* */ /* p1 */ /* */ @@ -145,6 +145,7 @@ namespace INTR MSG_INTR_ENABLE_PSI_INTR, //!< Enable PSI interrupts MSG_INTR_MPIPL_CLEANUP, //!< Clean up interrupts on MPIPL MSG_INTR_ADD_CPU_TIMEOUT, //!< Check for a timeout waiting for a core. + MSG_INTR_ADD_HBNODE, //!< Add node info for MPIPL }; /** @@ -212,6 +213,13 @@ namespace INTR uint64_t getIntpAddr(const TARGETING::Target * i_ex, uint8_t i_thread); + /** + * Indicate the existance of another HB node in the system + * @param[in] The HB instance number (HB node) + * @return error log handle on error + */ + errlHndl_t addHbNode(uint64_t i_hbNode); + }; #endif diff --git a/src/include/usr/intr/intr_reasoncodes.H b/src/include/usr/intr/intr_reasoncodes.H index 7965875b5..3cdce388d 100644 --- a/src/include/usr/intr/intr_reasoncodes.H +++ b/src/include/usr/intr/intr_reasoncodes.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2013 */ +/* COPYRIGHT International Business Machines Corp. 2011,2014 */ /* */ /* p1 */ /* */ @@ -37,6 +37,10 @@ namespace INTR MOD_INTRRP_REGISTERINTERRUPT = 0x05, /**< intrrp.C : IntrRp::registerInterrupt */ MOD_INTR_ENABLE_PSI_INTR = 0x06, /**< intrrp.C : INTR::enablePsiIntr */ MOD_INTR_INIT_XIVR = 0x07, /**< intrrp.C : INTR::initXIVR */ + MOD_INTR_INIT_MPIPLAREA = 0x08, /**< intrrp.C : IntrRp::initailizeMpiplSyncArea() */ + MOD_INTR_SYNC_NODES = 0x09, /**< intrrp.C : IntrRp::syncNodes() */ + MOD_INTR_SYNC_ADDNODE = 0x0A, /**< intrrp.C : IntrRp::addHbNodeToMpiplSyncArea */ + MOD_INTR_ADDHBNODE = 0x0B, /**< intrrp.C : INTR::addHbNode */ }; enum IntrReasonCode @@ -48,6 +52,7 @@ namespace INTR RC_BAD_ISN = INTR_COMP_ID | 0x05, //termination_rc RC_PERSISTENT_INTERRUPTS = INTR_COMP_ID | 0x06, + RC_CANNOT_MAP_MEMORY = INTR_COMP_ID | 0x07, }; }; diff --git a/src/include/usr/vmmconst.h b/src/include/usr/vmmconst.h index c93e62148..33586a4db 100644 --- a/src/include/usr/vmmconst.h +++ b/src/include/usr/vmmconst.h @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2013 */ +/* COPYRIGHT International Business Machines Corp. 2011,2014 */ /* */ /* p1 */ /* */ @@ -158,6 +158,16 @@ enum BlockPriority VMM_ALL_HOMER_OCC_MEMORY_SIZE) +/** Internode communication area outside of the HB image. + * Preserved between mpipl. + * + * @node There is one area per hostboot instance. + * Need to add (ATTR_HB_HRMOR_NODAL_BASE * hbinstance_num) to this + * address to get the physical address + */ +#define VMM_INTERNODE_PRESERVED_MEMORY_ADDR (96 * MEGABYTE) + + /** * Test Constants */ |