14ecdfaaaSHarshit Aghera /* 24ecdfaaaSHarshit Aghera * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & 34ecdfaaaSHarshit Aghera * AFFILIATES. All rights reserved. 44ecdfaaaSHarshit Aghera * SPDX-License-Identifier: Apache-2.0 54ecdfaaaSHarshit Aghera */ 64ecdfaaaSHarshit Aghera 74ecdfaaaSHarshit Aghera #include "NvidiaGpuDevice.hpp" 84ecdfaaaSHarshit Aghera 94ecdfaaaSHarshit Aghera #include "NvidiaDeviceDiscovery.hpp" 104ecdfaaaSHarshit Aghera #include "NvidiaGpuSensor.hpp" 114ecdfaaaSHarshit Aghera #include "Thresholds.hpp" 124ecdfaaaSHarshit Aghera #include "Utils.hpp" 134ecdfaaaSHarshit Aghera 144ecdfaaaSHarshit Aghera #include <bits/basic_string.h> 154ecdfaaaSHarshit Aghera 164ecdfaaaSHarshit Aghera #include <MctpRequester.hpp> 174ecdfaaaSHarshit Aghera #include <boost/asio/io_context.hpp> 184ecdfaaaSHarshit Aghera #include <phosphor-logging/lg2.hpp> 194ecdfaaaSHarshit Aghera #include <sdbusplus/asio/connection.hpp> 204ecdfaaaSHarshit Aghera #include <sdbusplus/asio/object_server.hpp> 214ecdfaaaSHarshit Aghera 224ecdfaaaSHarshit Aghera #include <chrono> 234ecdfaaaSHarshit Aghera #include <cstdint> 244ecdfaaaSHarshit Aghera #include <memory> 254ecdfaaaSHarshit Aghera #include <string> 264ecdfaaaSHarshit Aghera #include <vector> 274ecdfaaaSHarshit Aghera 284ecdfaaaSHarshit Aghera GpuDevice::GpuDevice(const SensorConfigs& configs, const std::string& name, 294ecdfaaaSHarshit Aghera const std::string& path, 304ecdfaaaSHarshit Aghera const std::shared_ptr<sdbusplus::asio::connection>& conn, 314ecdfaaaSHarshit Aghera uint8_t eid, boost::asio::io_context& io, 324ecdfaaaSHarshit Aghera mctp::MctpRequester& mctpRequester, 334ecdfaaaSHarshit Aghera sdbusplus::asio::object_server& objectServer) : 344ecdfaaaSHarshit Aghera eid(eid), sensorPollMs(std::chrono::milliseconds{configs.pollRate}), 354ecdfaaaSHarshit Aghera waitTimer(io, std::chrono::steady_clock::duration(0)), 364ecdfaaaSHarshit Aghera mctpRequester(mctpRequester), conn(conn), objectServer(objectServer), 374ecdfaaaSHarshit Aghera configs(configs), name(escapeName(name)), path(path) 384ecdfaaaSHarshit Aghera { 394ecdfaaaSHarshit Aghera makeSensors(); 404ecdfaaaSHarshit Aghera } 414ecdfaaaSHarshit Aghera 424ecdfaaaSHarshit Aghera void GpuDevice::makeSensors() 434ecdfaaaSHarshit Aghera { 444ecdfaaaSHarshit Aghera tempSensor = std::make_shared<NvidiaGpuTempSensor>( 45*ba138daeSHarshit Aghera conn, mctpRequester, name + "_TEMP_0", path, eid, gpuTempSensorId, 46*ba138daeSHarshit Aghera objectServer, std::vector<thresholds::Threshold>{}); 47*ba138daeSHarshit Aghera 48*ba138daeSHarshit Aghera tLimitSensor = std::make_shared<NvidiaGpuTempSensor>( 49*ba138daeSHarshit Aghera conn, mctpRequester, name + "_TEMP_1", path, eid, gpuTLimitSensorId, 50*ba138daeSHarshit Aghera objectServer, std::vector<thresholds::Threshold>{}); 514ecdfaaaSHarshit Aghera 524ecdfaaaSHarshit Aghera lg2::info("Added GPU {NAME} Sensors with chassis path: {PATH}.", "NAME", 534ecdfaaaSHarshit Aghera name, "PATH", path); 544ecdfaaaSHarshit Aghera 554ecdfaaaSHarshit Aghera read(); 564ecdfaaaSHarshit Aghera } 574ecdfaaaSHarshit Aghera 584ecdfaaaSHarshit Aghera void GpuDevice::read() 594ecdfaaaSHarshit Aghera { 604ecdfaaaSHarshit Aghera tempSensor->update(); 61*ba138daeSHarshit Aghera tLimitSensor->update(); 624ecdfaaaSHarshit Aghera 634ecdfaaaSHarshit Aghera waitTimer.expires_after(std::chrono::milliseconds(sensorPollMs)); 644ecdfaaaSHarshit Aghera waitTimer.async_wait([this](const boost::system::error_code& ec) { 654ecdfaaaSHarshit Aghera if (ec) 664ecdfaaaSHarshit Aghera { 674ecdfaaaSHarshit Aghera return; 684ecdfaaaSHarshit Aghera } 694ecdfaaaSHarshit Aghera read(); 704ecdfaaaSHarshit Aghera }); 714ecdfaaaSHarshit Aghera } 72