diff --git a/.clang-format b/.clang-format
index 1313ec8..d92a3f1 100644
--- a/.clang-format
+++ b/.clang-format
@@ -3,13 +3,15 @@
 # BasedOnStyle:  LLVM
 AccessModifierOffset: -2
 AlignAfterOpenBracket: Align
-AlignConsecutiveAssignments: true
+AlignConsecutiveAssignments: false
 AlignConsecutiveDeclarations: false
 AlignEscapedNewlines: Right
-AlignOperands:   true
-AlignTrailingComments: true
+AlignOperands:  Align
+AlignTrailingComments:
+  Kind: Always
+  OverEmptyLines: 1
 AllowAllParametersOfDeclarationOnNextLine: true
-AllowShortBlocksOnASingleLine: false
+AllowShortBlocksOnASingleLine: Empty
 AllowShortCaseLabelsOnASingleLine: false
 AllowShortFunctionsOnASingleLine: Empty
 AllowShortIfStatementsOnASingleLine: false
@@ -36,12 +38,13 @@
   SplitEmptyFunction:   false
   SplitEmptyRecord:     false
   SplitEmptyNamespace:  false
+BreakAfterAttributes: Never
 BreakBeforeBinaryOperators: None
 BreakBeforeBraces: Custom
 BreakBeforeTernaryOperators: true
 BreakConstructorInitializers: AfterColon
 BreakInheritanceList: AfterColon
-BreakStringLiterals: true
+BreakStringLiterals: false
 ColumnLimit:     80
 CommentPragmas:  '^ IWYU pragma:'
 CompactNamespaces: false
@@ -75,9 +78,13 @@
   - Regex:           '.*'
     Priority:        6
 IndentCaseLabels: true
+IndentRequiresClause: true
 IndentWidth:     4
 IndentWrappedFunctionNames: true
+InsertNewlineAtEOF: true
 KeepEmptyLinesAtTheStartOfBlocks: false
+LambdaBodyIndentation: OuterScope
+LineEnding: LF
 MacroBlockBegin: ''
 MacroBlockEnd:   ''
 MaxEmptyLinesToKeep: 1
@@ -85,13 +92,19 @@
 ObjCBlockIndentWidth: 2
 ObjCSpaceAfterProperty: false
 ObjCSpaceBeforeProtocolList: true
+PenaltyBreakAssignment: 25
 PenaltyBreakBeforeFirstCallParameter: 19
 PenaltyBreakComment: 300
 PenaltyBreakFirstLessLess: 120
 PenaltyBreakString: 1000
 PenaltyExcessCharacter: 1000000
 PenaltyReturnTypeOnItsOwnLine: 60
+PenaltyIndentedWhitespace: 0
+QualifierAlignment: Left
+ReferenceAlignment: Left
 ReflowComments:  true
+RequiresClausePosition: OwnLine
+RequiresExpressionIndentation: Keyword
 SortIncludes:    true
 SortUsingDeclarations: true
 SpaceAfterCStyleCast: false
@@ -111,7 +124,6 @@
 SpacesInSquareBrackets: false
 Standard:        Latest
 TabWidth:        4
-UseCRLF: false
 UseTab:          Never
 ...
 
diff --git a/analyzer/analyzer_main.cpp b/analyzer/analyzer_main.cpp
index 24839eb..218d38d 100644
--- a/analyzer/analyzer_main.cpp
+++ b/analyzer/analyzer_main.cpp
@@ -210,7 +210,7 @@
             // will be reserved for MP-IPLs during TI analysis.
             // TODO: Need ID from root cause. At the moment, HUID does not exist
             //       in devtree. Will need a better ID definition.
-            o_dump.unitId   = 0;
+            o_dump.unitId = 0;
             o_dump.dumpType = attn::DumpType::Hardware;
         }
     }
diff --git a/analyzer/callout.hpp b/analyzer/callout.hpp
index 76c1dcf..59e1728 100644
--- a/analyzer/callout.hpp
+++ b/analyzer/callout.hpp
@@ -78,21 +78,21 @@
     // Can also reference `extensions/openpower-pels/pel_values.cpp` from
     // `openbmc/phosphor-logging` for the full list of these values.
 
-    PROCESSOR      = 0x10,
-    PROCESSOR_FRU  = 0x11,
+    PROCESSOR = 0x10,
+    PROCESSOR_FRU = 0x11,
     PROCESSOR_UNIT = 0x13,
-    PROCESSOR_BUS  = 0x14,
+    PROCESSOR_BUS = 0x14,
 
     MEMORY_CTLR = 0x21,
-    MEMORY_BUS  = 0x22,
+    MEMORY_BUS = 0x22,
     MEMORY_DIMM = 0x23,
-    MEMORY_FRU  = 0x24,
+    MEMORY_FRU = 0x24,
 
     PHB = 0x38,
 
     CEC_HARDWARE = 0x50,
-    CEC_CLOCKS   = 0x58,
-    CEC_TOD      = 0x5A,
+    CEC_CLOCKS = 0x58,
+    CEC_TOD = 0x5A,
 
     OTHERS = 0x70,
 };
diff --git a/analyzer/create_pel.cpp b/analyzer/create_pel.cpp
index 741b375..6d42e1a 100644
--- a/analyzer/create_pel.cpp
+++ b/analyzer/create_pel.cpp
@@ -24,11 +24,11 @@
 
 enum FfdcSubType_t : uint8_t
 {
-    FFDC_SIGNATURES      = 0x01,
-    FFDC_REGISTER_DUMP   = 0x02,
-    FFDC_CALLOUT_FFDC    = 0x03,
+    FFDC_SIGNATURES = 0x01,
+    FFDC_REGISTER_DUMP = 0x02,
+    FFDC_CALLOUT_FFDC = 0x03,
     FFDC_HB_SCRATCH_REGS = 0x04,
-    FFDC_SCRATCH_SIG     = 0x05,
+    FFDC_SCRATCH_SIG = 0x05,
 
     // For the callout section, the value of '0xCA' is required per the
     // phosphor-logging openpower-pel extention spec.
@@ -59,12 +59,12 @@
         // [ 0:15] chip position
         // [16:23] node position
         // [24:31] signature attention type
-        auto chipPos    = util::pdbg::getChipPos(i_signature.getChip());
+        auto chipPos = util::pdbg::getChipPos(i_signature.getChip());
         uint8_t nodePos = 0; // TODO: multi-node support
-        auto attn       = i_signature.getAttnType();
+        auto attn = i_signature.getAttnType();
 
-        o_word7 =
-            (chipPos & 0xffff) << 16 | (nodePos & 0xff) << 8 | (attn & 0xff);
+        o_word7 = (chipPos & 0xffff) << 16 | (nodePos & 0xff) << 8 |
+                  (attn & 0xff);
 
         // [ 0:15] signature ID
         // [16:23] signature instance
@@ -179,7 +179,7 @@
 
     for (const auto& entry : dump)
     {
-        auto chip    = entry.first;
+        auto chip = entry.first;
         auto regList = entry.second;
 
         // Each chip will have the following information:
@@ -190,9 +190,9 @@
         // Then the data for each register will follow.
 
         uint32_t chipType = chip.getType();
-        uint16_t chipPos  = util::pdbg::getChipPos(chip);
-        uint8_t nodePos   = 0; // TODO: multi-node support
-        uint32_t numRegs  = regList.size();
+        uint16_t chipPos = util::pdbg::getChipPos(chip);
+        uint8_t nodePos = 0; // TODO: multi-node support
+        uint32_t numRegs = regList.size();
         stream << chipType << chipPos << nodePos << numRegs;
 
         for (const auto& reg : regList)
@@ -238,10 +238,10 @@
 {
     // Get the Hostboot scratch registers from the primary processor.
 
-    uint32_t cfamAddr  = 0x283C;
+    uint32_t cfamAddr = 0x283C;
     uint32_t cfamValue = 0;
 
-    uint64_t scomAddr  = 0x4602F489;
+    uint64_t scomAddr = 0x4602F489;
     uint64_t scomValue = 0;
 
     auto priProc = util::pdbg::getPrimaryProcessor();
@@ -292,11 +292,11 @@
     // signature from the interrupted analysis. If data exists within those
     // registers a user data section will be created in the PEL to record it.
 
-    uint32_t reg9Addr  = 0x2980;
+    uint32_t reg9Addr = 0x2980;
     uint32_t reg10Addr = 0x2981;
 
     uint32_t chipId = 0; // stored in reg9
-    uint32_t sigId  = 0; // stored in reg10
+    uint32_t sigId = 0;  // stored in reg10
 
     auto priProc = util::pdbg::getPrimaryProcessor();
     if (nullptr == priProc)
diff --git a/analyzer/filter-root-cause.cpp b/analyzer/filter-root-cause.cpp
index 5daf7bd..d122a32 100644
--- a/analyzer/filter-root-cause.cpp
+++ b/analyzer/filter-root-cause.cpp
@@ -81,13 +81,13 @@
 {
     using namespace util::pdbg;
 
-    using func  = libhei::NodeId_t (*)(const std::string& i_str);
+    using func = libhei::NodeId_t (*)(const std::string& i_str);
     func __hash = libhei::hash<libhei::NodeId_t>;
 
-    static const auto mc_dstl_fir       = __hash("MC_DSTL_FIR");
-    static const auto mc_ustl_fir       = __hash("MC_USTL_FIR");
+    static const auto mc_dstl_fir = __hash("MC_DSTL_FIR");
+    static const auto mc_ustl_fir = __hash("MC_USTL_FIR");
     static const auto mc_omi_dl_err_rpt = __hash("MC_OMI_DL_ERR_RPT");
-    static const auto srqfir            = __hash("SRQFIR");
+    static const auto srqfir = __hash("SRQFIR");
 
     // First, look for any chip checkstops from the connected OCMBs.
     for (const auto& s : i_list)
@@ -267,8 +267,8 @@
     for (const auto& s : i_list)
     {
         const auto targetType = getTrgtType(getTrgt(s.getChip()));
-        const auto id         = s.getId();
-        const auto attnType   = s.getAttnType();
+        const auto id = s.getId();
+        const auto attnType = s.getAttnType();
 
         // Find any processor with chip checkstop attention that did not
         // originate from the PB_EXT_FIR.
@@ -290,20 +290,20 @@
 {
     using namespace util::pdbg;
 
-    using func  = libhei::NodeId_t (*)(const std::string& i_str);
+    using func = libhei::NodeId_t (*)(const std::string& i_str);
     func __hash = libhei::hash<libhei::NodeId_t>;
 
     // PROC registers
-    static const auto tp_local_fir        = __hash("TP_LOCAL_FIR");
-    static const auto occ_fir             = __hash("OCC_FIR");
-    static const auto pbao_fir            = __hash("PBAO_FIR");
-    static const auto n0_local_fir        = __hash("N0_LOCAL_FIR");
-    static const auto int_cq_fir          = __hash("INT_CQ_FIR");
-    static const auto nx_cq_fir           = __hash("NX_CQ_FIR");
-    static const auto nx_dma_eng_fir      = __hash("NX_DMA_ENG_FIR");
-    static const auto vas_fir             = __hash("VAS_FIR");
-    static const auto n1_local_fir        = __hash("N1_LOCAL_FIR");
-    static const auto mcd_fir             = __hash("MCD_FIR");
+    static const auto tp_local_fir = __hash("TP_LOCAL_FIR");
+    static const auto occ_fir = __hash("OCC_FIR");
+    static const auto pbao_fir = __hash("PBAO_FIR");
+    static const auto n0_local_fir = __hash("N0_LOCAL_FIR");
+    static const auto int_cq_fir = __hash("INT_CQ_FIR");
+    static const auto nx_cq_fir = __hash("NX_CQ_FIR");
+    static const auto nx_dma_eng_fir = __hash("NX_DMA_ENG_FIR");
+    static const auto vas_fir = __hash("VAS_FIR");
+    static const auto n1_local_fir = __hash("N1_LOCAL_FIR");
+    static const auto mcd_fir = __hash("MCD_FIR");
     static const auto pb_station_fir_en_1 = __hash("PB_STATION_FIR_EN_1");
     static const auto pb_station_fir_en_2 = __hash("PB_STATION_FIR_EN_2");
     static const auto pb_station_fir_en_3 = __hash("PB_STATION_FIR_EN_3");
@@ -312,49 +312,49 @@
     static const auto pb_station_fir_es_2 = __hash("PB_STATION_FIR_ES_2");
     static const auto pb_station_fir_es_3 = __hash("PB_STATION_FIR_ES_3");
     static const auto pb_station_fir_es_4 = __hash("PB_STATION_FIR_ES_4");
-    static const auto pb_station_fir_eq   = __hash("PB_STATION_FIR_EQ");
-    static const auto psihb_fir           = __hash("PSIHB_FIR");
-    static const auto pbaf_fir            = __hash("PBAF_FIR");
-    static const auto lpc_fir             = __hash("LPC_FIR");
-    static const auto eq_core_fir         = __hash("EQ_CORE_FIR");
-    static const auto eq_l2_fir           = __hash("EQ_L2_FIR");
-    static const auto eq_l3_fir           = __hash("EQ_L3_FIR");
-    static const auto eq_ncu_fir          = __hash("EQ_NCU_FIR");
-    static const auto eq_local_fir        = __hash("EQ_LOCAL_FIR");
-    static const auto eq_qme_fir          = __hash("EQ_QME_FIR");
-    static const auto iohs_local_fir      = __hash("IOHS_LOCAL_FIR");
-    static const auto iohs_dlp_fir_oc     = __hash("IOHS_DLP_FIR_OC");
-    static const auto iohs_dlp_fir_smp    = __hash("IOHS_DLP_FIR_SMP");
-    static const auto mc_local_fir        = __hash("MC_LOCAL_FIR");
-    static const auto mc_fir              = __hash("MC_FIR");
-    static const auto mc_dstl_fir         = __hash("MC_DSTL_FIR");
-    static const auto mc_ustl_fir         = __hash("MC_USTL_FIR");
-    static const auto nmmu_cq_fir         = __hash("NMMU_CQ_FIR");
-    static const auto nmmu_fir            = __hash("NMMU_FIR");
-    static const auto mc_omi_dl           = __hash("MC_OMI_DL");
-    static const auto pau_local_fir       = __hash("PAU_LOCAL_FIR");
-    static const auto pau_ptl_fir         = __hash("PAU_PTL_FIR");
-    static const auto pau_phy_fir         = __hash("PAU_PHY_FIR");
-    static const auto pau_fir_0           = __hash("PAU_FIR_0");
-    static const auto pau_fir_2           = __hash("PAU_FIR_2");
-    static const auto pci_local_fir       = __hash("PCI_LOCAL_FIR");
-    static const auto pci_iop_fir         = __hash("PCI_IOP_FIR");
-    static const auto pci_nest_fir        = __hash("PCI_NEST_FIR");
+    static const auto pb_station_fir_eq = __hash("PB_STATION_FIR_EQ");
+    static const auto psihb_fir = __hash("PSIHB_FIR");
+    static const auto pbaf_fir = __hash("PBAF_FIR");
+    static const auto lpc_fir = __hash("LPC_FIR");
+    static const auto eq_core_fir = __hash("EQ_CORE_FIR");
+    static const auto eq_l2_fir = __hash("EQ_L2_FIR");
+    static const auto eq_l3_fir = __hash("EQ_L3_FIR");
+    static const auto eq_ncu_fir = __hash("EQ_NCU_FIR");
+    static const auto eq_local_fir = __hash("EQ_LOCAL_FIR");
+    static const auto eq_qme_fir = __hash("EQ_QME_FIR");
+    static const auto iohs_local_fir = __hash("IOHS_LOCAL_FIR");
+    static const auto iohs_dlp_fir_oc = __hash("IOHS_DLP_FIR_OC");
+    static const auto iohs_dlp_fir_smp = __hash("IOHS_DLP_FIR_SMP");
+    static const auto mc_local_fir = __hash("MC_LOCAL_FIR");
+    static const auto mc_fir = __hash("MC_FIR");
+    static const auto mc_dstl_fir = __hash("MC_DSTL_FIR");
+    static const auto mc_ustl_fir = __hash("MC_USTL_FIR");
+    static const auto nmmu_cq_fir = __hash("NMMU_CQ_FIR");
+    static const auto nmmu_fir = __hash("NMMU_FIR");
+    static const auto mc_omi_dl = __hash("MC_OMI_DL");
+    static const auto pau_local_fir = __hash("PAU_LOCAL_FIR");
+    static const auto pau_ptl_fir = __hash("PAU_PTL_FIR");
+    static const auto pau_phy_fir = __hash("PAU_PHY_FIR");
+    static const auto pau_fir_0 = __hash("PAU_FIR_0");
+    static const auto pau_fir_2 = __hash("PAU_FIR_2");
+    static const auto pci_local_fir = __hash("PCI_LOCAL_FIR");
+    static const auto pci_iop_fir = __hash("PCI_IOP_FIR");
+    static const auto pci_nest_fir = __hash("PCI_NEST_FIR");
 
     // OCMB registers
     static const auto ocmb_lfir = __hash("OCMB_LFIR");
-    static const auto mmiofir   = __hash("MMIOFIR");
-    static const auto srqfir    = __hash("SRQFIR");
-    static const auto rdffir    = __hash("RDFFIR");
-    static const auto tlxfir    = __hash("TLXFIR");
-    static const auto omi_dl    = __hash("OMI_DL");
+    static const auto mmiofir = __hash("MMIOFIR");
+    static const auto srqfir = __hash("SRQFIR");
+    static const auto rdffir = __hash("RDFFIR");
+    static const auto tlxfir = __hash("TLXFIR");
+    static const auto omi_dl = __hash("OMI_DL");
 
     for (const auto& signature : i_list)
     {
         const auto targetType = getTrgtType(getTrgt(signature.getChip()));
-        const auto attnType   = signature.getAttnType();
-        const auto id         = signature.getId();
-        const auto bit        = signature.getBit();
+        const auto attnType = signature.getAttnType();
+        const auto id = signature.getId();
+        const auto bit = signature.getBit();
 
         // Only looking for recoverable or unit checkstop attentions.
         if (libhei::ATTN_TYPE_RECOVERABLE != attnType &&
diff --git a/analyzer/initialize_isolator.cpp b/analyzer/initialize_isolator.cpp
index e75f5b3..8d00ae5 100644
--- a/analyzer/initialize_isolator.cpp
+++ b/analyzer/initialize_isolator.cpp
@@ -39,9 +39,9 @@
         libhei::FileKeyword_t keyword;
         libhei::ChipType_t chipType;
 
-        const size_t sz_keyword  = sizeof(keyword);
+        const size_t sz_keyword = sizeof(keyword);
         const size_t sz_chipType = sizeof(chipType);
-        const size_t sz_buffer   = sz_keyword + sz_chipType;
+        const size_t sz_buffer = sz_keyword + sz_chipType;
 
         // Read the keyword and chip type from the file.
         char buffer[sz_buffer];
diff --git a/analyzer/plugins/p10-plugins.cpp b/analyzer/plugins/p10-plugins.cpp
index c841e21..1d5270f 100644
--- a/analyzer/plugins/p10-plugins.cpp
+++ b/analyzer/plugins/p10-plugins.cpp
@@ -33,17 +33,16 @@
     // in this case the bit position is the same as the plugin instance.
     auto itr = std::copy_if(sigList.begin(), sigList.end(), pllList.begin(),
                             [&nodeId, &i_instance](const auto& s) {
-                                return (nodeId == s.getId() &&
-                                        i_instance == s.getBit());
-                            });
+        return (nodeId == s.getId() && i_instance == s.getBit());
+    });
 
     // Shrink the size of the PLL list if necessary.
     pllList.resize(std::distance(pllList.begin(), itr));
 
     // The clock callout priority is dependent on the number of chips with PLL
     // unlock attentions.
-    auto clockPriority =
-        (1 < pllList.size()) ? callout::Priority::HIGH : callout::Priority::MED;
+    auto clockPriority = (1 < pllList.size()) ? callout::Priority::HIGH
+                                              : callout::Priority::MED;
 
     // Callout the clock.
     auto clockCallout = (0 == i_instance) ? callout::ClockType::OSC_REF_CLOCK_0
@@ -62,7 +61,7 @@
 void lpc_timeout_callout(const libhei::Chip& i_chip, ServiceData& io_servData)
 {
     auto target = util::pdbg::getTrgt(i_chip);
-    auto path   = util::pdbg::getPath(target);
+    auto path = util::pdbg::getPath(target);
 
     // Callout the PNOR.
     io_servData.calloutPart(callout::PartType::PNOR, callout::Priority::MED);
@@ -98,7 +97,7 @@
                  ServiceData& io_servData)
 {
     auto target = util::pdbg::getTrgt(i_chip);
-    auto path   = util::pdbg::getPath(target);
+    auto path = util::pdbg::getPath(target);
 
     if (util::pdbg::queryLpcTimeout(target))
     {
@@ -137,8 +136,8 @@
 {
     // Get the OMI target for this instance
     auto procTarget = util::pdbg::getTrgt(i_chip);
-    auto omiTarget =
-        util::pdbg::getChipUnit(procTarget, util::pdbg::TYPE_OMI, i_instance);
+    auto omiTarget = util::pdbg::getChipUnit(procTarget, util::pdbg::TYPE_OMI,
+                                             i_instance);
 
     if (nullptr != omiTarget)
     {
diff --git a/analyzer/plugins/p10-tod-plugins.cpp b/analyzer/plugins/p10-tod-plugins.cpp
index ad401d1..e7aecde 100644
--- a/analyzer/plugins/p10-tod-plugins.cpp
+++ b/analyzer/plugins/p10-tod-plugins.cpp
@@ -33,12 +33,12 @@
 class Data
 {
   public:
-    Data()                       = default;
-    ~Data()                      = default;
-    Data(const Data&)            = default;
-    Data(Data&&)                 = default;
+    Data() = default;
+    ~Data() = default;
+    Data(const Data&) = default;
+    Data(Data&&) = default;
     Data& operator=(const Data&) = default;
-    Data& operator=(Data&&)      = default;
+    Data& operator=(Data&&) = default;
 
   private:
     /** The MDMT chips at fault (only one per topology). */
@@ -122,8 +122,8 @@
 
 enum class Register
 {
-    TOD_ERROR           = 0x00040030,
-    TOD_PSS_MSS_STATUS  = 0x00040008,
+    TOD_ERROR = 0x00040030,
+    TOD_PSS_MSS_STATUS = 0x00040008,
     TOD_PRI_PORT_0_CTRL = 0x00040001,
     TOD_PRI_PORT_1_CTRL = 0x00040002,
     TOD_SEC_PORT_0_CTRL = 0x00040003,
@@ -165,8 +165,8 @@
     auto iohsUnit = getChipUnit(i_chipReportingError, TYPE_IOHS, i_iohsPos);
     if (nullptr != iohsUnit)
     {
-        auto clockSourceUnit =
-            getConnectedTarget(iohsUnit, callout::BusType::SMP_BUS);
+        auto clockSourceUnit = getConnectedTarget(iohsUnit,
+                                                  callout::BusType::SMP_BUS);
         if (nullptr != clockSourceUnit)
         {
             chipSourcingClock = getParentChip(clockSourceUnit);
@@ -226,7 +226,7 @@
         bool isPriTop = (Configuration::PRIMARY == topConfig[top]);
 
         // Determine if this is the MDMT chip.
-        bool isMasterTod    = statusReg.isBitSet(isPriTop ? 13 : 17);
+        bool isMasterTod = statusReg.isBitSet(isPriTop ? 13 : 17);
         bool isMasterDrawer = statusReg.isBitSet(isPriTop ? 14 : 18);
 
         if (isMasterDrawer && isMasterTod)
@@ -234,8 +234,8 @@
             // The master path selects are sourced from the oscilator reference
             // clocks. So, we'll need to determine which one was used at the
             // time of the failure.
-            auto masterPathSelect =
-                statusReg.getFieldRight(isPriTop ? 12 : 16, 1);
+            auto masterPathSelect = statusReg.getFieldRight(isPriTop ? 12 : 16,
+                                                            1);
 
             // Determine if there is a step check fault for this path select.
             if (errorReg.isBitSet((0 == masterPathSelect) ? 14 : 15))
@@ -254,8 +254,8 @@
             // The slave path selects are sourced from other processor chips.
             // So, we'll need to determine which one was used at the time of the
             // failure.
-            auto slavePathSelect =
-                statusReg.getFieldRight(isPriTop ? 15 : 19, 1);
+            auto slavePathSelect = statusReg.getFieldRight(isPriTop ? 15 : 19,
+                                                           1);
 
             // Determine if there is a step check fault for this path select.
             if (errorReg.isBitSet((0 == slavePathSelect) ? 16 : 21))
@@ -274,7 +274,7 @@
                     continue; // try the other topology
                 }
 
-                auto iohsPos           = portCtrl.getFieldRight(0, 3);
+                auto iohsPos = portCtrl.getFieldRight(0, 3);
                 auto chipSourcingClock = getChipSourcingClock(i_chip, iohsPos);
 
                 if (nullptr != chipSourcingClock)
@@ -336,9 +336,9 @@
 
     for (const auto top : {tod::Topology::ACTIVE, tod::Topology::BACKUP})
     {
-        auto mdmtFault      = data.getMdmtFault(top);
+        auto mdmtFault = data.getMdmtFault(top);
         auto internalFaults = data.getInteralFaults(top);
-        auto networkFaults  = data.getNetworkFaults(top);
+        auto networkFaults = data.getNetworkFaults(top);
 
         if (nullptr != mdmtFault) // MDMT fault
         {
diff --git a/analyzer/plugins/plugin.hpp b/analyzer/plugins/plugin.hpp
index 6947810..1a6062d 100644
--- a/analyzer/plugins/plugin.hpp
+++ b/analyzer/plugins/plugin.hpp
@@ -35,9 +35,9 @@
 // These are provided as know chip types for plugin definitions.
 constexpr libhei::ChipType_t EXPLORER_11 = 0x60d20011;
 constexpr libhei::ChipType_t EXPLORER_20 = 0x60d20020;
-constexpr libhei::ChipType_t ODYSSEY_10  = 0x60c00010;
-constexpr libhei::ChipType_t P10_10      = 0x20da0010;
-constexpr libhei::ChipType_t P10_20      = 0x20da0020;
+constexpr libhei::ChipType_t ODYSSEY_10 = 0x60c00010;
+constexpr libhei::ChipType_t P10_10 = 0x20da0010;
+constexpr libhei::ChipType_t P10_20 = 0x20da0020;
 
 /**
  * @brief This is simply a global container for all of the registered plugins.
diff --git a/analyzer/ras-data/ras-data-parser.cpp b/analyzer/ras-data/ras-data-parser.cpp
index c11eab8..de0a60d 100644
--- a/analyzer/ras-data/ras-data-parser.cpp
+++ b/analyzer/ras-data/ras-data-parser.cpp
@@ -63,7 +63,7 @@
         // If the action is another action, recursively call this function
         if ("action" == type)
         {
-            auto name   = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             o_isFlagSet = __checkActionForFlag(name, i_flag, i_data);
             if (o_isFlagSet)
             {
@@ -348,7 +348,7 @@
     if (bus.contains("unit"))
     {
         auto unit = bus.at("unit").get<std::string>();
-        unitPath  = i_data.at("units").at(unit).get<std::string>();
+        unitPath = i_data.at("units").at(unit).get<std::string>();
     }
 
     return std::make_tuple(busType, unitPath);
@@ -382,7 +382,7 @@
         else if ("callout_self" == type)
         {
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             std::string path{}; // Must be empty to callout the chip.
 
@@ -391,9 +391,9 @@
         }
         else if ("callout_unit" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             auto path = i_data.at("units").at(name).get<std::string>();
 
@@ -402,9 +402,9 @@
         }
         else if ("callout_connected" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             auto busData = parseBus(i_data, name);
 
@@ -414,9 +414,9 @@
         }
         else if ("callout_bus" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             auto busData = parseBus(i_data, name);
 
@@ -426,9 +426,9 @@
         }
         else if ("callout_clock" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             // clang-format off
             static const std::map<std::string, callout::ClockType> m =
@@ -444,7 +444,7 @@
         }
         else if ("callout_procedure" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
 
             // clang-format off
@@ -460,7 +460,7 @@
         }
         else if ("callout_part" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
 
             // clang-format off
diff --git a/analyzer/service_data.cpp b/analyzer/service_data.cpp
index c571ca5..62cd474 100644
--- a/analyzer/service_data.cpp
+++ b/analyzer/service_data.cpp
@@ -14,9 +14,9 @@
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Hardware Callout";
-    ffdc["Target"]       = util::pdbg::getPhysDevPath(i_target);
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
-    ffdc["Guard"]        = i_guard;
+    ffdc["Target"] = util::pdbg::getPhysDevPath(i_target);
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
+    ffdc["Guard"] = i_guard;
     addCalloutFFDC(ffdc);
     setSrcSubsystem(getTargetSubsystem(i_target), i_priority);
 }
@@ -36,11 +36,11 @@
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Connected Callout";
-    ffdc["Bus Type"]     = i_busType.getString();
-    ffdc["RX Target"]    = util::pdbg::getPhysDevPath(i_rxTarget);
-    ffdc["TX Target"]    = util::pdbg::getPhysDevPath(txTarget);
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
-    ffdc["Guard"]        = i_guard;
+    ffdc["Bus Type"] = i_busType.getString();
+    ffdc["RX Target"] = util::pdbg::getPhysDevPath(i_rxTarget);
+    ffdc["TX Target"] = util::pdbg::getPhysDevPath(txTarget);
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
+    ffdc["Guard"] = i_guard;
     addCalloutFFDC(ffdc);
     setSrcSubsystem(getTargetSubsystem(txTarget), i_priority);
 }
@@ -67,11 +67,11 @@
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Bus Callout";
-    ffdc["Bus Type"]     = i_busType.getString();
-    ffdc["RX Target"]    = util::pdbg::getPhysDevPath(i_rxTarget);
-    ffdc["TX Target"]    = util::pdbg::getPhysDevPath(txTarget);
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
-    ffdc["Guard"]        = i_guard;
+    ffdc["Bus Type"] = i_busType.getString();
+    ffdc["RX Target"] = util::pdbg::getPhysDevPath(i_rxTarget);
+    ffdc["TX Target"] = util::pdbg::getPhysDevPath(txTarget);
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
+    ffdc["Guard"] = i_guard;
     addCalloutFFDC(ffdc);
     setSrcSubsystem(i_busType.getSrcSubsystem(), i_priority);
 }
@@ -91,8 +91,8 @@
     // TODO: Add the target and guard type if guard is ever supported.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Clock Callout";
-    ffdc["Clock Type"]   = i_clockType.getString();
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
+    ffdc["Clock Type"] = i_clockType.getString();
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
     addCalloutFFDC(ffdc);
     setSrcSubsystem(i_clockType.getSrcSubsystem(), i_priority);
 }
@@ -105,14 +105,14 @@
     // Add the actual callout to the service data.
     nlohmann::json callout;
     callout["Procedure"] = i_procedure.getString();
-    callout["Priority"]  = callout::getString(i_priority);
+    callout["Priority"] = callout::getString(i_priority);
     addCallout(callout);
 
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Procedure Callout";
-    ffdc["Procedure"]    = i_procedure.getString();
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
+    ffdc["Procedure"] = i_procedure.getString();
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
     addCalloutFFDC(ffdc);
     setSrcSubsystem(i_procedure.getSrcSubsystem(), i_priority);
 }
@@ -137,8 +137,8 @@
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Part Callout";
-    ffdc["Part Type"]    = i_part.getString();
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
+    ffdc["Part Type"] = i_part.getString();
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
     addCalloutFFDC(ffdc);
     setSrcSubsystem(i_part.getSrcSubsystem(), i_priority);
 }
@@ -212,9 +212,9 @@
     nlohmann::json callout;
 
     callout["LocationCode"] = util::pdbg::getLocationCode(i_target);
-    callout["Priority"]     = callout::getString(i_priority);
+    callout["Priority"] = callout::getString(i_priority);
     callout["Deconfigured"] = false;
-    callout["Guarded"]      = false; // default
+    callout["Guarded"] = false; // default
 
     // Check if guard info should be added.
     if (i_guard)
@@ -223,9 +223,9 @@
 
         if (!(callout::GuardType::NONE == guardType))
         {
-            callout["Guarded"]    = true;
+            callout["Guarded"] = true;
             callout["EntityPath"] = util::pdbg::getPhysBinPath(i_target);
-            callout["GuardType"]  = guardType.getString();
+            callout["GuardType"] = guardType.getString();
         }
     }
 
@@ -243,9 +243,9 @@
     nlohmann::json callout;
 
     callout["LocationCode"] = "P0";
-    callout["Priority"]     = callout::getString(i_priority);
+    callout["Priority"] = callout::getString(i_priority);
     callout["Deconfigured"] = false;
-    callout["Guarded"]      = false;
+    callout["Guarded"] = false;
 
     addCallout(callout);
 }
@@ -276,7 +276,7 @@
         (callout::SrcSubsystem::CEC_HARDWARE == iv_srcSubsystem.first &&
          callout::Priority::LOW == iv_srcSubsystem.second))
     {
-        iv_srcSubsystem.first  = i_subsystem;
+        iv_srcSubsystem.first = i_subsystem;
         iv_srcSubsystem.second = i_priority;
     }
 }
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");
diff --git a/main.cpp b/main.cpp
index 8693c5b..c8f97ca 100644
--- a/main.cpp
+++ b/main.cpp
@@ -78,7 +78,7 @@
 
             // assume listener is not running
             bool listenerStarted = false;
-            bool newListener     = false;
+            bool newListener = false;
 
             pthread_t ptidListener; // handle to listener thread
 
@@ -93,7 +93,7 @@
                     pthread_create(&ptidListener, NULL, &threadListener, NULL))
                 {
                     listenerStarted = true;
-                    newListener     = true;
+                    newListener = true;
                 }
                 else
                 {
diff --git a/main_nl.cpp b/main_nl.cpp
index d4d4a99..ced828c 100644
--- a/main_nl.cpp
+++ b/main_nl.cpp
@@ -74,7 +74,7 @@
 
                 attn::attnHandler(&attnConfig); // handle pending attentions
 
-                attn::attnDaemon(&attnConfig); // start daemon
+                attn::attnDaemon(&attnConfig);  // start daemon
             }
         }
     }
diff --git a/test/test-attention.cpp b/test/test-attention.cpp
index 2b33a6d..b773f89 100644
--- a/test/test-attention.cpp
+++ b/test/test-attention.cpp
@@ -34,14 +34,14 @@
 // Attention type
 Attention::AttentionType gType = Attention::AttentionType::Special;
 // pointer to handler callback function
-int (*gHandler)(Attention*)   = &(handleSpecial);
+int (*gHandler)(Attention*) = &(handleSpecial);
 const AttentionFlag gAttnFlag = AttentionFlag::enBreakpoints;
 
 // Start preparation for UT case #1.
 
 // Global variables for UT #1
 const char* gPosPath = "/proc0/pib/perv12";
-const uint32_t gPos  = 12;
+const uint32_t gPos = 12;
 
 /** @brief Fixture class for TEST_F(). */
 class AttentionTestPos : public testing::Test
@@ -69,7 +69,7 @@
     }
 
     std::unique_ptr<Attention> pAttn;
-    Config* config      = nullptr;
+    Config* config = nullptr;
     pdbg_target* target = nullptr;
 };
 
@@ -85,7 +85,7 @@
     EXPECT_EQ(gPos, attr);
 
     // Verify the target in Attention object.
-    attr                    = std::numeric_limits<uint32_t>::max();
+    attr = std::numeric_limits<uint32_t>::max();
     pdbg_target* target_tmp = pAttn->getTarget();
     EXPECT_NE(nullptr, target_tmp);
     pdbg_target_get_attribute(target_tmp, "ATTR_FAPI_POS", 4, 1, &attr);
@@ -138,9 +138,9 @@
     }
 
     std::unique_ptr<Attention> pAttn;
-    Config* config      = nullptr;
+    Config* config = nullptr;
     pdbg_target* target = nullptr;
-    uint32_t attr       = std::numeric_limits<uint32_t>::max();
+    uint32_t attr = std::numeric_limits<uint32_t>::max();
 };
 
 TEST_F(AttentionTestProc, TestAttentionProc)
@@ -149,7 +149,7 @@
     EXPECT_EQ(RC_SUCCESS, pAttn->handle());
 
     // Verify the target in Attention object.
-    attr                    = std::numeric_limits<uint32_t>::max();
+    attr = std::numeric_limits<uint32_t>::max();
     pdbg_target* target_tmp = pAttn->getTarget();
     EXPECT_NE(nullptr, target_tmp);
     attr = getTrgtType(target_tmp);
@@ -199,4 +199,4 @@
     EXPECT_EQ(true, config->getFlag(enVital));
 
     delete config;
-}
\ No newline at end of file
+}
diff --git a/test/test-bin-stream.cpp b/test/test-bin-stream.cpp
index 209c778..7e25ec3 100644
--- a/test/test-bin-stream.cpp
+++ b/test/test-bin-stream.cpp
@@ -34,10 +34,10 @@
 
 TEST(BinStream, TestSet1)
 {
-    uint8_t w1      = 0x11;
-    uint16_t w2     = 0x1122;
-    uint32_t w3     = 0x11223344;
-    uint64_t w4     = 0x1122334455667788;
+    uint8_t w1 = 0x11;
+    uint16_t w2 = 0x1122;
+    uint32_t w3 = 0x11223344;
+    uint64_t w4 = 0x1122334455667788;
     RegisterId_t w5 = static_cast<RegisterId_t>(0x123456);
 
     {
diff --git a/test/test-cli.cpp b/test/test-cli.cpp
index f4c3a9a..35a0ed2 100644
--- a/test/test-cli.cpp
+++ b/test/test-cli.cpp
@@ -9,7 +9,7 @@
     // Test --all on options
     Config* config = new Config();
     char* argv[2];
-    int i     = 0;
+    int i = 0;
     argv[i++] = (char*)"--all";
     argv[i++] = (char*)"on";
     parseConfig(argv, argv + i, config);
@@ -24,7 +24,7 @@
     // Test --all off options
     // Set the dfltTi flag to default value.
     config->clearFlag(dfltTi);
-    i         = 0;
+    i = 0;
     argv[i++] = (char*)"--all";
     argv[i++] = (char*)"off";
     parseConfig(argv, argv + i, config);
@@ -43,7 +43,7 @@
     // Test options with on switch.
     Config* config = new Config();
     char* argv[11];
-    int i     = 0;
+    int i = 0;
     argv[i++] = (char*)"--vital";
     argv[i++] = (char*)"on";
     argv[i++] = (char*)"--checkstop";
@@ -69,7 +69,7 @@
     // Test options with off switch.
     // Set the dfltTi flag to default value.
     config->clearFlag(dfltTi);
-    i         = 0;
+    i = 0;
     argv[i++] = (char*)"--vital";
     argv[i++] = (char*)"off";
     argv[i++] = (char*)"--checkstop";
diff --git a/test/test-end2end.cpp b/test/test-end2end.cpp
index ff7d468..838eae3 100644
--- a/test/test-end2end.cpp
+++ b/test/test-end2end.cpp
@@ -62,9 +62,9 @@
 
         std::for_each(std::begin(attentions), std::end(attentions),
                       [](attn::Attention attention) {
-                          trace::inf("calling handler");
-                          attention.handle();
-                      });
+            trace::inf("calling handler");
+            attention.handle();
+        });
     }
 
     return rc;
diff --git a/test/test-pdbg-dts.cpp b/test/test-pdbg-dts.cpp
index 83d3f89..49c74fd 100644
--- a/test/test-pdbg-dts.cpp
+++ b/test/test-pdbg-dts.cpp
@@ -13,15 +13,15 @@
 
 TEST(PDBG, PdbgDtsTest1)
 {
-    const char* perv1_fapi_pos_path  = "/proc0/pib/perv1";
+    const char* perv1_fapi_pos_path = "/proc0/pib/perv1";
     const char* perv12_fapi_pos_path = "/proc0/pib/perv12";
-    const uint32_t perv1_fapi_pos    = 1;
-    const uint32_t perv12_fapi_pos   = 12;
+    const uint32_t perv1_fapi_pos = 1;
+    const uint32_t perv12_fapi_pos = 12;
 
     pdbg_targets_init(nullptr);
 
     trace::inf("retrieving fapi pos.");
-    uint32_t attr     = std::numeric_limits<uint32_t>::max();
+    uint32_t attr = std::numeric_limits<uint32_t>::max();
     pdbg_target* trgt = pdbg_target_from_path(nullptr, perv1_fapi_pos_path);
     pdbg_target_get_attribute(trgt, "ATTR_FAPI_POS", 4, 1, &attr);
     trace::inf("perv1 fapi pos in DTS: %u", attr);
@@ -38,13 +38,13 @@
 {
     const char* dimm0_path =
         "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0/mem_port0/dimm0";
-    const uint32_t index    = 0;
+    const uint32_t index = 0;
     const uint32_t fapi_pos = 0;
 
     pdbg_targets_init(nullptr);
 
     trace::inf("retrieving fapi pos.");
-    uint32_t attr     = std::numeric_limits<uint32_t>::max();
+    uint32_t attr = std::numeric_limits<uint32_t>::max();
     pdbg_target* trgt = pdbg_target_from_path(nullptr, dimm0_path);
     pdbg_target_get_attribute(trgt, "index", 4, 1, &attr);
     trace::inf("index in DTS: %u", attr);
@@ -58,7 +58,7 @@
 
 TEST(PDBG, PdbgDtsTest3)
 {
-    const uint32_t chipId  = 0; // ID for proc0.
+    const uint32_t chipId = 0;  // ID for proc0.
     const uint32_t fapiPos = 0; // FAPI Position for proc0.
 
     pdbg_targets_init(nullptr);
@@ -87,9 +87,9 @@
 
 TEST(PDBG, PdbgDtsTest4)
 {
-    const uint32_t index    = 1;
+    const uint32_t index = 1;
     const uint32_t fapi_pos = 1;
-    const char* perv1_path  = "/proc0/pib/perv1";
+    const char* perv1_path = "/proc0/pib/perv1";
 
     pdbg_targets_init(nullptr);
 
@@ -117,7 +117,7 @@
     pdbg_targets_init(nullptr);
 
     auto procChip = getTrgt("/proc0");
-    auto omiUnit  = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
+    auto omiUnit = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
 
     EXPECT_EQ(procChip, getParentChip(procChip)); // get self
     EXPECT_EQ(procChip, getParentChip(omiUnit));  // get unit
@@ -135,8 +135,8 @@
     using namespace util::pdbg;
     pdbg_targets_init(nullptr);
 
-    auto procChip   = getTrgt("/proc0");
-    auto omiUnit    = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
+    auto procChip = getTrgt("/proc0");
+    auto omiUnit = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
     auto omiUnitPos = 5;
 
     // Get the unit and verify.
@@ -173,14 +173,14 @@
 
     auto procChip = getTrgt("/proc0");
     auto ocmbChip = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1/ocmb0");
-    auto omiUnit  = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
+    auto omiUnit = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
 
     sim::ScomAccess& scom = sim::ScomAccess::getSingleton();
     scom.flush();
     scom.add(procChip, 0x11111111, 0x0011223344556677);
     scom.error(ocmbChip, 0x22222222);
 
-    int rc       = 0;
+    int rc = 0;
     uint64_t val = 0;
 
     // Test good path.
@@ -207,14 +207,14 @@
     pdbg_targets_init(nullptr);
 
     auto procChip = getTrgt("/proc0");
-    auto omiUnit  = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
+    auto omiUnit = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
 
     sim::CfamAccess& cfam = sim::CfamAccess::getSingleton();
     cfam.flush();
     cfam.add(procChip, 0x11111111, 0x00112233);
     cfam.error(procChip, 0x22222222);
 
-    int rc       = 0;
+    int rc = 0;
     uint32_t val = 0;
 
     // Test good path.
diff --git a/test/test-resolution.cpp b/test/test-resolution.cpp
index c759442..6898bc4 100644
--- a/test/test-resolution.cpp
+++ b/test/test-resolution.cpp
@@ -13,11 +13,11 @@
 constexpr auto chip_str = "/proc0";
 
 // Unit paths
-constexpr auto proc_str   = "";
+constexpr auto proc_str = "";
 constexpr auto iolink_str = "pib/perv26/pauc1/iohs0/smpgroup0";
-constexpr auto omi_str    = "pib/perv12/mc0/mi0/mcc0/omi0";
-constexpr auto ocmb_str   = "pib/perv12/mc0/mi0/mcc0/omi0/ocmb0";
-constexpr auto core_str   = "pib/perv39/eq7/fc1/core1";
+constexpr auto omi_str = "pib/perv12/mc0/mi0/mcc0/omi0";
+constexpr auto ocmb_str = "pib/perv12/mc0/mi0/mcc0/omi0/ocmb0";
+constexpr auto core_str = "pib/perv39/eq7/fc1/core1";
 
 using namespace analyzer;
 
diff --git a/test/test-tod-step-check-fault.cpp b/test/test-tod-step-check-fault.cpp
index de31f03..68ed39d 100644
--- a/test/test-tod-step-check-fault.cpp
+++ b/test/test-tod-step-check-fault.cpp
@@ -62,8 +62,8 @@
     ServiceData sd{sig1, AnalysisType::SYSTEM_CHECKSTOP, isoData};
 
     // Call the plugin.
-    auto plugin =
-        PluginMap::getSingleton().get(chip1.getType(), "tod_step_check_fault");
+    auto plugin = PluginMap::getSingleton().get(chip1.getType(),
+                                                "tod_step_check_fault");
 
     plugin(0, chip1, sd);
 
diff --git a/util/dbus.cpp b/util/dbus.cpp
index 0f0416e..166ee30 100644
--- a/util/dbus.cpp
+++ b/util/dbus.cpp
@@ -10,8 +10,8 @@
 {
 //------------------------------------------------------------------------------
 
-constexpr auto objectMapperService   = "xyz.openbmc_project.ObjectMapper";
-constexpr auto objectMapperPath      = "/xyz/openbmc_project/object_mapper";
+constexpr auto objectMapperService = "xyz.openbmc_project.ObjectMapper";
+constexpr auto objectMapperPath = "/xyz/openbmc_project/object_mapper";
 constexpr auto objectMapperInterface = "xyz.openbmc_project.ObjectMapper";
 
 constexpr uint8_t terminusIdZero = 0;
@@ -44,10 +44,10 @@
         {
             // Response is a map of object paths to a map of service, interfaces
             auto object = *(response.begin());
-            o_path      = object.first;                 // return path
-            o_service   = object.second.begin()->first; // return service
+            o_path = object.first;                    // return path
+            o_service = object.second.begin()->first; // return service
 
-            rc = 0; // success
+            rc = 0;                                   // success
         }
     }
     catch (const sdbusplus::exception::SdBusError& e)
@@ -115,7 +115,7 @@
     try
     {
         constexpr auto interface = "org.freedesktop.DBus.Properties";
-        constexpr auto function  = "Get";
+        constexpr auto function = "Get";
 
         // calling the get property method
         auto method = bus.new_method_call(i_service.c_str(), i_path.c_str(),
@@ -191,7 +191,7 @@
             target = "obmc-chassis-hard-poweroff@0.target";
         }
 
-        auto bus    = sdbusplus::bus::new_system();
+        auto bus = sdbusplus::bus::new_system();
         auto method = bus.new_method_call(
             "org.freedesktop.systemd1", "/org/freedesktop/systemd1",
             "org.freedesktop.systemd1.Manager", "StartUnit");
@@ -318,7 +318,7 @@
     bool dumpPolicyEnabled = true;
 
     constexpr auto interface = "xyz.openbmc_project.Object.Enable";
-    constexpr auto path      = "/xyz/openbmc_project/dump/system_dump_policy";
+    constexpr auto path = "/xyz/openbmc_project/dump/system_dump_policy";
 
     DBusService service; // will find this
 
@@ -350,7 +350,7 @@
 
     // Sdbus call specifics
     constexpr auto interface = "org.open_power.Logging.PEL";
-    constexpr auto path      = "/xyz/openbmc_project/logging";
+    constexpr auto path = "/xyz/openbmc_project/logging";
 
     // we need to find the service implementing the interface
     util::dbus::DBusService service;
@@ -428,9 +428,9 @@
             try
             {
                 // Format the vector into a single hex string to compare to.
-                std::string hexId =
-                    fmt::format("0x{:02x}{:02x}{:02x}{:02x}", ids.at(0),
-                                ids.at(1), ids.at(2), ids.at(3));
+                std::string hexId = fmt::format("0x{:02x}{:02x}{:02x}{:02x}",
+                                                ids.at(0), ids.at(1), ids.at(2),
+                                                ids.at(3));
 
                 std::map<std::string, MachineType> typeMap = {
                     {"0x50001000", MachineType::Rainier_2S4U},
@@ -467,10 +467,10 @@
 bool getStateEffecterPdrs(std::vector<std::vector<uint8_t>>& pdrList,
                           uint16_t stateSetId)
 {
-    constexpr auto service   = "xyz.openbmc_project.PLDM";
-    constexpr auto path      = "/xyz/openbmc_project/pldm";
+    constexpr auto service = "xyz.openbmc_project.PLDM";
+    constexpr auto path = "/xyz/openbmc_project/pldm";
     constexpr auto interface = "xyz.openbmc_project.PLDM.PDR";
-    constexpr auto function  = "FindStateEffecterPDR";
+    constexpr auto function = "FindStateEffecterPDR";
 
     constexpr uint16_t PLDM_ENTITY_PROC = 135;
 
@@ -478,8 +478,8 @@
     {
         // create dbus method
         auto bus = sdbusplus::bus::new_default();
-        sdbusplus::message_t method =
-            bus.new_method_call(service, path, interface, function);
+        sdbusplus::message_t method = bus.new_method_call(service, path,
+                                                          interface, function);
 
         // append additional method data
         method.append(terminusIdZero, PLDM_ENTITY_PROC, stateSetId);
@@ -502,10 +502,10 @@
 bool getStateSensorPdrs(std::vector<std::vector<uint8_t>>& pdrList,
                         uint16_t stateSetId)
 {
-    constexpr auto service   = "xyz.openbmc_project.PLDM";
-    constexpr auto path      = "/xyz/openbmc_project/pldm";
+    constexpr auto service = "xyz.openbmc_project.PLDM";
+    constexpr auto path = "/xyz/openbmc_project/pldm";
     constexpr auto interface = "xyz.openbmc_project.PLDM.PDR";
-    constexpr auto function  = "FindStateSensorPDR";
+    constexpr auto function = "FindStateSensorPDR";
 
     constexpr uint16_t PLDM_ENTITY_PROC = 135;
 
@@ -513,8 +513,8 @@
     {
         // create dbus method
         auto bus = sdbusplus::bus::new_default();
-        sdbusplus::message_t method =
-            bus.new_method_call(service, path, interface, function);
+        sdbusplus::message_t method = bus.new_method_call(service, path,
+                                                          interface, function);
 
         // append additional method data
         method.append(terminusIdZero, PLDM_ENTITY_PROC, stateSetId);
@@ -536,17 +536,17 @@
 /** @brief Get MCTP instance associated with endpoint */
 bool getMctpInstance(uint8_t& mctpInstance, uint8_t Eid)
 {
-    constexpr auto service   = "xyz.openbmc_project.PLDM";
-    constexpr auto path      = "/xyz/openbmc_project/pldm";
+    constexpr auto service = "xyz.openbmc_project.PLDM";
+    constexpr auto path = "/xyz/openbmc_project/pldm";
     constexpr auto interface = "xyz.openbmc_project.PLDM.Requester";
-    constexpr auto function  = "GetInstanceId";
+    constexpr auto function = "GetInstanceId";
 
     try
     {
         // create dbus method
         auto bus = sdbusplus::bus::new_default();
-        sdbusplus::message_t method =
-            bus.new_method_call(service, path, interface, function);
+        sdbusplus::message_t method = bus.new_method_call(service, path,
+                                                          interface, function);
 
         // append endpoint ID
         method.append(Eid);
diff --git a/util/dbus.hpp b/util/dbus.hpp
index bbc50ad..1bf0d44 100644
--- a/util/dbus.hpp
+++ b/util/dbus.hpp
@@ -11,12 +11,12 @@
 {
 namespace dbus
 {
-using DBusValue         = std::variant<std::string, bool, std::vector<uint8_t>,
+using DBusValue = std::variant<std::string, bool, std::vector<uint8_t>,
                                std::vector<std::string>, int32_t>;
-using DBusProperty      = std::string;
-using DBusInterface     = std::string;
-using DBusService       = std::string;
-using DBusPath          = std::string;
+using DBusProperty = std::string;
+using DBusInterface = std::string;
+using DBusService = std::string;
+using DBusPath = std::string;
 using DBusInterfaceList = std::vector<DBusInterface>;
 using DBusSubTree =
     std::map<DBusPath, std::map<DBusService, DBusInterfaceList>>;
diff --git a/util/ffdc.cpp b/util/ffdc.cpp
index e77012f..8f8069a 100644
--- a/util/ffdc.cpp
+++ b/util/ffdc.cpp
@@ -79,8 +79,8 @@
             if (value == fieldValue)
             {
                 // Get SYSLOG_IDENTIFIER field (process that logged message)
-                std::string syslog =
-                    sdjGetFieldValue(journal, "SYSLOG_IDENTIFIER");
+                std::string syslog = sdjGetFieldValue(journal,
+                                                      "SYSLOG_IDENTIFIER");
 
                 // Get _PID field
                 std::string pid = sdjGetFieldValue(journal, "_PID");
diff --git a/util/ffdc_file.hpp b/util/ffdc_file.hpp
index 64b5186..0e1e79e 100644
--- a/util/ffdc_file.hpp
+++ b/util/ffdc_file.hpp
@@ -37,12 +37,12 @@
 {
   public:
     // Specify which compiler-generated methods we want
-    FFDCFile()                           = delete;
-    FFDCFile(const FFDCFile&)            = delete;
-    FFDCFile(FFDCFile&&)                 = default;
+    FFDCFile() = delete;
+    FFDCFile(const FFDCFile&) = delete;
+    FFDCFile(FFDCFile&&) = default;
     FFDCFile& operator=(const FFDCFile&) = delete;
-    FFDCFile& operator=(FFDCFile&&)      = default;
-    ~FFDCFile()                          = default;
+    FFDCFile& operator=(FFDCFile&&) = default;
+    ~FFDCFile() = default;
 
     /**
      * Constructor.
@@ -164,10 +164,9 @@
 
     std::transform(i_files.begin(), i_files.end(), std::back_inserter(o_tuples),
                    [](const auto& e) {
-                       return FFDCTuple(
-                           e.getFormat(), e.getSubType(), e.getVersion(),
-                           sdbusplus::message::unix_fd(e.getFileDescriptor()));
-                   });
+        return FFDCTuple(e.getFormat(), e.getSubType(), e.getVersion(),
+                         sdbusplus::message::unix_fd(e.getFileDescriptor()));
+    });
 }
 
 } // namespace util
diff --git a/util/file_descriptor.hpp b/util/file_descriptor.hpp
index 0fc2690..663658f 100644
--- a/util/file_descriptor.hpp
+++ b/util/file_descriptor.hpp
@@ -19,8 +19,8 @@
 class FileDescriptor
 {
   public:
-    FileDescriptor()                                 = default;
-    FileDescriptor(const FileDescriptor&)            = delete;
+    FileDescriptor() = default;
+    FileDescriptor(const FileDescriptor&) = delete;
     FileDescriptor& operator=(const FileDescriptor&) = delete;
 
     /**
diff --git a/util/pdbg.cpp b/util/pdbg.cpp
index ab0b429..1ed25b0 100644
--- a/util/pdbg.cpp
+++ b/util/pdbg.cpp
@@ -222,19 +222,19 @@
         // Rainier 4U
         case util::dbus::MachineType::Rainier_2S4U:
         case util::dbus::MachineType::Rainier_1S4U:
-            filePath =
-                fs::path{PACKAGE_DIR "util-data/peer-targets-rainier-4u.json"};
+            filePath = fs::path{PACKAGE_DIR
+                                "util-data/peer-targets-rainier-4u.json"};
             break;
         // Rainier 2U
         case util::dbus::MachineType::Rainier_2S2U:
         case util::dbus::MachineType::Rainier_1S2U:
-            filePath =
-                fs::path{PACKAGE_DIR "util-data/peer-targets-rainier-2u.json"};
+            filePath = fs::path{PACKAGE_DIR
+                                "util-data/peer-targets-rainier-2u.json"};
             break;
         // Everest
         case util::dbus::MachineType::Everest:
-            filePath =
-                fs::path{PACKAGE_DIR "util-data/peer-targets-everest.json"};
+            filePath = fs::path{PACKAGE_DIR
+                                "util-data/peer-targets-everest.json"};
             break;
         default:
             trace::err("Invalid machine type found %d",
@@ -247,8 +247,8 @@
 
     try
     {
-        auto trgtMap         = nlohmann::json::parse(file);
-        std::string rxPath   = util::pdbg::getPath(i_rxTarget);
+        auto trgtMap = nlohmann::json::parse(file);
+        std::string rxPath = util::pdbg::getPath(i_rxTarget);
         std::string peerPath = trgtMap.at(rxPath).get<std::string>();
 
         o_peerTarget = util::pdbg::getTrgt(peerPath);
@@ -271,7 +271,7 @@
 
     pdbg_target* txTarget = nullptr;
 
-    auto rxType        = util::pdbg::getTrgtType(i_rxTarget);
+    auto rxType = util::pdbg::getTrgtType(i_rxTarget);
     std::string rxPath = util::pdbg::getPath(i_rxTarget);
 
     if (callout::BusType::SMP_BUS == i_busType &&
diff --git a/util/pdbg.hpp b/util/pdbg.hpp
index fa2e004..0b46c7d 100644
--- a/util/pdbg.hpp
+++ b/util/pdbg.hpp
@@ -23,24 +23,24 @@
 /** Chip target types. */
 enum TargetType_t : uint8_t
 {
-    TYPE_DIMM     = 0x03,
-    TYPE_PROC     = 0x05,
-    TYPE_CORE     = 0x07,
-    TYPE_NX       = 0x1e,
-    TYPE_EQ       = 0x23,
-    TYPE_PEC      = 0x2d,
-    TYPE_PHB      = 0x2e,
-    TYPE_MC       = 0x44,
-    TYPE_IOLINK   = 0x47,
-    TYPE_OMI      = 0x48,
-    TYPE_MCC      = 0x49,
-    TYPE_OMIC     = 0x4a,
-    TYPE_OCMB     = 0x4b,
+    TYPE_DIMM = 0x03,
+    TYPE_PROC = 0x05,
+    TYPE_CORE = 0x07,
+    TYPE_NX = 0x1e,
+    TYPE_EQ = 0x23,
+    TYPE_PEC = 0x2d,
+    TYPE_PHB = 0x2e,
+    TYPE_MC = 0x44,
+    TYPE_IOLINK = 0x47,
+    TYPE_OMI = 0x48,
+    TYPE_MCC = 0x49,
+    TYPE_OMIC = 0x4a,
+    TYPE_OCMB = 0x4b,
     TYPE_MEM_PORT = 0x4c,
-    TYPE_NMMU     = 0x4f,
-    TYPE_PAU      = 0x50,
-    TYPE_IOHS     = 0x51,
-    TYPE_PAUC     = 0x52,
+    TYPE_NMMU = 0x4f,
+    TYPE_PAU = 0x50,
+    TYPE_IOHS = 0x51,
+    TYPE_PAUC = 0x52,
 };
 
 /** @return The target associated with the given chip. */
diff --git a/util/pldm.cpp b/util/pldm.cpp
index cdf1cfd..2da382d 100644
--- a/util/pldm.cpp
+++ b/util/pldm.cpp
@@ -82,7 +82,7 @@
 
     // encode the message with state data
     auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
-    auto rc         = encode_set_state_effecter_states_req(
+    auto rc = encode_set_state_effecter_states_req(
         mctpInstance, effecterId, effecterCount, stateField.data(), requestMsg);
 
     if (rc != PLDM_SUCCESS)
@@ -136,7 +136,7 @@
         if (possibleStates->state_set_id == stateSetId)
         {
             sensorOffset = offset;
-            offsetFound  = true;
+            offsetFound = true;
             break;
         }
         possibleStatesPtr += sizeof(possibleStates->state_set_id) +
@@ -162,7 +162,7 @@
 
     // map sensor ID to zero based SBE instance
     unsigned int position = 0;
-    for (auto const& pair : entityInstMap)
+    for (const auto& pair : entityInstMap)
     {
         sensorInstanceMap.emplace(pair.second, position);
         position++;
@@ -213,9 +213,9 @@
 
         if (possibleStates->state_set_id == stateSetId)
         {
-            stateIdPos    = offset;
+            stateIdPos = offset;
             effecterCount = stateEffecterPDR->composite_effecter_count;
-            offsetFound   = true;
+            offsetFound = true;
             break;
         }
         possibleStatesPtr += sizeof(possibleStates->state_set_id) +
@@ -241,7 +241,7 @@
 
     // map zero based SBE instance to effecter ID
     unsigned int position = 0;
-    for (auto const& pair : entityInstMap)
+    for (const auto& pair : entityInstMap)
     {
         instanceToEffecterMap.emplace(position, pair.second);
         position++;
@@ -257,7 +257,7 @@
 
     // get effecter info
     std::map<unsigned int, uint16_t> sbeInstanceToEffecter;
-    uint8_t SBEEffecterCount            = 0;
+    uint8_t SBEEffecterCount = 0;
     uint8_t sbeMaintenanceStatePosition = 0;
 
     if (!fetchEffecterInfo(PLDM_OEM_IBM_SBE_MAINTENANCE_STATE,
@@ -300,8 +300,8 @@
     // register signal change listener
     std::string hresetStatus = "requested";
     constexpr auto interface = "xyz.openbmc_project.PLDM.Event";
-    constexpr auto path      = "/xyz/openbmc_project/pldm";
-    constexpr auto member    = "StateSensorEvent";
+    constexpr auto path = "/xyz/openbmc_project/pldm";
+    constexpr auto member = "StateSensorEvent";
 
     auto bus = sdbusplus::bus::new_default();
     std::unique_ptr<sdbusplus::bus::match_t> match =
@@ -312,41 +312,40 @@
                 sdbusplus::bus::match::rules::path(path) +
                 sdbusplus::bus::match::rules::interface(interface),
             [&](auto& msg) {
-                uint8_t sensorTid{};
-                uint16_t sensorId{};
-                uint8_t msgSensorOffset{};
-                uint8_t eventState{};
-                uint8_t previousEventState{};
+        uint8_t sensorTid{};
+        uint16_t sensorId{};
+        uint8_t msgSensorOffset{};
+        uint8_t eventState{};
+        uint8_t previousEventState{};
 
-                // get sensor event details
-                msg.read(sensorTid, sensorId, msgSensorOffset, eventState,
-                         previousEventState);
+        // get sensor event details
+        msg.read(sensorTid, sensorId, msgSensorOffset, eventState,
+                 previousEventState);
 
-                // does sensor offset match?
-                if (sbeSensorOffset == msgSensorOffset)
+        // does sensor offset match?
+        if (sbeSensorOffset == msgSensorOffset)
+        {
+            // does sensor ID match?
+            auto sensorEntry = sensorToSbeInstance.find(sensorId);
+            if (sensorEntry != sensorToSbeInstance.end())
+            {
+                const uint8_t instance = sensorEntry->second;
+
+                // if instances matche check status
+                if (instance == sbeInstance)
                 {
-                    // does sensor ID match?
-                    auto sensorEntry = sensorToSbeInstance.find(sensorId);
-                    if (sensorEntry != sensorToSbeInstance.end())
+                    if (eventState == static_cast<uint8_t>(SBE_HRESET_READY))
                     {
-                        const uint8_t instance = sensorEntry->second;
-
-                        // if instances matche check status
-                        if (instance == sbeInstance)
-                        {
-                            if (eventState ==
-                                static_cast<uint8_t>(SBE_HRESET_READY))
-                            {
-                                hresetStatus = "success";
-                            }
-                            else if (eventState ==
-                                     static_cast<uint8_t>(SBE_HRESET_FAILED))
-                            {
-                                hresetStatus = "fail";
-                            }
-                        }
+                        hresetStatus = "success";
+                    }
+                    else if (eventState ==
+                             static_cast<uint8_t>(SBE_HRESET_FAILED))
+                    {
+                        hresetStatus = "fail";
                     }
                 }
+            }
+        }
             });
 
     // send request to issue hreset of sbe
diff --git a/util/temporary_file.cpp b/util/temporary_file.cpp
index 0bd4d08..68b1d24 100644
--- a/util/temporary_file.cpp
+++ b/util/temporary_file.cpp
@@ -14,8 +14,8 @@
 TemporaryFile::TemporaryFile()
 {
     // Build template path required by mkstemp()
-    std::string templatePath =
-        fs::temp_directory_path() / "openpower-hw-diags-XXXXXX";
+    std::string templatePath = fs::temp_directory_path() /
+                               "openpower-hw-diags-XXXXXX";
 
     // Generate unique file name, create file, and open it.  The XXXXXX
     // characters are replaced by mkstemp() to make the file name unique.
diff --git a/util/temporary_file.hpp b/util/temporary_file.hpp
index df0ab3c..3065401 100644
--- a/util/temporary_file.hpp
+++ b/util/temporary_file.hpp
@@ -26,7 +26,7 @@
 {
   public:
     // Specify which compiler-generated methods we want
-    TemporaryFile(const TemporaryFile&)            = delete;
+    TemporaryFile(const TemporaryFile&) = delete;
     TemporaryFile& operator=(const TemporaryFile&) = delete;
 
     /**
