diff --git a/extensions/openpower-pels/data_interface.cpp b/extensions/openpower-pels/data_interface.cpp
index e6b95a3..0e31b0e 100644
--- a/extensions/openpower-pels/data_interface.cpp
+++ b/extensions/openpower-pels/data_interface.cpp
@@ -44,8 +44,8 @@
 constexpr auto ledGroupManager = "xyz.openbmc_project.LED.GroupManager";
 constexpr auto logSetting = "xyz.openbmc_project.Settings";
 constexpr auto hwIsolation = "org.open_power.HardwareIsolation";
-constexpr auto bootRawProgress = "xyz.openbmc_project.State.Boot.Raw";
 constexpr auto biosConfigMgr = "xyz.openbmc_project.BIOSConfigManager";
+constexpr auto bootRawProgress = "xyz.openbmc_project.State.Boot.Raw";
 } // namespace service_name
 
 namespace object_path
@@ -65,8 +65,8 @@
 constexpr auto vpdManager = "/com/ibm/VPD/Manager";
 constexpr auto logSetting = "/xyz/openbmc_project/logging/settings";
 constexpr auto hwIsolation = "/xyz/openbmc_project/hardware_isolation";
-constexpr auto bootRawSetting = "/xyz/openbmc_project/state/boot/raw0";
 constexpr auto biosConfigMgr = "/xyz/openbmc_project/bios_config/manager";
+constexpr auto bootRawProgress = "/xyz/openbmc_project/state/boot/raw0";
 } // namespace object_path
 
 namespace interface
@@ -96,10 +96,10 @@
 constexpr auto dumpEntry = "xyz.openbmc_project.Dump.Entry";
 constexpr auto dumpProgress = "xyz.openbmc_project.Common.Progress";
 constexpr auto hwIsolationCreate = "org.open_power.HardwareIsolation.Create";
-constexpr auto bootRawProgress = "xyz.openbmc_project.State.Boot.Raw";
 constexpr auto hwIsolationEntry = "xyz.openbmc_project.HardwareIsolation.Entry";
 constexpr auto association = "xyz.openbmc_project.Association";
 constexpr auto biosConfigMgr = "xyz.openbmc_project.BIOSConfig.Manager";
+constexpr auto bootRawProgress = "xyz.openbmc_project.State.Boot.Raw";
 } // namespace interface
 
 using namespace sdbusplus::xyz::openbmc_project::State::Boot::server;
@@ -769,7 +769,7 @@
     DBusValue variant = std::make_tuple(priSRC, srcStruct);
 
     auto method = _bus.new_method_call(service_name::bootRawProgress,
-                                       object_path::bootRawSetting,
+                                       object_path::bootRawProgress,
                                        interface::dbusProperty, "Set");
 
     method.append(interface::bootRawProgress, "Value", variant);
@@ -868,5 +868,18 @@
     }
     return ids;
 }
+
+std::vector<uint8_t> DataInterface::getRawProgressSRC(void) const
+{
+    using RawProgressProperty = std::tuple<uint64_t, std::vector<uint8_t>>;
+
+    DBusValue value;
+    getProperty(service_name::bootRawProgress, object_path::bootRawProgress,
+                interface::bootRawProgress, "Value", value);
+
+    const auto& rawProgress = std::get<RawProgressProperty>(value);
+    return std::get<1>(rawProgress);
+}
+
 } // namespace pels
 } // namespace openpower
diff --git a/extensions/openpower-pels/data_interface.hpp b/extensions/openpower-pels/data_interface.hpp
index e66cd0c..dbc4874 100644
--- a/extensions/openpower-pels/data_interface.hpp
+++ b/extensions/openpower-pels/data_interface.hpp
@@ -462,6 +462,14 @@
      */
     virtual std::vector<uint32_t> getLogIDWithHwIsolation() const = 0;
 
+    /**
+     * @brief Returns the latest raw progress SRC from the State.Boot.Raw
+     *        D-Bus interface.
+     *
+     * @return std::vector<uint8_t> - The progress SRC bytes
+     */
+    virtual std::vector<uint8_t> getRawProgressSRC() const = 0;
+
   protected:
     /**
      * @brief Sets the host on/off state and runs any
@@ -780,6 +788,14 @@
      */
     std::vector<uint32_t> getLogIDWithHwIsolation() const override;
 
+    /**
+     * @brief Returns the latest raw progress SRC from the State.Boot.Raw
+     *        D-Bus interface.
+     *
+     * @return std::vector<uint8_t>: The progress SRC bytes
+     */
+    std::vector<uint8_t> getRawProgressSRC() const override;
+
   private:
     /**
      * @brief Reads the BMC firmware version string and puts it into
diff --git a/extensions/openpower-pels/src.cpp b/extensions/openpower-pels/src.cpp
index 33e6082..75b291a 100644
--- a/extensions/openpower-pels/src.cpp
+++ b/extensions/openpower-pels/src.cpp
@@ -347,6 +347,7 @@
     //   P: Platform dump status
     //  FF: SRC format, set below
 
+    setProgressCode(dataIface);
     setDumpStatus(dataIface);
     setBMCFormat();
     setBMCPosition();
@@ -1507,5 +1508,56 @@
     return data;
 }
 
+void SRC::setProgressCode(const DataInterfaceBase& dataIface)
+{
+    std::vector<uint8_t> progressSRC;
+
+    try
+    {
+        progressSRC = dataIface.getRawProgressSRC();
+    }
+    catch (const std::exception& e)
+    {
+        log<level::ERR>(
+            fmt::format("Error getting progress code: {}", e.what()).c_str());
+        return;
+    }
+
+    _hexData[2] = getProgressCode(progressSRC);
+}
+
+uint32_t SRC::getProgressCode(std::vector<uint8_t>& rawProgressSRC)
+{
+    uint32_t progressCode = 0;
+
+    // A valid progress SRC is at least 72 bytes
+    if (rawProgressSRC.size() < 72)
+    {
+        return progressCode;
+    }
+
+    try
+    {
+        // The ASCII string field in progress SRCs starts at offset 40.
+        // Take the first 8 characters to put in the uint32:
+        //   "CC009189" -> 0xCC009189
+        Stream stream{rawProgressSRC, 40};
+        src::AsciiString aString{stream};
+        auto progressCodeString = aString.get().substr(0, 8);
+
+        if (std::all_of(progressCodeString.begin(), progressCodeString.end(),
+                        [](char c) {
+                            return std::isxdigit(static_cast<unsigned char>(c));
+                        }))
+        {
+            progressCode = std::stoul(progressCodeString, nullptr, 16);
+        }
+    }
+    catch (const std::exception& e)
+    {}
+
+    return progressCode;
+}
+
 } // namespace pels
 } // namespace openpower
diff --git a/extensions/openpower-pels/src.hpp b/extensions/openpower-pels/src.hpp
index 62b7699..3e6e519 100644
--- a/extensions/openpower-pels/src.hpp
+++ b/extensions/openpower-pels/src.hpp
@@ -298,6 +298,16 @@
      */
     std::vector<uint8_t> getSrcStruct();
 
+    /**
+     * @brief Extracts the first 8 characters of the ASCII String field
+     *        from the raw progress SRC and converts it to a uint32_t.
+     *
+     * @param[in] rawProgressSRC - The progress SRC bytes
+     *
+     * @return uint32_t - The code, like 0xCC0099EE from "CC0099EE"
+     */
+    static uint32_t getProgressCode(std::vector<uint8_t>& rawProgressSRC);
+
   private:
     /**
      * @brief Fills in the user defined hex words from the
@@ -367,6 +377,13 @@
     void setMotherboardCCIN(const DataInterfaceBase& dataIface);
 
     /**
+     * @brief Sets the progress code hex word field
+     *
+     * @param[in] dataIface - The DataInterface object
+     */
+    void setProgressCode(const DataInterfaceBase& dataIface);
+
+    /**
      * @brief Sets an error status bit in the SRC.
      *
      * @param[in] flag - The flag to set
