diff --git a/app.cpp b/app.cpp
index 1d0ece3..18453bb 100644
--- a/app.cpp
+++ b/app.cpp
@@ -1,14 +1,15 @@
 #include "config.h"
 
-#include "elog-errors.hpp"
 #include "occ_events.hpp"
 #include "occ_manager.hpp"
 #include "utils.hpp"
+
 #ifdef POWER10
 #include "powermode.hpp"
 #endif
 
 #include <org/open_power/OCC/Device/error.hpp>
+#include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
diff --git a/elog-errors.hpp b/elog-errors.hpp
deleted file mode 100644
index 7c937a5..0000000
--- a/elog-errors.hpp
+++ /dev/null
@@ -1,1656 +0,0 @@
-// This file was autogenerated.  Do not edit!
-// See elog-gen.py for more details
-#pragma once
-
-#include <phosphor-logging/elog.hpp>
-#include <phosphor-logging/log.hpp>
-#include <sdbusplus/exception.hpp>
-
-#include <string>
-#include <tuple>
-#include <type_traits>
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Error
-{
-struct Timeout;
-} // namespace Error
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace Error
-{
-struct GPIO;
-} // namespace Error
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Error
-{
-struct InvalidArgument;
-} // namespace Error
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace org
-{
-namespace open_power
-{
-namespace OCC
-{
-namespace Device
-{
-namespace Error
-{
-struct WriteFailure;
-} // namespace Error
-} // namespace Device
-} // namespace OCC
-} // namespace open_power
-} // namespace org
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace State
-{
-namespace Host
-{
-namespace Error
-{
-struct SoftOffTimeout;
-} // namespace Error
-} // namespace Host
-} // namespace State
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace Error
-{
-struct Inventory;
-} // namespace Error
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace Error
-{
-struct IIC;
-} // namespace Error
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace File
-{
-namespace Error
-{
-struct Open;
-} // namespace Error
-} // namespace File
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Error
-{
-struct InternalFailure;
-} // namespace Error
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace Error
-{
-struct Device;
-} // namespace Error
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Control
-{
-namespace Device
-{
-namespace Error
-{
-struct WriteFailure;
-} // namespace Error
-} // namespace Device
-} // namespace Control
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Sensor
-{
-namespace Device
-{
-namespace Error
-{
-struct ReadFailure;
-} // namespace Error
-} // namespace Device
-} // namespace Sensor
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace File
-{
-namespace Error
-{
-struct Seek;
-} // namespace Error
-} // namespace File
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace org
-{
-namespace open_power
-{
-namespace OCC
-{
-namespace Device
-{
-namespace Error
-{
-struct ConfigFailure;
-} // namespace Error
-} // namespace Device
-} // namespace OCC
-} // namespace open_power
-} // namespace org
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace org
-{
-namespace open_power
-{
-namespace OCC
-{
-namespace Device
-{
-namespace Error
-{
-struct OpenFailure;
-} // namespace Error
-} // namespace Device
-} // namespace OCC
-} // namespace open_power
-} // namespace org
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace Error
-{
-struct IPMISensor;
-} // namespace Error
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace org
-{
-namespace open_power
-{
-namespace OCC
-{
-namespace Device
-{
-namespace Error
-{
-struct ReadFailure;
-} // namespace Error
-} // namespace Device
-} // namespace OCC
-} // namespace open_power
-} // namespace org
-} // namespace sdbusplus
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Control
-{
-namespace Host
-{
-namespace Error
-{
-struct CommandNotSupported;
-} // namespace Error
-} // namespace Host
-} // namespace Control
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
-namespace phosphor
-{
-
-namespace logging
-{
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Control
-{
-namespace Host
-{
-namespace _CommandNotSupported
-{} // namespace _CommandNotSupported
-
-struct CommandNotSupported
-{
-    static constexpr auto L = level::ERR;
-    using metadata_types = std::tuple<>;
-};
-
-} // namespace Host
-} // namespace Control
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Control::Host::Error::CommandNotSupported>
-{
-    using type = xyz::openbmc_project::Control::Host::CommandNotSupported;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace _Timeout
-{
-
-struct TIMEOUT_IN_MSEC
-{
-    static constexpr auto str = "TIMEOUT_IN_MSEC=%llu";
-    static constexpr auto str_short = "TIMEOUT_IN_MSEC";
-    using type = std::tuple<std::decay_t<decltype(str)>, uint64_t>;
-    explicit constexpr TIMEOUT_IN_MSEC(uint64_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _Timeout
-
-struct Timeout
-{
-    static constexpr auto L = level::ERR;
-    using TIMEOUT_IN_MSEC = _Timeout::TIMEOUT_IN_MSEC;
-    using metadata_types = std::tuple<TIMEOUT_IN_MSEC>;
-};
-
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::Error::Timeout>
-{
-    using type = xyz::openbmc_project::Common::Timeout;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace _InternalFailure
-{} // namespace _InternalFailure
-
-struct InternalFailure
-{
-    static constexpr auto L = level::ERR;
-    using metadata_types = std::tuple<>;
-};
-
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure>
-{
-    using type = xyz::openbmc_project::Common::InternalFailure;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace _InvalidArgument
-{
-
-struct ARGUMENT_NAME
-{
-    static constexpr auto str = "ARGUMENT_NAME=%s";
-    static constexpr auto str_short = "ARGUMENT_NAME";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr ARGUMENT_NAME(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct ARGUMENT_VALUE
-{
-    static constexpr auto str = "ARGUMENT_VALUE=%s";
-    static constexpr auto str_short = "ARGUMENT_VALUE";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr ARGUMENT_VALUE(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _InvalidArgument
-
-struct InvalidArgument
-{
-    static constexpr auto L = level::ERR;
-    using ARGUMENT_NAME = _InvalidArgument::ARGUMENT_NAME;
-    using ARGUMENT_VALUE = _InvalidArgument::ARGUMENT_VALUE;
-    using metadata_types = std::tuple<ARGUMENT_NAME, ARGUMENT_VALUE>;
-};
-
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument>
-{
-    using type = xyz::openbmc_project::Common::InvalidArgument;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace File
-{
-namespace _Open
-{
-
-struct ERRNO
-{
-    static constexpr auto str = "ERRNO=%d";
-    static constexpr auto str_short = "ERRNO";
-    using type = std::tuple<std::decay_t<decltype(str)>, int32_t>;
-    explicit constexpr ERRNO(int32_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct PATH
-{
-    static constexpr auto str = "PATH=%s";
-    static constexpr auto str_short = "PATH";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr PATH(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _Open
-
-struct Open
-{
-    static constexpr auto L = level::ERR;
-    using ERRNO = _Open::ERRNO;
-    using PATH = _Open::PATH;
-    using metadata_types = std::tuple<ERRNO, PATH>;
-};
-
-} // namespace File
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::File::Error::Open>
-{
-    using type = xyz::openbmc_project::Common::File::Open;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace File
-{
-namespace _Seek
-{
-
-struct OFFSET
-{
-    static constexpr auto str = "OFFSET=%ll";
-    static constexpr auto str_short = "OFFSET";
-    using type = std::tuple<std::decay_t<decltype(str)>, int64_t>;
-    explicit constexpr OFFSET(int64_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct WHENCE
-{
-    static constexpr auto str = "WHENCE=%d";
-    static constexpr auto str_short = "WHENCE";
-    using type = std::tuple<std::decay_t<decltype(str)>, int32_t>;
-    explicit constexpr WHENCE(int32_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct ERRNO
-{
-    static constexpr auto str = "ERRNO=%d";
-    static constexpr auto str_short = "ERRNO";
-    using type = std::tuple<std::decay_t<decltype(str)>, int32_t>;
-    explicit constexpr ERRNO(int32_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct PATH
-{
-    static constexpr auto str = "PATH=%s";
-    static constexpr auto str_short = "PATH";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr PATH(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _Seek
-
-struct Seek
-{
-    static constexpr auto L = level::ERR;
-    using OFFSET = _Seek::OFFSET;
-    using WHENCE = _Seek::WHENCE;
-    using ERRNO = _Seek::ERRNO;
-    using PATH = _Seek::PATH;
-    using metadata_types = std::tuple<OFFSET, WHENCE, ERRNO, PATH>;
-};
-
-} // namespace File
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::File::Error::Seek>
-{
-    using type = xyz::openbmc_project::Common::File::Seek;
-};
-
-} // namespace details
-
-namespace example
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Example
-{
-namespace Elog
-{
-namespace _TestErrorTwo
-{
-
-struct DEV_ADDR
-{
-    static constexpr auto str = "DEV_ADDR=0x%.8X";
-    static constexpr auto str_short = "DEV_ADDR";
-    using type = std::tuple<std::decay_t<decltype(str)>, uint32_t>;
-    explicit constexpr DEV_ADDR(uint32_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct DEV_ID
-{
-    static constexpr auto str = "DEV_ID=%u";
-    static constexpr auto str_short = "DEV_ID";
-    using type = std::tuple<std::decay_t<decltype(str)>, uint32_t>;
-    explicit constexpr DEV_ID(uint32_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct DEV_NAME
-{
-    static constexpr auto str = "DEV_NAME=%s";
-    static constexpr auto str_short = "DEV_NAME";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr DEV_NAME(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _TestErrorTwo
-
-struct TestErrorTwo : public sdbusplus::exception_t
-{
-    static constexpr auto errName =
-        "example.xyz.openbmc_project.Example.Elog.TestErrorTwo";
-    static constexpr auto errDesc = "This is test error two";
-    static constexpr auto L = level::ERR;
-    using DEV_ADDR = _TestErrorTwo::DEV_ADDR;
-    using DEV_ID = _TestErrorTwo::DEV_ID;
-    using DEV_NAME = _TestErrorTwo::DEV_NAME;
-    using metadata_types = std::tuple<DEV_ADDR, DEV_ID, DEV_NAME>;
-
-    const char* name() const noexcept
-    {
-        return errName;
-    }
-
-    const char* description() const noexcept
-    {
-        return errDesc;
-    }
-
-    const char* what() const noexcept
-    {
-        return errName;
-    }
-};
-
-} // namespace Elog
-} // namespace Example
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace example
-
-namespace example
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Example
-{
-namespace Elog
-{
-namespace _AutoTestSimple
-{
-
-struct STRING
-{
-    static constexpr auto str = "STRING=%s";
-    static constexpr auto str_short = "STRING";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr STRING(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _AutoTestSimple
-
-struct AutoTestSimple : public sdbusplus::exception_t
-{
-    static constexpr auto errName =
-        "example.xyz.openbmc_project.Example.Elog.AutoTestSimple";
-    static constexpr auto errDesc = "This is a simple test error.";
-    static constexpr auto L = level::ERR;
-    using STRING = _AutoTestSimple::STRING;
-    using metadata_types = std::tuple<STRING>;
-
-    const char* name() const noexcept
-    {
-        return errName;
-    }
-
-    const char* description() const noexcept
-    {
-        return errDesc;
-    }
-
-    const char* what() const noexcept
-    {
-        return errName;
-    }
-};
-
-} // namespace Elog
-} // namespace Example
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace example
-
-namespace example
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Example
-{
-namespace Device
-{
-namespace _Callout
-{
-
-struct CALLOUT_ERRNO_TEST
-{
-    static constexpr auto str = "CALLOUT_ERRNO_TEST=%d";
-    static constexpr auto str_short = "CALLOUT_ERRNO_TEST";
-    using type = std::tuple<std::decay_t<decltype(str)>, int32_t>;
-    explicit constexpr CALLOUT_ERRNO_TEST(int32_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct CALLOUT_DEVICE_PATH_TEST
-{
-    static constexpr auto str = "CALLOUT_DEVICE_PATH_TEST=%s";
-    static constexpr auto str_short = "CALLOUT_DEVICE_PATH_TEST";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr CALLOUT_DEVICE_PATH_TEST(const char* a) :
-        _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _Callout
-
-struct Callout : public sdbusplus::exception_t
-{
-    static constexpr auto errName =
-        "example.xyz.openbmc_project.Example.Device.Callout";
-    static constexpr auto errDesc = "Generic device callout";
-    static constexpr auto L = level::ERR;
-    using CALLOUT_ERRNO_TEST = _Callout::CALLOUT_ERRNO_TEST;
-    using CALLOUT_DEVICE_PATH_TEST = _Callout::CALLOUT_DEVICE_PATH_TEST;
-    using metadata_types =
-        std::tuple<CALLOUT_ERRNO_TEST, CALLOUT_DEVICE_PATH_TEST>;
-
-    const char* name() const noexcept
-    {
-        return errName;
-    }
-
-    const char* description() const noexcept
-    {
-        return errDesc;
-    }
-
-    const char* what() const noexcept
-    {
-        return errName;
-    }
-};
-
-} // namespace Device
-} // namespace Example
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace example
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace _Device
-{
-
-struct CALLOUT_ERRNO
-{
-    static constexpr auto str = "CALLOUT_ERRNO=%d";
-    static constexpr auto str_short = "CALLOUT_ERRNO";
-    using type = std::tuple<std::decay_t<decltype(str)>, int32_t>;
-    explicit constexpr CALLOUT_ERRNO(int32_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct CALLOUT_DEVICE_PATH
-{
-    static constexpr auto str = "CALLOUT_DEVICE_PATH=%s";
-    static constexpr auto str_short = "CALLOUT_DEVICE_PATH";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr CALLOUT_DEVICE_PATH(const char* a) :
-        _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _Device
-
-struct Device
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_ERRNO = _Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH = _Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-};
-
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::Callout::Error::Device>
-{
-    using type = xyz::openbmc_project::Common::Callout::Device;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace _GPIO
-{
-
-struct CALLOUT_GPIO_NUM
-{
-    static constexpr auto str = "CALLOUT_GPIO_NUM=%u";
-    static constexpr auto str_short = "CALLOUT_GPIO_NUM";
-    using type = std::tuple<std::decay_t<decltype(str)>, uint32_t>;
-    explicit constexpr CALLOUT_GPIO_NUM(uint32_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _GPIO
-
-struct GPIO
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_GPIO_NUM = _GPIO::CALLOUT_GPIO_NUM;
-    using CALLOUT_ERRNO =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types =
-        std::tuple<CALLOUT_GPIO_NUM, CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-};
-
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::Callout::Error::GPIO>
-{
-    using type = xyz::openbmc_project::Common::Callout::GPIO;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace _IIC
-{
-
-struct CALLOUT_IIC_BUS
-{
-    static constexpr auto str = "CALLOUT_IIC_BUS=%s";
-    static constexpr auto str_short = "CALLOUT_IIC_BUS";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr CALLOUT_IIC_BUS(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct CALLOUT_IIC_ADDR
-{
-    static constexpr auto str = "CALLOUT_IIC_ADDR=0x%hx";
-    static constexpr auto str_short = "CALLOUT_IIC_ADDR";
-    using type = std::tuple<std::decay_t<decltype(str)>, uint16_t>;
-    explicit constexpr CALLOUT_IIC_ADDR(uint16_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _IIC
-
-struct IIC
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_IIC_BUS = _IIC::CALLOUT_IIC_BUS;
-    using CALLOUT_IIC_ADDR = _IIC::CALLOUT_IIC_ADDR;
-    using CALLOUT_ERRNO =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_IIC_BUS, CALLOUT_IIC_ADDR,
-                                      CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-};
-
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::Callout::Error::IIC>
-{
-    using type = xyz::openbmc_project::Common::Callout::IIC;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace _Inventory
-{
-
-struct CALLOUT_INVENTORY_PATH
-{
-    static constexpr auto str = "CALLOUT_INVENTORY_PATH=%s";
-    static constexpr auto str_short = "CALLOUT_INVENTORY_PATH";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr CALLOUT_INVENTORY_PATH(const char* a) :
-        _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _Inventory
-
-struct Inventory
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_INVENTORY_PATH = _Inventory::CALLOUT_INVENTORY_PATH;
-    using metadata_types = std::tuple<CALLOUT_INVENTORY_PATH>;
-};
-
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::Callout::Error::Inventory>
-{
-    using type = xyz::openbmc_project::Common::Callout::Inventory;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Common
-{
-namespace Callout
-{
-namespace _IPMISensor
-{
-
-struct CALLOUT_IPMI_SENSOR_NUM
-{
-    static constexpr auto str = "CALLOUT_IPMI_SENSOR_NUM=%u";
-    static constexpr auto str_short = "CALLOUT_IPMI_SENSOR_NUM";
-    using type = std::tuple<std::decay_t<decltype(str)>, uint32_t>;
-    explicit constexpr CALLOUT_IPMI_SENSOR_NUM(uint32_t a) :
-        _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _IPMISensor
-
-struct IPMISensor
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_IPMI_SENSOR_NUM = _IPMISensor::CALLOUT_IPMI_SENSOR_NUM;
-    using metadata_types = std::tuple<CALLOUT_IPMI_SENSOR_NUM>;
-};
-
-} // namespace Callout
-} // namespace Common
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Common::Callout::Error::IPMISensor>
-{
-    using type = xyz::openbmc_project::Common::Callout::IPMISensor;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace State
-{
-namespace Host
-{
-namespace _SoftOffTimeout
-{} // namespace _SoftOffTimeout
-
-struct SoftOffTimeout
-{
-    static constexpr auto L = level::ERR;
-    using TIMEOUT_IN_MSEC =
-        xyz::openbmc_project::Common::Timeout::TIMEOUT_IN_MSEC;
-    using metadata_types = std::tuple<TIMEOUT_IN_MSEC>;
-};
-
-} // namespace Host
-} // namespace State
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::State::Host::Error::SoftOffTimeout>
-{
-    using type = xyz::openbmc_project::State::Host::SoftOffTimeout;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Control
-{
-namespace Device
-{
-namespace _WriteFailure
-{} // namespace _WriteFailure
-
-struct WriteFailure
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_ERRNO =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-};
-
-} // namespace Device
-} // namespace Control
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Control::Device::Error::WriteFailure>
-{
-    using type = xyz::openbmc_project::Control::Device::WriteFailure;
-};
-
-} // namespace details
-
-namespace org
-{
-namespace open_power
-{
-namespace OCC
-{
-namespace Device
-{
-namespace _OpenFailure
-{} // namespace _OpenFailure
-
-struct OpenFailure
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_ERRNO =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-};
-
-} // namespace Device
-} // namespace OCC
-} // namespace open_power
-} // namespace org
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::org::open_power::OCC::Device::Error::OpenFailure>
-{
-    using type = org::open_power::OCC::Device::OpenFailure;
-};
-
-} // namespace details
-
-namespace org
-{
-namespace open_power
-{
-namespace OCC
-{
-namespace Device
-{
-namespace _ReadFailure
-{} // namespace _ReadFailure
-
-struct ReadFailure
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_ERRNO =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-};
-
-} // namespace Device
-} // namespace OCC
-} // namespace open_power
-} // namespace org
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::org::open_power::OCC::Device::Error::ReadFailure>
-{
-    using type = org::open_power::OCC::Device::ReadFailure;
-};
-
-} // namespace details
-
-namespace org
-{
-namespace open_power
-{
-namespace OCC
-{
-namespace Device
-{
-namespace _WriteFailure
-{} // namespace _WriteFailure
-
-struct WriteFailure
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_ERRNO =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-};
-
-} // namespace Device
-} // namespace OCC
-} // namespace open_power
-} // namespace org
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::org::open_power::OCC::Device::Error::WriteFailure>
-{
-    using type = org::open_power::OCC::Device::WriteFailure;
-};
-
-} // namespace details
-
-namespace org
-{
-namespace open_power
-{
-namespace OCC
-{
-namespace Device
-{
-namespace _ConfigFailure
-{} // namespace _ConfigFailure
-
-struct ConfigFailure
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_ERRNO =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-};
-
-} // namespace Device
-} // namespace OCC
-} // namespace open_power
-} // namespace org
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::org::open_power::OCC::Device::Error::ConfigFailure>
-{
-    using type = org::open_power::OCC::Device::ConfigFailure;
-};
-
-} // namespace details
-
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Sensor
-{
-namespace Device
-{
-namespace _ReadFailure
-{} // namespace _ReadFailure
-
-struct ReadFailure
-{
-    static constexpr auto L = level::ERR;
-    using CALLOUT_ERRNO =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH =
-        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-};
-
-} // namespace Device
-} // namespace Sensor
-} // namespace openbmc_project
-} // namespace xyz
-
-namespace details
-{
-
-template <>
-struct map_exception_type<
-    sdbusplus::xyz::openbmc_project::Sensor::Device::Error::ReadFailure>
-{
-    using type = xyz::openbmc_project::Sensor::Device::ReadFailure;
-};
-
-} // namespace details
-
-namespace example
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Example
-{
-namespace Elog
-{
-namespace _TestErrorOne
-{
-
-struct ERRNUM
-{
-    static constexpr auto str = "ERRNUM=0x%.4X";
-    static constexpr auto str_short = "ERRNUM";
-    using type = std::tuple<std::decay_t<decltype(str)>, uint16_t>;
-    explicit constexpr ERRNUM(uint16_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct FILE_PATH
-{
-    static constexpr auto str = "FILE_PATH=%s";
-    static constexpr auto str_short = "FILE_PATH";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr FILE_PATH(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-struct FILE_NAME
-{
-    static constexpr auto str = "FILE_NAME=%s";
-    static constexpr auto str_short = "FILE_NAME";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr FILE_NAME(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _TestErrorOne
-
-struct TestErrorOne : public sdbusplus::exception_t
-{
-    static constexpr auto errName =
-        "example.xyz.openbmc_project.Example.Elog.TestErrorOne";
-    static constexpr auto errDesc = "this is test error one";
-    static constexpr auto L = level::INFO;
-    using ERRNUM = _TestErrorOne::ERRNUM;
-    using FILE_PATH = _TestErrorOne::FILE_PATH;
-    using FILE_NAME = _TestErrorOne::FILE_NAME;
-    using DEV_ADDR =
-        example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_ADDR;
-    using DEV_ID =
-        example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_ID;
-    using DEV_NAME =
-        example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_NAME;
-    using metadata_types =
-        std::tuple<ERRNUM, FILE_PATH, FILE_NAME, DEV_ADDR, DEV_ID, DEV_NAME>;
-
-    const char* name() const noexcept
-    {
-        return errName;
-    }
-
-    const char* description() const noexcept
-    {
-        return errDesc;
-    }
-
-    const char* what() const noexcept
-    {
-        return errName;
-    }
-};
-
-} // namespace Elog
-} // namespace Example
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace example
-
-namespace example
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Example
-{
-namespace Elog
-{
-namespace _TestCallout
-{
-
-struct DEV_ADDR
-{
-    static constexpr auto str = "DEV_ADDR=0x%.8X";
-    static constexpr auto str_short = "DEV_ADDR";
-    using type = std::tuple<std::decay_t<decltype(str)>, uint32_t>;
-    explicit constexpr DEV_ADDR(uint32_t a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _TestCallout
-
-struct TestCallout : public sdbusplus::exception_t
-{
-    static constexpr auto errName =
-        "example.xyz.openbmc_project.Example.Elog.TestCallout";
-    static constexpr auto errDesc = "This is test error TestCallout";
-    static constexpr auto L = level::ERR;
-    using DEV_ADDR = _TestCallout::DEV_ADDR;
-    using CALLOUT_ERRNO_TEST = example::xyz::openbmc_project::Example::Device::
-        Callout::CALLOUT_ERRNO_TEST;
-    using CALLOUT_DEVICE_PATH_TEST = example::xyz::openbmc_project::Example::
-        Device::Callout::CALLOUT_DEVICE_PATH_TEST;
-    using metadata_types =
-        std::tuple<DEV_ADDR, CALLOUT_ERRNO_TEST, CALLOUT_DEVICE_PATH_TEST>;
-
-    const char* name() const noexcept
-    {
-        return errName;
-    }
-
-    const char* description() const noexcept
-    {
-        return errDesc;
-    }
-
-    const char* what() const noexcept
-    {
-        return errName;
-    }
-};
-
-} // namespace Elog
-} // namespace Example
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace example
-
-namespace example
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Example
-{
-namespace Foo
-{
-namespace _Foo
-{
-
-struct FOO_DATA
-{
-    static constexpr auto str = "FOO_DATA=%s";
-    static constexpr auto str_short = "FOO_DATA";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr FOO_DATA(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _Foo
-
-struct Foo : public sdbusplus::exception_t
-{
-    static constexpr auto errName =
-        "example.xyz.openbmc_project.Example.Foo.Foo";
-    static constexpr auto errDesc = "this is test error Foo";
-    static constexpr auto L = level::INFO;
-    using FOO_DATA = _Foo::FOO_DATA;
-    using ERRNUM =
-        example::xyz::openbmc_project::Example::Elog::TestErrorOne::ERRNUM;
-    using FILE_PATH =
-        example::xyz::openbmc_project::Example::Elog::TestErrorOne::FILE_PATH;
-    using FILE_NAME =
-        example::xyz::openbmc_project::Example::Elog::TestErrorOne::FILE_NAME;
-    using DEV_ADDR =
-        example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_ADDR;
-    using DEV_ID =
-        example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_ID;
-    using DEV_NAME =
-        example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_NAME;
-    using metadata_types = std::tuple<FOO_DATA, ERRNUM, FILE_PATH, FILE_NAME,
-                                      DEV_ADDR, DEV_ID, DEV_NAME>;
-
-    const char* name() const noexcept
-    {
-        return errName;
-    }
-
-    const char* description() const noexcept
-    {
-        return errDesc;
-    }
-
-    const char* what() const noexcept
-    {
-        return errName;
-    }
-};
-
-} // namespace Foo
-} // namespace Example
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace example
-
-namespace example
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Example
-{
-namespace Bar
-{
-namespace _Bar
-{
-
-struct BAR_DATA
-{
-    static constexpr auto str = "BAR_DATA=%s";
-    static constexpr auto str_short = "BAR_DATA";
-    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-    explicit constexpr BAR_DATA(const char* a) : _entry(entry(str, a)){};
-    type _entry;
-};
-
-} // namespace _Bar
-
-struct Bar : public sdbusplus::exception_t
-{
-    static constexpr auto errName =
-        "example.xyz.openbmc_project.Example.Bar.Bar";
-    static constexpr auto errDesc = "this is test error Bar";
-    static constexpr auto L = level::INFO;
-    using BAR_DATA = _Bar::BAR_DATA;
-    using FOO_DATA = example::xyz::openbmc_project::Example::Foo::Foo::FOO_DATA;
-    using ERRNUM =
-        example::xyz::openbmc_project::Example::Elog::TestErrorOne::ERRNUM;
-    using FILE_PATH =
-        example::xyz::openbmc_project::Example::Elog::TestErrorOne::FILE_PATH;
-    using FILE_NAME =
-        example::xyz::openbmc_project::Example::Elog::TestErrorOne::FILE_NAME;
-    using DEV_ADDR =
-        example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_ADDR;
-    using DEV_ID =
-        example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_ID;
-    using DEV_NAME =
-        example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_NAME;
-    using metadata_types = std::tuple<BAR_DATA, FOO_DATA, ERRNUM, FILE_PATH,
-                                      FILE_NAME, DEV_ADDR, DEV_ID, DEV_NAME>;
-
-    const char* name() const noexcept
-    {
-        return errName;
-    }
-
-    const char* description() const noexcept
-    {
-        return errDesc;
-    }
-
-    const char* what() const noexcept
-    {
-        return errName;
-    }
-};
-
-} // namespace Bar
-} // namespace Example
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace example
-
-} // namespace logging
-
-} // namespace phosphor
diff --git a/gen/README b/gen/README
deleted file mode 100644
index 71182b5..0000000
--- a/gen/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This directory contains generated meson.build files from sdbus++-gen-meson.
-Do not edit them by hand.
diff --git a/gen/meson.build b/gen/meson.build
deleted file mode 100644
index 23394ac..0000000
--- a/gen/meson.build
+++ /dev/null
@@ -1,15 +0,0 @@
-# Generated file; do not modify.
-sdbuspp_gen_meson_ver = run_command(
-    sdbuspp_gen_meson_prog,
-    '--version',
-    check: true,
-).stdout().strip().split('\n')[0]
-
-if sdbuspp_gen_meson_ver != 'sdbus++-gen-meson version 6'
-    warning('Generated meson files from wrong version of sdbus++-gen-meson.')
-    warning(
-        'Expected "sdbus++-gen-meson version 6", got:',
-        sdbuspp_gen_meson_ver
-    )
-endif
-
diff --git a/gen/org/meson.build b/gen/org/meson.build
deleted file mode 100644
index 6488f22..0000000
--- a/gen/org/meson.build
+++ /dev/null
@@ -1,2 +0,0 @@
-# Generated file; do not modify.
-subdir('open_power')
diff --git a/gen/org/open_power/OCC/Device/meson.build b/gen/org/open_power/OCC/Device/meson.build
deleted file mode 100644
index 84af1ab..0000000
--- a/gen/org/open_power/OCC/Device/meson.build
+++ /dev/null
@@ -1,15 +0,0 @@
-# Generated file; do not modify.
-generated_sources += custom_target(
-    'org/open_power/OCC/Device__cpp'.underscorify(),
-    input: [ '../../../../../yaml/org/open_power/OCC/Device.errors.yaml',  ],
-    output: [ 'error.cpp', 'error.hpp',  ],
-    depend_files: sdbusplusplus_depfiles,
-    command: [
-        sdbuspp_gen_meson_prog, '--command', 'cpp',
-        '--output', meson.current_build_dir(),
-        '--tool', sdbusplusplus_prog,
-        '--directory', meson.current_source_dir() / '../../../../../yaml',
-        'org/open_power/OCC/Device',
-    ],
-)
-
diff --git a/gen/org/open_power/OCC/meson.build b/gen/org/open_power/OCC/meson.build
deleted file mode 100644
index c80db64..0000000
--- a/gen/org/open_power/OCC/meson.build
+++ /dev/null
@@ -1,16 +0,0 @@
-# Generated file; do not modify.
-subdir('Device')
-generated_others += custom_target(
-    'org/open_power/OCC/Device__markdown'.underscorify(),
-    input: [ '../../../../yaml/org/open_power/OCC/Device.errors.yaml',  ],
-    output: [ 'Device.md' ],
-    depend_files: sdbusplusplus_depfiles,
-    command: [
-        sdbuspp_gen_meson_prog, '--command', 'markdown',
-        '--output', meson.current_build_dir(),
-        '--tool', sdbusplusplus_prog,
-        '--directory', meson.current_source_dir() / '../../../../yaml',
-        'org/open_power/OCC/Device',
-    ],
-)
-
diff --git a/gen/org/open_power/meson.build b/gen/org/open_power/meson.build
deleted file mode 100644
index 8eed05c..0000000
--- a/gen/org/open_power/meson.build
+++ /dev/null
@@ -1,2 +0,0 @@
-# Generated file; do not modify.
-subdir('OCC')
diff --git a/gen/regenerate-meson b/gen/regenerate-meson
deleted file mode 100755
index a39ad64..0000000
--- a/gen/regenerate-meson
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-REPO_ROOT=$(git rev-parse --show-toplevel)
-
-# Find sdbus++-gen-meson
-#   1. Check $SDBUSPP_GEN_MESON
-#   2. Check in $PATH
-#   3. Check in subprojects/sdbusplus
-if [ ! -x "$SDBUSPP_GEN_MESON" ]; then
-    SDBUSPP_GEN_MESON="$(which sdbus++-gen-meson 2> /dev/null)"
-fi
-if [ ! -x "$SDBUSPP_GEN_MESON" ]; then
-    SDBUSPP_GEN_MESON="$REPO_ROOT/subprojects/sdbusplus/tools/sdbus++-gen-meson"
-fi
-if [ ! -x "$SDBUSPP_GEN_MESON" ]; then
-    echo "Cannot find sdbus++-gen-meson ($SDBUSPP_GEN_MESON)."
-    exit 1
-fi
-
-$SDBUSPP_GEN_MESON \
-    --command meson \
-    --directory "$REPO_ROOT/yaml" \
-    --output "$REPO_ROOT/gen"
diff --git a/gen/run-ci b/gen/run-ci
deleted file mode 100755
index 874b3a3..0000000
--- a/gen/run-ci
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-cd "$(dirname "$0")" || exit
-./regenerate-meson || exit
-rc=0
-git --no-pager diff --exit-code -- . || rc=$?
-untracked="$(git ls-files --others --exclude-standard -- .)" || rc=$?
-if [ -n "$untracked" ]; then
-    echo "Untracked files:" >&2
-    echo "$untracked" >&2
-    rc=1
-fi
-if (( rc != 0 )); then
-    echo "Generated meson files differ from expected values" >&2
-    exit 1
-fi
diff --git a/meson.build b/meson.build
index 6d395ed..c54143b 100644
--- a/meson.build
+++ b/meson.build
@@ -59,51 +59,8 @@
 subdir('service_files')
 
 sdbusplus_dep = dependency('sdbusplus')
-sdbusplusplus_prog = find_program('sdbus++')
-sdbuspp_gen_meson_prog = find_program('sdbus++-gen-meson')
-sdbusplusplus_depfiles = files()
-if sdbusplus_dep.type_name() == 'internal'
-    sdbusplusplus_depfiles = subproject('sdbusplus').get_variable('sdbusplusplus_depfiles')
-endif
 
 python_prog = find_program('python3', required: true)
-realpath_prog = find_program('realpath')
-
-selected_subdirs = []
-selected_subdirs += 'org/open_power/OCC'
-
-generated_root = meson.current_build_dir() / 'gen'
-generated_others = []
-generated_sources = []
-
-# Source the generated meson files.
-subdir('gen')
-foreach d : selected_subdirs
-  subdir('gen' / d)
-endforeach
-
-# Parse through the list from sdbus++-gendir and put into sets.
-generated_headers = []
-generated_cpp = []
-generated_others_files = []
-
-foreach g : generated_sources generated_others
-    foreach f : g.to_list()
-        rel_path = run_command(
-            realpath_prog,
-            '--relative-to', generated_root,
-            f.full_path(),
-        ).stdout().strip().split('\n')[-1]
-
-        if rel_path.endswith('.hpp')
-            generated_headers += rel_path
-        elif rel_path.endswith('.cpp')
-            generated_cpp += rel_path
-        else
-            generated_others_files += rel_path
-        endif
-    endforeach
-endforeach
 
 deps = []
 sources = []
@@ -207,8 +164,7 @@
     executable(
         'openpower-occ-control',
         sources,
-        generated_sources,
-        include_directories: ['.', 'gen'],
+        include_directories: '.',
         implicit_include_directories: true,
         dependencies: deps,
         install: true,
diff --git a/occ_command.cpp b/occ_command.cpp
index 6d0851e..2ebacb0 100644
--- a/occ_command.cpp
+++ b/occ_command.cpp
@@ -2,14 +2,13 @@
 
 #include "occ_command.hpp"
 
-#include "elog-errors.hpp"
-
 #include <errno.h>
 #include <fcntl.h>
 #include <fmt/core.h>
 #include <unistd.h>
 
 #include <org/open_power/OCC/Device/error.hpp>
+#include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
 
diff --git a/occ_errors.cpp b/occ_errors.cpp
index f41173e..63c1881 100644
--- a/occ_errors.cpp
+++ b/occ_errors.cpp
@@ -1,7 +1,5 @@
 #include "occ_errors.hpp"
 
-#include "elog-errors.hpp"
-
 #include <errno.h>
 #include <fcntl.h>
 #include <fmt/core.h>
@@ -9,6 +7,7 @@
 #include <unistd.h>
 
 #include <org/open_power/OCC/Device/error.hpp>
+#include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
diff --git a/occ_ffdc.cpp b/occ_ffdc.cpp
index 1119a9d..973a554 100644
--- a/occ_ffdc.cpp
+++ b/occ_ffdc.cpp
@@ -1,6 +1,5 @@
 #include "occ_ffdc.hpp"
 
-#include "elog-errors.hpp"
 #include "utils.hpp"
 
 #include <errno.h>
@@ -12,6 +11,7 @@
 
 #include <nlohmann/json.hpp>
 #include <org/open_power/OCC/Device/error.hpp>
+#include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
diff --git a/occ_pass_through.cpp b/occ_pass_through.cpp
index afc9513..6834398 100644
--- a/occ_pass_through.cpp
+++ b/occ_pass_through.cpp
@@ -2,14 +2,13 @@
 
 #include "occ_pass_through.hpp"
 
-#include "elog-errors.hpp"
-
 #include <errno.h>
 #include <fcntl.h>
 #include <fmt/core.h>
 #include <unistd.h>
 
 #include <org/open_power/OCC/Device/error.hpp>
+#include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
 
diff --git a/occ_presence.cpp b/occ_presence.cpp
index dd92725..a8a5115 100644
--- a/occ_presence.cpp
+++ b/occ_presence.cpp
@@ -1,6 +1,5 @@
 #include "occ_presence.hpp"
 
-#include "elog-errors.hpp"
 #include "occ_manager.hpp"
 
 #include <errno.h>
@@ -9,6 +8,7 @@
 #include <unistd.h>
 
 #include <org/open_power/OCC/Device/error.hpp>
+#include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
diff --git a/sensor_gen.py b/sensor_gen.py
index f946f22..4ad284a 100755
--- a/sensor_gen.py
+++ b/sensor_gen.py
@@ -3,9 +3,8 @@
 import argparse
 import os
 
-from mako.template import Template
-
 import yaml
+from mako.template import Template
 
 if __name__ == "__main__":
     script_dir = os.path.dirname(os.path.realpath(__file__))
diff --git a/test/meson.build b/test/meson.build
index 8e5da4c..a0c7df8 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -20,7 +20,6 @@
 endif
 
 test_sources = [
-  generated_sources,
   '../occ_pass_through.cpp',
   '../occ_manager.cpp',
   '../occ_status.cpp',
@@ -33,6 +32,7 @@
   '../powercap.cpp',
   '../i2c_occ.cpp',
   '../utils.cpp',
+  occ_sensor_hpp,
 ]
 
 if get_option('with-host-communication-protocol')=='pldm'
@@ -59,7 +59,7 @@
 foreach t : tests
   test(t, executable(t.underscorify(), t,
                      test_sources,
-                     include_directories: ['..', '../gen'],
+                     include_directories: '..',
                      dependencies: [
                          gtest_dep,
                          gmock_dep,
@@ -67,4 +67,4 @@
                          deps
                          ]),
        workdir: meson.current_source_dir())
-endforeach
\ No newline at end of file
+endforeach
diff --git a/yaml/org/open_power/OCC/Device.errors.yaml b/yaml/org/open_power/OCC/Device.errors.yaml
deleted file mode 100644
index 9e8d09a..0000000
--- a/yaml/org/open_power/OCC/Device.errors.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-# org.open_power.OCC.Device.OpenFailure
-- name: OpenFailure
-  description: Opening OCC device failed.
-
-# org.open_power.OCC.Device.ReadFailure
-- name: ReadFailure
-  description: Reading from OCC failed.
-
-# org.open_power.OCC.Device.WriteFailure
-- name: WriteFailure
-  description: Writing to OCC failed.
-
-# org.open_power.OCC.Device.ConfigFailure
-- name: ConfigFailure
-  description: Configuring device failed.
diff --git a/yaml/org/open_power/OCC/Device.metadata.yaml b/yaml/org/open_power/OCC/Device.metadata.yaml
deleted file mode 100644
index ee79e2d..0000000
--- a/yaml/org/open_power/OCC/Device.metadata.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-- name: OpenFailure
-  inherits:
-      - xyz.openbmc_project.Common.Callout.Device
-
-- name: ReadFailure
-  inherits:
-      - xyz.openbmc_project.Common.Callout.Device
-
-- name: WriteFailure
-  inherits:
-      - xyz.openbmc_project.Common.Callout.Device
-
-- name: ConfigFailure
-  inherits:
-      - xyz.openbmc_project.Common.Callout.Device
