diff --git a/include/groupextcommands.hpp b/include/groupextcommands.hpp
new file mode 100644
index 0000000..2ecbef6
--- /dev/null
+++ b/include/groupextcommands.hpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c)  2024-present Facebook. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+static constexpr auto bootRawObjPrefix = "/xyz/openbmc_project/state/boot/raw";
+static constexpr auto bootRawBusName = "xyz.openbmc_project.State.Boot.Raw";
+static constexpr auto bootRawIntf = "xyz.openbmc_project.State.Boot.Raw";
+
+namespace ipmi
+{
+
+using Group = uint8_t;
+constexpr Group groupSBMR = 0xAE;
+
+namespace sbmr
+{
+constexpr Cmd cmdSendBootProgress = 0x02;
+} // namespace sbmr
+
+} // namespace ipmi
diff --git a/meson.build b/meson.build
index dbf46a8..cdde01f 100644
--- a/meson.build
+++ b/meson.build
@@ -83,6 +83,7 @@
   'src/selcommands.cpp',
   'src/transportcommands.cpp',
   'src/biccommands.cpp',
+  'src/groupextcommands.cpp',
   implicit_include_directories: false,
   dependencies: zfboemcmds_pre,
   version: meson.project_version(),
diff --git a/src/groupextcommands.cpp b/src/groupextcommands.cpp
new file mode 100644
index 0000000..54a3fc5
--- /dev/null
+++ b/src/groupextcommands.cpp
@@ -0,0 +1,76 @@
+#include <commandutils.hpp>
+#include <groupextcommands.hpp>
+#include <ipmid/api-types.hpp>
+#include <ipmid/api.hpp>
+#include <phosphor-logging/lg2.hpp>
+
+namespace ipmi
+{
+
+PHOSPHOR_LOG2_USING;
+
+uint64_t bigEndianToHost(uint64_t bigEndianValue)
+{
+    if (std::endian::native == std::endian::little)
+    {
+        return std::byteswap(bigEndianValue);
+    }
+
+    return bigEndianValue;
+}
+
+void registerSBMRFunctions() __attribute__((constructor));
+
+ipmi::RspType<> ipmiSBMRSendBootProgress(ipmi::Context::ptr ctx,
+                                         std::vector<uint8_t> data)
+{
+    using postcode_t = std::tuple<uint64_t, std::vector<uint8_t>>;
+
+    std::optional<size_t> hostId = findHost(ctx->hostIdx);
+
+    if (!hostId)
+    {
+        error("Invalid Host Id received");
+        return ipmi::responseInvalidCommand();
+    }
+
+    if (data.size() != 9)
+    {
+        error("Invalid request of boot progress length received: {LENGTH}",
+              "LENGTH", data.size());
+        return ipmi::responseReqDataLenInvalid();
+    }
+
+    try
+    {
+        auto primaryPostCode = reinterpret_cast<const uint64_t*>(data.data());
+        auto postCode = postcode_t(bigEndianToHost(*primaryPostCode), data);
+        auto conn = getSdBus();
+        auto hostbootRawObj = std::string(bootRawObjPrefix) +
+                              std::to_string(*hostId);
+        auto method =
+            conn->new_method_call(bootRawBusName, hostbootRawObj.data(),
+                                  "org.freedesktop.DBus.Properties", "Set");
+
+        method.append(bootRawIntf, "Value", std::variant<postcode_t>(postCode));
+
+        conn->call_noreply(method);
+    }
+    catch (std::exception& e)
+    {
+        error("postcode handler error: {ERROR}", "ERROR", e);
+        return ipmi::responseResponseError();
+    }
+
+    return ipmi::responseSuccess();
+}
+
+void registerSBMRFunctions()
+{
+    ipmi::registerGroupHandler(
+        ipmi::prioOemBase, ipmi::groupSBMR, ipmi::sbmr::cmdSendBootProgress,
+        ipmi::Privilege::Admin, ipmiSBMRSendBootProgress);
+    return;
+}
+
+} // end of namespace ipmi
