diff --git a/extensions/phal/clock_logger.cpp b/extensions/phal/clock_logger.cpp
index 6376988..1afdcf5 100644
--- a/extensions/phal/clock_logger.cpp
+++ b/extensions/phal/clock_logger.cpp
@@ -165,7 +165,6 @@
 void Manager::addCFAMData(struct pdbg_target* proc,
                           openpower::pel::FFDCData& clockDataLog)
 {
-
     // collect Processor CFAM register data
     const std::vector<int> procCFAMAddr = {
         0x1007, 0x2804, 0x2810, 0x2813, 0x2814, 0x2815, 0x2816, 0x281D, 0x281E};
diff --git a/extensions/phal/create_pel.cpp b/extensions/phal/create_pel.cpp
index c834419..95ee7ae 100644
--- a/extensions/phal/create_pel.cpp
+++ b/extensions/phal/create_pel.cpp
@@ -104,11 +104,11 @@
                             static_cast<uint8_t>(0xCA),
                             static_cast<uint8_t>(0x01), ffdcFile.getFileFD()));
 
-        std::string service =
-            util::getService(bus, loggingObjectPath, loggingInterface);
-        auto method =
-            bus.new_method_call(service.c_str(), loggingObjectPath,
-                                loggingInterface, "CreateWithFFDCFiles");
+        std::string service = util::getService(bus, loggingObjectPath,
+                                               loggingInterface);
+        auto method = bus.new_method_call(service.c_str(), loggingObjectPath,
+                                          loggingInterface,
+                                          "CreateWithFFDCFiles");
         auto level =
             sdbusplus::xyz::openbmc_project::Logging::server::convertForMessage(
                 severity);
@@ -204,11 +204,11 @@
 
     try
     {
-        std::string service =
-            util::getService(bus, loggingObjectPath, opLoggingInterface);
-        auto method =
-            bus.new_method_call(service.c_str(), loggingObjectPath,
-                                opLoggingInterface, "CreatePELWithFFDCFiles");
+        std::string service = util::getService(bus, loggingObjectPath,
+                                               opLoggingInterface);
+        auto method = bus.new_method_call(service.c_str(), loggingObjectPath,
+                                          opLoggingInterface,
+                                          "CreatePELWithFFDCFiles");
         auto level =
             sdbusplus::xyz::openbmc_project::Logging::server::convertForMessage(
                 severity);
@@ -253,8 +253,8 @@
 
     try
     {
-        std::string service =
-            util::getService(bus, loggingObjectPath, loggingInterface);
+        std::string service = util::getService(bus, loggingObjectPath,
+                                               loggingInterface);
         auto method = bus.new_method_call(service.c_str(), loggingObjectPath,
                                           loggingInterface, "Create");
         auto level =
diff --git a/extensions/phal/dump_utils.cpp b/extensions/phal/dump_utils.cpp
index 11051ae..61bdd92 100644
--- a/extensions/phal/dump_utils.cpp
+++ b/extensions/phal/dump_utils.cpp
@@ -73,7 +73,7 @@
             sdbusplus::bus::match::rules::propertiesChanged(
                 path.c_str(), matchInterface.c_str()),
             [&](auto& msg) {
-                return dumpStatusChanged(msg, path, inProgress);
+        return dumpStatusChanged(msg, path, inProgress);
             });
 
     // wait for dump status to be completed (complete == true)
@@ -115,8 +115,8 @@
     try
     {
         std::string service = util::getService(bus, path, interface);
-        auto method =
-            bus.new_method_call(service.c_str(), path, interface, function);
+        auto method = bus.new_method_call(service.c_str(), path, interface,
+                                          function);
 
         // dbus call arguments
         std::map<std::string, std::variant<std::string, uint64_t>> createParams;
diff --git a/extensions/phal/pdbg_utils.cpp b/extensions/phal/pdbg_utils.cpp
index 7dfc5cb..db62522 100644
--- a/extensions/phal/pdbg_utils.cpp
+++ b/extensions/phal/pdbg_utils.cpp
@@ -21,7 +21,6 @@
 
 pdbg_target* getFsiTarget(struct pdbg_target* procTarget)
 {
-
     struct pdbg_target* fsiTarget = nullptr;
     pdbg_for_each_target("fsi", procTarget, fsiTarget)
     {
@@ -68,7 +67,6 @@
 uint32_t getCFAM(struct pdbg_target* procTarget, const uint32_t reg,
                  uint32_t& val)
 {
-
     pdbg_target* fsiTarget = getFsiTarget(procTarget);
     if (nullptr == fsiTarget)
     {
diff --git a/extensions/phal/phal_error.cpp b/extensions/phal/phal_error.cpp
index b01985f..81ef6be 100644
--- a/extensions/phal/phal_error.cpp
+++ b/extensions/phal/phal_error.cpp
@@ -389,8 +389,8 @@
                      json jsonCalloutData;
                      std::string pelPriority = "L";
                      jsonCalloutData["Priority"] = pelPriority; // Not used
-                     jsonCalloutData["SymbolicFRU"] =
-                         "REFCLK" + std::to_string(clk_pos);
+                     jsonCalloutData["SymbolicFRU"] = "REFCLK" +
+                                                      std::to_string(clk_pos);
                      jsonCalloutData["Deconfigured"] = cdg_tgt.deconfigure;
                      jsonCalloutData["EntityPath"] = cdg_tgt.target_entity_path;
                      jsonCalloutDataList.emplace_back(jsonCalloutData);
@@ -928,8 +928,8 @@
     uint32_t index = pdbg_target_index(procTarget);
     pelAdditionalData.emplace_back("SRC6", std::to_string(index << 16));
     // Create SBE Error with FFDC data.
-    auto logId =
-        createSbeErrorPEL(event, sbeError, pelAdditionalData, procTarget);
+    auto logId = createSbeErrorPEL(event, sbeError, pelAdditionalData,
+                                   procTarget);
 
     if (dumpIsRequired)
     {
