diff --git a/recipes-phosphor/dump/phosphor-debug-collector/0003-phosphor-dump-manager-multihost-support.patch b/recipes-phosphor/dump/phosphor-debug-collector/0003-phosphor-dump-manager-multihost-support.patch
index 346e831..6cf5f7d 100644
--- a/recipes-phosphor/dump/phosphor-debug-collector/0003-phosphor-dump-manager-multihost-support.patch
+++ b/recipes-phosphor/dump/phosphor-debug-collector/0003-phosphor-dump-manager-multihost-support.patch
@@ -1,20 +1,20 @@
-From 3c91b950cb34b4fc085182d2b0c67f4658811810 Mon Sep 17 00:00:00 2001
+From 7a3c006e65d172f8d26fd30240904671ca27abd2 Mon Sep 17 00:00:00 2001
 From: Jimmy Chang <cmchang@google.com>
 Date: Mon, 8 Dec 2025 15:13:09 +0000
-Subject: [PATCH 1/3] phosphor dump manager multihost support
+Subject: [PATCH 1/5] phosphor dump manager multihost support
 
 ---
- dump_manager_faultlog.cpp | 224 ++++++++++++++++++++++++++++++++++----
- dump_manager_faultlog.hpp |  53 +++++++--
- dump_manager_main.cpp     |  26 +++--
- faultlog_dump_entry.cpp   |   4 +
- faultlog_dump_entry.hpp   |  29 +++--
+ dump_manager_faultlog.cpp | 247 ++++++++++++++++++++++++++++++++++----
+ dump_manager_faultlog.hpp |  56 +++++++--
+ dump_manager_main.cpp     |  26 ++--
+ faultlog_dump_entry.cpp   |   7 +-
+ faultlog_dump_entry.hpp   |  32 +++--
  meson.build               |   3 +
  meson.options             |   5 +
- 7 files changed, 299 insertions(+), 45 deletions(-)
+ 7 files changed, 328 insertions(+), 48 deletions(-)
 
 diff --git a/dump_manager_faultlog.cpp b/dump_manager_faultlog.cpp
-index c4e80be..246344e 100644
+index c4e80be..45b7f5b 100644
 --- a/dump_manager_faultlog.cpp
 +++ b/dump_manager_faultlog.cpp
 @@ -45,10 +45,13 @@ sdbusplus::message::object_path
@@ -32,7 +32,7 @@
  
      // To stay within the limit of MAX_NUM_FAULT_LOG_ENTRIES we need to remove
      // an entry from the fault log map to make room for creating a new entry
-@@ -60,6 +63,82 @@ sdbusplus::message::object_path
+@@ -60,6 +63,90 @@ sdbusplus::message::object_path
          saveEarliestEntry();
      }
  
@@ -88,26 +88,34 @@
 +        auto it = faultIdTable.find(faultId);
 +        if (it != faultIdTable.end())
 +        {
-+            auto& entry = dynamic_cast<faultlog::Entry&>(*entries.at(it->second));
-+            switch (decide(entry))
++            auto entryIt = entries.find(it->second);
++            if (entryIt != entries.end())
 +            {
-+                case Action::Duplicate:
-+                    lg2::info("Duplicate faultlog detected");
-+                    return (std::filesystem::path(baseEntryPath) /
-+                            std::to_string(entry.getDumpId()))
-+                        .string();
++                auto& entry = dynamic_cast<faultlog::Entry&>(*entryIt->second);
++                switch (decide(entry))
++                {
++                    case Action::Duplicate:
++                        lg2::info("Duplicate faultlog detected");
++                        return (std::filesystem::path(baseEntryPath) /
++                                std::to_string(entry.getDumpId()))
++                            .string();
 +
-+                case Action::Ignore:
-+                    lg2::info("Ignore lower priority faultlog");
-+                    return (std::filesystem::path(baseEntryPath) /
-+                            std::to_string(entry.getDumpId()))
-+                        .string();
++                    case Action::Ignore:
++                        lg2::info("Ignore lower priority faultlog");
++                        return (std::filesystem::path(baseEntryPath) /
++                                std::to_string(entry.getDumpId()))
++                            .string();
 +
-+                case Action::Replace:
-+                    isEntryReplaced = true;
-+                    id = it->second;
-+                    entry.delete_();
-+                    break;
++                    case Action::Replace:
++                        isEntryReplaced = true;
++                        id = it->second;
++                        entry.delete_();
++                        break;
++                }
++            }
++            else
++            {
++                faultIdTable.erase(it);
 +            }
 +        }
 +    }
@@ -115,7 +123,7 @@
      // Get the originator id and type from params
      std::string originatorId;
      originatorTypes originatorType;
-@@ -67,8 +146,6 @@ sdbusplus::message::object_path
+@@ -67,8 +154,6 @@ sdbusplus::message::object_path
      phosphor::dump::extractOriginatorProperties(params, originatorId,
                                                  originatorType);
  
@@ -124,18 +132,19 @@
      auto idString = std::to_string(id);
      auto objPath = std::filesystem::path(baseEntryPath) / idString;
  
-@@ -76,8 +153,9 @@ sdbusplus::message::object_path
+@@ -76,8 +161,9 @@ sdbusplus::message::object_path
          std::format("next entry id: {}, entries.size(): {}", id, entries.size())
              .c_str());
  
-+    const std::string hostprefix = IsMultiHost() ? hostId + "_" : "";
-     std::filesystem::path faultLogFilePath(std::string(FAULTLOG_DUMP_PATH) +
+-    std::filesystem::path faultLogFilePath(std::string(FAULTLOG_DUMP_PATH) +
 -                                           idString);
-+                                           hostprefix + idString);
++    const std::string hostprefix = IsMultiHost() ? hostId + "_" : "";
++    std::filesystem::path faultLogFilePath =
++        std::filesystem::path(FAULTLOG_DUMP_PATH) / (hostprefix + idString);
      std::ofstream faultLogFile;
  
      errno = 0;
-@@ -87,10 +165,18 @@ sdbusplus::message::object_path
+@@ -87,10 +173,18 @@ sdbusplus::message::object_path
  
      if (faultLogFile.is_open())
      {
@@ -157,7 +166,7 @@
  
          faultLogFile.close();
      }
-@@ -107,14 +193,14 @@ sdbusplus::message::object_path
+@@ -107,14 +201,15 @@ sdbusplus::message::object_path
      try
      {
          lg2::info("dump_manager_faultlog.cpp: add faultlog entry");
@@ -176,11 +185,12 @@
 +                                   faultLogFilePath,
 +                                   phosphor::dump::OperationStatus::Completed,
 +                                   originatorId, originatorType, entryType,
-+                                   primaryLogIdStr, *this, &entries, faultId)));
++                                   primaryLogIdStr, *this, &entries,
++                                   &faultIdTable, faultId)));
      }
      catch (const std::invalid_argument& e)
      {
-@@ -124,7 +210,10 @@ sdbusplus::message::object_path
+@@ -124,7 +219,10 @@ sdbusplus::message::object_path
          elog<InternalFailure>();
      }
  
@@ -192,7 +202,15 @@
  
      lg2::info("End of dump_manager_faultlog.cpp createDump");
      return objPath.string();
-@@ -205,9 +294,10 @@ void Manager::registerCrashdumpAddedMatch()
+@@ -173,6 +271,7 @@ void Manager::deleteAll()
+ 
+     deleteAllSavedEntries(savedCperLogEntries);
+     deleteAllSavedEntries(savedCrashdumpEntries);
++    faultIdTable.clear();
+ }
+ 
+ void Manager::registerFaultLogMatches()
+@@ -205,9 +304,10 @@ void Manager::registerCrashdumpAddedMatch()
      }
      else if (std::string(CRASHDUMP_FORMAT) == "AMD")
      {
@@ -204,7 +222,7 @@
      }
      else
      {
-@@ -412,21 +502,66 @@ void Manager::registerCperLogMatch()
+@@ -412,21 +512,75 @@ void Manager::registerCperLogMatch()
  void Manager::createDumpFromCrashdumpSignal(sdbusplus::message_t& msg)
  {
      std::string objpath = msg.get_path();
@@ -266,7 +284,17 @@
 +    crashdumpMap.insert(std::pair<std::string, std::string>("PrimaryLogId",
 +                                                             filename));
  
-     createDump(crashdumpMap);
+-    createDump(crashdumpMap);
++    try
++    {
++        createDump(crashdumpMap);
++    }
++    catch (const std::exception& e)
++    {
++        lg2::error(
++            "Failed to create fault log dump from crashdump signal, errormsg: {ERROR}",
++            "ERROR", e);
++    }
  }
  
  void Manager::getAndCheckCreateDumpParams(
@@ -276,7 +304,7 @@
  {
      using InvalidArgument =
          sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
-@@ -507,6 +642,51 @@ void Manager::getAndCheckCreateDumpParams(
+@@ -507,6 +661,51 @@ void Manager::getAndCheckCreateDumpParams(
  
          primaryLogIdStr = value;
      }
@@ -329,7 +357,7 @@
  
  uint64_t Manager::generateTimestamp()
 diff --git a/dump_manager_faultlog.hpp b/dump_manager_faultlog.hpp
-index db65e0f..3af2e32 100644
+index db65e0f..87a818b 100644
 --- a/dump_manager_faultlog.hpp
 +++ b/dump_manager_faultlog.hpp
 @@ -10,6 +10,7 @@
@@ -405,8 +433,13 @@
    private:
      static constexpr uint32_t MAX_NUM_FAULT_LOG_ENTRIES =
          MAX_TOTAL_FAULT_LOG_ENTRIES - MAX_NUM_SAVED_CRASHDUMP_ENTRIES -
-@@ -99,6 +128,10 @@ class Manager :
+@@ -97,8 +126,15 @@ class Manager :
+     std::map<uint32_t, std::unique_ptr<phosphor::dump::Entry>>
+         savedCrashdumpEntries;
  
++    /** @brief Table mapping fault ID to dump ID */
++    std::unordered_map<uint64_t, uint32_t> faultIdTable;
++
      /** @brief Path to the dump file*/
      std::string dumpDir;
 +    /** @brief host Id of this manager */
@@ -416,7 +449,7 @@
  
      /** @brief D-Bus match for signal indicating crashdump was added*/
      std::unique_ptr<sdbusplus::bus::match_t> crashdumpAddedMatch;
-@@ -139,10 +172,16 @@ class Manager :
+@@ -139,10 +175,16 @@ class Manager :
       *  @param[out] entryType - Log entry type (corresponding to type of data in
       * primary fault data log)
       *  @param[out] primaryLogIdStr - Id of primary fault data log
@@ -472,37 +505,33 @@
  
          // Restore dbus objects of all dumps
 diff --git a/faultlog_dump_entry.cpp b/faultlog_dump_entry.cpp
-index f9b25a5..daa0a6d 100644
+index f9b25a5..75a22de 100644
 --- a/faultlog_dump_entry.cpp
 +++ b/faultlog_dump_entry.cpp
-@@ -24,6 +24,10 @@ void Entry::delete_()
+@@ -22,7 +22,12 @@ void Entry::delete_()
+         lg2::error("Failed to delete dump file, errormsg: {ERROR}", "ERROR", e);
+     }
  
-     // Remove Dump entry D-bus object
-     parentMap->erase(id);
-+    if (this->faultId != 0)
+-    // Remove Dump entry D-bus object
++    if (this->faultId != 0 && this->faultIdTableMap != nullptr)
 +    {
-+        faultIdTable.erase(this->faultId);
++        this->faultIdTableMap->erase(this->faultId);
 +    }
++
++    // Remove Dump entry D-bus object (this deallocates `this`)
+     parentMap->erase(id);
  }
  
- } // namespace faultlog
 diff --git a/faultlog_dump_entry.hpp b/faultlog_dump_entry.hpp
-index 0d49dfd..fc29ac9 100644
+index 0d49dfd..60198ae 100644
 --- a/faultlog_dump_entry.hpp
 +++ b/faultlog_dump_entry.hpp
-@@ -27,6 +27,8 @@ using EntryIfaces = sdbusplus::server::object_t<
- using FaultLogTypes = sdbusplus::common::xyz::openbmc_project::common::
-     FaultLogType::FaultLogTypes;
- 
-+inline std::unordered_map<uint64_t, uint32_t> faultIdTable;
-+
- class Manager;
- 
- /** @class Entry
-@@ -56,23 +58,29 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
+@@ -56,23 +56,32 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
       *  @param[in] originatorId - Id of the originator of the dump
       *  @param[in] originatorType - Originator type
       *  @param[in] parent - The dump entry's parent.
++     *  @param[in] parentMap - Fault log map containing this entry.
++     *  @param[in] faultIdTableMap - Table mapping fault ID to dump ID.
 +     *  @param[in] faultId - Fault id (adopted only in server3 / multi-host
 +     * platforms, defaults to 0 if not provided).
       */
@@ -521,27 +550,30 @@
 +          originatorTypes originatorType, FaultLogTypes entryType,
 +          const std::string& primaryLogIdStr, phosphor::dump::Manager& parent,
 +          std::map<uint32_t, std::unique_ptr<phosphor::dump::Entry>>* parentMap,
++          std::unordered_map<uint64_t, uint32_t>* faultIdTableMap = nullptr,
 +          uint64_t faultId = 0) :
          phosphor::dump::Entry(bus, objPath.c_str(), dumpId, timeStamp, fileSize,
                                file, status, originatorId, originatorType,
                                parent),
          EntryIfaces(bus, objPath.c_str(), EntryIfaces::action::defer_emit),
 -        parentMap(parentMap)
-+        parentMap(parentMap), faultId(faultId)
++        parentMap(parentMap), faultIdTableMap(faultIdTableMap), faultId(faultId)
      {
          type(entryType);
          primaryLogId(primaryLogIdStr);
-+        if (faultId != 0)
++        if (faultId != 0 && faultIdTableMap != nullptr)
 +        {
-+            faultIdTable.emplace(faultId, dumpId);
++            faultIdTableMap->emplace(faultId, dumpId);
 +        }
  
          // Emit deferred signal.
          this->phosphor::dump::faultlog::EntryIfaces::emit_object_added();
-@@ -86,6 +94,9 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
+@@ -86,6 +95,11 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
      /** @brief Fault log map containing this entry (e.g. the main fault log map
       * or a saved entries map) */
      std::map<uint32_t, std::unique_ptr<phosphor::dump::Entry>>* parentMap;
++    /** @brief Table mapping fault ID to dump ID */
++    std::unordered_map<uint64_t, uint32_t>* faultIdTableMap;
 +    /** @brief Fault ID of primary fault data log (adopted only in server3 /
 +     * multi-host platforms) */
 +    uint64_t faultId;
@@ -579,5 +611,5 @@
          value : '/run/bmcweb/redfish/v1/Systems/system/LogServices/',
          description : 'File system path containing CPER logs'
 -- 
-2.55.0.679.g6767b8d81c-goog
+2.55.0.897.gb25b4bd76c-goog
 
diff --git a/recipes-phosphor/dump/phosphor-debug-collector/0004-add-iliad-cper-signal-handler.patch b/recipes-phosphor/dump/phosphor-debug-collector/0004-add-iliad-cper-signal-handler.patch
index a48fabb..6b4f297 100644
--- a/recipes-phosphor/dump/phosphor-debug-collector/0004-add-iliad-cper-signal-handler.patch
+++ b/recipes-phosphor/dump/phosphor-debug-collector/0004-add-iliad-cper-signal-handler.patch
@@ -1,7 +1,7 @@
-From 54cf95f9ef7e7c48988e5c2df9367105c0581c4a Mon Sep 17 00:00:00 2001
+From 44be7fffd541ff2c144052a193c31509d4aca6a1 Mon Sep 17 00:00:00 2001
 From: Changming Liu <cmliu@google.com>
 Date: Wed, 12 Nov 2025 19:12:01 +0000
-Subject: [PATCH 2/3] add iliad cper signal handler
+Subject: [PATCH 2/5] add iliad cper signal handler
 
 adapt to IliadCPER type for faultlog entry addition and deletion
 
@@ -14,7 +14,7 @@
  4 files changed, 177 insertions(+), 2 deletions(-)
 
 diff --git a/dump_manager_faultlog.cpp b/dump_manager_faultlog.cpp
-index 246344e..35bd5b8 100644
+index 45b7f5b..3fafe02 100644
 --- a/dump_manager_faultlog.cpp
 +++ b/dump_manager_faultlog.cpp
 @@ -40,6 +40,16 @@ using ChangedPropertiesType =
@@ -34,7 +34,7 @@
  sdbusplus::message::object_path
      Manager::createDump(phosphor::dump::DumpCreateParams params)
  {
-@@ -174,6 +184,10 @@ sdbusplus::message::object_path
+@@ -182,6 +192,10 @@ sdbusplus::message::object_path
          {
              logType = "CPER";
          }
@@ -45,7 +45,7 @@
  
          faultLogFile << "Fault log file type " << logType << " id "
                       << primaryLogIdStr << std::endl;
-@@ -270,6 +284,7 @@ void Manager::registerFaultLogMatches()
+@@ -280,6 +294,7 @@ void Manager::registerFaultLogMatches()
  
      registerAllCrashdumpMatches();
      registerCperLogMatch();
@@ -53,7 +53,7 @@
  }
  
  void Manager::registerAllCrashdumpMatches()
-@@ -499,6 +514,138 @@ void Manager::registerCperLogMatch()
+@@ -509,6 +524,138 @@ void Manager::registerCperLogMatch()
          });
  }
  
@@ -192,7 +192,7 @@
  void Manager::createDumpFromCrashdumpSignal(sdbusplus::message_t& msg)
  {
      std::string objpath = msg.get_path();
-@@ -600,9 +747,15 @@ void Manager::getAndCheckCreateDumpParams(
+@@ -619,9 +766,15 @@ void Manager::getAndCheckCreateDumpParams(
          {
              entryType = FaultLogTypes::CPER;
          }
@@ -210,7 +210,7 @@
                                    Argument::ARGUMENT_VALUE("UNEXPECTED TYPE"));
          }
 diff --git a/dump_manager_faultlog.hpp b/dump_manager_faultlog.hpp
-index 3af2e32..a1d25f4 100644
+index 87a818b..8190222 100644
 --- a/dump_manager_faultlog.hpp
 +++ b/dump_manager_faultlog.hpp
 @@ -71,7 +71,6 @@ class Manager :
@@ -221,7 +221,7 @@
          registerFaultLogMatches();
      }
  
-@@ -139,6 +138,10 @@ class Manager :
+@@ -142,6 +141,10 @@ class Manager :
      std::unique_ptr<sdbusplus::bus::match_t> crashdumpRemovedMatch;
      /** @brief D-Bus match for signal indicating all crashdumps were deleted*/
      std::unique_ptr<sdbusplus::bus::match_t> crashdumpDeleteAllMatch;
@@ -232,7 +232,7 @@
  
      /** @brief D-Bus match for CPER log added signal */
      std::unique_ptr<sdbusplus::bus::match_t> cperLogMatch;
-@@ -159,13 +162,21 @@ class Manager :
+@@ -162,13 +165,21 @@ class Manager :
      void registerCrashdumpDeleteAllMatch();
      /** @brief Register D-Bus match rules to detect CPER logs */
      void registerCperLogMatch();
@@ -288,5 +288,5 @@
  
  # System dump options
 -- 
-2.55.0.679.g6767b8d81c-goog
+2.55.0.897.gb25b4bd76c-goog
 
diff --git a/recipes-phosphor/dump/phosphor-debug-collector/0005-dump-harden-against-concurrent-file-deletions.patch b/recipes-phosphor/dump/phosphor-debug-collector/0005-dump-harden-against-concurrent-file-deletions.patch
index e74430b..6ec8f0e 100644
--- a/recipes-phosphor/dump/phosphor-debug-collector/0005-dump-harden-against-concurrent-file-deletions.patch
+++ b/recipes-phosphor/dump/phosphor-debug-collector/0005-dump-harden-against-concurrent-file-deletions.patch
@@ -1,7 +1,7 @@
-From 0ee9150bfcfef3f1e86308bedfb4e159a4686041 Mon Sep 17 00:00:00 2001
+From 2318f0451db71bed8d64235947d16cd4765c3e1f Mon Sep 17 00:00:00 2001
 From: Andy Sun <andysunmh@google.com>
 Date: Sun, 7 Jun 2026 14:36:26 +0000
-Subject: [PATCH 3/3] dump: harden against concurrent file deletions
+Subject: [PATCH 3/5] dump: harden against concurrent file deletions
 
 phosphor-dump-manager crashed (SIGABRT) during frequent coredumps when
 concurrent file deletions by dreport caused uncaught filesystem_error
@@ -118,5 +118,5 @@
  
      return 0;
 -- 
-2.55.0.679.g6767b8d81c-goog
+2.55.0.897.gb25b4bd76c-goog
 
diff --git a/recipes-phosphor/dump/phosphor-debug-collector/0006-use-sdbusplus-enum-converter-for-faultlog-types.patch b/recipes-phosphor/dump/phosphor-debug-collector/0006-use-sdbusplus-enum-converter-for-faultlog-types.patch
index abe233a..84ec290 100644
--- a/recipes-phosphor/dump/phosphor-debug-collector/0006-use-sdbusplus-enum-converter-for-faultlog-types.patch
+++ b/recipes-phosphor/dump/phosphor-debug-collector/0006-use-sdbusplus-enum-converter-for-faultlog-types.patch
@@ -1,5 +1,18 @@
+From cb0de867ee9fe2ef314b5809532ebef01af47006 Mon Sep 17 00:00:00 2001
+From: Ron Vered <ronvered@google.com>
+Date: Thu, 23 Jul 2026 20:23:20 +0000
+Subject: [PATCH 4/5] Use FaultLogType converter and introduce new MetisCPER
+ type
+
+---
+ dump_manager_faultlog.cpp   |  44 +++++-------
+ test/faultlog_dump_test.cpp | 140 ++++++++++++++++++++++++++++++++++++
+ test/meson.build            |  37 ++++++++++
+ 3 files changed, 196 insertions(+), 25 deletions(-)
+ create mode 100644 test/faultlog_dump_test.cpp
+
 diff --git a/dump_manager_faultlog.cpp b/dump_manager_faultlog.cpp
-index 49c1b3e..ab277ff 100644
+index 3fafe02..f2fd2f1 100644
 --- a/dump_manager_faultlog.cpp
 +++ b/dump_manager_faultlog.cpp
 @@ -40,6 +40,9 @@ using ChangedPropertiesType =
@@ -12,7 +25,7 @@
  static std::string getTypeFromPath(const std::filesystem::path& path)
  {
      return path.parent_path().parent_path().filename();
-@@ -99,17 +102,12 @@ sdbusplus::message::object_path
+@@ -184,17 +187,12 @@ sdbusplus::message::object_path
      if (faultLogFile.is_open())
      {
          std::string logType = "Invalid";
@@ -21,21 +34,21 @@
 -            logType = "Crashdump";
 -        }
 -        else if (entryType == FaultLogTypes::CPER)
+-        {
+-            logType = "CPER";
+-        }
+-        else if (entryType == FaultLogTypes::IliadCPER)
 +        auto converted = sdbusplus::common::xyz::openbmc_project::common::
 +            FaultLogType::convertFaultLogTypesToString(entryType);
 +        if (converted.starts_with(faultLogTypePrefix))
          {
--            logType = "CPER";
--        }
--        else if (entryType == FaultLogTypes::IliadCPER)
--        {
 -            logType = "IliadCPER";
 +            logType = converted.substr(
 +                std::string_view(faultLogTypePrefix).length());
          }
  
          faultLogFile << "Fault log file type " << logType << " id "
-@@ -643,26 +641,22 @@ void Manager::getAndCheckCreateDumpParams(
+@@ -758,26 +756,22 @@ void Manager::getAndCheckCreateDumpParams(
                                    Argument::ARGUMENT_VALUE("INVALID INPUT"));
          }
  
@@ -44,6 +57,14 @@
 -            entryType = FaultLogTypes::Crashdump;
 -        }
 -        else if (value == "CPER")
+-        {
+-            entryType = FaultLogTypes::CPER;
+-        }
+-        else if (value == "IliadCPER")
+-        {
+-            entryType = FaultLogTypes::IliadCPER;
+-        }
+-        else
 +        std::string fullTypeStr =
 +            value.starts_with(faultLogTypePrefix) ? value : faultLogTypePrefix + value;
 +
@@ -51,32 +72,23 @@
 +            FaultLogType::convertStringToFaultLogTypes(fullTypeStr);
 +        if (!parsed.has_value())
          {
--            entryType = FaultLogTypes::CPER;
-+            log<level::ERR>(
-+                std::format("Unexpected entry type: {}", value).c_str());
-+            elog<InvalidArgument>(Argument::ARGUMENT_NAME("TYPE"),
-+                                  Argument::ARGUMENT_VALUE("UNEXPECTED TYPE"));
-         }
--        else if (value == "IliadCPER")
-+        else
-         {
--            entryType = FaultLogTypes::IliadCPER;
-+            entryType = *parsed;
-         }
--        else
--        {
--            log<level::ERR>(
+             log<level::ERR>(
 -                std::format("Unexpected entry type '{}', not handled", value)
 -                    .c_str());
--            elog<InvalidArgument>(Argument::ARGUMENT_NAME("TYPE"),
--                                  Argument::ARGUMENT_VALUE("UNEXPECTED TYPE"));
--        }
++                std::format("Unexpected entry type: {}", value).c_str());
+             elog<InvalidArgument>(Argument::ARGUMENT_NAME("TYPE"),
+                                   Argument::ARGUMENT_VALUE("UNEXPECTED TYPE"));
+         }
++        else
++        {
++            entryType = *parsed;
++        }
      }
  
      iter = params.find("PrimaryLogId");
 diff --git a/test/faultlog_dump_test.cpp b/test/faultlog_dump_test.cpp
 new file mode 100644
-index 0000000..fbb5208
+index 0000000..39f3cbf
 --- /dev/null
 +++ b/test/faultlog_dump_test.cpp
 @@ -0,0 +1,140 @@
@@ -221,7 +233,7 @@
 +} // namespace dump
 +} // namespace phosphor
 diff --git a/test/meson.build b/test/meson.build
-index a8cb358..04896e6 100644
+index a8cb358..e9a2f7b 100644
 --- a/test/meson.build
 +++ b/test/meson.build
 @@ -40,3 +40,40 @@ foreach t : tests
@@ -265,3 +277,6 @@
 +    test('faultlog_dump_test', faultlog_dump_test_exe,
 +         workdir: meson.current_source_dir())
 +endif
+-- 
+2.55.0.897.gb25b4bd76c-goog
+
diff --git a/recipes-phosphor/dump/phosphor-debug-collector/0007-Add-PrettyName-and-Log-property-to-faultlog-dump.patch b/recipes-phosphor/dump/phosphor-debug-collector/0007-Add-PrettyName-and-Log-property-to-faultlog-dump.patch
index b0b3b72..50358d0 100644
--- a/recipes-phosphor/dump/phosphor-debug-collector/0007-Add-PrettyName-and-Log-property-to-faultlog-dump.patch
+++ b/recipes-phosphor/dump/phosphor-debug-collector/0007-Add-PrettyName-and-Log-property-to-faultlog-dump.patch
@@ -1,17 +1,17 @@
-From a7ab75e73944539e567c8d8448b8a93f7178953d Mon Sep 17 00:00:00 2001
+From 4d58c7d0d02ea4507ec93f48717bba37fa08af2f Mon Sep 17 00:00:00 2001
 From: David Tang <davtang@google.com>
 Date: Thu, 20 Aug 2026 17:20:33 +0000
-Subject: [PATCH] Add PrettyName and Log property to faultlog dump entry
+Subject: [PATCH 5/5] Add PrettyName and Log property to faultlog dump entry
 
 Signed-off-by: David Tang <davtang@google.com>
 ---
- dump_manager_faultlog.cpp | 46 +++++++++++++++++++++++++++++++++++++--
+ dump_manager_faultlog.cpp | 47 ++++++++++++++++++++++++++++++++++++---
  dump_manager_faultlog.hpp |  3 +++
  faultlog_dump_entry.hpp   |  7 +++++-
- 3 files changed, 53 insertions(+), 3 deletions(-)
+ 3 files changed, 53 insertions(+), 4 deletions(-)
 
 diff --git a/dump_manager_faultlog.cpp b/dump_manager_faultlog.cpp
-index 28286db..96393f7 100644
+index f2fd2f1..0874182 100644
 --- a/dump_manager_faultlog.cpp
 +++ b/dump_manager_faultlog.cpp
 @@ -58,12 +58,15 @@ sdbusplus::message::object_path
@@ -30,17 +30,18 @@
                                  faultId, faultTimestamp);
  
      // To stay within the limit of MAX_NUM_FAULT_LOG_ENTRIES we need to remove
-@@ -212,7 +215,8 @@ sdbusplus::message::object_path
+@@ -220,8 +223,8 @@ sdbusplus::message::object_path
                                     faultLogFilePath,
                                     phosphor::dump::OperationStatus::Completed,
                                     originatorId, originatorType, entryType,
--                                   primaryLogIdStr, *this, &entries, faultId)));
+-                                   primaryLogIdStr, *this, &entries,
+-                                   &faultIdTable, faultId)));
 +                                   primaryLogIdStr, prettyNameStr, logStr,
-+                                   *this, &entries, faultId)));
++                                   *this, &entries, &faultIdTable, faultId)));
      }
      catch (const std::invalid_argument& e)
      {
-@@ -706,7 +710,8 @@ void Manager::createDumpFromCrashdumpSignal(sdbusplus::message_t& msg)
+@@ -725,7 +728,8 @@ void Manager::createDumpFromCrashdumpSignal(sdbusplus::message_t& msg)
  
  void Manager::getAndCheckCreateDumpParams(
      const phosphor::dump::DumpCreateParams& params, FaultLogTypes& entryType,
@@ -50,7 +51,7 @@
  {
      using InvalidArgument =
          sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
-@@ -790,6 +795,43 @@ void Manager::getAndCheckCreateDumpParams(
+@@ -809,6 +813,43 @@ void Manager::getAndCheckCreateDumpParams(
          primaryLogIdStr = value;
      }
  
@@ -95,10 +96,10 @@
      iter = params.find("Id");
      if (iter != params.end())
 diff --git a/dump_manager_faultlog.hpp b/dump_manager_faultlog.hpp
-index a1d25f4..26aa131 100644
+index 8190222..f58afb5 100644
 --- a/dump_manager_faultlog.hpp
 +++ b/dump_manager_faultlog.hpp
-@@ -183,6 +183,8 @@ class Manager :
+@@ -186,6 +186,8 @@ class Manager :
       *  @param[out] entryType - Log entry type (corresponding to type of data in
       * primary fault data log)
       *  @param[out] primaryLogIdStr - Id of primary fault data log
@@ -107,7 +108,7 @@
       *  @param[out] faultId - Id of primary fault data log (adopted only in
       * server3 / multi-host platforms, defaults to 0 if absent)
       *  @param[out] faultTimestamp - Timestamp of primary fault data log
-@@ -192,6 +194,7 @@ class Manager :
+@@ -195,6 +197,7 @@ class Manager :
      void getAndCheckCreateDumpParams(
          const phosphor::dump::DumpCreateParams& params,
          FaultLogTypes& entryType, std::string& primaryLogIdStr,
@@ -116,18 +117,18 @@
  
      /** @brief Generate the current timestamp, adjusting as needed to ensure an
 diff --git a/faultlog_dump_entry.hpp b/faultlog_dump_entry.hpp
-index fc29ac9..25cc15d 100644
+index 60198ae..405b557 100644
 --- a/faultlog_dump_entry.hpp
 +++ b/faultlog_dump_entry.hpp
-@@ -57,6 +57,8 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
+@@ -55,6 +55,8 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
       *  @param[in] status - status of the dump.
       *  @param[in] originatorId - Id of the originator of the dump
       *  @param[in] originatorType - Originator type
 +     *  @param[in] prettyNameStr - The name of the log entry.
 +     *  @param[in] logStr - The full path of the log file.
       *  @param[in] parent - The dump entry's parent.
-      *  @param[in] faultId - Fault id (adopted only in server3 / multi-host
-      * platforms, defaults to 0 if not provided).
+      *  @param[in] parentMap - Fault log map containing this entry.
+      *  @param[in] faultIdTableMap - Table mapping fault ID to dump ID.
 @@ -66,7 +68,8 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
            const std::filesystem::path& file,
            phosphor::dump::OperationStatus status, std::string originatorId,
@@ -136,17 +137,17 @@
 +          const std::string& primaryLogIdStr, const std::string& prettyNameStr,
 +          const std::string& logStr, phosphor::dump::Manager& parent,
            std::map<uint32_t, std::unique_ptr<phosphor::dump::Entry>>* parentMap,
+           std::unordered_map<uint64_t, uint32_t>* faultIdTableMap = nullptr,
            uint64_t faultId = 0) :
-         phosphor::dump::Entry(bus, objPath.c_str(), dumpId, timeStamp, fileSize,
-@@ -77,6 +80,8 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
+@@ -78,6 +81,8 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
      {
          type(entryType);
          primaryLogId(primaryLogIdStr);
 +        prettyName(prettyNameStr);
 +        log(logStr);
-         if (faultId != 0)
+         if (faultId != 0 && faultIdTableMap != nullptr)
          {
-             faultIdTable.emplace(faultId, dumpId);
+             faultIdTableMap->emplace(faultId, dumpId);
 -- 
-2.55.0.860.g4b6b3295ed-goog
+2.55.0.897.gb25b4bd76c-goog
 
diff --git a/recipes-phosphor/dump/phosphor-debug-collector/0008-Add-DumpPrefix-property-to-faultlog-dump.patch b/recipes-phosphor/dump/phosphor-debug-collector/0008-Add-DumpPrefix-property-to-faultlog-dump.patch
index 7c8e581..10d2e37 100644
--- a/recipes-phosphor/dump/phosphor-debug-collector/0008-Add-DumpPrefix-property-to-faultlog-dump.patch
+++ b/recipes-phosphor/dump/phosphor-debug-collector/0008-Add-DumpPrefix-property-to-faultlog-dump.patch
@@ -15,13 +15,13 @@
 Google-Bug-Id: 559785933
 Signed-off-by: Jasmine Cha <chajasmine@google.com>
 ---
- dump_manager_faultlog.cpp | 29 ++++++++++++++++++++++++++---
+ dump_manager_faultlog.cpp | 31 ++++++++++++++++++++++++++++---
  dump_manager_faultlog.hpp |  2 ++
  faultlog_dump_entry.hpp   |  5 ++++-
- 3 files changed, 32 insertions(+), 4 deletions(-)
+ 3 files changed, 34 insertions(+), 4 deletions(-)
 
 diff --git a/dump_manager_faultlog.cpp b/dump_manager_faultlog.cpp
-index 96393f7..5333e0f 100644
+index 0874182..93db6a6 100644
 --- a/dump_manager_faultlog.cpp
 +++ b/dump_manager_faultlog.cpp
 @@ -60,13 +60,14 @@ sdbusplus::message::object_path
@@ -40,16 +40,17 @@
                                  faultId, faultTimestamp);
  
      // To stay within the limit of MAX_NUM_FAULT_LOG_ENTRIES we need to remove
-@@ -216,7 +217,7 @@ sdbusplus::message::object_path
+@@ -224,7 +225,8 @@ sdbusplus::message::object_path
                                     phosphor::dump::OperationStatus::Completed,
                                     originatorId, originatorType, entryType,
                                     primaryLogIdStr, prettyNameStr, logStr,
--                                   *this, &entries, faultId)));
-+                                   dumpPrefixStr, *this, &entries, faultId)));
+-                                   *this, &entries, &faultIdTable, faultId)));
++                                   dumpPrefixStr, *this, &entries,
++                                   &faultIdTable, faultId)));
      }
      catch (const std::invalid_argument& e)
      {
-@@ -704,6 +705,9 @@ void Manager::createDumpFromCrashdumpSignal(sdbusplus::message_t& msg)
+@@ -713,6 +715,9 @@ void Manager::createDumpFromCrashdumpSignal(sdbusplus::message_t& msg)
  
      crashdumpMap.insert(std::pair<std::string, std::string>("PrimaryLogId",
                                                               filename));
@@ -57,9 +58,9 @@
 +                         (std::string(CRASHDUMP_FORMAT) == "AMD") ? "amd_"
 +                                                                  : "intel_");
  
-     createDump(crashdumpMap);
- }
-@@ -711,7 +715,8 @@ void Manager::createDumpFromCrashdumpSignal(sdbusplus::message_t& msg)
+     try
+     {
+@@ -729,7 +734,8 @@ void Manager::createDumpFromCrashdumpSignal(sdbusplus::message_t& msg)
  void Manager::getAndCheckCreateDumpParams(
      const phosphor::dump::DumpCreateParams& params, FaultLogTypes& entryType,
      std::string& primaryLogIdStr, std::string& prettyNameStr,
@@ -69,7 +70,7 @@
  {
      using InvalidArgument =
          sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
-@@ -832,6 +837,25 @@ void Manager::getAndCheckCreateDumpParams(
+@@ -850,6 +856,25 @@ void Manager::getAndCheckCreateDumpParams(
          }
      }
  
@@ -96,10 +97,10 @@
      iter = params.find("Id");
      if (iter != params.end())
 diff --git a/dump_manager_faultlog.hpp b/dump_manager_faultlog.hpp
-index 26aa131..d3d2bbb 100644
+index f58afb5..6ff04ae 100644
 --- a/dump_manager_faultlog.hpp
 +++ b/dump_manager_faultlog.hpp
-@@ -185,6 +185,7 @@ class Manager :
+@@ -188,6 +188,7 @@ class Manager :
       *  @param[out] primaryLogIdStr - Id of primary fault data log
       *  @param[out] prettyNameStr - Name of log entry (optional)
       *  @param[out] logStr - Full file path of the log file (optional)
@@ -107,7 +108,7 @@
       *  @param[out] faultId - Id of primary fault data log (adopted only in
       * server3 / multi-host platforms, defaults to 0 if absent)
       *  @param[out] faultTimestamp - Timestamp of primary fault data log
-@@ -195,6 +196,7 @@ class Manager :
+@@ -198,6 +199,7 @@ class Manager :
          const phosphor::dump::DumpCreateParams& params,
          FaultLogTypes& entryType, std::string& primaryLogIdStr,
          std::string& prettyNameStr, std::string& logStr,
@@ -116,17 +117,17 @@
  
      /** @brief Generate the current timestamp, adjusting as needed to ensure an
 diff --git a/faultlog_dump_entry.hpp b/faultlog_dump_entry.hpp
-index 25cc15d..33610d8 100644
+index 405b557..f804c0f 100644
 --- a/faultlog_dump_entry.hpp
 +++ b/faultlog_dump_entry.hpp
-@@ -59,6 +59,7 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
+@@ -57,6 +57,7 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
       *  @param[in] originatorType - Originator type
       *  @param[in] prettyNameStr - The name of the log entry.
       *  @param[in] logStr - The full path of the log file.
 +     *  @param[in] dumpPrefixStr - The prefix of the dump file.
       *  @param[in] parent - The dump entry's parent.
-      *  @param[in] faultId - Fault id (adopted only in server3 / multi-host
-      * platforms, defaults to 0 if not provided).
+      *  @param[in] parentMap - Fault log map containing this entry.
+      *  @param[in] faultIdTableMap - Table mapping fault ID to dump ID.
 @@ -69,7 +70,8 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
            phosphor::dump::OperationStatus status, std::string originatorId,
            originatorTypes originatorType, FaultLogTypes entryType,
@@ -135,15 +136,16 @@
 +          const std::string& logStr, const std::string& dumpPrefixStr,
 +          phosphor::dump::Manager& parent,
            std::map<uint32_t, std::unique_ptr<phosphor::dump::Entry>>* parentMap,
+           std::unordered_map<uint64_t, uint32_t>* faultIdTableMap = nullptr,
            uint64_t faultId = 0) :
-         phosphor::dump::Entry(bus, objPath.c_str(), dumpId, timeStamp, fileSize,
-@@ -82,6 +84,7 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
+@@ -83,6 +85,7 @@ class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
          primaryLogId(primaryLogIdStr);
          prettyName(prettyNameStr);
          log(logStr);
 +        dumpPrefix(dumpPrefixStr);
-         if (faultId != 0)
+         if (faultId != 0 && faultIdTableMap != nullptr)
          {
-             faultIdTable.emplace(faultId, dumpId);
+             faultIdTableMap->emplace(faultId, dumpId);
 -- 
-2.55.0.860.g4b6b3295ed-goog
+2.56.0.rc1.315.gc6ed9934b7-goog
+
