diff --git a/attn/attn_common.cpp b/attn/attn_common.cpp
index fce3d54..4f333e8 100644
--- a/attn/attn_common.cpp
+++ b/attn/attn_common.cpp
@@ -1,8 +1,12 @@
 #include <libpdbg.h>
 
 #include <attn/attn_common.hpp>
+#include <attn/attn_logging.hpp>
 #include <sdbusplus/bus.hpp>
+#include <util/pdbg.hpp>
 
+#include <iomanip>
+#include <iostream>
 #include <map>
 
 namespace attn
@@ -34,4 +38,76 @@
     bus.call_noreply(method); // start the service
 }
 
+/** @brief Traces some regs for hostboot */
+void addHbStatusRegs()
+{
+    // Only do this for P10 systems
+    if (util::pdbg::queryHardwareAnalysisSupported())
+    {
+        // We only need this for PRIMARY processor
+        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;
+        uint64_t l_scomData1 = 0xFFFFFFFFFFFFFFFFull;
+        uint64_t l_scomData2 = 0xFFFFFFFFFFFFFFFFull;
+        uint32_t l_cfamAddr  = 0x283C;
+        uint64_t l_scomAddr1 = 0x4602F489;
+        uint64_t l_scomAddr2 = 0x4602F487;
+
+        if ((nullptr != fsiTarget) && (nullptr != pibTarget))
+        {
+            // get first debug reg (CFAM)
+            if (RC_SUCCESS != fsi_read(fsiTarget, l_cfamAddr, &l_cfamData))
+            {
+                eventAttentionFail((int)AttnSection::addHbStatusRegs |
+                                   ATTN_PDBG_CFAM);
+                l_cfamData = 0xFFFFFFFF;
+            }
+
+            // Get SCOM regs next (just 2 of them)
+            if (RC_SUCCESS != pib_read(pibTarget, l_scomAddr1, &l_scomData1))
+            {
+                eventAttentionFail((int)AttnSection::addHbStatusRegs |
+                                   ATTN_PDBG_SCOM);
+                l_scomData1 = 0xFFFFFFFFFFFFFFFFull;
+            }
+
+            if (RC_SUCCESS != pib_read(pibTarget, l_scomAddr2, &l_scomData2))
+            {
+                eventAttentionFail((int)AttnSection::addHbStatusRegs |
+                                   ATTN_PDBG_SCOM);
+                l_scomData2 = 0xFFFFFFFFFFFFFFFFull;
+            }
+        }
+
+        // Trace out the results here of all 3 regs
+        // (Format should resemble FSP: HostBoot Reg:0000283C  Data:AA801504
+        // 00000000  Proc:00050001 )
+        std::stringstream ss1, ss2, ss3;
+
+        ss1 << "HostBoot Reg:" << std::setw(8) << std::setfill('0') << std::hex
+            << l_cfamAddr << " Data:" << l_cfamData << " Proc:00000000";
+
+        ss2 << "HostBoot Reg:" << std::setw(8) << std::setfill('0') << std::hex
+            << l_scomAddr1 << " Data:" << std::setw(16) << l_scomData1
+            << " Proc:00000000";
+
+        ss3 << "HostBoot Reg:" << std::setw(8) << std::setfill('0') << std::hex
+            << l_scomAddr2 << " Data:" << std::setw(16) << l_scomData2
+            << " Proc:00000000";
+
+        std::string strobj1 = ss1.str();
+        std::string strobj2 = ss2.str();
+        std::string strobj3 = ss3.str();
+
+        trace<level::INFO>(strobj1.c_str());
+        trace<level::INFO>(strobj2.c_str());
+        trace<level::INFO>(strobj3.c_str());
+    }
+
+    return;
+
+} // end addHbStatusRegs
+
 } // namespace attn
