Lines Matching +full:auto +full:- +full:pm

10 #include <phosphor-logging/elog-errors.hpp>
11 #include <phosphor-logging/lg2.hpp>
26 constexpr auto fruTypeSuffix = "fru_type";
27 constexpr auto faultSuffix = "fault";
28 constexpr auto inputSuffix = "input";
29 constexpr auto maxSuffix = "max";
31 const auto HOST_ON_FILE = "/run/openbmc/host@0-on";
52 auto err = errno; in readFile()
77 // - create the PowerMode object to control OCC modes
78 // - create statusObjects for each OCC device found
79 // - waits for OCC Active sensors PDRs to become available
80 // - restart discoverTimer if all data is not available yet
84 for (auto id = 0; id < MAX_CPUS; ++id) in findAndCreateObjects()
87 auto occ = std::string(OCC_NAME) + std::to_string(id); in findAndCreateObjects()
104 auto occs = findOCCsInDev(); in findAndCreateObjects()
118 discoverTimer->restartOnce(10s); in findAndCreateObjects()
130 for (auto id : occs) in findAndCreateObjects()
138 for (auto& obj : statusObjects) in findAndCreateObjects()
140 obj->updateProcAssociation(); in findAndCreateObjects()
166 discoverTimer->restartOnce(30s); in findAndCreateObjects()
168 if (throttlePldmTraceTimer->isEnabled()) in findAndCreateObjects()
173 throttlePldmTraceTimer->setEnabled(false); in findAndCreateObjects()
174 pldmHandle->setTraceThrottle(false); in findAndCreateObjects()
185 discoverTimer->restartOnce(10s); in findAndCreateObjects()
208 for (auto& obj : statusObjects) in checkAllActiveSensors()
210 if ((!obj->occActive()) && (!obj->getPldmSensorReceived())) in checkAllActiveSensors()
212 auto instance = obj->getOccInstanceID(); in checkAllActiveSensors()
214 auto match = queuedActiveState.find(instance); in checkAllActiveSensors()
221 obj->occActive(true); in checkAllActiveSensors()
234 pldmHandle->setTraceThrottle(false); in checkAllActiveSensors()
238 throttlePldmTraceTimer->restartOnce(5min); in checkAllActiveSensors()
245 pldmHandle->checkActiveSensor(obj->getOccInstanceID()); in checkAllActiveSensors()
260 if (throttlePldmTraceTimer->isEnabled()) in checkAllActiveSensors()
265 throttlePldmTraceTimer->setEnabled(false); in checkAllActiveSensors()
266 pldmHandle->setTraceThrottle(false); in checkAllActiveSensors()
275 if (discoverTimer->isEnabled()) in checkAllActiveSensors()
277 discoverTimer->setEnabled(false); in checkAllActiveSensors()
280 if (throttlePldmTraceTimer->isEnabled()) in checkAllActiveSensors()
283 throttlePldmTraceTimer->setEnabled(false); in checkAllActiveSensors()
284 pldmHandle->setTraceThrottle(false); in checkAllActiveSensors()
297 if (!waitForAllOccsTimer->isEnabled()) in checkAllActiveSensors()
303 waitForAllOccsTimer->restartOnce(60s); in checkAllActiveSensors()
319 discoverTimer->restartOnce(10s); in checkAllActiveSensors()
329 for (auto& file : fs::directory_iterator("/dev")) in findOCCsInDev()
335 auto num = std::stoi(match[1].str()); in findOCCsInDev()
338 occs.push_back(num - 1); in findOCCsInDev()
353 auto name = cpuPath.filename().string(); in cpuCreated()
354 auto index = name.find(CPU_NAME); in cpuCreated()
364 auto path = fs::path(OCC_CONTROL_ROOT) / occ; in createObjects()
389 if (statusObjects.back()->isMasterOcc()) in createObjects()
392 statusObjects.back()->getOccInstanceID()); in createObjects()
393 _pollTimer->setEnabled(false); in createObjects()
397 pmode->setMasterOcc(path); in createObjects()
419 "resetOccRequest: PM Complex reset was requested due to OCC{INST}", in resetOccRequest()
425 …"resetOccRequest: Ignoring PM Complex reset request for OCC{INST}, because reset already outstandi… in resetOccRequest()
438 "initiateOccRequest: Initiating PM Complex reset due to OCC{INST}", in initiateOccRequest()
442 for (auto& obj : statusObjects) in initiateOccRequest()
444 if (obj->occActive()) in initiateOccRequest()
446 obj->occActive(false); in initiateOccRequest()
451 pldmHandle->resetOCC(instance); in initiateOccRequest()
458 …"initiateOccRequest: Ignoring PM Complex reset request for OCC{INST}, because reset already in pro… in initiateOccRequest()
482 waitForAllOccsTimer->restartOnce(60s); in statusCallBack()
490 if (waitForAllOccsTimer->isEnabled()) in statusCallBack()
493 waitForAllOccsTimer->setEnabled(false); in statusCallBack()
501 if (!waitForAllOccsTimer->isEnabled()) in statusCallBack()
506 waitForAllOccsTimer->restartOnce(60s); in statusCallBack()
522 if (!_pollTimer->isEnabled()) in statusCallBack()
524 // An OCC just went active, PM Complex is just coming online so in statusCallBack()
546 --activeCount; in statusCallBack()
570 if (_pollTimer->isEnabled()) in statusCallBack()
574 _pollTimer->setEnabled(false); in statusCallBack()
579 if (waitForAllOccsTimer->isEnabled()) in statusCallBack()
581 waitForAllOccsTimer->setEnabled(false); in statusCallBack()
614 auto deviceNames = i2c_occ::getOccHwmonDevices(DEV_PATH); in initStatusObjects()
615 for (auto& name : deviceNames) in initStatusObjects()
619 auto path = fs::path(OCC_CONTROL_ROOT) / name; in initStatusObjects()
630 pmode->setMasterOcc(path); in initStatusObjects()
638 auto obj = std::find_if(statusObjects.begin(), statusObjects.end(), in sbeTimeout()
639 [instance](const auto& obj) { in sbeTimeout()
640 return instance == obj->getOccInstanceID(); in sbeTimeout()
643 if (obj != statusObjects.end() && (*obj)->occActive()) in sbeTimeout()
653 (*obj)->occActive(false); in sbeTimeout()
655 pldmHandle->sendHRESET(instance); in sbeTimeout()
661 auto obj = std::find_if(statusObjects.begin(), statusObjects.end(), in updateOCCActive()
662 [instance](const auto& obj) { in updateOCCActive()
663 return instance == obj->getOccInstanceID(); in updateOCCActive()
674 (*obj)->setPldmSensorReceived(false); in updateOCCActive()
682 discoverTimer->restartOnce(30s); in updateOCCActive()
688 (*obj)->setPldmSensorReceived(true); in updateOCCActive()
689 return (*obj)->occActive(status); in updateOCCActive()
716 auto match = queuedActiveState.find(instance); in updateOCCActive()
731 pmode->updateDbusSafeMode(safeMode); in updateOccSafeMode()
734 for (auto& obj : statusObjects) in updateOccSafeMode()
736 obj->updateThrottle(safeMode, THROTTLED_SAFE); in updateOccSafeMode()
750 // Re-enable communication with this OCC in sbeHRESETResult()
751 auto obj = std::find_if(statusObjects.begin(), statusObjects.end(), in sbeHRESETResult()
752 [instance](const auto& obj) { in sbeHRESETResult()
753 return instance == obj->getOccInstanceID(); in sbeHRESETResult()
755 if (obj != statusObjects.end() && (!(*obj)->occActive())) in sbeHRESETResult()
757 (*obj)->occActive(true); in sbeHRESETResult()
771 auto& bus = utils::getBus(); in sbeHRESETResult()
779 constexpr auto interface = "xyz.openbmc_project.Dump.Create"; in sbeHRESETResult()
780 constexpr auto function = "CreateDump"; in sbeHRESETResult()
784 auto method = bus.new_method_call(service.c_str(), OP_DUMP_OBJ_PATH, in sbeHRESETResult()
799 auto response = bus.call(method); in sbeHRESETResult()
803 constexpr auto ERROR_DUMP_DISABLED = in sbeHRESETResult()
817 // SBE Reset failed, try PM Complex reset in sbeHRESETResult()
818 lg2::error("sbeHRESETResult: Forcing PM Complex reset"); in sbeHRESETResult()
915 lg2::error("pollerTimerExpired() - Initiating PM Complex reset"); in pollerTimerExpired()
918 if (!waitForAllOccsTimer->isEnabled()) in pollerTimerExpired()
922 waitForAllOccsTimer->restartOnce(60s); in pollerTimerExpired()
928 for (auto& obj : statusObjects) in pollerTimerExpired()
930 if (!obj->occActive()) in pollerTimerExpired()
934 auto id = obj->getOccInstanceID(); in pollerTimerExpired()
941 obj->readOccState(); in pollerTimerExpired()
952 _pollTimer->restartOnce(std::chrono::seconds(pollInterval)); in pollerTimerExpired()
967 // from sysfs, and the second to put them on D-Bus after in readTempSensors()
972 for (auto& file : fs::directory_iterator(path)) in readTempSensors()
995 0, file.path().string().length() - tempLabel.length()); in readTempSensors()
1041 auto iter = dimmTempSensorName.find(fruTypeValue); in readTempSensors()
1051 "dimm" + std::to_string(instanceID) + iter->second); in readTempSensors()
1090 auto dvfsValue = readFile<double>(filePathString + maxSuffix); in readTempSensors()
1093 dvfsTempPath, dvfsValue * std::pow(10, -3)); in readTempSensors()
1157 auto existing = sensorData.find(sensorPath); in readTempSensors()
1161 if ((std::isnan(existing->second) && (tempValue == 0)) || in readTempSensors()
1162 ((existing->second == 0) && std::isnan(tempValue))) in readTempSensors()
1168 existing->second = tempValue; in readTempSensors()
1170 if (std::isnan(existing->second) || (tempValue > existing->second)) in readTempSensors()
1172 existing->second = tempValue; in readTempSensors()
1182 // Now publish the values on D-Bus. in readTempSensors()
1183 for (const auto& [objectPath, value] : sensorData) in readTempSensors()
1186 value * std::pow(10, -3)); in readTempSensors()
1218 auto powerLabelValue = value.substr((value.find("_") + 1)); in getPowerLabelFunctionID()
1231 for (auto& file : fs::directory_iterator(path)) in readPowerSensors()
1251 auto functionID = getPowerLabelFunctionID(labelValue); in readPowerSensors()
1259 0, file.path().string().length() - tempLabel.length()); in readPowerSensors()
1263 auto iter = powerSensorName.find(*functionID); in readPowerSensors()
1268 sensorPath.append(iter->second); in readPowerSensors()
1289 sensorPath, tempValue * std::pow(10, -3) * std::pow(10, -3)); in readPowerSensors()
1297 if (iter->second == "total_power") in readPowerSensors()
1315 for (auto& file : fs::directory_iterator(path)) in readExtnSensors()
1337 0, file.path().string().length() - tempLabel.length()); in readExtnSensors()
1384 ssData << std::hex << extnValue.substr(extnValue.length() - 4); in readExtnSensors()
1415 for (const auto& [sensorPath, occId] : existingSensors) in setSensorValueToNaN()
1431 for (const auto& [sensorPath, occId] : existingSensors) in setSensorValueToNonFunctional()
1448 const fs::path sensorPath = occ->getHwmonPath(); in getSensorValues()
1449 const uint32_t id = occ->getOccInstanceID(); in getSensorValues()
1458 if (occ->isMasterOcc()) in getSensorValues()
1490 auto sensorVal = std::get<double>(altitudeProperty); in readAltitude()
1535 auto valPropMap = msgData.find(AMBIENT_PROP); in ambientCallback()
1541 currentTemp = std::get<double>(valPropMap->second); in ambientCallback()
1576 for (auto& obj : statusObjects) in ambientCallback()
1578 if (obj->occActive()) in ambientCallback()
1580 obj->sendAmbient(ambient, altitude); in ambientCallback()
1625 if (!waitForAllOccsTimer->isEnabled()) in occsNotAllRunning()
1629 waitForAllOccsTimer->restartOnce(60s); in occsNotAllRunning()
1650 pldmHandle->setTraceThrottle(true); in throttlePldmTraceExpired()
1653 throttlePldmTraceTimer->restartOnce(40min); in throttlePldmTraceExpired()
1666 pldmHandle->setTraceThrottle(false); in throttlePldmTraceExpired()
1682 auto& bus = utils::getBus(); in createPldmSensorPEL()
1687 // Add occ-control journal traces to PEL FFDC in createPldmSensorPEL()
1688 auto occJournalFile = in createPldmSensorPEL()
1689 FFDC::addJournalEntries(ffdc, "openpower-occ-control", 40); in createPldmSensorPEL()
1691 static constexpr auto loggingObjectPath = in createPldmSensorPEL()
1693 static constexpr auto opLoggingInterface = "org.open_power.Logging.PEL"; in createPldmSensorPEL()
1696 auto method = in createPldmSensorPEL()
1701 auto level = in createPldmSensorPEL()
1721 int masterInstance = -1; in validateOccMaster()
1722 for (auto& obj : statusObjects) in validateOccMaster()
1724 auto instance = obj->getOccInstanceID(); in validateOccMaster()
1726 if (!obj->occActive()) in validateOccMaster()
1731 auto match = queuedActiveState.find(instance); in validateOccMaster()
1737 obj->occActive(true); in validateOccMaster()
1743 pldmHandle->checkActiveSensor(instance); in validateOccMaster()
1745 if (obj->occActive()) in validateOccMaster()
1763 if (obj->isMasterOcc()) in validateOccMaster()
1765 obj->addPresenceWatchMaster(); in validateOccMaster()
1767 if (masterInstance == -1) in validateOccMaster()
1777 obj->deviceError(Error::Descriptor(PRESENCE_ERROR_PATH)); in validateOccMaster()
1787 statusObjects.front()->deviceError( in validateOccMaster()
1795 pmode->updateDbusSafeMode(false); in validateOccMaster()
1804 pcap->updatePcapBounds(); in updatePcapBounds()