diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-Chassis-State-Transition-interface.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-Chassis-State-Transition-interface.patch
deleted file mode 100644
index 74f982b..0000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-Chassis-State-Transition-interface.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From a1f9d797753e32b36e08e7d611ff88b10e9bbad2 Mon Sep 17 00:00:00 2001
-From: "Jason M. Bills" <jason.m.bills@linux.intel.com>
-Date: Thu, 30 Jan 2020 16:18:33 -0800
-Subject: [PATCH 1/3] Add Chassis State Transition interface
-
-This adds the Chassis State Transition interface in preparation
-to support the mapping defined in the design document below.
-
-ref: https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/22358
-
-Tested:
-Ran each IPMI chassis control command to confirm the expected
-behavior:
-ipmitool power on: system is powered-on
-ipmitool power off: system is forced off
-ipmitool power cycle: system is forced off then powered-on
-ipmitool power reset: system is hard reset
-ipmitool power soft: soft power-off requested from system software
-
-Change-Id: I6acfb795a9a33ff5227a5d6e1830774ab732ac0c
-Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
----
- chassishandler.cpp | 33 +++++++++++++++++++++++++++++++++
- 1 file changed, 33 insertions(+)
-
-diff --git a/chassishandler.cpp b/chassishandler.cpp
-index 0d318647..fdbb9fa5 100644
---- a/chassishandler.cpp
-+++ b/chassishandler.cpp
-@@ -31,6 +31,7 @@
- #include <xyz/openbmc_project/Control/Boot/Mode/server.hpp>
- #include <xyz/openbmc_project/Control/Boot/Source/server.hpp>
- #include <xyz/openbmc_project/Control/Power/RestorePolicy/server.hpp>
-+#include <xyz/openbmc_project/State/Chassis/server.hpp>
- #include <xyz/openbmc_project/State/Host/server.hpp>
- #include <xyz/openbmc_project/State/PowerOnHours/server.hpp>
- 
-@@ -865,6 +866,38 @@ int initiate_state_transition(State::Host::Transition transition)
-     return rc;
- }
- 
-+//------------------------------------------
-+// Calls into Chassis State Manager Dbus object
-+//------------------------------------------
-+int initiateChassisStateTransition(State::Chassis::Transition transition)
-+{
-+    // OpenBMC Chassis State Manager dbus framework
-+    constexpr auto chassisStatePath = "/xyz/openbmc_project/state/chassis0";
-+    constexpr auto chassisStateIntf = "xyz.openbmc_project.State.Chassis";
-+
-+    auto service =
-+        ipmi::getService(*getSdBus(), chassisStateIntf, chassisStatePath);
-+
-+    // Convert to string equivalent of the passed in transition enum.
-+    auto request = State::convertForMessage(transition);
-+
-+    try
-+    {
-+        ipmi::setDbusProperty(*getSdBus(), service, chassisStatePath,
-+                              chassisStateIntf, "RequestedPowerTransition",
-+                              request);
-+    }
-+    catch (std::exception& e)
-+    {
-+        log<level::ERR>(
-+            "Failed to initiate transition",
-+            entry("EXCEPTION=%s, REQUEST=%s", e.what(), request.c_str()));
-+        return -1;
-+    }
-+
-+    return 0;
-+}
-+
- //------------------------------------------
- // Set Enabled property to inform NMI source
- // handling to trigger a NMI_OUT BSOD.
--- 
-2.21.0
-
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Fix-issues-and-support-signed-sensor-values.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Fix-issues-and-support-signed-sensor-values.patch
deleted file mode 100644
index 6d13f92..0000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Fix-issues-and-support-signed-sensor-values.patch
+++ /dev/null
@@ -1,169 +0,0 @@
-From 8ce91a760fca8c945540679c92770f841629e179 Mon Sep 17 00:00:00 2001
-From: Tony Lee <tony.lee@quantatw.com>
-Date: Thu, 31 Oct 2019 17:24:16 +0800
-Subject: [PATCH] Fix issues and support signed sensor values
-
-Sensor will get "disable" when the command "ipmitool sdr elist" is
-executed that if sensorReadingType is 0x6F.
-
-sensor_units_1 is always set to 0 currently. To support the display of
-signed sensor values, we add the attribute "sensorUnits1" to the sensor
-mapping yaml. This attribute can be used to determine whether the
-sensor is signed.
-
-It were making negative values 0 in get::readingData(). Fix the issue
-by using a int32_t and add an overflow check.
-
-Change-Id: I705defcf18805db9ada7d0de0738a59aedab61df
-Signed-off-by: Tony Lee <tony.lee@quantatw.com>
----
- include/ipmid/types.hpp      |  2 ++
- scripts/sensor-example.yaml  |  2 ++
- scripts/writesensor.mako.cpp |  2 ++
- sensordatahandler.cpp        |  2 --
- sensordatahandler.hpp        | 31 ++++++++++++++++++++++++++++---
- sensorhandler.cpp            |  5 ++---
- 6 files changed, 36 insertions(+), 8 deletions(-)
-
-diff --git a/include/ipmid/types.hpp b/include/ipmid/types.hpp
-index e62c8192..bd1fac2b 100644
---- a/include/ipmid/types.hpp
-+++ b/include/ipmid/types.hpp
-@@ -133,6 +133,7 @@ using Unit = std::string;
- using EntityType = uint8_t;
- using EntityInst = uint8_t;
- using SensorName = std::string;
-+using SensorUnits1 = uint8_t;
- 
- enum class Mutability
- {
-@@ -167,6 +168,7 @@ struct Info
-     Exponent exponentR;
-     bool hasScale;
-     Scale scale;
-+    SensorUnits1 sensorUnits1;
-     Unit unit;
-     std::function<uint8_t(SetSensorReadingReq&, const Info&)> updateFunc;
-     std::function<GetSensorResponse(const Info&)> getFunc;
-diff --git a/scripts/sensor-example.yaml b/scripts/sensor-example.yaml
-index 9760cd01..bddd2e6d 100644
---- a/scripts/sensor-example.yaml
-+++ b/scripts/sensor-example.yaml
-@@ -112,6 +112,8 @@
-   # Applies for analog sensors, the actual reading value for the sensor is
-   # Value * 10^N
-   scale: -3
-+  # Indicate Analog Data Format, Rate unit, Modifier unit and Percentage
-+  sensorUnits1 : 0x80
-   mutability: Mutability::Write|Mutability::Read
-   serviceInterface: org.freedesktop.DBus.Properties
-   readingType: readingData
-diff --git a/scripts/writesensor.mako.cpp b/scripts/writesensor.mako.cpp
-index 8b268052..813f9404 100644
---- a/scripts/writesensor.mako.cpp
-+++ b/scripts/writesensor.mako.cpp
-@@ -49,6 +49,7 @@ extern const IdInfoMap sensors = {
-        offsetB = sensor.get("offsetB", 0)
-        bExp = sensor.get("bExp", 0)
-        rExp = sensor.get("rExp", 0)
-+       sensorUnits1 = sensor.get("sensorUnits1", 0)
-        unit = sensor.get("unit", "")
-        scale = sensor.get("scale", 0)
-        hasScale = "true" if "scale" in sensor.keys() else "false"
-@@ -91,6 +92,7 @@ extern const IdInfoMap sensors = {
-         .exponentR = ${rExp},
-         .hasScale = ${hasScale},
-         .scale = ${scale},
-+        .sensorUnits1 = ${sensorUnits1},
-         .unit = "${unit}",
-         .updateFunc = ${updateFunc},
-         .getFunc = ${getFunc},
-diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp
-index 06f5f429..fc74b8f8 100644
---- a/sensordatahandler.cpp
-+++ b/sensordatahandler.cpp
-@@ -7,8 +7,6 @@
- #include <ipmid/types.hpp>
- #include <ipmid/utils.hpp>
- #include <optional>
--#include <phosphor-logging/elog-errors.hpp>
--#include <phosphor-logging/log.hpp>
- #include <sdbusplus/message/types.hpp>
- #include <xyz/openbmc_project/Common/error.hpp>
- 
-diff --git a/sensordatahandler.hpp b/sensordatahandler.hpp
-index 5cad58c5..c48140a3 100644
---- a/sensordatahandler.hpp
-+++ b/sensordatahandler.hpp
-@@ -8,6 +8,8 @@
- #include <ipmid/api.hpp>
- #include <ipmid/types.hpp>
- #include <ipmid/utils.hpp>
-+#include <phosphor-logging/elog-errors.hpp>
-+#include <phosphor-logging/log.hpp>
- #include <sdbusplus/message/types.hpp>
- 
- namespace ipmi
-@@ -28,6 +30,7 @@ using ServicePath = std::pair<Path, Service>;
- using Interfaces = std::vector<Interface>;
- 
- using MapperResponseType = std::map<Path, std::map<Service, Interfaces>>;
-+using namespace phosphor::logging;
- 
- /** @brief get the D-Bus service and service path
-  *  @param[in] bus - The Dbus bus object
-@@ -225,10 +228,32 @@ GetSensorResponse readingData(const Info& sensorInfo)
- 
-     double value = std::get<T>(propValue) *
-                    std::pow(10, sensorInfo.scale - sensorInfo.exponentR);
-+    int32_t rawData =
-+        (value - sensorInfo.scaledOffset) / sensorInfo.coefficientM;
- 
--    auto rawData = static_cast<uint8_t>((value - sensorInfo.scaledOffset) /
--                                        sensorInfo.coefficientM);
--    setReading(rawData, &response);
-+    constexpr uint8_t sensorUnitsSignedBits = 2 << 6;
-+    constexpr uint8_t signedDataFormat = 0x80;
-+    // if sensorUnits1 [7:6] = 10b, sensor is signed
-+    if ((sensorInfo.sensorUnits1 & sensorUnitsSignedBits) == signedDataFormat)
-+    {
-+        if (rawData > std::numeric_limits<int8_t>::max() ||
-+            rawData < std::numeric_limits<int8_t>::lowest())
-+        {
-+            log<level::ERR>("Value out of range");
-+            throw std::out_of_range("Value out of range");
-+        }
-+        setReading(static_cast<int8_t>(rawData), &response);
-+    }
-+    else
-+    {
-+        if (rawData > std::numeric_limits<uint8_t>::max() ||
-+            rawData < std::numeric_limits<uint8_t>::lowest())
-+        {
-+            log<level::ERR>("Value out of range");
-+            throw std::out_of_range("Value out of range");
-+        }
-+        setReading(static_cast<uint8_t>(rawData), &response);
-+    }
- 
-     return response;
- }
-diff --git a/sensorhandler.cpp b/sensorhandler.cpp
-index 36998715..260331a0 100644
---- a/sensorhandler.cpp
-+++ b/sensorhandler.cpp
-@@ -700,9 +700,8 @@ ipmi_ret_t populate_record_from_dbus(get_sdr::SensorDataFullRecordBody* body,
-     /* Functional sensor case */
-     if (isAnalogSensor(info->propertyInterfaces.begin()->first))
-     {
--
--        body->sensor_units_1 = 0; // unsigned, no rate, no modifier, not a %
--
-+        body->sensor_units_1 = info->sensorUnits1; // default is 0. unsigned, no
-+                                                   // rate, no modifier, not a %
-         /* Unit info */
-         setUnitFieldsForObject(info, body);
- 
--- 
-2.21.0
-
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Update-Host-State-Transition-function.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Update-Host-State-Transition-function.patch
deleted file mode 100644
index 156327b..0000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Update-Host-State-Transition-function.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From 8079e1e39e1953458bd2e59c7f546a3d879558db Mon Sep 17 00:00:00 2001
-From: "Jason M. Bills" <jason.m.bills@linux.intel.com>
-Date: Thu, 30 Jan 2020 16:02:39 -0800
-Subject: [PATCH 2/3] Update Host State Transition function
-
-This updates the Host State Transition function to use the new
-IPMI DBus APIs for transition requests.
-
-Tested:
-Ran each IPMI chassis control command to confirm the expected
-behavior:
-ipmitool power on: system is powered-on
-ipmitool power off: system is forced off
-ipmitool power cycle: system is forced off then powered-on
-ipmitool power reset: system is hard reset
-ipmitool power soft: soft power-off requested from system software
-
-Change-Id: Id2253a9c0060e892bc318dd02a6221ac1a2ae2d9
-Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
----
- chassishandler.cpp | 64 +++++++++++++---------------------------------
- 1 file changed, 18 insertions(+), 46 deletions(-)
-
-diff --git a/chassishandler.cpp b/chassishandler.cpp
-index fdbb9fa5..af9cba72 100644
---- a/chassishandler.cpp
-+++ b/chassishandler.cpp
-@@ -811,59 +811,31 @@ ipmi::RspType<> ipmiSetChassisCap(bool intrusion, bool fpLockout,
- //------------------------------------------
- // Calls into Host State Manager Dbus object
- //------------------------------------------
--int initiate_state_transition(State::Host::Transition transition)
-+int initiateHostStateTransition(State::Host::Transition transition)
- {
-     // OpenBMC Host State Manager dbus framework
--    constexpr auto HOST_STATE_MANAGER_ROOT = "/xyz/openbmc_project/state/host0";
--    constexpr auto HOST_STATE_MANAGER_IFACE = "xyz.openbmc_project.State.Host";
--    constexpr auto DBUS_PROPERTY_IFACE = "org.freedesktop.DBus.Properties";
--    constexpr auto PROPERTY = "RequestedHostTransition";
-+    constexpr auto hostStatePath = "/xyz/openbmc_project/state/host0";
-+    constexpr auto hostStateIntf = "xyz.openbmc_project.State.Host";
- 
--    // sd_bus error
--    int rc = 0;
--    char* busname = NULL;
--
--    // SD Bus error report mechanism.
--    sd_bus_error bus_error = SD_BUS_ERROR_NULL;
--
--    // Gets a hook onto either a SYSTEM or SESSION bus
--    sd_bus* bus_type = ipmid_get_sd_bus_connection();
--    rc = mapper_get_service(bus_type, HOST_STATE_MANAGER_ROOT, &busname);
--    if (rc < 0)
--    {
--        log<level::ERR>(
--            "Failed to get bus name",
--            entry("ERRNO=0x%X, OBJPATH=%s", -rc, HOST_STATE_MANAGER_ROOT));
--        return rc;
--    }
-+    auto service = ipmi::getService(*getSdBus(), hostStateIntf, hostStatePath);
- 
-     // Convert to string equivalent of the passed in transition enum.
-     auto request = State::convertForMessage(transition);
- 
--    rc = sd_bus_call_method(bus_type,                // On the system bus
--                            busname,                 // Service to contact
--                            HOST_STATE_MANAGER_ROOT, // Object path
--                            DBUS_PROPERTY_IFACE,     // Interface name
--                            "Set",                   // Method to be called
--                            &bus_error,              // object to return error
--                            nullptr,                 // Response buffer if any
--                            "ssv",                   // Takes 3 arguments
--                            HOST_STATE_MANAGER_IFACE, PROPERTY, "s",
--                            request.c_str());
--    if (rc < 0)
-+    try
-     {
--        log<level::ERR>("Failed to initiate transition",
--                        entry("ERRNO=0x%X, REQUEST=%s", -rc, request.c_str()));
-+        ipmi::setDbusProperty(*getSdBus(), service, hostStatePath,
-+                              hostStateIntf, "RequestedHostTransition",
-+                              request);
-     }
--    else
-+    catch (std::exception& e)
-     {
--        log<level::INFO>("Transition request initiated successfully");
-+        log<level::ERR>(
-+            "Failed to initiate transition",
-+            entry("EXCEPTION=%s, REQUEST=%s", e.what(), request.c_str()));
-+        return -1;
-     }
--
--    sd_bus_error_free(&bus_error);
--    free(busname);
--
--    return rc;
-+    return 0;
- }
- 
- //------------------------------------------
-@@ -1411,7 +1383,7 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
-     switch (chassisControl)
-     {
-         case CMD_POWER_ON:
--            rc = initiate_state_transition(State::Host::Transition::On);
-+            rc = initiateHostStateTransition(State::Host::Transition::On);
-             break;
-         case CMD_POWER_OFF:
-             // This path would be hit in 2 conditions.
-@@ -1439,7 +1411,7 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
-                 indicate_no_softoff_needed();
- 
-                 // Now request the shutdown
--                rc = initiate_state_transition(State::Host::Transition::Off);
-+                rc = initiateHostStateTransition(State::Host::Transition::Off);
-             }
-             else
-             {
-@@ -1460,12 +1432,12 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
-             // originating via a soft power off SMS request)
-             indicate_no_softoff_needed();
- 
--            rc = initiate_state_transition(State::Host::Transition::Reboot);
-+            rc = initiateHostStateTransition(State::Host::Transition::Reboot);
-             break;
- 
-         case CMD_SOFT_OFF_VIA_OVER_TEMP:
-             // Request Host State Manager to do a soft power off
--            rc = initiate_state_transition(State::Host::Transition::Off);
-+            rc = initiateHostStateTransition(State::Host::Transition::Off);
-             break;
- 
-         case CMD_PULSE_DIAGNOSTIC_INTR:
--- 
-2.21.0
-
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Update-IPMI-Chassis-Control-command-transition-reque.patch b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Update-IPMI-Chassis-Control-command-transition-reque.patch
deleted file mode 100644
index 271af3f..0000000
--- a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Update-IPMI-Chassis-Control-command-transition-reque.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-From 291629d5c3e5bea31925c9d025688897c90eb783 Mon Sep 17 00:00:00 2001
-From: "Jason M. Bills" <jason.m.bills@linux.intel.com>
-Date: Thu, 30 Jan 2020 16:22:24 -0800
-Subject: [PATCH 3/3] Update IPMI Chassis Control command transition requests
-
-This change updates the IPMI Chassis Control command to use the new
-host state transitions and chassis off transition based on the
-mapping in the design document below.  This allows each chassis
-control action to more closely follow the behavior defined in the
-IPMI spec.
-
-ref: https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/22358
-
-Tested:
-Ran each IPMI chassis control command to confirm the expected
-behavior:
-ipmitool power on: system is powered-on using Host.On
-ipmitool power off: system is forced off using Chassis.Off
-ipmitool power cycle: system is forced off then powered-on using
-                      Host.Reboot
-ipmitool power reset: system is hard reset using Host.ForceWarmReboot
-ipmitool power soft: soft power-off requested from system software
-                     using Host.Off
-
-Change-Id: Ieb42722102fde0e51a49dc4aaa3ff227a3394066
-Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
----
- chassishandler.cpp | 121 ++-------------------------------------------
- 1 file changed, 5 insertions(+), 116 deletions(-)
-
-diff --git a/chassishandler.cpp b/chassishandler.cpp
-index af9cba72..663081de 100644
---- a/chassishandler.cpp
-+++ b/chassishandler.cpp
-@@ -1301,76 +1301,6 @@ ipmi::RspType<uint4_t, // Restart Cause
-     return ipmi::responseSuccess(cause.value(), reserved, channel);
- }
- 
--//-------------------------------------------------------------
--// Send a command to SoftPowerOff application to stop any timer
--//-------------------------------------------------------------
--int stop_soft_off_timer()
--{
--    constexpr auto iface = "org.freedesktop.DBus.Properties";
--    constexpr auto soft_off_iface = "xyz.openbmc_project.Ipmi.Internal."
--                                    "SoftPowerOff";
--
--    constexpr auto property = "ResponseReceived";
--    constexpr auto value = "xyz.openbmc_project.Ipmi.Internal."
--                           "SoftPowerOff.HostResponse.HostShutdown";
--
--    // Get the system bus where most system services are provided.
--    auto bus = ipmid_get_sd_bus_connection();
--
--    // Get the service name
--    // TODO openbmc/openbmc#1661 - Mapper refactor
--    //
--    // See openbmc/openbmc#1743 for some details but high level summary is that
--    // for now the code will directly call the soft off interface due to a
--    // race condition with mapper usage
--    //
--    // char *busname = nullptr;
--    // auto r = mapper_get_service(bus, SOFTOFF_OBJPATH, &busname);
--    // if (r < 0)
--    //{
--    //    fprintf(stderr, "Failed to get %s bus name: %s\n",
--    //            SOFTOFF_OBJPATH, -r);
--    //    return r;
--    //}
--
--    // No error object or reply expected.
--    int rc = sd_bus_call_method(bus, SOFTOFF_BUSNAME, SOFTOFF_OBJPATH, iface,
--                                "Set", nullptr, nullptr, "ssv", soft_off_iface,
--                                property, "s", value);
--    if (rc < 0)
--    {
--        log<level::ERR>("Failed to set property in SoftPowerOff object",
--                        entry("ERRNO=0x%X", -rc));
--    }
--
--    // TODO openbmc/openbmc#1661 - Mapper refactor
--    // free(busname);
--    return rc;
--}
--
--//----------------------------------------------------------------------
--// Create file to indicate there is no need for softoff notification to host
--//----------------------------------------------------------------------
--void indicate_no_softoff_needed()
--{
--    fs::path path{HOST_INBAND_REQUEST_DIR};
--    if (!fs::is_directory(path))
--    {
--        fs::create_directory(path);
--    }
--
--    // Add the host instance (default 0 for now) to the file name
--    std::string file{HOST_INBAND_REQUEST_FILE};
--    auto size = std::snprintf(nullptr, 0, file.c_str(), 0);
--    size++; // null
--    std::unique_ptr<char[]> buf(new char[size]);
--    std::snprintf(buf.get(), size, file.c_str(), 0);
--
--    // Append file name to directory and create it
--    path /= buf.get();
--    std::ofstream(path.c_str());
--}
--
- /** @brief Implementation of chassis control command
-  *
-  *  @param - chassisControl command byte
-@@ -1386,60 +1316,19 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
-             rc = initiateHostStateTransition(State::Host::Transition::On);
-             break;
-         case CMD_POWER_OFF:
--            // This path would be hit in 2 conditions.
--            // 1: When user asks for power off using ipmi chassis command 0x04
--            // 2: Host asking for power off post shutting down.
--
--            // If it's a host requested power off, then need to nudge Softoff
--            // application that it needs to stop the watchdog timer if running.
--            // If it is a user requested power off, then this is not really
--            // needed. But then we need to differentiate between user and host
--            // calling this same command
--
--            // For now, we are going ahead with trying to nudge the soft off and
--            // interpret the failure to do so as a non softoff case
--            rc = stop_soft_off_timer();
--
--            // Only request the Off transition if the soft power off
--            // application is not running
--            if (rc < 0)
--            {
--                // First create a file to indicate to the soft off application
--                // that it should not run. Not doing this will result in State
--                // manager doing a default soft power off when asked for power
--                // off.
--                indicate_no_softoff_needed();
--
--                // Now request the shutdown
--                rc = initiateHostStateTransition(State::Host::Transition::Off);
--            }
--            else
--            {
--                log<level::INFO>("Soft off is running, so let shutdown target "
--                                 "stop the host");
--            }
-+            rc =
-+                initiateChassisStateTransition(State::Chassis::Transition::Off);
-             break;
--
-         case CMD_HARD_RESET:
-+            rc = initiateHostStateTransition(
-+                State::Host::Transition::ForceWarmReboot);
-+            break;
-         case CMD_POWER_CYCLE:
--            // SPEC has a section that says certain implementations can trigger
--            // PowerOn if power is Off when a command to power cycle is
--            // requested
--
--            // First create a file to indicate to the soft off application
--            // that it should not run since this is a direct user initiated
--            // power reboot request (i.e. a reboot request that is not
--            // originating via a soft power off SMS request)
--            indicate_no_softoff_needed();
--
-             rc = initiateHostStateTransition(State::Host::Transition::Reboot);
-             break;
--
-         case CMD_SOFT_OFF_VIA_OVER_TEMP:
--            // Request Host State Manager to do a soft power off
-             rc = initiateHostStateTransition(State::Host::Transition::Off);
-             break;
--
-         case CMD_PULSE_DIAGNOSTIC_INTR:
-             rc = setNmiProperty(true);
-             break;
--- 
-2.21.0
-
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
index af5fb13..78fa570 100644
--- a/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
+++ b/meta-quanta/meta-gbs/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
@@ -1,12 +1,7 @@
 DEPENDS_append_gbs = " gbs-yaml-config"
 
 FILESEXTRAPATHS_prepend_gbs := "${THISDIR}/${PN}:"
-SRC_URI_append_gbs = " file://gbs-ipmid-whitelist.conf \
-                       file://0001-Add-Chassis-State-Transition-interface.patch \
-                       file://0002-Update-Host-State-Transition-function.patch \
-                       file://0003-Update-IPMI-Chassis-Control-command-transition-reque.patch \
-                       file://0001-Fix-issues-and-support-signed-sensor-values.patch \
-                     "
+SRC_URI_append_gbs = " file://gbs-ipmid-whitelist.conf"
 
 WHITELIST_CONF_gbs = "${WORKDIR}/gbs-ipmid-whitelist.conf"
 
