diff --git a/extensions/phal/clock_logger.cpp b/extensions/phal/clock_logger.cpp
index 4bda427..399b01f 100644
--- a/extensions/phal/clock_logger.cpp
+++ b/extensions/phal/clock_logger.cpp
@@ -150,10 +150,44 @@
         ssECVal << "0x" << std::setfill('0') << std::setw(10) << std::hex
                 << (uint16_t)ecVal;
         clockDataLog.push_back(std::make_pair(ssEC.str(), ssECVal.str()));
+
+        // Add CFAM register information.
+        addCFAMData(procTarget, clockDataLog);
     }
 
     openpower::pel::createPEL("org.open_power.PHAL.Info.ClockDailyLog",
                               clockDataLog);
 }
 
+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};
+
+    auto index = std::to_string(pdbg_target_index(proc));
+
+    for (int addr : procCFAMAddr)
+    {
+        auto val = 0xDEADBEEF;
+        try
+        {
+            val = openpower::phal::pdbg::getCFAM(proc, addr);
+        }
+        catch (const std::exception& e)
+        {
+            error("getCFAM on {TARGET} thrown exception({ERROR}): Addr ({REG})",
+                  "TARGET", pdbg_target_path(proc), "ERROR", e, "REG", addr);
+        }
+        std::stringstream ssData;
+        ssData << "0x" << std::setfill('0') << std::setw(8) << std::hex << val;
+        std::stringstream ssAddr;
+        ssAddr << "Proc" << index << " REG 0x" << std::hex << addr;
+        // update the data
+        clockDataLog.push_back(make_pair(ssAddr.str(), ssData.str()));
+    }
+}
+
 } // namespace openpower::phal::clock
diff --git a/extensions/phal/clock_logger.hpp b/extensions/phal/clock_logger.hpp
index a9982d1..2d56cef 100644
--- a/extensions/phal/clock_logger.hpp
+++ b/extensions/phal/clock_logger.hpp
@@ -66,6 +66,15 @@
      */
     void createClockDataLog();
 
+    /**
+     * @brief Add processor specific CFAM data to daily logger.
+     *
+     * @param[in] proc - pdbg processor target
+     * @param[out] ffdcData - reference to clock data log
+     */
+    void addCFAMData(struct pdbg_target* proc,
+                     openpower::pel::FFDCData& clockDataLog);
+
   private:
     /* The sdeventplus even loop to use */
     sdeventplus::Event _event;
