diff --git a/phosphor-power-supply/psu_manager.cpp b/phosphor-power-supply/psu_manager.cpp
index c6d5855..2ab8cfb 100644
--- a/phosphor-power-supply/psu_manager.cpp
+++ b/phosphor-power-supply/psu_manager.cpp
@@ -247,6 +247,14 @@
                     .c_str());
             getPSUProperties(itIntf->second);
         }
+
+        // Call to validate the psu configuration if the power is on and both
+        // the IBMCFFPSConnector and SupportedConfiguration interfaces have been
+        // processed
+        if (powerOn && !psus.empty() && !supportedConfigs.empty())
+        {
+            validateConfig();
+        }
     }
     catch (std::exception& e)
     {
@@ -271,11 +279,13 @@
         if (state)
         {
             powerOn = true;
+            validateConfig();
             clearFaults();
         }
         else
         {
             powerOn = false;
+            runValidateConfig = true;
         }
     }
 }
@@ -407,4 +417,49 @@
     }
 }
 
+void PSUManager::validateConfig()
+{
+    if (!runValidateConfig)
+    {
+        return;
+    }
+
+    // Check that all PSUs have the same model name. Initialize the model
+    // variable with the first PSU name found, then use it as a base to compare
+    // against the rest of the PSUs.
+    std::string model{};
+    for (const auto& p : psus)
+    {
+        auto psuModel = p->getModelName();
+        if (psuModel.empty())
+        {
+            continue;
+        }
+        if (model.empty())
+        {
+            model = psuModel;
+            continue;
+        }
+        if (psuModel.compare(model) != 0)
+        {
+            log<level::ERR>(
+                fmt::format("Mismatched power supply models: {}, {}",
+                            model.c_str(), psuModel.c_str())
+                    .c_str());
+            std::map<std::string, std::string> additionalData;
+            additionalData["EXPECTED_MODEL"] = model;
+            additionalData["ACTUAL_MODEL"] = psuModel;
+            additionalData["CALLOUT_INVENTORY_PATH"] = p->getInventoryPath();
+            createError(
+                "xyz.openbmc_project.Power.PowerSupply.Error.NotSupported",
+                additionalData);
+
+            // No need to do the validation anymore, a mismatched model needs to
+            // be fixed by the user.
+            runValidateConfig = false;
+            return;
+        }
+    }
+}
+
 } // namespace phosphor::power::manager
diff --git a/phosphor-power-supply/psu_manager.hpp b/phosphor-power-supply/psu_manager.hpp
index a59b2fc..f1f1220 100644
--- a/phosphor-power-supply/psu_manager.hpp
+++ b/phosphor-power-supply/psu_manager.hpp
@@ -84,16 +84,19 @@
             if (state)
             {
                 powerOn = true;
+                validateConfig();
             }
             else
             {
                 powerOn = false;
+                runValidateConfig = true;
             }
         }
         catch (std::exception& e)
         {
             log<level::INFO>("Failed to get power state. Assuming it is off.");
             powerOn = false;
+            runValidateConfig = true;
         }
 
         onOffConfig(phosphor::pmbus::ON_OFF_CONFIG_CONTROL_PIN_ONLY);
@@ -222,6 +225,21 @@
     void populateSysProperties(const util::DbusPropertyMap& properties);
 
     /**
+     * @brief Perform power supply configuration validation.
+     * @details Validates if the existing power supply properties are a
+     * supported configuration, and acts on its findings such as logging errors.
+     */
+    void validateConfig();
+
+    /**
+     * @brief Flag to indicate if the validateConfig() function should be run.
+     * Set to false once the configuration has been validated to avoid running
+     * multiple times due to interfaces added signal. Set to true during power
+     * off to trigger the validation on power on.
+     */
+    bool runValidateConfig = true;
+
+    /**
      * @brief Map of supported PSU configurations that include the model name
      * and their properties.
      */
