summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCamVan Nguyen <ctnguyen@us.ibm.com>2012-11-18 18:20:40 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-12-04 06:59:34 -0600
commit55ba79e454fc989c561ee5f58435bf610f01dead (patch)
tree20335a310e411e77fd74650756ade3816d258e6f /src
parentfb4ba1a1d81d050354d29ce16c047ed2028ca2c4 (diff)
downloadtalos-hostboot-55ba79e454fc989c561ee5f58435bf610f01dead.tar.gz
talos-hostboot-55ba79e454fc989c561ee5f58435bf610f01dead.zip
Update IPL flow for MPIPL mode
Change-Id: I185ab08b59ca0b76bf72246de82b5b8d32b60b14 RTC: 51687 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/2382 Tested-by: Jenkins Server Reviewed-by: Mark W. Wenning <wenning@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/initservice/initsvcstructs.H13
-rw-r--r--src/include/usr/isteps/istep06list.H13
-rw-r--r--src/include/usr/isteps/istep07list.H7
-rw-r--r--src/include/usr/isteps/istep08list.H9
-rw-r--r--src/include/usr/isteps/istep09list.H3
-rw-r--r--src/include/usr/isteps/istep10list.H15
-rw-r--r--src/include/usr/isteps/istep11list.H11
-rw-r--r--src/include/usr/isteps/istep12list.H4
-rw-r--r--src/include/usr/isteps/istep13list.H12
-rw-r--r--src/include/usr/isteps/istep14list.H9
-rw-r--r--src/include/usr/isteps/istep15list.H4
-rw-r--r--src/include/usr/isteps/istep16list.H4
-rw-r--r--src/include/usr/isteps/istep18list.H11
-rw-r--r--src/include/usr/isteps/istep21list.H4
-rw-r--r--src/usr/initservice/istepdispatcher/istepWorker.C30
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.C39
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.H18
17 files changed, 206 insertions, 0 deletions
diff --git a/src/include/usr/initservice/initsvcstructs.H b/src/include/usr/initservice/initsvcstructs.H
index 58038bc22..2f2a4024f 100644
--- a/src/include/usr/initservice/initsvcstructs.H
+++ b/src/include/usr/initservice/initsvcstructs.H
@@ -106,6 +106,16 @@ enum ModuleType
EXT_IMAGE,
};
+/**
+ * @enum IplOpType
+ * bitmap indicating whether the task is an op in certain IPL modes.
+ */
+enum IplOpType
+{
+ IPL_NOOP = 0x00,
+ NORMAL_IPL_OP = 0x01,
+ MPIPL_OP = 0x02,
+};
/**
* @struct TaskFlags
@@ -119,6 +129,9 @@ struct TaskFlags
{
TaskType task_type; // task execution flags
ModuleType module_type; // BASE_IMAGE or EXT_IMAGE
+ uint8_t ipl_op; // bitmap of IplOpType enum
+ // indicating whether task
+ // is an op in certain IPL modes.
};
diff --git a/src/include/usr/isteps/istep06list.H b/src/include/usr/isteps/istep06list.H
index 2a23fe81c..29f354026 100644
--- a/src/include/usr/isteps/istep06list.H
+++ b/src/include/usr/isteps/istep06list.H
@@ -67,6 +67,7 @@ const TaskInfo g_istep06[] = {
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
{
@@ -75,6 +76,7 @@ const TaskInfo g_istep06[] = {
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
{
@@ -83,6 +85,7 @@ const TaskInfo g_istep06[] = {
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -92,6 +95,7 @@ const TaskInfo g_istep06[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
{
@@ -100,6 +104,7 @@ const TaskInfo g_istep06[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
{
@@ -108,6 +113,7 @@ const TaskInfo g_istep06[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
{
@@ -116,6 +122,7 @@ const TaskInfo g_istep06[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
{
@@ -124,6 +131,7 @@ const TaskInfo g_istep06[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -132,6 +140,7 @@ const TaskInfo g_istep06[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -140,6 +149,7 @@ const TaskInfo g_istep06[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -149,6 +159,7 @@ const TaskInfo g_istep06[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -158,6 +169,7 @@ const TaskInfo g_istep06[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -166,6 +178,7 @@ const TaskInfo g_istep06[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep07list.H b/src/include/usr/isteps/istep07list.H
index 44dd0083f..73b4875a6 100644
--- a/src/include/usr/isteps/istep07list.H
+++ b/src/include/usr/isteps/istep07list.H
@@ -69,6 +69,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
{
@@ -77,6 +78,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -86,6 +88,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -96,6 +99,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -106,6 +110,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -116,6 +121,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -126,6 +132,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep08list.H b/src/include/usr/isteps/istep08list.H
index 54b90aeab..d3565a9ee 100644
--- a/src/include/usr/isteps/istep08list.H
+++ b/src/include/usr/isteps/istep08list.H
@@ -73,6 +73,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -82,6 +83,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -92,6 +94,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -102,6 +105,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -112,6 +116,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -122,6 +127,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -132,6 +138,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -142,6 +149,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -152,6 +160,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep09list.H b/src/include/usr/isteps/istep09list.H
index 55ceaba80..8ad4354b4 100644
--- a/src/include/usr/isteps/istep09list.H
+++ b/src/include/usr/isteps/istep09list.H
@@ -62,6 +62,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -71,6 +72,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -79,6 +81,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep10list.H b/src/include/usr/isteps/istep10list.H
index 8b287e679..6d955fa73 100644
--- a/src/include/usr/isteps/istep10list.H
+++ b/src/include/usr/isteps/istep10list.H
@@ -82,6 +82,7 @@ const TaskInfo g_istep10[] = {
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
{
@@ -90,6 +91,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -99,6 +101,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -107,6 +110,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -115,6 +119,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -123,6 +128,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -131,6 +137,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -139,6 +146,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -147,6 +155,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -155,6 +164,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -163,6 +173,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -171,6 +182,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -179,6 +191,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -187,6 +200,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -196,6 +210,7 @@ const TaskInfo g_istep10[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep11list.H b/src/include/usr/isteps/istep11list.H
index 142f8308a..7e24e61d9 100644
--- a/src/include/usr/isteps/istep11list.H
+++ b/src/include/usr/isteps/istep11list.H
@@ -76,6 +76,7 @@ const TaskInfo g_istep11[] = {
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
{
@@ -84,6 +85,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
{
@@ -92,6 +94,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
{
@@ -100,6 +103,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
{
@@ -108,6 +112,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
{
@@ -116,6 +121,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
{
@@ -124,6 +130,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
{
@@ -132,6 +139,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
{
@@ -140,6 +148,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
{
@@ -148,6 +157,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
{
@@ -156,6 +166,7 @@ const TaskInfo g_istep11[] = {
{
START_FN, // task type
EXT_IMAGE, // Extended Module
+ NORMAL_IPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep12list.H b/src/include/usr/isteps/istep12list.H
index 28d2d5b02..d5cdd1f78 100644
--- a/src/include/usr/isteps/istep12list.H
+++ b/src/include/usr/isteps/istep12list.H
@@ -62,6 +62,7 @@ const TaskInfo g_istep12[] = {
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -71,6 +72,7 @@ const TaskInfo g_istep12[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -79,6 +81,7 @@ const TaskInfo g_istep12[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -87,6 +90,7 @@ const TaskInfo g_istep12[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep13list.H b/src/include/usr/isteps/istep13list.H
index 5f4a627d9..a72e3afcd 100644
--- a/src/include/usr/isteps/istep13list.H
+++ b/src/include/usr/isteps/istep13list.H
@@ -78,6 +78,7 @@ const TaskInfo g_istep13[] = {
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -87,6 +88,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -95,6 +97,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -103,6 +106,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -111,6 +115,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -119,6 +124,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -127,6 +133,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -135,6 +142,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -143,6 +151,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -151,6 +160,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -159,6 +169,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -167,6 +178,7 @@ const TaskInfo g_istep13[] = {
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep14list.H b/src/include/usr/isteps/istep14list.H
index 6ab917036..eca3251e5 100644
--- a/src/include/usr/isteps/istep14list.H
+++ b/src/include/usr/isteps/istep14list.H
@@ -73,6 +73,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -82,6 +83,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -92,6 +94,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
{
@@ -100,6 +103,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -110,6 +114,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -120,6 +125,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -130,6 +136,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP,
}
},
@@ -140,6 +147,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
{
@@ -148,6 +156,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ MPIPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep15list.H b/src/include/usr/isteps/istep15list.H
index 661ab204a..df9ed5f3c 100644
--- a/src/include/usr/isteps/istep15list.H
+++ b/src/include/usr/isteps/istep15list.H
@@ -63,6 +63,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -72,6 +73,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
{
@@ -80,6 +82,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
{
@@ -88,6 +91,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep16list.H b/src/include/usr/isteps/istep16list.H
index d1c978bab..fef1983cf 100644
--- a/src/include/usr/isteps/istep16list.H
+++ b/src/include/usr/isteps/istep16list.H
@@ -63,6 +63,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -72,6 +73,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
@@ -82,6 +84,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
@@ -92,6 +95,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep18list.H b/src/include/usr/isteps/istep18list.H
index 324fcaa39..c3771b19f 100644
--- a/src/include/usr/isteps/istep18list.H
+++ b/src/include/usr/isteps/istep18list.H
@@ -59,6 +59,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -68,6 +69,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -77,6 +79,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -86,6 +89,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -96,6 +100,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -105,6 +110,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -114,6 +120,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -123,6 +130,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
{
@@ -132,6 +140,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
{
@@ -141,6 +150,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
{
@@ -149,6 +159,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ NORMAL_IPL_OP | MPIPL_OP,
}
},
diff --git a/src/include/usr/isteps/istep21list.H b/src/include/usr/isteps/istep21list.H
index 2212ec181..d1f848f98 100644
--- a/src/include/usr/isteps/istep21list.H
+++ b/src/include/usr/isteps/istep21list.H
@@ -63,6 +63,7 @@ namespace INITSERVICE
{
NONE,
EXT_IMAGE,
+ IPL_NOOP,
}
},
@@ -72,6 +73,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ MPIPL_OP | NORMAL_IPL_OP,
}
},
{
@@ -80,6 +82,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ MPIPL_OP | NORMAL_IPL_OP,
}
},
{
@@ -88,6 +91,7 @@ namespace INITSERVICE
{
START_FN,
EXT_IMAGE,
+ MPIPL_OP | NORMAL_IPL_OP,
}
},
diff --git a/src/usr/initservice/istepdispatcher/istepWorker.C b/src/usr/initservice/istepdispatcher/istepWorker.C
index 85970047b..3ebbe6722 100644
--- a/src/usr/initservice/istepdispatcher/istepWorker.C
+++ b/src/usr/initservice/istepdispatcher/istepWorker.C
@@ -47,6 +47,7 @@
#include "istep_mbox_msgs.H"
#include "istepWorker.H"
+#include "istepdispatcher.H"
// ----- namespace INITSERVICE -------------------------------------------
namespace INITSERVICE
@@ -221,6 +222,9 @@ const TaskInfo * findTaskInfo( const uint32_t i_IStep,
// default return is NULL
const TaskInfo *l_pistep = NULL;
+ // Cache the ipl mode since it doesn't change during an IPL
+ static bool l_mpipl_mode = IStepDispatcher::getTheInstance().isMpiplMode();
+
// apply filters
do
{
@@ -277,6 +281,32 @@ const TaskInfo * findTaskInfo( const uint32_t i_IStep,
break;
}
+ // check to see if we should skip this istep
+ // This is possible depending on which IPL mode we're in
+ uint8_t l_ipl_op = g_isteps[i_IStep].pti[i_SubStep].taskflags.ipl_op;
+ if (true == l_mpipl_mode)
+ {
+ if (!(l_ipl_op & MPIPL_OP))
+ {
+ TRACDCOMP( g_trac_initsvc,
+ "Skipping IStep %d SubStep %d for MPIPL mode",
+ i_IStep,
+ i_SubStep );
+ break;
+ }
+ }
+ else
+ {
+ if (!(l_ipl_op & NORMAL_IPL_OP))
+ {
+ TRACDCOMP( g_trac_initsvc,
+ "Skipping IStep %d SubStep %d for non MPIPL mode",
+ i_IStep,
+ i_SubStep );
+ break;
+ }
+ }
+
// we're good, set the istep & return it to caller
l_pistep = &( g_isteps[i_IStep].pti[i_SubStep] );
} while( 0 );
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C
index f22eb1db6..4ab29b806 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.C
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C
@@ -108,6 +108,11 @@ IStepDispatcher::IStepDispatcher ()
iv_curIStep = 0x0;
iv_curSubStep = 0x0;
iv_sync = false;
+
+ // Save flag indicating whether we're in MPIPL mode
+ iv_mpipl_mode = checkMpiplMode();
+ TRACFCOMP( g_trac_initsvc, "MPIPL mode = %u",
+ iv_mpipl_mode );
// init mailbox / message Q.
iv_msgQ = msg_q_create();
@@ -915,4 +920,38 @@ bool IStepDispatcher::spLess ( void )
}
+// ----------------------------------------------------------------------------
+// IStepDispatcher::checkMpiplMode()
+// ----------------------------------------------------------------------------
+bool IStepDispatcher::checkMpiplMode( ) const
+{
+ using namespace TARGETING;
+ Target* l_pTopLevel = NULL;
+ bool l_isMpiplMode = false;
+ TargetService& l_targetService = targetService();
+
+ (void)l_targetService.getTopLevelTarget( l_pTopLevel );
+ if( l_pTopLevel == NULL )
+ {
+ TRACFCOMP( g_trac_initsvc,
+ "Top level handle was NULL" );
+ l_isMpiplMode = false;
+ }
+ else
+ {
+ l_isMpiplMode = l_pTopLevel->getAttr<ATTR_IS_MPIPL> ();
+ }
+
+ return l_isMpiplMode;
+}
+
+
+// ----------------------------------------------------------------------------
+// IStepDispatcher::isMpiplMode()
+// ----------------------------------------------------------------------------
+bool IStepDispatcher::isMpiplMode( ) const
+{
+ return iv_mpipl_mode;
+}
+
} // namespace
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.H b/src/usr/initservice/istepdispatcher/istepdispatcher.H
index b3eba4c67..91d5c1503 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.H
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.H
@@ -172,6 +172,14 @@ public:
void getIstepInfo ( uint8_t & o_iStep,
uint8_t & o_subStep );
+ /**
+ * @brief This function will return whether or not we are in MPIPL mode
+ *
+ * @return bool - flag indicating whether we're in MPIPL mode
+ * @retval false if not in MPIPL mode
+ * true if in MPIPL mode
+ */
+ bool isMpiplMode( void ) const;
protected:
@@ -276,6 +284,15 @@ private:
* @return bool - whether we are SPLESS.
*/
bool spLess ( void );
+
+ /**
+ * @brief This function will check whether or not we are in MPIPL mode
+ *
+ * @return bool - flag indicating whether we're in MPIPL mode
+ * @retval false if not in MPIPL mode
+ * true if in MPIPL mode
+ */
+ bool checkMpiplMode ( void ) const;
// ----- internal vars -----------------------------
@@ -287,6 +304,7 @@ private:
uint8_t iv_curIStep;
uint8_t iv_curSubStep;
bool iv_sync;
+ bool iv_mpipl_mode; //flag indicating whether we're in MPIPL mode
msg_q_t iv_msgQ;
msg_t* iv_workerMsg; // More work Needed Msg from Worker
msg_t* iv_Msg; // All other Msgs that need to be saved
OpenPOWER on IntegriCloud