diff --git a/tools/handler.cpp b/tools/handler.cpp
index cc73e13..d241b9f 100644
--- a/tools/handler.cpp
+++ b/tools/handler.cpp
@@ -52,15 +52,15 @@
 {
     std::vector<std::string> blobs = blob->getBlobList();
 
-    auto blobInst = std::find_if(
-        blobs.begin(), blobs.end(), [&goalFirmware](const std::string& iter) {
-            /* Running into weird scenarios where the string comparison doesn't
-             * work.  TODO: revisit.
-             */
-            return (0 == std::memcmp(goalFirmware.c_str(), iter.c_str(),
-                                     goalFirmware.length()));
-            // return (goalFirmware.compare(iter));
-        });
+    auto blobInst = std::find_if(blobs.begin(), blobs.end(),
+                                 [&goalFirmware](const std::string& iter) {
+        /* Running into weird scenarios where the string comparison doesn't
+         * work.  TODO: revisit.
+         */
+        return (0 == std::memcmp(goalFirmware.c_str(), iter.c_str(),
+                                 goalFirmware.length()));
+        // return (goalFirmware.compare(iter));
+    });
     if (blobInst == blobs.end())
     {
         std::fprintf(stderr, "%s not found\n", goalFirmware.c_str());
diff --git a/tools/helper.cpp b/tools/helper.cpp
index 3388a29..15c363f 100644
--- a/tools/helper.cpp
+++ b/tools/helper.cpp
@@ -163,10 +163,10 @@
         }
     }
 
-    auto srcMem8 =
-        reinterpret_cast<const volatile std::uint8_t*>(source) + bytesCopied;
-    auto destMem8 =
-        reinterpret_cast<volatile std::uint8_t*>(destination) + bytesCopied;
+    auto srcMem8 = reinterpret_cast<const volatile std::uint8_t*>(source) +
+                   bytesCopied;
+    auto destMem8 = reinterpret_cast<volatile std::uint8_t*>(destination) +
+                    bytesCopied;
 
     for (i = bytesCopied; i < size; i++)
     {
diff --git a/tools/io.cpp b/tools/io.cpp
index 9af8ace..c84a8b3 100644
--- a/tools/io.cpp
+++ b/tools/io.cpp
@@ -38,8 +38,8 @@
         return false;
     }
 
-    void* alignedSource =
-        static_cast<std::uint8_t*>(devMemMapped) + alignedDiff;
+    void* alignedSource = static_cast<std::uint8_t*>(devMemMapped) +
+                          alignedDiff;
 
     /* Copy the bytes. */
     std::memcpy(destination, alignedSource, length);
@@ -78,8 +78,8 @@
         return false;
     }
 
-    void* alignedDestination =
-        static_cast<std::uint8_t*>(devMemMapped) + alignedDiff;
+    void* alignedDestination = static_cast<std::uint8_t*>(devMemMapped) +
+                               alignedDiff;
 
     /* Copy the bytes. */
     std::memcpy(alignedDestination, source, length);
diff --git a/tools/lpc.cpp b/tools/lpc.cpp
index c7f4013..e415331 100644
--- a/tools/lpc.cpp
+++ b/tools/lpc.cpp
@@ -125,8 +125,8 @@
 
         do
         {
-            bytesRead =
-                sys->read(inputFd, readBuffer.get(), host_lpc_buf.length);
+            bytesRead = sys->read(inputFd, readBuffer.get(),
+                                  host_lpc_buf.length);
             if (bytesRead > 0)
             {
                 if (!io->write(host_lpc_buf.address, bytesRead,
diff --git a/tools/main.cpp b/tools/main.cpp
index 1ce68a4..5bda3a0 100644
--- a/tools/main.cpp
+++ b/tools/main.cpp
@@ -80,8 +80,8 @@
 
 bool checkInterface(const std::string& interface)
 {
-    auto intf =
-        std::find(interfaceList.begin(), interfaceList.end(), interface);
+    auto intf = std::find(interfaceList.begin(), interfaceList.end(),
+                          interface);
     return (intf != interfaceList.end());
 }
 
@@ -226,8 +226,8 @@
         /* Input has already been validated in this case. */
         if (interface == IPMIBT)
         {
-            handler =
-                std::make_unique<host_tool::BtDataHandler>(&blob, &progress);
+            handler = std::make_unique<host_tool::BtDataHandler>(&blob,
+                                                                 &progress);
         }
         else if (interface == IPMINET)
         {
diff --git a/tools/progress.cpp b/tools/progress.cpp
index 68b31cc..3904efc 100644
--- a/tools/progress.cpp
+++ b/tools/progress.cpp
@@ -39,10 +39,8 @@
     currentBytes = 0;
 }
 
-void ProgressStdoutIndicator::finish()
-{}
+void ProgressStdoutIndicator::finish() {}
 
-void ProgressStdoutIndicator::abort()
-{}
+void ProgressStdoutIndicator::abort() {}
 
 } // namespace host_tool
diff --git a/tools/test/data_interface_mock.hpp b/tools/test/data_interface_mock.hpp
index c69de72..a533a32 100644
--- a/tools/test/data_interface_mock.hpp
+++ b/tools/test/data_interface_mock.hpp
@@ -9,7 +9,6 @@
 
 class DataInterfaceMock : public DataInterface
 {
-
   public:
     virtual ~DataInterfaceMock() = default;
 
diff --git a/tools/test/io_unittest.cpp b/tools/test/io_unittest.cpp
index 492c699..2a3f90c 100644
--- a/tools/test/io_unittest.cpp
+++ b/tools/test/io_unittest.cpp
@@ -21,8 +21,7 @@
 class DevMemTest : public ::testing::Test
 {
   protected:
-    DevMemTest() : devmem(std::make_unique<DevMemDevice>(&sys_mock))
-    {}
+    DevMemTest() : devmem(std::make_unique<DevMemDevice>(&sys_mock)) {}
 
     internal::InternalSysMock sys_mock;
     std::unique_ptr<DevMemDevice> devmem;
@@ -104,8 +103,7 @@
   protected:
     static constexpr char path[] = "/dev/fun";
 
-    PpcMemTest() : devmem(std::make_unique<PpcMemDevice>(path, &sys_mock))
-    {}
+    PpcMemTest() : devmem(std::make_unique<PpcMemDevice>(path, &sys_mock)) {}
 
     internal::InternalSysMock sys_mock;
     std::unique_ptr<PpcMemDevice> devmem;
diff --git a/tools/test/tools_helper_unittest.cpp b/tools/test/tools_helper_unittest.cpp
index cfe5208..572e136 100644
--- a/tools/test/tools_helper_unittest.cpp
+++ b/tools/test/tools_helper_unittest.cpp
@@ -51,8 +51,8 @@
 {
     ipmiblob::StatResponse blobResponse = {};
     /* the other details of the response are ignored, and should be. */
-    blobResponse.blob_state =
-        blobs::StateFlags::open_read | blobs::StateFlags::committed;
+    blobResponse.blob_state = blobs::StateFlags::open_read |
+                              blobs::StateFlags::committed;
 
     EXPECT_CALL(blobMock, getStat(TypedEq<std::uint16_t>(session)))
         .WillOnce(Return(blobResponse));
diff --git a/tools/test/tools_pci_unittest.cpp b/tools/test/tools_pci_unittest.cpp
index c3ce610..96a204a 100644
--- a/tools/test/tools_pci_unittest.cpp
+++ b/tools/test/tools_pci_unittest.cpp
@@ -338,8 +338,8 @@
 INSTANTIATE_TEST_SUITE_P(Default, PciSetupTest,
                          ::testing::Values(&nuvotonDevice, &aspeedDevice),
                          [](const testing::TestParamInfo<Device*>& info) {
-                             return info.param->getName();
-                         });
+    return info.param->getName();
+});
 
 TEST(NuvotonWriteTest, TooLarge)
 {
@@ -660,8 +660,8 @@
 
     {
         std::vector<std::uint8_t> enabledRegion(mockRegionSize);
-        enabledRegion[AspeedDevice::config] =
-            defaultVal | AspeedDevice::bridgeEnabled;
+        enabledRegion[AspeedDevice::config] = defaultVal |
+                                              AspeedDevice::bridgeEnabled;
         EXPECT_THAT(region, ContainerEq(enabledRegion));
     }
 
@@ -689,13 +689,13 @@
     expectSetup(pciMock, dev, &aspeedDevice, region.data());
 
     /* Setting skipBridgeDisable to true */
-    std::unique_ptr<PciBridgeIntf> bridge =
-        aspeedDevice.getBridge(&pciMock, true);
+    std::unique_ptr<PciBridgeIntf> bridge = aspeedDevice.getBridge(&pciMock,
+                                                                   true);
 
     {
         std::vector<std::uint8_t> enabledRegion(mockRegionSize);
-        enabledRegion[AspeedDevice::config] =
-            defaultVal | AspeedDevice::bridgeEnabled;
+        enabledRegion[AspeedDevice::config] = defaultVal |
+                                              AspeedDevice::bridgeEnabled;
         EXPECT_THAT(region, ContainerEq(enabledRegion));
     }
 
@@ -703,8 +703,8 @@
 
     {
         std::vector<std::uint8_t> disabledRegion(mockRegionSize);
-        disabledRegion[AspeedDevice::config] =
-            defaultVal | AspeedDevice::bridgeEnabled;
+        disabledRegion[AspeedDevice::config] = defaultVal |
+                                               AspeedDevice::bridgeEnabled;
         EXPECT_THAT(region, ContainerEq(disabledRegion));
     }
 }
@@ -726,8 +726,8 @@
 
     {
         std::vector<std::uint8_t> enabledRegion(mockRegionSize);
-        enabledRegion[AspeedDevice::config] =
-            defaultVal | AspeedDevice::bridgeEnabled;
+        enabledRegion[AspeedDevice::config] = defaultVal |
+                                              AspeedDevice::bridgeEnabled;
         EXPECT_THAT(region, ContainerEq(enabledRegion));
     }
 
diff --git a/tools/test/tools_updater_unittest.cpp b/tools/test/tools_updater_unittest.cpp
index e04cde8..ac21a1e 100644
--- a/tools/test/tools_updater_unittest.cpp
+++ b/tools/test/tools_updater_unittest.cpp
@@ -204,8 +204,8 @@
     EXPECT_CALL(blobMock, openBlob(ipmi_flash::biosVersionBlobId, _))
         .WillOnce(Return(session));
     ipmiblob::StatResponse readVersionResponse = {};
-    readVersionResponse.blob_state =
-        blobs::StateFlags::open_read | blobs::StateFlags::committed;
+    readVersionResponse.blob_state = blobs::StateFlags::open_read |
+                                     blobs::StateFlags::committed;
     readVersionResponse.size = 10;
     EXPECT_CALL(blobMock, getStat(TypedEq<std::uint16_t>(session)))
         .WillOnce(Return(readVersionResponse));
@@ -222,8 +222,8 @@
     EXPECT_CALL(blobMock, openBlob(ipmi_flash::biosVersionBlobId, _))
         .WillOnce(Return(session));
     ipmiblob::StatResponse readVersionResponse = {};
-    readVersionResponse.blob_state =
-        blobs::StateFlags::open_read | blobs::StateFlags::committed;
+    readVersionResponse.blob_state = blobs::StateFlags::open_read |
+                                     blobs::StateFlags::committed;
     readVersionResponse.size = 10;
     EXPECT_CALL(blobMock, getStat(TypedEq<std::uint16_t>(session)))
         .WillOnce(Return(readVersionResponse));
