nvidia-gpu: add gpu sensor app
The commit adds a dbus sensor app that uses MCTP VDM protocol to read
temperature sensor value from the gpu.
The MCTP VDM protocol is an extension of the OCP specification -
'''
https://www.opencompute.org/documents/ocp-gpu-accelerator-management-interfaces-v1-pdf
'''
Tested.
Copy the gpusensor app on gb200nvl-obmc machine and run it.
```
root@gb200nvl-obmc:~# ./nvidiagpusensor
```
The app runs without errors.
```
root@gb200nvl-obmc:~# busctl tree xyz.openbmc_project.GpuSensor
└─ /xyz
└─ /xyz/openbmc_project
└─ /xyz/openbmc_project/sensors
```
Change-Id: Iee7376a9116489052c690f2e3a1ca8d0f29564dd
Signed-off-by: Harshit Aghera <haghera@nvidia.com>
diff --git a/meson.options b/meson.options
index de8fed4..306a953 100644
--- a/meson.options
+++ b/meson.options
@@ -65,6 +65,12 @@
description: 'Enable PSU sensor.',
)
option(
+ 'nvidia-gpu',
+ type: 'feature',
+ value: 'enabled',
+ description: 'Enable GPU sensor.',
+)
+option(
'external',
type: 'feature',
value: 'enabled',
diff --git a/src/meson.build b/src/meson.build
index 5668bf4..2371d56 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -137,6 +137,10 @@
subdir('psu')
endif
+if get_option('nvidia-gpu').allowed()
+ subdir('nvidia-gpu')
+endif
+
if get_option('external').allowed()
subdir('external')
endif
diff --git a/src/nvidia-gpu/NvidiaGpuSensorMain.cpp b/src/nvidia-gpu/NvidiaGpuSensorMain.cpp
new file mode 100644
index 0000000..85fec45
--- /dev/null
+++ b/src/nvidia-gpu/NvidiaGpuSensorMain.cpp
@@ -0,0 +1,23 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION &
+ * AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <boost/asio/io_context.hpp>
+#include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+
+#include <memory>
+#include <string>
+
+int main()
+{
+ boost::asio::io_context io;
+ auto systemBus = std::make_shared<sdbusplus::asio::connection>(io);
+ sdbusplus::asio::object_server objectServer(systemBus, true);
+ objectServer.add_manager("/xyz/openbmc_project/sensors");
+ systemBus->request_name("xyz.openbmc_project.GpuSensor");
+
+ io.run();
+ return 0;
+}
diff --git a/src/nvidia-gpu/meson.build b/src/nvidia-gpu/meson.build
new file mode 100644
index 0000000..4a28491
--- /dev/null
+++ b/src/nvidia-gpu/meson.build
@@ -0,0 +1,13 @@
+gpusensor_sources = files('NvidiaGpuSensorMain.cpp')
+
+gpusensor_include_dir = include_directories('.', is_system: true)
+sensor_include_dir = include_directories('../..')
+
+executable(
+ 'nvidiagpusensor',
+ gpusensor_sources,
+ implicit_include_directories: false,
+ include_directories: [gpusensor_include_dir, sensor_include_dir],
+ dependencies: [thresholds_dep, utils_dep],
+ install: true,
+)