summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
authorDoug Gilbert <dgilbert@us.ibm.com>2014-01-22 14:46:04 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-03-02 13:21:47 -0600
commit8e4ae1fa8e7378af70d0927068b5d27d3f3c8c68 (patch)
tree1a5c793c7951734662a15c1a71e4c0606e4a5295 /src/include
parentef737aaa136524bcc9fc9145a294bdea50d56fce (diff)
downloadtalos-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.h58
-rw-r--r--src/include/usr/intr/interrupt.H10
-rw-r--r--src/include/usr/intr/intr_reasoncodes.H7
-rw-r--r--src/include/usr/vmmconst.h12
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
*/
OpenPOWER on IntegriCloud