diff --git a/attn/attention.hpp b/attn/attention.hpp
index 69f9fcf..df4aa76 100644
--- a/attn/attention.hpp
+++ b/attn/attention.hpp
@@ -28,9 +28,9 @@
     /** @brief types of attentions to be handled (by priority low to high) */
     enum AttentionType
     {
-        Special   = 0,
+        Special = 0,
         Checkstop = 1,
-        Vital     = 2
+        Vital = 2
     };
 
     /** @brief Default constructor. */
diff --git a/attn/attn_common.cpp b/attn/attn_common.cpp
index 1ba5df4..f11d739 100644
--- a/attn/attn_common.cpp
+++ b/attn/attn_common.cpp
@@ -24,10 +24,10 @@
         pdbg_target* pibTarget = pdbg_target_from_path(nullptr, "/proc0/pib");
         pdbg_target* fsiTarget = pdbg_target_from_path(nullptr, "/proc0/fsi");
 
-        uint32_t l_cfamData  = 0xFFFFFFFF;
+        uint32_t l_cfamData = 0xFFFFFFFF;
         uint64_t l_scomData1 = 0xFFFFFFFFFFFFFFFFull;
         uint64_t l_scomData2 = 0xFFFFFFFFFFFFFFFFull;
-        uint32_t l_cfamAddr  = 0x283C;
+        uint32_t l_cfamAddr = 0x283C;
         uint64_t l_scomAddr1 = 0x4602F489;
         uint64_t l_scomAddr2 = 0x4602F487;
 
@@ -83,7 +83,7 @@
     }
     else
     {
-        uint32_t chipId      = 0;
+        uint32_t chipId = 0;
         uint32_t signatureId = 0;
 
         // get scratch register 9 (CFAM)
@@ -224,9 +224,9 @@
 
     while (0 < count)
     {
-        requested.tv_sec  = 1;
+        requested.tv_sec = 1;
         requested.tv_nsec = 0;
-        remaining         = requested;
+        remaining = requested;
 
         while (-1 == nanosleep(&requested, &remaining))
         {
diff --git a/attn/attn_common.hpp b/attn/attn_common.hpp
index feb95df..cbdf764 100644
--- a/attn/attn_common.hpp
+++ b/attn/attn_common.hpp
@@ -11,32 +11,32 @@
 /** @brief Attention handler return codes */
 enum ReturnCodes
 {
-    RC_SUCCESS        = 0,
-    RC_NOT_HANDLED    = 1,
+    RC_SUCCESS = 0,
+    RC_NOT_HANDLED = 1,
     RC_ANALYZER_ERROR = 2,
-    RC_CFAM_ERROR     = 3,
-    RC_DBUS_ERROR     = 4
+    RC_CFAM_ERROR = 3,
+    RC_DBUS_ERROR = 4
 };
 
 /** @brief Code seciton for error reporing */
 enum class AttnSection
 {
-    reserved        = 0x0000,
-    attnHandler     = 0x0100,
-    tiHandler       = 0x0200,
-    handlePhypTi    = 0x0300,
-    handleHbTi      = 0x0400,
+    reserved = 0x0000,
+    attnHandler = 0x0100,
+    tiHandler = 0x0200,
+    handlePhypTi = 0x0300,
+    handleHbTi = 0x0400,
     addHbStatusRegs = 0x0500,
-    attnLogging     = 0x0600
+    attnLogging = 0x0600
 };
 
 /** @brief Attention handler error reason codes */
 enum AttnCodes
 {
-    ATTN_NO_ERROR    = 0,
-    ATTN_INFO_NULL   = 1,
-    ATTN_PDBG_CFAM   = 2,
-    ATTN_PDBG_SCOM   = 3,
+    ATTN_NO_ERROR = 0,
+    ATTN_INFO_NULL = 1,
+    ATTN_PDBG_CFAM = 2,
+    ATTN_PDBG_SCOM = 3,
     ATTN_INVALID_KEY = 4
 };
 
diff --git a/attn/attn_config.hpp b/attn/attn_config.hpp
index 98a6606..a736b16 100644
--- a/attn/attn_config.hpp
+++ b/attn/attn_config.hpp
@@ -7,11 +7,11 @@
 /** @brief configuration flags */
 enum AttentionFlag
 {
-    enVital       = 0,
-    enCheckstop   = 1,
-    enTerminate   = 2,
+    enVital = 0,
+    enCheckstop = 1,
+    enTerminate = 2,
     enBreakpoints = 3,
-    dfltTi        = 4,
+    dfltTi = 4,
     enClrAttnIntr = 5,
     lastFlag
 };
diff --git a/attn/attn_dbus.cpp b/attn/attn_dbus.cpp
index 7613777..c0a5200 100644
--- a/attn/attn_dbus.cpp
+++ b/attn/attn_dbus.cpp
@@ -26,9 +26,9 @@
         if (0 == util::dbus::findService(i_interface, i_path, service))
         {
             // return the method
-            o_method =
-                bus.new_method_call(service.c_str(), i_path.c_str(),
-                                    i_interface.c_str(), i_function.c_str());
+            o_method = bus.new_method_call(service.c_str(), i_path.c_str(),
+                                           i_interface.c_str(),
+                                           i_function.c_str());
 
             rc = RC_SUCCESS;
         }
@@ -74,7 +74,7 @@
 
     // dbus specifics
     constexpr auto interface = "xyz.openbmc_project.Logging.Create";
-    constexpr auto function  = "Create";
+    constexpr auto function = "Create";
 
     sdbusplus::message_t method;
 
@@ -105,7 +105,7 @@
 
     // dbus specifics
     constexpr auto interface = "org.open_power.Logging.PEL";
-    constexpr auto function  = "GetPEL";
+    constexpr auto function = "GetPEL";
 
     sdbusplus::message_t method;
 
@@ -117,7 +117,7 @@
             method.append(i_pelId);
 
             // using system dbus
-            auto bus      = sdbusplus::bus::new_system();
+            auto bus = sdbusplus::bus::new_system();
             auto response = bus.call(method);
 
             // reply will be a unix file descriptor
diff --git a/attn/attn_dump.cpp b/attn/attn_dump.cpp
index 6a106a0..847eb8e 100644
--- a/attn/attn_dump.cpp
+++ b/attn/attn_dump.cpp
@@ -29,7 +29,7 @@
 
     // looking for property Status changes
     std::string propertyType = "Status";
-    auto dumpStatus          = property.find(propertyType);
+    auto dumpStatus = property.find(propertyType);
 
     if (dumpStatus != property.end())
     {
@@ -54,7 +54,7 @@
 {
     // setup the signal match rules and callback
     std::string matchInterface = "xyz.openbmc_project.Common.Progress";
-    auto bus                   = sdbusplus::bus::new_system();
+    auto bus = sdbusplus::bus::new_system();
 
     // monitor dump status change property, will update dumpStatus
     std::string dumpStatus = "requested";
@@ -102,9 +102,9 @@
 /** Request a dump from the dump manager */
 void requestDump(uint32_t i_logId, const DumpParameters& i_dumpParameters)
 {
-    constexpr auto path      = "/org/openpower/dump";
+    constexpr auto path = "/org/openpower/dump";
     constexpr auto interface = "xyz.openbmc_project.Dump.Create";
-    constexpr auto function  = "CreateDump";
+    constexpr auto function = "CreateDump";
 
     sdbusplus::message_t method;
 
@@ -141,7 +141,7 @@
             method.append(createParams);
 
             // using system dbus
-            auto bus      = sdbusplus::bus::new_system();
+            auto bus = sdbusplus::bus::new_system();
             auto response = bus.call(method);
 
             // reply will be type dbus::ObjectPath
diff --git a/attn/attn_handler.cpp b/attn/attn_handler.cpp
index bfe70d1..73a8f8f 100644
--- a/attn/attn_handler.cpp
+++ b/attn/attn_handler.cpp
@@ -277,8 +277,8 @@
     int rc = RC_SUCCESS; // assume special attention handled
 
     // The TI info chipop will give us a pointer to the TI info data
-    uint8_t* tiInfo       = nullptr;                  // ptr to TI info data
-    uint32_t tiInfoLen    = 0;                        // length of TI info data
+    uint8_t* tiInfo = nullptr;                        // ptr to TI info data
+    uint32_t tiInfoLen = 0;                           // length of TI info data
     pdbg_target* attnProc = i_attention->getTarget(); // proc with attention
 
     bool tiInfoStatic = false; // assume TI info was provided (not created)
@@ -414,7 +414,7 @@
                 msg = "Special attn";
                 break;
             default:
-                msg       = "Unknown attn";
+                msg = "Unknown attn";
                 validAttn = false;
         }
 
@@ -502,7 +502,7 @@
     else
     {
         stateString = "host not started";
-        tiInfo      = (uint8_t*)defaultHbTiInfo;
+        tiInfo = (uint8_t*)defaultHbTiInfo;
     }
 
     // trace host state
diff --git a/attn/attn_handler.hpp b/attn/attn_handler.hpp
index 9feacb2..af6ebc6 100644
--- a/attn/attn_handler.hpp
+++ b/attn/attn_handler.hpp
@@ -5,10 +5,10 @@
 namespace attn
 {
 /** @brief Attention global status bits */
-constexpr uint32_t SBE_ATTN         = 0x00000002;
-constexpr uint32_t ANY_ATTN         = 0x80000000;
-constexpr uint32_t CHECKSTOP_ATTN   = 0x40000000;
-constexpr uint32_t SPECIAL_ATTN     = 0x20000000;
+constexpr uint32_t SBE_ATTN = 0x00000002;
+constexpr uint32_t ANY_ATTN = 0x80000000;
+constexpr uint32_t CHECKSTOP_ATTN = 0x40000000;
+constexpr uint32_t SPECIAL_ATTN = 0x20000000;
 constexpr uint32_t RECOVERABLE_ATTN = 0x10000000;
 
 /**
diff --git a/attn/attn_logging.cpp b/attn/attn_logging.cpp
index e3571dd..34f3735 100644
--- a/attn/attn_logging.cpp
+++ b/attn/attn_logging.cpp
@@ -49,7 +49,7 @@
     util::FFDCFile file{util::FFDCFormat::Custom};
 
     // Write buffer to file and then reset file description file offset
-    int fd          = file.getFileDescriptor();
+    int fd = file.getFileDescriptor();
     size_t numBytes = write(fd, static_cast<char*>(i_buffer), i_size);
     if (i_size != numBytes)
     {
@@ -72,7 +72,7 @@
  * @return  vector of FFDCFile objects
  */
 std::vector<util::FFDCFile> createFFDCFiles(char* i_buffer = nullptr,
-                                            size_t i_size  = 0)
+                                            size_t i_size = 0)
 {
     std::vector<util::FFDCFile> files{};
 
@@ -281,7 +281,7 @@
     // user data sections that do not need to be in this PEL. However we do
     // want to include the raw TI information.
     int ffdcCount = 0;
-    it            = i_additional.find("FFDC count");
+    it = i_additional.find("FFDC count");
     if (it != i_additional.end())
     {
         // remove all sections except 1 (raw Ti info)
@@ -318,10 +318,10 @@
                const std::vector<util::FFDCFile>& i_ffdc,
                std::string i_severity = levelPelError)
 {
-    uint32_t pelId = 0; // assume no event log generated
+    uint32_t pelId = 0;      // assume no event log generated
 
     bool eventValid = false; // assume no event created
-    bool tiEvent    = false; // assume not a terminate event
+    bool tiEvent = false;    // assume not a terminate event
 
     // count user data sections so we can fixup custom PEL
     i_additional["FFDC count"] = std::to_string(i_ffdc.size());
@@ -331,21 +331,21 @@
     switch (i_event)
     {
         case EventType::Checkstop:
-            eventName  = "org.open_power.HwDiags.Error.Checkstop";
+            eventName = "org.open_power.HwDiags.Error.Checkstop";
             eventValid = true;
             break;
         case EventType::Terminate:
-            eventName  = "org.open_power.Attn.Error.Terminate";
+            eventName = "org.open_power.Attn.Error.Terminate";
             eventValid = true;
-            tiEvent    = true;
+            tiEvent = true;
             break;
         case EventType::Vital:
-            eventName  = "org.open_power.Attn.Error.Vital";
+            eventName = "org.open_power.Attn.Error.Vital";
             eventValid = true;
             break;
         case EventType::HwDiagsFail:
         case EventType::AttentionFail:
-            eventName  = "org.open_power.Attn.Error.Fail";
+            eventName = "org.open_power.Attn.Error.Fail";
             eventValid = true;
             break;
         default:
@@ -470,7 +470,7 @@
             if (0 == (*(i_tiInfoData + 0x09) & 0x01))
             {
                 uint32_t* additionalLength = (uint32_t*)(i_tiInfoData + 0x50);
-                uint32_t tiAdditional      = be32toh(*additionalLength);
+                uint32_t tiAdditional = be32toh(*additionalLength);
                 tiInfoSize = std::min(tiInfoSize, (84 + tiAdditional));
             }
         }
diff --git a/attn/attn_logging.hpp b/attn/attn_logging.hpp
index 096a785..3228ff6 100644
--- a/attn/attn_logging.hpp
+++ b/attn/attn_logging.hpp
@@ -9,7 +9,7 @@
 
 namespace attn
 {
-constexpr auto pathLogging   = "/xyz/openbmc_project/logging";
+constexpr auto pathLogging = "/xyz/openbmc_project/logging";
 constexpr auto levelPelError = "xyz.openbmc_project.Logging.Entry.Level.Error";
 constexpr auto levelPelInfo =
     "xyz.openbmc_project.Logging.Entry.Level.Informational";
@@ -18,10 +18,10 @@
 /** @brief Logging event types */
 enum class EventType
 {
-    Checkstop     = 0,
-    Terminate     = 1,
-    Vital         = 2,
-    HwDiagsFail   = 3,
+    Checkstop = 0,
+    Terminate = 1,
+    Vital = 2,
+    HwDiagsFail = 3,
     AttentionFail = 4,
     PhalSbeChipop = 5
 };
diff --git a/attn/attn_main.cpp b/attn/attn_main.cpp
index 84c3bba..281149d 100644
--- a/attn/attn_main.cpp
+++ b/attn/attn_main.cpp
@@ -8,9 +8,9 @@
  */
 int attnDaemon(Config* i_config)
 {
-    int rc = 0; // assume success
+    int rc = 0;                 // assume success
 
-    gpiod_line* line; // gpio line to monitor
+    gpiod_line* line;           // gpio line to monitor
 
     boost::asio::io_context io; // async io monitoring service
 
diff --git a/attn/attn_monitor.cpp b/attn/attn_monitor.cpp
index a3ecfac..6d4a90d 100644
--- a/attn/attn_monitor.cpp
+++ b/attn/attn_monitor.cpp
@@ -13,16 +13,16 @@
     iv_gpioEventDescriptor.async_wait(
         boost::asio::posix::stream_descriptor::wait_read,
         [this](const boost::system::error_code& ec) {
-            if (ec)
-            {
-                trace::err("GPIO Async wait error: %s", ec.message().c_str());
-            }
-            else
-            {
-                trace::inf("Attention GPIO active");
-                handleGPIOEvent(); // gpio trigger detected
-            }
-            return;
+        if (ec)
+        {
+            trace::err("GPIO Async wait error: %s", ec.message().c_str());
+        }
+        else
+        {
+            trace::inf("Attention GPIO active");
+            handleGPIOEvent(); // gpio trigger detected
+        }
+        return;
         }); // register async callback
 }
 
diff --git a/attn/attn_monitor.hpp b/attn/attn_monitor.hpp
index 9680fda..f9f13e4 100644
--- a/attn/attn_monitor.hpp
+++ b/attn/attn_monitor.hpp
@@ -15,7 +15,7 @@
 class AttnMonitor
 {
   public:
-    AttnMonitor()  = delete;
+    AttnMonitor() = delete;
     ~AttnMonitor() = default;
 
     /** @brief Constructs AttnMonitor object.
diff --git a/attn/pel/extended_user_header.hpp b/attn/pel/extended_user_header.hpp
index fa4c7f6..31a4dec 100644
--- a/attn/pel/extended_user_header.hpp
+++ b/attn/pel/extended_user_header.hpp
@@ -12,7 +12,7 @@
 {
 
 constexpr uint8_t extendedUserHeaderVersion = 0x01;
-constexpr size_t firmwareVersionSize        = 16;
+constexpr size_t firmwareVersionSize = 16;
 
 /**
  * @class ExtendedUserHeader
@@ -43,12 +43,12 @@
 class ExtendedUserHeader : public Section
 {
   public:
-    ExtendedUserHeader()                                     = delete;
-    ~ExtendedUserHeader()                                    = default;
-    ExtendedUserHeader(const ExtendedUserHeader&)            = default;
+    ExtendedUserHeader() = delete;
+    ~ExtendedUserHeader() = default;
+    ExtendedUserHeader(const ExtendedUserHeader&) = default;
     ExtendedUserHeader& operator=(const ExtendedUserHeader&) = default;
-    ExtendedUserHeader(ExtendedUserHeader&&)                 = default;
-    ExtendedUserHeader& operator=(ExtendedUserHeader&&)      = default;
+    ExtendedUserHeader(ExtendedUserHeader&&) = default;
+    ExtendedUserHeader& operator=(ExtendedUserHeader&&) = default;
 
     /**
      * @brief Constructor
diff --git a/attn/pel/pel_common.hpp b/attn/pel/pel_common.hpp
index 1d99015..dab9ea7 100644
--- a/attn/pel/pel_common.hpp
+++ b/attn/pel/pel_common.hpp
@@ -9,9 +9,9 @@
 
 enum class SectionID
 {
-    privateHeader  = 0x5048, // 'PH'
-    userHeader     = 0x5548, // 'UH'
-    primarySRC     = 0x5053, // 'PS'
+    privateHeader = 0x5048,  // 'PH'
+    userHeader = 0x5548,     // 'UH'
+    primarySRC = 0x5053,     // 'PS'
     extendedHeader = 0x4548, // 'EH'
 };
 
@@ -22,16 +22,16 @@
 
 enum class CreatorID
 {
-    hostboot   = 'B',
+    hostboot = 'B',
     hypervisor = 'H',
-    openbmc    = 'O'
+    openbmc = 'O'
 };
 
 enum class SubsystemID
 {
     hypervisor = 0x82,
-    hostboot   = 0x8a,
-    openbmc    = 0x8d
+    hostboot = 0x8a,
+    openbmc = 0x8d
 };
 
 enum class Severity
@@ -42,16 +42,16 @@
 
 enum class EventType
 {
-    na    = 0x00,
+    na = 0x00,
     trace = 0x02
 };
 
 enum class ActionFlags
 {
     service = 0x8000,
-    hidden  = 0x4000,
-    report  = 0x2000,
-    call    = 0x0800
+    hidden = 0x4000,
+    report = 0x2000,
+    call = 0x0800
 };
 
 inline ActionFlags operator|(ActionFlags a, ActionFlags b)
@@ -66,7 +66,7 @@
 
 constexpr size_t numSrcWords = 8;  // number of SRC hex words
 const size_t asciiStringSize = 32; // size of SRC ascii string
-const size_t mtmsSize        = 20; // size of an mtms field
+const size_t mtmsSize = 20;        // size of an mtms field
 
 } // namespace pel
 } // namespace attn
diff --git a/attn/pel/pel_minimal.hpp b/attn/pel/pel_minimal.hpp
index 9678518..4116049 100644
--- a/attn/pel/pel_minimal.hpp
+++ b/attn/pel/pel_minimal.hpp
@@ -37,12 +37,12 @@
 class PelMinimal
 {
   public:
-    PelMinimal()                             = delete;
-    ~PelMinimal()                            = default;
-    PelMinimal(const PelMinimal&)            = delete;
+    PelMinimal() = delete;
+    ~PelMinimal() = default;
+    PelMinimal(const PelMinimal&) = delete;
     PelMinimal& operator=(const PelMinimal&) = delete;
-    PelMinimal(PelMinimal&&)                 = delete;
-    PelMinimal& operator=(PelMinimal&&)      = delete;
+    PelMinimal(PelMinimal&&) = delete;
+    PelMinimal& operator=(PelMinimal&&) = delete;
 
     /**
      * @brief Create a minimal PEL object from raw data
diff --git a/attn/pel/pel_section.hpp b/attn/pel/pel_section.hpp
index 6d18822..4ffe03e 100644
--- a/attn/pel/pel_section.hpp
+++ b/attn/pel/pel_section.hpp
@@ -16,12 +16,12 @@
 class Section
 {
   public:
-    Section()                          = default;
-    virtual ~Section()                 = default;
-    Section(const Section&)            = default;
+    Section() = default;
+    virtual ~Section() = default;
+    Section(const Section&) = default;
     Section& operator=(const Section&) = default;
-    Section(Section&&)                 = default;
-    Section& operator=(Section&&)      = default;
+    Section(Section&&) = default;
+    Section& operator=(Section&&) = default;
 
     /**
      * @brief Returns a reference to the SectionHeader
diff --git a/attn/pel/primary_src.hpp b/attn/pel/primary_src.hpp
index d69e3a6..23b843f 100644
--- a/attn/pel/primary_src.hpp
+++ b/attn/pel/primary_src.hpp
@@ -55,19 +55,19 @@
   public:
     enum HeaderFlags
     {
-        additionalSections  = 0x01,
-        powerFaultEvent     = 0x02,
-        hypDumpInit         = 0x04,
+        additionalSections = 0x01,
+        powerFaultEvent = 0x02,
+        hypDumpInit = 0x04,
         i5OSServiceEventBit = 0x10,
-        virtualProgressSRC  = 0x80
+        virtualProgressSRC = 0x80
     };
 
-    PrimarySrc()                             = delete;
-    ~PrimarySrc()                            = default;
-    PrimarySrc(const PrimarySrc&)            = delete;
+    PrimarySrc() = delete;
+    ~PrimarySrc() = default;
+    PrimarySrc(const PrimarySrc&) = delete;
     PrimarySrc& operator=(const PrimarySrc&) = delete;
-    PrimarySrc(PrimarySrc&&)                 = delete;
-    PrimarySrc& operator=(PrimarySrc&&)      = delete;
+    PrimarySrc(PrimarySrc&&) = delete;
+    PrimarySrc& operator=(PrimarySrc&&) = delete;
 
     /**
      * @brief Constructor
diff --git a/attn/pel/private_header.hpp b/attn/pel/private_header.hpp
index 011ade5..59380dd 100644
--- a/attn/pel/private_header.hpp
+++ b/attn/pel/private_header.hpp
@@ -45,12 +45,12 @@
 class PrivateHeader : public Section
 {
   public:
-    PrivateHeader()                                = delete;
-    ~PrivateHeader()                               = default;
-    PrivateHeader(const PrivateHeader&)            = default;
+    PrivateHeader() = delete;
+    ~PrivateHeader() = default;
+    PrivateHeader(const PrivateHeader&) = default;
     PrivateHeader& operator=(const PrivateHeader&) = default;
-    PrivateHeader(PrivateHeader&&)                 = default;
-    PrivateHeader& operator=(PrivateHeader&&)      = default;
+    PrivateHeader(PrivateHeader&&) = default;
+    PrivateHeader& operator=(PrivateHeader&&) = default;
 
     /**
      * @brief Constructor
diff --git a/attn/pel/stream.hpp b/attn/pel/stream.hpp
index 5a1462d..5c03adf 100644
--- a/attn/pel/stream.hpp
+++ b/attn/pel/stream.hpp
@@ -49,12 +49,12 @@
 class Stream
 {
   public:
-    Stream()                         = delete;
-    ~Stream()                        = default;
-    Stream(const Stream&)            = default;
+    Stream() = delete;
+    ~Stream() = default;
+    Stream(const Stream&) = default;
     Stream& operator=(const Stream&) = default;
-    Stream(Stream&&)                 = default;
-    Stream& operator=(Stream&&)      = default;
+    Stream(Stream&&) = default;
+    Stream& operator=(Stream&&) = default;
 
     /**
      * @brief Constructor
diff --git a/attn/pel/user_header.hpp b/attn/pel/user_header.hpp
index 87cad50..9c8f13d 100644
--- a/attn/pel/user_header.hpp
+++ b/attn/pel/user_header.hpp
@@ -33,12 +33,12 @@
 class UserHeader : public Section
 {
   public:
-    UserHeader()                             = delete;
-    ~UserHeader()                            = default;
-    UserHeader(const UserHeader&)            = default;
+    UserHeader() = delete;
+    ~UserHeader() = default;
+    UserHeader(const UserHeader&) = default;
     UserHeader& operator=(const UserHeader&) = default;
-    UserHeader(UserHeader&&)                 = default;
-    UserHeader& operator=(UserHeader&&)      = default;
+    UserHeader(UserHeader&&) = default;
+    UserHeader& operator=(UserHeader&&) = default;
 
     /**
      * @brief Constructor
diff --git a/attn/ti_handler.cpp b/attn/ti_handler.cpp
index b2c4085..56aae66 100644
--- a/attn/ti_handler.cpp
+++ b/attn/ti_handler.cpp
@@ -90,7 +90,7 @@
         // Copy all ascii src chars to additional data
         char srcChar[33]; // 32 ascii chars + null term
         memcpy(srcChar, &(i_tiDataArea->asciiData0), 32);
-        srcChar[32]                  = 0;
+        srcChar[32] = 0;
         tiAdditionalData["SrcAscii"] = std::string{srcChar};
 
         // TI event
@@ -176,8 +176,8 @@
             std::map<std::string, std::string> tiAdditionalData;
 
             // make note of recoverable errors present
-            tiAdditionalData["recoverables"] =
-                recoverableErrors() ? "true" : "false";
+            tiAdditionalData["recoverables"] = recoverableErrors() ? "true"
+                                                                   : "false";
 
             parseHbTiInfo(tiAdditionalData, i_tiDataArea);
 
@@ -260,8 +260,8 @@
         return;
     }
 
-    i_map["0x00 TI Area Valid"] =
-        fmt::format("{:02x}", i_tiDataArea->tiAreaValid);
+    i_map["0x00 TI Area Valid"] = fmt::format("{:02x}",
+                                              i_tiDataArea->tiAreaValid);
     i_map["0x01 Command"] = fmt::format("{:02x}", i_tiDataArea->command);
     i_map["0x02 Num. Data Bytes"] =
         fmt::format("{:04x}", be16toh(i_tiDataArea->numDataBytes));
@@ -269,13 +269,13 @@
     i_map["0x06 HWDump Type"] =
         fmt::format("{:04x}", be16toh(i_tiDataArea->hardwareDumpType));
     i_map["0x08 SRC Format"] = fmt::format("{:02x}", i_tiDataArea->srcFormat);
-    i_map["0x09 SRC Flags"]  = fmt::format("{:02x}", i_tiDataArea->srcFlags);
-    i_map["0x0a Num. ASCII Words"] =
-        fmt::format("{:02x}", i_tiDataArea->numAsciiWords);
-    i_map["0x0b Num. Hex Words"] =
-        fmt::format("{:02x}", i_tiDataArea->numHexWords);
-    i_map["0x0e Length of SRC"] =
-        fmt::format("{:04x}", be16toh(i_tiDataArea->lenSrc));
+    i_map["0x09 SRC Flags"] = fmt::format("{:02x}", i_tiDataArea->srcFlags);
+    i_map["0x0a Num. ASCII Words"] = fmt::format("{:02x}",
+                                                 i_tiDataArea->numAsciiWords);
+    i_map["0x0b Num. Hex Words"] = fmt::format("{:02x}",
+                                               i_tiDataArea->numHexWords);
+    i_map["0x0e Length of SRC"] = fmt::format("{:04x}",
+                                              be16toh(i_tiDataArea->lenSrc));
     i_map["0x10 SRC Word 12"] =
         fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord12HbWord0));
     i_map["0x14 SRC Word 13"] =
@@ -292,29 +292,29 @@
         fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord18HbWord7));
     i_map["0x2c SRC Word 19"] =
         fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord19HbWord8));
-    i_map["0x30 ASCII Data"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData0));
-    i_map["0x34 ASCII Data"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData1));
-    i_map["0x38 ASCII Data"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData2));
-    i_map["0x3c ASCII Data"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData3));
-    i_map["0x40 ASCII Data"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData4));
-    i_map["0x44 ASCII Data"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData5));
-    i_map["0x48 ASCII Data"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData6));
-    i_map["0x4c ASCII Data"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData7));
+    i_map["0x30 ASCII Data"] = fmt::format("{:08x}",
+                                           be32toh(i_tiDataArea->asciiData0));
+    i_map["0x34 ASCII Data"] = fmt::format("{:08x}",
+                                           be32toh(i_tiDataArea->asciiData1));
+    i_map["0x38 ASCII Data"] = fmt::format("{:08x}",
+                                           be32toh(i_tiDataArea->asciiData2));
+    i_map["0x3c ASCII Data"] = fmt::format("{:08x}",
+                                           be32toh(i_tiDataArea->asciiData3));
+    i_map["0x40 ASCII Data"] = fmt::format("{:08x}",
+                                           be32toh(i_tiDataArea->asciiData4));
+    i_map["0x44 ASCII Data"] = fmt::format("{:08x}",
+                                           be32toh(i_tiDataArea->asciiData5));
+    i_map["0x48 ASCII Data"] = fmt::format("{:08x}",
+                                           be32toh(i_tiDataArea->asciiData6));
+    i_map["0x4c ASCII Data"] = fmt::format("{:08x}",
+                                           be32toh(i_tiDataArea->asciiData7));
     i_map["0x50 Location"] = fmt::format("{:02x}", i_tiDataArea->location);
-    i_map["0x51 Code Sections"] =
-        fmt::format("{:02x}", i_tiDataArea->codeSection);
-    i_map["0x52 Additional Size"] =
-        fmt::format("{:02x}", i_tiDataArea->additionalSize);
-    i_map["0x53 Additional Data"] =
-        fmt::format("{:02x}", i_tiDataArea->andData);
+    i_map["0x51 Code Sections"] = fmt::format("{:02x}",
+                                              i_tiDataArea->codeSection);
+    i_map["0x52 Additional Size"] = fmt::format("{:02x}",
+                                                i_tiDataArea->additionalSize);
+    i_map["0x53 Additional Data"] = fmt::format("{:02x}",
+                                                i_tiDataArea->andData);
 }
 
 /** @brief Parse the TI info data area into map as hostboot data */
@@ -326,13 +326,13 @@
         return;
     }
 
-    i_map["0x00 TI Area Valid"] =
-        fmt::format("{:02x}", i_tiDataArea->tiAreaValid);
+    i_map["0x00 TI Area Valid"] = fmt::format("{:02x}",
+                                              i_tiDataArea->tiAreaValid);
     i_map["0x04 Reserved"] = fmt::format("{:02x}", i_tiDataArea->reserved1);
-    i_map["0x05 HB_Term. Type"] =
-        fmt::format("{:02x}", i_tiDataArea->hbTerminateType);
+    i_map["0x05 HB_Term. Type"] = fmt::format("{:02x}",
+                                              i_tiDataArea->hbTerminateType);
     i_map["0x0c HB Flags"] = fmt::format("{:02x}", i_tiDataArea->hbFlags);
-    i_map["0x0d Source"]   = fmt::format("{:02x}", i_tiDataArea->source);
+    i_map["0x0d Source"] = fmt::format("{:02x}", i_tiDataArea->source);
     i_map["0x10 HB Word 0"] =
         fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord12HbWord0));
     i_map["0x14 HB Word 2"] =
@@ -349,10 +349,10 @@
         fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord18HbWord7));
     i_map["0x2c HB Word 8"] =
         fmt::format("{:08x}", be32toh(i_tiDataArea->srcWord19HbWord8));
-    i_map["0x30 error_data"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData0));
-    i_map["0x34 EID"] =
-        fmt::format("{:08x}", be32toh(i_tiDataArea->asciiData1));
+    i_map["0x30 error_data"] = fmt::format("{:08x}",
+                                           be32toh(i_tiDataArea->asciiData0));
+    i_map["0x34 EID"] = fmt::format("{:08x}",
+                                    be32toh(i_tiDataArea->asciiData1));
 }
 
 } // namespace attn
diff --git a/attn/ti_handler.hpp b/attn/ti_handler.hpp
index 4841795..243eb62 100644
--- a/attn/ti_handler.hpp
+++ b/attn/ti_handler.hpp
@@ -55,20 +55,20 @@
 #pragma pack(pop)
 
 // TI info defines
-constexpr uint8_t hbDumpFlag       = 0x01;
+constexpr uint8_t hbDumpFlag = 0x01;
 constexpr uint8_t hbNotVisibleFlag = 0x02;
 
 // miscellaneous defines
 constexpr uint8_t TI_WITH_PLID = 0x01;
-constexpr uint8_t TI_WITH_SRC  = 0x02;
-constexpr uint8_t TI_WITH_EID  = 0x03;
+constexpr uint8_t TI_WITH_SRC = 0x02;
+constexpr uint8_t TI_WITH_EID = 0x03;
 
 // component ID's
 constexpr uint16_t INITSVC_COMP_ID = 0x0500;
-constexpr uint16_t PNOR_COMP_ID    = 0x0600;
-constexpr uint16_t HWAS_COMP_ID    = 0x0C00;
-constexpr uint16_t SECURE_COMP_ID  = 0x1E00;
-constexpr uint16_t TRBOOT_COMP_ID  = 0x2B00;
+constexpr uint16_t PNOR_COMP_ID = 0x0600;
+constexpr uint16_t HWAS_COMP_ID = 0x0C00;
+constexpr uint16_t SECURE_COMP_ID = 0x1E00;
+constexpr uint16_t TRBOOT_COMP_ID = 0x2B00;
 
 // HBFW::INITSERVICE::SHUTDOWNPREQUESTED_BY_FSP
 constexpr uint16_t HB_SRC_SHUTDOWN_REQUEST = INITSVC_COMP_ID | 0x0b;
diff --git a/attn/vital_handler.cpp b/attn/vital_handler.cpp
index b4389df..196f748 100644
--- a/attn/vital_handler.cpp
+++ b/attn/vital_handler.cpp
@@ -100,7 +100,7 @@
     uint32_t isr_val, isr_mask;
 
     isr_val = 0xffffffff;
-    r       = fsi_read(fsiTarget, 0x1007, &isr_val);
+    r = fsi_read(fsiTarget, 0x1007, &isr_val);
     if ((RC_SUCCESS != r) || (0xffffffff == isr_val))
     {
         trace::err("cfam 1007 read error");
@@ -108,7 +108,7 @@
     }
 
     isr_mask = 0xffffffff;
-    r        = fsi_read(fsiTarget, 0x100d, &isr_mask);
+    r = fsi_read(fsiTarget, 0x100d, &isr_mask);
     if ((RC_SUCCESS != r) || (0xffffffff == isr_mask))
     {
         trace::err("cfam 100d read error");
