diff --git a/src/nvidia-gpu/NvidiaGpuDevice.cpp b/src/nvidia-gpu/NvidiaGpuDevice.cpp
index a13bcfe..9560220 100644
--- a/src/nvidia-gpu/NvidiaGpuDevice.cpp
+++ b/src/nvidia-gpu/NvidiaGpuDevice.cpp
@@ -17,6 +17,7 @@
 #include <MctpRequester.hpp>
 #include <NvidiaGpuEnergySensor.hpp>
 #include <NvidiaGpuMctpVdm.hpp>
+#include <NvidiaGpuPowerPeakReading.hpp>
 #include <NvidiaGpuPowerSensor.hpp>
 #include <NvidiaGpuThresholds.hpp>
 #include <NvidiaGpuVoltageSensor.hpp>
@@ -74,6 +75,10 @@
         conn, mctpRequester, name + "_Power_0", path, eid, gpuPowerSensorId,
         objectServer, std::vector<thresholds::Threshold>{});
 
+    peakPower = std::make_shared<NvidiaGpuPowerPeakReading>(
+        mctpRequester, name + "_Power_0", eid, gpuPeakPowerSensorId,
+        objectServer);
+
     energySensor = std::make_shared<NvidiaGpuEnergySensor>(
         conn, mctpRequester, name + "_Energy_0", path, eid, gpuEnergySensorId,
         objectServer, std::vector<thresholds::Threshold>{});
@@ -120,6 +125,7 @@
     }
     dramTempSensor->update();
     powerSensor->update();
+    peakPower->update();
     energySensor->update();
     voltageSensor->update();
 
diff --git a/src/nvidia-gpu/NvidiaGpuDevice.hpp b/src/nvidia-gpu/NvidiaGpuDevice.hpp
index 2937d1f..2f5ee76 100644
--- a/src/nvidia-gpu/NvidiaGpuDevice.hpp
+++ b/src/nvidia-gpu/NvidiaGpuDevice.hpp
@@ -13,6 +13,7 @@
 #include "NvidiaGpuSensor.hpp"
 
 #include <NvidiaGpuEnergySensor.hpp>
+#include <NvidiaGpuPowerPeakReading.hpp>
 #include <NvidiaGpuVoltageSensor.hpp>
 #include <boost/asio/io_context.hpp>
 #include <boost/asio/steady_timer.hpp>
@@ -64,6 +65,7 @@
     std::shared_ptr<NvidiaGpuTempSensor> tLimitSensor;
     std::shared_ptr<NvidiaGpuTempSensor> dramTempSensor;
     std::shared_ptr<NvidiaGpuPowerSensor> powerSensor;
+    std::shared_ptr<NvidiaGpuPowerPeakReading> peakPower;
     std::shared_ptr<NvidiaGpuEnergySensor> energySensor;
     std::shared_ptr<NvidiaGpuVoltageSensor> voltageSensor;
 
diff --git a/src/nvidia-gpu/NvidiaGpuMctpVdm.cpp b/src/nvidia-gpu/NvidiaGpuMctpVdm.cpp
index ebfa76b..51a6755 100644
--- a/src/nvidia-gpu/NvidiaGpuMctpVdm.cpp
+++ b/src/nvidia-gpu/NvidiaGpuMctpVdm.cpp
@@ -218,16 +218,16 @@
     return 0;
 }
 
-int encodeGetCurrentPowerDrawRequest(uint8_t instanceId, uint8_t sensorId,
-                                     uint8_t averagingInterval,
-                                     std::span<uint8_t> buf)
+int encodeGetPowerDrawRequest(PlatformEnvironmentalCommands commandCode,
+                              uint8_t instanceId, uint8_t sensorId,
+                              uint8_t averagingInterval, std::span<uint8_t> buf)
 {
-    if (buf.size() < sizeof(GetCurrentPowerDrawRequest))
+    if (buf.size() < sizeof(GetPowerDrawRequest))
     {
         return EINVAL;
     }
 
-    auto* msg = reinterpret_cast<GetCurrentPowerDrawRequest*>(buf.data());
+    auto* msg = reinterpret_cast<GetPowerDrawRequest*>(buf.data());
 
     ocp::accelerator_management::BindingPciVidInfo header{};
     header.ocp_accelerator_management_msg_type =
@@ -243,8 +243,7 @@
         return rc;
     }
 
-    msg->hdr.command = static_cast<uint8_t>(
-        PlatformEnvironmentalCommands::GET_CURRENT_POWER_DRAW);
+    msg->hdr.command = static_cast<uint8_t>(commandCode);
     msg->hdr.data_size = sizeof(sensorId) + sizeof(averagingInterval);
     msg->sensorId = sensorId;
     msg->averagingInterval = averagingInterval;
@@ -252,10 +251,9 @@
     return 0;
 }
 
-int decodeGetCurrentPowerDrawResponse(
-    std::span<const uint8_t> buf,
-    ocp::accelerator_management::CompletionCode& cc, uint16_t& reasonCode,
-    uint32_t& power)
+int decodeGetPowerDrawResponse(std::span<const uint8_t> buf,
+                               ocp::accelerator_management::CompletionCode& cc,
+                               uint16_t& reasonCode, uint32_t& power)
 {
     auto rc =
         ocp::accelerator_management::decodeReasonCodeAndCC(buf, cc, reasonCode);
@@ -265,13 +263,13 @@
         return rc;
     }
 
-    if (buf.size() < sizeof(GetCurrentPowerDrawResponse))
+    if (buf.size() < sizeof(GetPowerDrawResponse))
     {
         return EINVAL;
     }
 
     const auto* response =
-        reinterpret_cast<const GetCurrentPowerDrawResponse*>(buf.data());
+        reinterpret_cast<const GetPowerDrawResponse*>(buf.data());
 
     const uint16_t dataSize = le16toh(response->hdr.data_size);
 
@@ -330,7 +328,7 @@
         return rc;
     }
 
-    if (buf.size() < sizeof(GetCurrentPowerDrawResponse))
+    if (buf.size() < sizeof(GetPowerDrawResponse))
     {
         return EINVAL;
     }
diff --git a/src/nvidia-gpu/NvidiaGpuMctpVdm.hpp b/src/nvidia-gpu/NvidiaGpuMctpVdm.hpp
index 19b9929..1e8e986 100644
--- a/src/nvidia-gpu/NvidiaGpuMctpVdm.hpp
+++ b/src/nvidia-gpu/NvidiaGpuMctpVdm.hpp
@@ -40,6 +40,7 @@
     GET_TEMPERATURE_READING = 0x00,
     READ_THERMAL_PARAMETERS = 0x02,
     GET_CURRENT_POWER_DRAW = 0x03,
+    GET_MAX_OBSERVED_POWER = 0x04,
     GET_CURRENT_ENERGY_COUNTER = 0x06,
     GET_INVENTORY_INFORMATION = 0x0C,
     GET_VOLTAGE = 0x0F,
@@ -114,7 +115,7 @@
 
 using ReadThermalParametersRequest = GetNumericSensorReadingRequest;
 
-struct GetCurrentPowerDrawRequest
+struct GetPowerDrawRequest
 {
     ocp::accelerator_management::CommonRequest hdr;
     uint8_t sensorId;
@@ -137,7 +138,7 @@
     int32_t threshold;
 } __attribute__((packed));
 
-struct GetCurrentPowerDrawResponse
+struct GetPowerDrawResponse
 {
     ocp::accelerator_management::CommonResponse hdr;
     uint32_t power;
@@ -194,14 +195,13 @@
     ocp::accelerator_management::CompletionCode& cc, uint16_t& reasonCode,
     int32_t& threshold);
 
-int encodeGetCurrentPowerDrawRequest(uint8_t instanceId, uint8_t sensorId,
-                                     uint8_t averagingInterval,
-                                     std::span<uint8_t> buf);
+int encodeGetPowerDrawRequest(
+    PlatformEnvironmentalCommands commandCode, uint8_t instanceId,
+    uint8_t sensorId, uint8_t averagingInterval, std::span<uint8_t> buf);
 
-int decodeGetCurrentPowerDrawResponse(
-    std::span<const uint8_t> buf,
-    ocp::accelerator_management::CompletionCode& cc, uint16_t& reasonCode,
-    uint32_t& power);
+int decodeGetPowerDrawResponse(std::span<const uint8_t> buf,
+                               ocp::accelerator_management::CompletionCode& cc,
+                               uint16_t& reasonCode, uint32_t& power);
 
 int encodeGetCurrentEnergyCounterRequest(uint8_t instanceId, uint8_t sensorId,
                                          std::span<uint8_t> buf);
diff --git a/src/nvidia-gpu/NvidiaGpuPowerPeakReading.cpp b/src/nvidia-gpu/NvidiaGpuPowerPeakReading.cpp
new file mode 100644
index 0000000..06693e6
--- /dev/null
+++ b/src/nvidia-gpu/NvidiaGpuPowerPeakReading.cpp
@@ -0,0 +1,102 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION &
+ * AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include "NvidiaGpuPowerPeakReading.hpp"
+
+#include "MctpRequester.hpp"
+#include "Utils.hpp"
+
+#include <bits/basic_string.h>
+
+#include <NvidiaDeviceDiscovery.hpp>
+#include <NvidiaGpuMctpVdm.hpp>
+#include <OcpMctpVdm.hpp>
+#include <phosphor-logging/lg2.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+
+#include <cstdint>
+#include <functional>
+#include <memory>
+#include <string>
+
+using namespace std::literals;
+
+NvidiaGpuPowerPeakReading::NvidiaGpuPowerPeakReading(
+    mctp::MctpRequester& mctpRequester, const std::string& name, uint8_t eid,
+    uint8_t sensorId, sdbusplus::asio::object_server& objectServer) :
+    eid(eid), sensorId{sensorId}, mctpRequester(mctpRequester),
+    objectServer(objectServer)
+{
+    std::string dbusPath = sensorPathPrefix + "power/"s + escapeName(name);
+
+    telemetryReportInterface = objectServer.add_interface(
+        dbusPath, "xyz.openbmc_project.Telemetry.Report");
+
+    std::get<0>(readings) = 0;
+    // Reading from the device is in milliwatts and unit set on the dbus
+    // is watts.
+    std::get<1>(readings).emplace_back("PeakReading", "", 0.0, 0);
+
+    telemetryReportInterface->register_property("Readings", readings);
+
+    telemetryReportInterface->initialize();
+}
+
+NvidiaGpuPowerPeakReading::~NvidiaGpuPowerPeakReading()
+{
+    objectServer.remove_interface(telemetryReportInterface);
+}
+
+void NvidiaGpuPowerPeakReading::processResponse(int sendRecvMsgResult)
+{
+    if (sendRecvMsgResult != 0)
+    {
+        lg2::error(
+            "Error updating Peak Power Sensor for eid {EID} and sensor id {SID} : sending message over MCTP failed, rc={RC}",
+            "EID", eid, "SID", sensorId, "RC", sendRecvMsgResult);
+        return;
+    }
+
+    ocp::accelerator_management::CompletionCode cc{};
+    uint16_t reasonCode = 0;
+    uint32_t peakPower = 0;
+
+    const int rc =
+        gpu::decodeGetPowerDrawResponse(response, cc, reasonCode, peakPower);
+
+    if (rc != 0 || cc != ocp::accelerator_management::CompletionCode::SUCCESS)
+    {
+        lg2::error(
+            "Error updating Peak Power Sensor eid {EID} and sensor id {SID} : decode failed, rc={RC}, cc={CC}, reasonCode={RESC}",
+            "EID", eid, "SID", sensorId, "RC", rc, "CC", cc, "RESC",
+            reasonCode);
+        return;
+    }
+
+    // Reading from the device is in milliwatts and unit set on the dbus
+    // is watts.
+    std::get<2>(std::get<1>(readings)[0]) = peakPower / 1000.0;
+
+    telemetryReportInterface->set_property("Readings", readings);
+}
+
+void NvidiaGpuPowerPeakReading::update()
+{
+    const int rc = gpu::encodeGetPowerDrawRequest(
+        gpu::PlatformEnvironmentalCommands::GET_MAX_OBSERVED_POWER, 0, sensorId,
+        averagingInterval, request);
+
+    if (rc != 0)
+    {
+        lg2::error(
+            "Error updating Peak Power Sensor for eid {EID} and sensor id {SID} : encode failed, rc={RC}",
+            "EID", eid, "SID", sensorId, "RC", rc);
+    }
+
+    mctpRequester.sendRecvMsg(
+        eid, request, response,
+        [this](int sendRecvMsgResult) { processResponse(sendRecvMsgResult); });
+}
diff --git a/src/nvidia-gpu/NvidiaGpuPowerPeakReading.hpp b/src/nvidia-gpu/NvidiaGpuPowerPeakReading.hpp
new file mode 100644
index 0000000..02ba104
--- /dev/null
+++ b/src/nvidia-gpu/NvidiaGpuPowerPeakReading.hpp
@@ -0,0 +1,61 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION &
+ * AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#pragma once
+
+#include "MctpRequester.hpp"
+
+#include <NvidiaGpuMctpVdm.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+
+#include <array>
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <tuple>
+#include <vector>
+
+constexpr uint8_t gpuPeakPowerSensorId{0};
+
+// GPU Power Sensor Averaging Interval in seconds, 0 implies default
+constexpr uint8_t gpuPowerAveragingIntervalInSec{0};
+
+struct NvidiaGpuPowerPeakReading
+{
+  public:
+    NvidiaGpuPowerPeakReading(mctp::MctpRequester& mctpRequester,
+                              const std::string& name, uint8_t eid,
+                              uint8_t sensorId,
+                              sdbusplus::asio::object_server& objectServer);
+
+    ~NvidiaGpuPowerPeakReading();
+
+    void update();
+
+  private:
+    void processResponse(int sendRecvMsgResult);
+
+    uint8_t eid{};
+
+    uint8_t sensorId;
+
+    uint8_t averagingInterval{gpuPowerAveragingIntervalInSec};
+
+    std::tuple<
+        uint64_t,
+        std::vector<std::tuple<std::string, std::string, double, uint64_t>>>
+        readings;
+
+    mctp::MctpRequester& mctpRequester;
+
+    sdbusplus::asio::object_server& objectServer;
+
+    std::array<uint8_t, sizeof(gpu::GetPowerDrawRequest)> request{};
+
+    std::array<uint8_t, sizeof(gpu::GetPowerDrawResponse)> response{};
+
+    std::shared_ptr<sdbusplus::asio::dbus_interface> telemetryReportInterface;
+};
diff --git a/src/nvidia-gpu/NvidiaGpuPowerSensor.cpp b/src/nvidia-gpu/NvidiaGpuPowerSensor.cpp
index 997ce3d..bac935d 100644
--- a/src/nvidia-gpu/NvidiaGpuPowerSensor.cpp
+++ b/src/nvidia-gpu/NvidiaGpuPowerSensor.cpp
@@ -97,7 +97,7 @@
     uint32_t power = 0;
 
     const int rc =
-        gpu::decodeGetCurrentPowerDrawResponse(response, cc, reasonCode, power);
+        gpu::decodeGetPowerDrawResponse(response, cc, reasonCode, power);
 
     if (rc != 0 || cc != ocp::accelerator_management::CompletionCode::SUCCESS)
     {
@@ -115,8 +115,9 @@
 
 void NvidiaGpuPowerSensor::update()
 {
-    const int rc = gpu::encodeGetCurrentPowerDrawRequest(
-        0, sensorId, averagingInterval, request);
+    const int rc = gpu::encodeGetPowerDrawRequest(
+        gpu::PlatformEnvironmentalCommands::GET_CURRENT_POWER_DRAW, 0, sensorId,
+        averagingInterval, request);
 
     if (rc != 0)
     {
diff --git a/src/nvidia-gpu/NvidiaGpuPowerSensor.hpp b/src/nvidia-gpu/NvidiaGpuPowerSensor.hpp
index 7933f75..c217200 100644
--- a/src/nvidia-gpu/NvidiaGpuPowerSensor.hpp
+++ b/src/nvidia-gpu/NvidiaGpuPowerSensor.hpp
@@ -53,7 +53,7 @@
 
     sdbusplus::asio::object_server& objectServer;
 
-    std::array<uint8_t, sizeof(gpu::GetCurrentPowerDrawRequest)> request{};
+    std::array<uint8_t, sizeof(gpu::GetPowerDrawRequest)> request{};
 
-    std::array<uint8_t, sizeof(gpu::GetCurrentPowerDrawResponse)> response{};
+    std::array<uint8_t, sizeof(gpu::GetPowerDrawResponse)> response{};
 };
diff --git a/src/nvidia-gpu/meson.build b/src/nvidia-gpu/meson.build
index dbd5b27..9d592f3 100644
--- a/src/nvidia-gpu/meson.build
+++ b/src/nvidia-gpu/meson.build
@@ -5,6 +5,7 @@
     'NvidiaGpuDevice.cpp',
     'NvidiaGpuEnergySensor.cpp',
     'NvidiaGpuMctpVdm.cpp',
+    'NvidiaGpuPowerPeakReading.cpp',
     'NvidiaGpuPowerSensor.cpp',
     'NvidiaGpuSensor.cpp',
     'NvidiaGpuThresholds.cpp',
diff --git a/src/tests/test_NvidiaGpuSensorTest.cpp b/src/tests/test_NvidiaGpuSensorTest.cpp
index ce197f3..4ebe9d5 100644
--- a/src/tests/test_NvidiaGpuSensorTest.cpp
+++ b/src/tests/test_NvidiaGpuSensorTest.cpp
@@ -648,14 +648,16 @@
     const uint8_t instanceId = 6;
     const uint8_t sensorId = 2;
     const uint8_t averagingInterval = 10;
-    std::array<uint8_t, sizeof(gpu::GetCurrentPowerDrawRequest)> buf{};
+    gpu::PlatformEnvironmentalCommands commandCode =
+        gpu::PlatformEnvironmentalCommands::GET_CURRENT_POWER_DRAW;
+    std::array<uint8_t, sizeof(gpu::GetPowerDrawRequest)> buf{};
 
-    int result = gpu::encodeGetCurrentPowerDrawRequest(instanceId, sensorId,
-                                                       averagingInterval, buf);
+    int result = gpu::encodeGetPowerDrawRequest(
+        commandCode, instanceId, sensorId, averagingInterval, buf);
 
     EXPECT_EQ(result, 0);
 
-    gpu::GetCurrentPowerDrawRequest request{};
+    gpu::GetPowerDrawRequest request{};
     std::memcpy(&request, buf.data(), sizeof(request));
 
     EXPECT_EQ(request.hdr.msgHdr.hdr.pci_vendor_id,
@@ -670,9 +672,7 @@
               static_cast<uint8_t>(gpu::MessageType::PLATFORM_ENVIRONMENTAL));
 
     // Verify request data
-    EXPECT_EQ(request.hdr.command,
-              static_cast<uint8_t>(
-                  gpu::PlatformEnvironmentalCommands::GET_CURRENT_POWER_DRAW));
+    EXPECT_EQ(request.hdr.command, static_cast<uint8_t>(commandCode));
     EXPECT_EQ(request.hdr.data_size,
               sizeof(sensorId) + sizeof(averagingInterval));
     EXPECT_EQ(request.sensorId, sensorId);
@@ -683,9 +683,9 @@
 TEST_F(GpuMctpVdmTests, DecodeGetCurrentPowerDrawResponseSuccess)
 {
     // Create a mock successful response
-    std::array<uint8_t, sizeof(gpu::GetCurrentPowerDrawResponse)> buf{};
+    std::array<uint8_t, sizeof(gpu::GetPowerDrawResponse)> buf{};
 
-    gpu::GetCurrentPowerDrawResponse response{};
+    gpu::GetPowerDrawResponse response{};
     ocp::accelerator_management::BindingPciVidInfo headerInfo{};
     headerInfo.ocp_accelerator_management_msg_type = static_cast<uint8_t>(
         ocp::accelerator_management::MessageType::RESPONSE);
@@ -713,8 +713,7 @@
     uint16_t reasonCode{};
     uint32_t power{};
 
-    int result =
-        gpu::decodeGetCurrentPowerDrawResponse(buf, cc, reasonCode, power);
+    int result = gpu::decodeGetPowerDrawResponse(buf, cc, reasonCode, power);
 
     EXPECT_EQ(result, 0);
     EXPECT_EQ(cc, ocp::accelerator_management::CompletionCode::SUCCESS);
@@ -752,8 +751,7 @@
     uint16_t reasonCode{};
     uint32_t power{};
 
-    int result =
-        gpu::decodeGetCurrentPowerDrawResponse(buf, cc, reasonCode, power);
+    int result = gpu::decodeGetPowerDrawResponse(buf, cc, reasonCode, power);
 
     EXPECT_EQ(result, 0);
     EXPECT_EQ(cc, ocp::accelerator_management::CompletionCode::ERR_NOT_READY);
@@ -763,9 +761,9 @@
 TEST_F(GpuMctpVdmTests, DecodeGetCurrentPowerDrawResponseInvalidSize)
 {
     // Create a mock response with invalid data_size
-    std::array<uint8_t, sizeof(gpu::GetCurrentPowerDrawResponse)> buf{};
+    std::array<uint8_t, sizeof(gpu::GetPowerDrawResponse)> buf{};
 
-    gpu::GetCurrentPowerDrawResponse response{};
+    gpu::GetPowerDrawResponse response{};
     ocp::accelerator_management::BindingPciVidInfo headerInfo{};
     headerInfo.ocp_accelerator_management_msg_type = static_cast<uint8_t>(
         ocp::accelerator_management::MessageType::RESPONSE);
@@ -790,8 +788,7 @@
     uint16_t reasonCode{};
     uint32_t power{};
 
-    int result =
-        gpu::decodeGetCurrentPowerDrawResponse(buf, cc, reasonCode, power);
+    int result = gpu::decodeGetPowerDrawResponse(buf, cc, reasonCode, power);
 
     EXPECT_EQ(result, EINVAL); // Should indicate error for invalid data size
 }
