meta-quanta: gbs: add YAML paths/whitelist config/watchdog patch

1. set gbs YAML config paths for sensors and FRUs
2. add gbs IPMI whitelist config
3. add pre-timeout interrupt patch for IPMI watchdog commands

Signed-off-by: George Hung <george.hung@quantatw.com>
Change-Id: Iacd5942fa056810aca5fd765b50fb7da6581fc96
diff --git a/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch b/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch
new file mode 100644
index 0000000..d815cde
--- /dev/null
+++ b/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch
@@ -0,0 +1,138 @@
+From 9deb72959477700216326c033c930236e58f965f Mon Sep 17 00:00:00 2001
+From: Ren Yu <yux.ren@intel.com>
+Date: Tue, 28 May 2019 17:11:17 +0800
+Subject: [PATCH] Save the pre-timeout interrupt in dbus property
+
+Get the watchdog pre-timeout interrupt value from ipmi watchdog set command,
+and store it into dbus property.
+
+Tested:
+Config IPMI watchdog: BIOS FRB2 Power Cycle after 1 seconds:
+ipmitool raw 0x06 0x24 0x01 0x13 0x0 0x2 0xa 0x00
+Start watchdog:
+Ipmitool mc watchdog reset
+Check the watchdog pre-timeout interrupt in below:
+https://BMCIP/redfish/v1/Systems/system/LogServices/EventLog/Entries
+
+Signed-off-by: Ren Yu <yux.ren@intel.com>
+
+---
+ app/watchdog.cpp         | 47 ++++++++++++++++++++++++++++++++++++++++
+ app/watchdog_service.cpp |  6 +++++
+ app/watchdog_service.hpp |  9 ++++++++
+ 3 files changed, 62 insertions(+)
+
+diff --git a/app/watchdog.cpp b/app/watchdog.cpp
+index 03c373e..cb0b1fd 100644
+--- a/app/watchdog.cpp
++++ b/app/watchdog.cpp
+@@ -80,6 +80,7 @@ ipmi::RspType<> ipmiAppResetWatchdogTimer()
+ 
+ static constexpr uint8_t wd_dont_stop = 0x1 << 6;
+ static constexpr uint8_t wd_timeout_action_mask = 0x3;
++static constexpr uint8_t wdPreTimeoutInterruptMask = 0x3;
+ 
+ static constexpr uint8_t wdTimerUseResTimer1 = 0x0;
+ static constexpr uint8_t wdTimerUseResTimer2 = 0x6;
+@@ -127,6 +128,45 @@ WatchdogService::Action ipmiActionToWdAction(IpmiAction ipmi_action)
+     }
+ }
+ 
++enum class IpmiPreTimeoutInterrupt : uint8_t
++{
++    None = 0x0,
++    SMI = 0x1,
++    NMI = 0x2,
++    MI = 0x3,
++};
++/** @brief Converts an IPMI Watchdog PreTimeoutInterrupt to DBUS defined action
++ *  @param[in] ipmi_action The IPMI Watchdog PreTimeoutInterrupt
++ *  @return The Watchdog PreTimeoutInterrupt that the ipmi_action maps to
++ */
++WatchdogService::PreTimeoutInterruptAction ipmiPreTimeoutInterruptToWdAction(
++    IpmiPreTimeoutInterrupt ipmiPreTimeOutInterrupt)
++{
++    switch (ipmiPreTimeOutInterrupt)
++    {
++        case IpmiPreTimeoutInterrupt::None:
++        {
++            return WatchdogService::PreTimeoutInterruptAction::None;
++        }
++        case IpmiPreTimeoutInterrupt::SMI:
++        {
++            return WatchdogService::PreTimeoutInterruptAction::SMI;
++        }
++        case IpmiPreTimeoutInterrupt::NMI:
++        {
++            return WatchdogService::PreTimeoutInterruptAction::NMI;
++        }
++        case IpmiPreTimeoutInterrupt::MI:
++        {
++            return WatchdogService::PreTimeoutInterruptAction::MI;
++        }
++        default:
++        {
++            throw std::domain_error("IPMI PreTimeoutInterrupt is invalid");
++        }
++    }
++}
++
+ enum class IpmiTimerUse : uint8_t
+ {
+     Reserved = 0x0,
+@@ -250,6 +290,13 @@ ipmi::RspType<>
+         // Mark as initialized so that future resets behave correctly
+         wd_service.setInitialized(true);
+ 
++        // pretimeOutAction
++        const auto ipmiPreTimeoutInterrupt =
++            static_cast<IpmiPreTimeoutInterrupt>(wdPreTimeoutInterruptMask &
++                (static_cast<uint8_t>(preTimeoutInterrupt)));
++        wd_service.setPreTimeoutInterrupt(
++            ipmiPreTimeoutInterruptToWdAction(ipmiPreTimeoutInterrupt));
++
+         lastCallSuccessful = true;
+         return ipmi::responseSuccess();
+     }
+diff --git a/app/watchdog_service.cpp b/app/watchdog_service.cpp
+index 3534e89..4df1ab6 100644
+--- a/app/watchdog_service.cpp
++++ b/app/watchdog_service.cpp
+@@ -198,3 +198,9 @@ void WatchdogService::setInterval(uint64_t interval)
+ {
+     setProperty("Interval", interval);
+ }
++
++void WatchdogService::setPreTimeoutInterrupt(
++    PreTimeoutInterruptAction preTimeoutInterrupt)
++{
++    setProperty("PreTimeoutInterrupt", convertForMessage(preTimeoutInterrupt));
++}
+\ No newline at end of file
+diff --git a/app/watchdog_service.hpp b/app/watchdog_service.hpp
+index 141bdb7..32b7461 100644
+--- a/app/watchdog_service.hpp
++++ b/app/watchdog_service.hpp
+@@ -15,6 +15,8 @@ class WatchdogService
+ 
+     using Action =
+         sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action;
++    using PreTimeoutInterruptAction = sdbusplus::xyz::openbmc_project::State::
++        server::Watchdog::PreTimeoutInterruptAction;
+     using TimerUse =
+         sdbusplus::xyz::openbmc_project::State::server::Watchdog::TimerUse;
+ 
+@@ -92,6 +94,13 @@ class WatchdogService
+      */
+     void setInterval(uint64_t interval);
+ 
++    /** @brief Sets the value of the PreTimeoutInterrupt property on the host
++     * watchdog
++     *
++     *  @param[in] PreTimeoutInterrupt - The new PreTimeoutInterrupt value
++     */
++    void setPreTimeoutInterrupt(PreTimeoutInterruptAction preTimeoutInterrupt);
++
+   private:
+     /** @brief sdbusplus handle */
+     sdbusplus::bus::bus bus;