summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0004-Standardize-watchdog-redfish-format-according-to-EPS.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0004-Standardize-watchdog-redfish-format-according-to-EPS.patch')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0004-Standardize-watchdog-redfish-format-according-to-EPS.patch211
1 files changed, 211 insertions, 0 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0004-Standardize-watchdog-redfish-format-according-to-EPS.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0004-Standardize-watchdog-redfish-format-according-to-EPS.patch
new file mode 100644
index 000000000..578fa1257
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0004-Standardize-watchdog-redfish-format-according-to-EPS.patch
@@ -0,0 +1,211 @@
+From 3bead6316f653f14773e65b2f6b8facb08f200e7 Mon Sep 17 00:00:00 2001
+From: Ren Yu <yux.ren@intel.com>
+Date: Fri, 9 Aug 2019 14:54:13 +0800
+Subject: [PATCH] Standardize watchdog redfish format according to EPS
+
+According to EPS and test requirement, change the messageArgs
+in redfish about watchdog action and pre-interrupt action and
+add timer user display.
+
+Tested:
+Set a watchdog (Timer action and pre-interrupt action both are none).
+ ipmitool raw 0x06 0x24 0x05 0x00 0x00 0x00 0x30 0x00
+Get the watchdog.
+ ipmitool mc watchdog get
+Start the watchdog.
+ ipmitool mc watchdog reset
+When timer expired, check messageArgs in Redfish with below url:
+https://IP/redfish/v1/Systems/system/LogServices/EventLog/Entries.
+
+ "Message": "Host Watchdog Event: Power Cycle - System power cycle due to Watchdog timeout. timer use: SMS/OS",
+ "MessageArgs": [
+ "Power Cycle - System power cycle due to Watchdog timeout. timer use: SMS/OS"
+ ],
+
+ "Message": "Host Watchdog Event: Timer interrupt - Messaging Interrupt due to Watchdog timeout. timer use: OEM",
+ "MessageArgs": [
+ "Timer interrupt - Messaging Interrupt due to Watchdog timeout. timer use: OEM"
+ ],
+
+Signed-off-by: Ren Yu <yux.ren@intel.com>
+---
+ watchdog.cpp | 127 +++++++++++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 89 insertions(+), 38 deletions(-)
+
+diff --git a/watchdog.cpp b/watchdog.cpp
+index bdf65da..7cfcc75 100644
+--- a/watchdog.cpp
++++ b/watchdog.cpp
+@@ -25,25 +25,28 @@ const static constexpr char* currentPowerState = "CurrentPowerState";
+ const static constexpr char* powerStatusOff =
+ "xyz.openbmc_project.State.Chassis.PowerState.Off";
+
+-const static constexpr char* powerActionHardReset =
+- "xyz.openbmc_project.State.Watchdog.Action.HardReset";
+-const static constexpr char* powerActionOff =
+- "xyz.openbmc_project.State.Watchdog.Action.PowerOff";
+-const static constexpr char* powerActionPowerCycle =
+- "xyz.openbmc_project.State.Watchdog.Action.PowerCycle";
+-const static constexpr char* powerActionNone =
+- "xyz.openbmc_project.State.Watchdog.Action.None";
+-const static constexpr char* preInterruptNoAction =
+- "xyz.openbmc_project.State.Watchdog.PreTimeoutInterruptAction.None";
+-
+-const static constexpr char* hardResteDescription =
+- "Hard Reset - System reset due to Watchdog timeout";
++const static constexpr char* actionDescription = " due to Watchdog timeout";
++const static constexpr char* hardResetDescription = "Hard Reset - System reset";
+ const static constexpr char* powerOffDescription =
+- "Power Down - System power down due to Watchdog timeout";
++ "Power Down - System power down";
+ const static constexpr char* powerCycleDescription =
+- "Power Cycle - System power cycle due to Watchdog timeout";
++ "Power Cycle - System power cycle";
+ const static constexpr char* timerExpiredDescription = "Timer expired";
+-const static constexpr char* preInterruptDescription = "Timer interrupt";
++
++const static constexpr char* preInterruptActionNone =
++ "xyz.openbmc_project.State.Watchdog.PreTimeoutInterruptAction.None";
++
++const static constexpr char* preInterruptDescriptionSMI = "SMI";
++const static constexpr char* preInterruptDescriptionNMI = "NMI";
++const static constexpr char* preInterruptDescriptionMI = "Messaging Interrupt";
++
++const static constexpr char* reservedDescription = "Reserved";
++
++const static constexpr char* timerUseDescriptionBIOSFRB2 = "BIOS FRB2";
++const static constexpr char* timerUseDescriptionBIOSPOST = "BIOS/POST";
++const static constexpr char* timerUseDescriptionOSLoad = "OSLoad";
++const static constexpr char* timerUseDescriptionSMSOS = "SMS/OS";
++const static constexpr char* timerUseDescriptionOEM = "OEM";
+
+ namespace restart
+ {
+@@ -161,54 +164,102 @@ uint64_t Watchdog::interval(uint64_t value)
+ void Watchdog::timeOutHandler()
+ {
+ PreTimeoutInterruptAction preTimeoutInterruptAction = preTimeoutInterrupt();
++ std::string preInterruptActionMessageArgs{};
++
+ Action action = expireAction();
+ std::string actionMessageArgs{};
+
++ expiredTimerUse(currentTimerUse());
++
++ TimerUse timeUser = expiredTimerUse();
++ std::string timeUserMessage{};
++
+ if (!this->enabled())
+ {
+ action = fallback->action;
+ }
+
+- if (convertForMessage(action) == powerActionHardReset)
+- {
+- actionMessageArgs = hardResteDescription;
+- }
+- else if (convertForMessage(action) == powerActionOff)
+- {
+- actionMessageArgs = powerOffDescription;
+- }
+- else if (convertForMessage(action) == powerActionPowerCycle)
++ switch (timeUser)
+ {
+- actionMessageArgs = powerCycleDescription;
++ case Watchdog::TimerUse::BIOSFRB2:
++ timeUserMessage = timerUseDescriptionBIOSFRB2;
++ break;
++ case Watchdog::TimerUse::BIOSPOST:
++ timeUserMessage = timerUseDescriptionBIOSPOST;
++ break;
++ case Watchdog::TimerUse::OSLoad:
++ timeUserMessage = timerUseDescriptionOSLoad;
++ break;
++ case Watchdog::TimerUse::SMSOS:
++ timeUserMessage = timerUseDescriptionSMSOS;
++ break;
++ case Watchdog::TimerUse::OEM:
++ timeUserMessage = timerUseDescriptionOEM;
++ break;
++ default:
++ timeUserMessage = reservedDescription;
++ break;
+ }
+- else if (convertForMessage(action) == powerActionNone)
+- {
+- actionMessageArgs = timerExpiredDescription;
+- }
+- else
++
++ switch (action)
+ {
+- actionMessageArgs = "Reserved";
++ case Watchdog::Action::HardReset:
++ actionMessageArgs = std::string(hardResetDescription) +
++ std::string(actionDescription);
++ break;
++ case Watchdog::Action::PowerOff:
++ actionMessageArgs = std::string(powerOffDescription) +
++ std::string(actionDescription);
++ break;
++ case Watchdog::Action::PowerCycle:
++ actionMessageArgs = std::string(powerCycleDescription) +
++ std::string(actionDescription);
++ break;
++ case Watchdog::Action::None:
++ actionMessageArgs = timerExpiredDescription;
++ break;
++ default:
++ actionMessageArgs = reservedDescription;
++ break;
+ }
+
+ // Log into redfish event log
+ sd_journal_send("MESSAGE=IPMIWatchdog: Timed out ACTION=%s",
+ convertForMessage(action).c_str(), "PRIORITY=%i", LOG_INFO,
+ "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.IPMIWatchdog",
+- "REDFISH_MESSAGE_ARGS=%s", actionMessageArgs.c_str(), NULL);
++ "REDFISH_MESSAGE_ARGS=%s. timer use: %s",
++ actionMessageArgs.c_str(), timeUserMessage.c_str(), NULL);
++
++ switch (preTimeoutInterruptAction)
++ {
++ case Watchdog::PreTimeoutInterruptAction::SMI:
++ preInterruptActionMessageArgs = preInterruptDescriptionSMI;
++ break;
++ case Watchdog::PreTimeoutInterruptAction::NMI:
++ preInterruptActionMessageArgs = preInterruptDescriptionNMI;
++ break;
++ case Watchdog::PreTimeoutInterruptAction::MI:
++ preInterruptActionMessageArgs = preInterruptDescriptionMI;
++ break;
++ default:
++ preInterruptActionMessageArgs = reservedDescription;
++ break;
++ }
+
+- if (preInterruptNoAction != convertForMessage(preTimeoutInterruptAction))
++ if (preInterruptActionNone != convertForMessage(preTimeoutInterruptAction))
+ {
+ preTimeoutInterruptOccurFlag(true);
+
+ sd_journal_send("MESSAGE=IPMIWatchdog: Pre Timed out Interrupt=%s",
+ convertForMessage(preTimeoutInterruptAction).c_str(),
+ "PRIORITY=%i", LOG_INFO, "REDFISH_MESSAGE_ID=%s",
+- "OpenBMC.0.1.IPMIWatchdog", "REDFISH_MESSAGE_ARGS=%s",
+- preInterruptDescription, NULL);
++ "OpenBMC.0.1.IPMIWatchdog",
++ "REDFISH_MESSAGE_ARGS=Timer interrupt - %s due to "
++ "Watchdog timeout. timer use: %s",
++ preInterruptActionMessageArgs.c_str(),
++ timeUserMessage.c_str(), NULL);
+ }
+
+- expiredTimerUse(currentTimerUse());
+-
+ auto target = actionTargetMap.find(action);
+ if (target == actionTargetMap.end())
+ {
+--
+2.7.4
+