blob: dc80e92953a8cd43c209713e375fe92d427c0980 [file] [log] [blame]
Andrew Geisslerff7983f2015-03-01 09:39:29 -06001From c8c9edd25a04a8ff1974fd75e27a3b24b71030fc Mon Sep 17 00:00:00 2001
2From: Mike Baiocchi <baiocchi@us.ibm.com>
3Date: Fri, 27 Feb 2015 13:55:34 -0600
4Subject: [PATCH 6/7] Update Shutdown Path for SBE Updates
5
6This change will do the following:
7-- Flush out a console message to alert the user that the system is
8 shutting down to perform a SBE Update.
9-- Set the watchdog timer to 15 seconds before shutting down.
10-- Set the watchdog timer to NO_ACTIONS such that the boot count
11 sensor will handle the re-IPL.
12
13Change-Id: I3e8ca07030e50a56cd8bafc514bab036e3fdab96
14RTC: 120734
15(cherry picked from commit 20163b32e98f40e9346863e5954184958acc9af5)
16---
17 src/include/usr/ipmi/ipmiwatchdog.H | 1 +
18 src/usr/sbe/sbe_resolve_sides.C | 33 +++++++++++++++++++++++++--------
19 src/usr/sbe/sbe_resolve_sides.H | 4 ++++
20 src/usr/sbe/sbe_update.C | 14 ++++++++++++++
21 4 files changed, 44 insertions(+), 8 deletions(-)
22
23diff --git a/src/include/usr/ipmi/ipmiwatchdog.H b/src/include/usr/ipmi/ipmiwatchdog.H
24index f23b771..62840ce 100644
25--- a/src/include/usr/ipmi/ipmiwatchdog.H
26+++ b/src/include/usr/ipmi/ipmiwatchdog.H
27@@ -79,6 +79,7 @@ enum TIMER_USE
28 */
29 enum TIMER_ACTIONS
30 {
31+ NO_ACTIONS = 0x00, // all bits
32 PRE_TIMEOUT_INT_SMI = 0x10, // bit 4
33 PRE_TIMEOUT_INT_NMI = 0x20, // bit 5
34 PRE_TIMEOUT_INT_MSG = 0x30, // bits 4 & 5
35diff --git a/src/usr/sbe/sbe_resolve_sides.C b/src/usr/sbe/sbe_resolve_sides.C
36index df9958d..90217b6 100644
37--- a/src/usr/sbe/sbe_resolve_sides.C
38+++ b/src/usr/sbe/sbe_resolve_sides.C
39@@ -40,6 +40,7 @@
40 #include <sys/misc.h>
41 #include <hwas/common/deconfigGard.H>
42 #include <initservice/initserviceif.H>
43+#include <console/consoleif.H>
44 #include <config.h>
45 #include <ipmi/ipmiwatchdog.H>
46 #include <ipmi/ipmisensor.H>
47@@ -285,7 +286,20 @@ errlHndl_t resolveProcessorSbeSeeproms()
48 l_restartNeeded);
49
50 #ifdef CONFIG_BMC_IPMI
51- sbePreShutdownIpmiCalls();
52+ sbePreShutdownIpmiCalls();
53+#endif
54+
55+#ifdef CONFIG_CONSOLE
56+ #ifdef CONFIG_BMC_IPMI
57+ CONSOLE::displayf(SBE_COMP_NAME, "System Shutting Down In %d "
58+ "Seconds To Perform SBE Update\n",
59+ SET_WD_TIMER_IN_SECS);
60+ #else
61+ CONSOLE::displayf(SBE_COMP_NAME, "System Shutting Down To "
62+ "Perform SBE Update\n");
63+ #endif
64+
65+ CONSOLE::flush();
66 #endif
67
68 TRACFCOMP( g_trac_sbe,
69@@ -1276,7 +1290,6 @@ errlHndl_t resolveImageHBBaddr(TARGETING::Target* i_target,
70 void sbePreShutdownIpmiCalls( void )
71 {
72 errlHndl_t err = NULL;
73-
74 TRACFCOMP( g_trac_sbe, ENTER_MRK"sbePreShutdownIpmiCalls");
75
76 do{
77@@ -1328,13 +1341,17 @@ void sbePreShutdownIpmiCalls( void )
78 }
79
80 // @todo RTC 124679 - Remove Once BMC Monitors Shutdown Attention
81- // Set Watchdog Timer To 10 seconds
82- const uint16_t SET_WD_TIMER_10_SECS = 10;
83+ // Set Watchdog Timer before calling doShutdown()
84 TRACFCOMP( g_trac_sbe,"sbePreShutdownIpmiCalls: "
85 "Set Watch Dog Timer To %d Seconds",
86- SET_WD_TIMER_10_SECS);
87-
88- err = IPMIWATCHDOG::setWatchDogTimer(SET_WD_TIMER_10_SECS);
89+ SET_WD_TIMER_IN_SECS);
90+
91+ err = IPMIWATCHDOG::setWatchDogTimer(
92+ SET_WD_TIMER_IN_SECS, // new time
93+ static_cast<uint8_t>
94+ (IPMIWATCHDOG::DO_NOT_STOP |
95+ IPMIWATCHDOG::BIOS_FRB2), // default
96+ IPMIWATCHDOG::NO_ACTIONS); // boot count reset
97 if(err)
98 {
99 TRACFCOMP( g_trac_sbe,
100@@ -1342,7 +1359,7 @@ void sbePreShutdownIpmiCalls( void )
101 "FAIL Setting Watch Dog Timer to %d seconds. "
102 "Committing Error Log rc=0x%.4X eid=0x%.8X "
103 "plid=0x%.8X, but continuing shutdown",
104- SET_WD_TIMER_10_SECS,
105+ SET_WD_TIMER_IN_SECS,
106 err->reasonCode(),
107 err->eid(),
108 err->plid());
109diff --git a/src/usr/sbe/sbe_resolve_sides.H b/src/usr/sbe/sbe_resolve_sides.H
110index 42f727a..d7c1f7c 100644
111--- a/src/usr/sbe/sbe_resolve_sides.H
112+++ b/src/usr/sbe/sbe_resolve_sides.H
113@@ -50,6 +50,10 @@ namespace SBE
114 { EEPROM::SBE_PRIMARY,
115 EEPROM::SBE_BACKUP };
116
117+ // @todo RTC 124679 - Remove Once BMC Monitors Shutdown Attention
118+ // Set Watchdog Timer To 15 seconds before calling doShutdown()
119+ const uint16_t SET_WD_TIMER_IN_SECS = 15;
120+
121 /******************************************/
122 /* Enums */
123 /******************************************/
124diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C
125index 562798b..a20c1a8 100644
126--- a/src/usr/sbe/sbe_update.C
127+++ b/src/usr/sbe/sbe_update.C
128@@ -46,6 +46,7 @@
129 #include <sys/msg.h>
130 #include <hwas/common/deconfigGard.H>
131 #include <initservice/initserviceif.H>
132+#include <console/consoleif.H>
133 #include <config.h>
134 #include <sbe/sbeif.H>
135 #include <sbe/sbereasoncodes.H>
136@@ -371,6 +372,19 @@ namespace SBE
137 sbePreShutdownIpmiCalls();
138 #endif
139
140+#ifdef CONFIG_CONSOLE
141+ #ifdef CONFIG_BMC_IPMI
142+ CONSOLE::displayf(SBE_COMP_NAME, "System Shutting Down In %d "
143+ "Seconds To Perform SBE Update\n",
144+ SET_WD_TIMER_IN_SECS);
145+ #else
146+ CONSOLE::displayf(SBE_COMP_NAME, "System Shutting Down To "
147+ "Perform SBE Update\n");
148+ #endif
149+
150+ CONSOLE::flush();
151+#endif
152+
153 TRACFCOMP( g_trac_sbe,
154 INFO_MRK"updateProcessorSbeSeeproms(): Calling "
155 "INITSERVICE::doShutdown() with "
156--
1571.7.4.1
158