mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 14:55:24 +08:00
Sysman for Windows: Multiple fixes and optimizations
Signed-off-by: Daniel Enriquez <daniel.enriquez.montanez@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
0418c12c77
commit
dbe0ba2a0f
@@ -14,47 +14,59 @@ namespace L0 {
|
||||
ze_result_t WddmFrequencyImp::osFrequencyGetProperties(zes_freq_properties_t &properties) {
|
||||
readOverclockingInfo();
|
||||
uint32_t value = 0;
|
||||
KmdSysman::RequestProperty request;
|
||||
KmdSysman::ResponseProperty response;
|
||||
|
||||
std::vector<KmdSysman::RequestProperty> vRequests = {};
|
||||
std::vector<KmdSysman::ResponseProperty> vResponses = {};
|
||||
KmdSysman::RequestProperty request = {};
|
||||
|
||||
request.commandId = KmdSysman::Command::Get;
|
||||
request.componentId = KmdSysman::Component::FrequencyComponent;
|
||||
request.requestId = KmdSysman::Requests::Frequency::FrequencyThrottledEventSupported;
|
||||
request.paramInfo = static_cast<uint32_t>(frequencyDomainNumber);
|
||||
|
||||
properties.isThrottleEventSupported = false;
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
properties.isThrottleEventSupported = static_cast<ze_bool_t>(value);
|
||||
}
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::FrequencyRangeMinDefault;
|
||||
request.paramInfo = static_cast<uint32_t>(frequencyDomainNumber);
|
||||
|
||||
properties.min = unsupportedProperty;
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
value = 0;
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
properties.min = static_cast<double>(value);
|
||||
}
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::FrequencyRangeMaxDefault;
|
||||
request.paramInfo = static_cast<uint32_t>(frequencyDomainNumber);
|
||||
|
||||
properties.max = unsupportedProperty;
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
value = 0;
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
properties.max = static_cast<double>(value);
|
||||
}
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CanControlFrequency;
|
||||
request.paramInfo = static_cast<uint32_t>(frequencyDomainNumber);
|
||||
vRequests.push_back(request);
|
||||
|
||||
ze_result_t status = pKmdSysManager->requestMultiple(vRequests, vResponses);
|
||||
|
||||
if ((status != ZE_RESULT_SUCCESS) || (vResponses.size() != vRequests.size())) {
|
||||
return status;
|
||||
}
|
||||
|
||||
properties.isThrottleEventSupported = false;
|
||||
if (vResponses[0].returnCode == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[0].dataBuffer, sizeof(uint32_t));
|
||||
properties.isThrottleEventSupported = static_cast<ze_bool_t>(value);
|
||||
}
|
||||
|
||||
properties.min = unsupportedProperty;
|
||||
if (vResponses[1].returnCode == ZE_RESULT_SUCCESS) {
|
||||
value = 0;
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[1].dataBuffer, sizeof(uint32_t));
|
||||
properties.min = static_cast<double>(value);
|
||||
}
|
||||
|
||||
properties.max = unsupportedProperty;
|
||||
if (vResponses[2].returnCode == ZE_RESULT_SUCCESS) {
|
||||
value = 0;
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[2].dataBuffer, sizeof(uint32_t));
|
||||
properties.max = static_cast<double>(value);
|
||||
}
|
||||
|
||||
properties.canControl = false;
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
if (vResponses[3].returnCode == ZE_RESULT_SUCCESS) {
|
||||
value = 0;
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[3].dataBuffer, sizeof(uint32_t));
|
||||
properties.canControl = (value == 1);
|
||||
}
|
||||
|
||||
@@ -79,71 +91,83 @@ ze_result_t WddmFrequencyImp::osFrequencySetRange(const zes_freq_range_t *pLimit
|
||||
|
||||
ze_result_t WddmFrequencyImp::osFrequencyGetState(zes_freq_state_t *pState) {
|
||||
uint32_t value = 0;
|
||||
KmdSysman::RequestProperty request;
|
||||
KmdSysman::ResponseProperty response;
|
||||
std::vector<KmdSysman::RequestProperty> vRequests = {};
|
||||
std::vector<KmdSysman::ResponseProperty> vResponses = {};
|
||||
KmdSysman::RequestProperty request = {};
|
||||
|
||||
request.commandId = KmdSysman::Command::Get;
|
||||
request.componentId = KmdSysman::Component::FrequencyComponent;
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentRequestedFrequency;
|
||||
request.paramInfo = static_cast<uint32_t>(this->frequencyDomainNumber);
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentTdpFrequency;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentResolvedFrequency;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentEfficientFrequency;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltage;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentThrottleReasons;
|
||||
vRequests.push_back(request);
|
||||
|
||||
ze_result_t status = pKmdSysManager->requestMultiple(vRequests, vResponses);
|
||||
|
||||
if ((status != ZE_RESULT_SUCCESS) || (vResponses.size() != vRequests.size())) {
|
||||
return status;
|
||||
}
|
||||
|
||||
pState->request = unsupportedProperty;
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[0].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[0].dataBuffer, sizeof(uint32_t));
|
||||
pState->request = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentTdpFrequency;
|
||||
|
||||
pState->tdp = unsupportedProperty;
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[1].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[1].dataBuffer, sizeof(uint32_t));
|
||||
pState->tdp = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentResolvedFrequency;
|
||||
|
||||
pState->actual = unsupportedProperty;
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[2].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[2].dataBuffer, sizeof(uint32_t));
|
||||
pState->actual = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentEfficientFrequency;
|
||||
|
||||
pState->efficient = unsupportedProperty;
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[3].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[3].dataBuffer, sizeof(uint32_t));
|
||||
pState->efficient = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltage;
|
||||
|
||||
pState->currentVoltage = unsupportedProperty;
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[4].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[4].dataBuffer, sizeof(uint32_t));
|
||||
pState->currentVoltage = static_cast<double>(value);
|
||||
pState->currentVoltage /= milliVoltsFactor;
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentThrottleReasons;
|
||||
request.paramInfo = static_cast<uint32_t>(this->frequencyDomainNumber);
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
if (vResponses[5].returnCode == KmdSysman::Success) {
|
||||
KmdThrottleReasons value = {0};
|
||||
pState->throttleReasons = {0};
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[5].dataBuffer, sizeof(uint32_t));
|
||||
|
||||
if (value.powerlimit1) {
|
||||
if (value.power3) {
|
||||
pState->throttleReasons |= ZES_FREQ_THROTTLE_REASON_FLAG_AVE_PWR_CAP;
|
||||
}
|
||||
if (value.powerlimit2) {
|
||||
if (value.power4) {
|
||||
pState->throttleReasons |= ZES_FREQ_THROTTLE_REASON_FLAG_BURST_PWR_CAP;
|
||||
}
|
||||
if (value.powerlimit4) {
|
||||
if (value.current1) {
|
||||
pState->throttleReasons |= ZES_FREQ_THROTTLE_REASON_FLAG_CURRENT_LIMIT;
|
||||
}
|
||||
if (value.thermal) {
|
||||
if (value.thermal1 || value.thermal2 || value.thermal3 || value.thermal4) {
|
||||
pState->throttleReasons |= ZES_FREQ_THROTTLE_REASON_FLAG_THERMAL_LIMIT;
|
||||
}
|
||||
}
|
||||
@@ -184,59 +208,51 @@ ze_result_t WddmFrequencyImp::getOcFrequencyTarget(double *pCurrentOcFrequency)
|
||||
}
|
||||
|
||||
ze_result_t WddmFrequencyImp::setOcFrequencyTarget(double currentOcFrequency) {
|
||||
if (currentFrequencyTarget != currentOcFrequency) {
|
||||
currentFrequencyTarget = currentOcFrequency;
|
||||
return applyOcSettings();
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
this->currentFrequencyTarget = currentOcFrequency;
|
||||
return applyOcSettings();
|
||||
}
|
||||
|
||||
ze_result_t WddmFrequencyImp::getOcVoltageTarget(double *pCurrentVoltageTarget, double *pCurrentVoltageOffset) {
|
||||
ze_result_t status = ZE_RESULT_SUCCESS;
|
||||
uint32_t unsignedValue = 0;
|
||||
int32_t signedValue = 0;
|
||||
KmdSysman::RequestProperty request;
|
||||
KmdSysman::ResponseProperty response;
|
||||
std::vector<KmdSysman::RequestProperty> vRequests = {};
|
||||
std::vector<KmdSysman::ResponseProperty> vResponses = {};
|
||||
KmdSysman::RequestProperty request = {};
|
||||
|
||||
request.commandId = KmdSysman::Command::Get;
|
||||
request.componentId = KmdSysman::Component::FrequencyComponent;
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageTarget;
|
||||
request.paramInfo = static_cast<uint32_t>(this->frequencyDomainNumber);
|
||||
|
||||
status = pKmdSysManager->requestSingle(request, response);
|
||||
|
||||
if (status != ZE_RESULT_SUCCESS) {
|
||||
return status;
|
||||
}
|
||||
|
||||
memcpy_s(&unsignedValue, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
*pCurrentVoltageTarget = currentVoltageTarget = static_cast<double>(unsignedValue);
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageOffset;
|
||||
vRequests.push_back(request);
|
||||
|
||||
status = pKmdSysManager->requestSingle(request, response);
|
||||
ze_result_t status = pKmdSysManager->requestMultiple(vRequests, vResponses);
|
||||
|
||||
if (status != ZE_RESULT_SUCCESS) {
|
||||
if ((status != ZE_RESULT_SUCCESS) || (vResponses.size() != vRequests.size())) {
|
||||
return status;
|
||||
}
|
||||
|
||||
memcpy_s(&signedValue, sizeof(int32_t), response.dataBuffer, sizeof(int32_t));
|
||||
*pCurrentVoltageOffset = currentVoltageOffset = static_cast<double>(signedValue);
|
||||
if (vResponses[0].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&unsignedValue, sizeof(uint32_t), vResponses[0].dataBuffer, sizeof(uint32_t));
|
||||
*pCurrentVoltageTarget = currentVoltageTarget = static_cast<double>(unsignedValue);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
ze_result_t WddmFrequencyImp::setOcVoltageTarget(double currentVoltageTarget, double currentVoltageOffset) {
|
||||
if (this->currentVoltageTarget != currentVoltageTarget || this->currentVoltageOffset != currentVoltageOffset) {
|
||||
this->currentVoltageTarget = currentVoltageTarget;
|
||||
this->currentVoltageOffset = currentVoltageOffset;
|
||||
return applyOcSettings();
|
||||
if (vResponses[1].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&signedValue, sizeof(int32_t), vResponses[1].dataBuffer, sizeof(int32_t));
|
||||
*pCurrentVoltageOffset = currentVoltageOffset = static_cast<double>(signedValue);
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t WddmFrequencyImp::setOcVoltageTarget(double currentVoltageTarget, double currentVoltageOffset) {
|
||||
this->currentVoltageTarget = currentVoltageTarget;
|
||||
this->currentVoltageOffset = currentVoltageOffset;
|
||||
return applyOcSettings();
|
||||
}
|
||||
|
||||
ze_result_t WddmFrequencyImp::getOcMode(zes_oc_mode_t *pCurrentOcMode) {
|
||||
ze_result_t status = ZE_RESULT_SUCCESS;
|
||||
|
||||
@@ -352,7 +368,7 @@ ze_result_t WddmFrequencyImp::setOcTjMax(double ocTjMax) {
|
||||
|
||||
request.commandId = KmdSysman::Command::Set;
|
||||
request.componentId = KmdSysman::Component::FrequencyComponent;
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentIccMax;
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentTjMax;
|
||||
request.paramInfo = static_cast<uint32_t>(this->frequencyDomainNumber);
|
||||
request.dataSize = sizeof(uint32_t);
|
||||
|
||||
@@ -407,190 +423,192 @@ ze_result_t WddmFrequencyImp::getRange(double *min, double *max) {
|
||||
}
|
||||
|
||||
ze_result_t WddmFrequencyImp::applyOcSettings() {
|
||||
ze_result_t status = ZE_RESULT_SUCCESS;
|
||||
int32_t value = 0;
|
||||
KmdSysman::RequestProperty request;
|
||||
KmdSysman::ResponseProperty response;
|
||||
std::vector<KmdSysman::RequestProperty> vRequests = {};
|
||||
std::vector<KmdSysman::ResponseProperty> vResponses = {};
|
||||
KmdSysman::RequestProperty request = {};
|
||||
|
||||
request.commandId = KmdSysman::Command::Set;
|
||||
request.componentId = KmdSysman::Component::FrequencyComponent;
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentFixedMode;
|
||||
request.paramInfo = static_cast<uint32_t>(this->frequencyDomainNumber);
|
||||
request.dataSize = sizeof(int32_t);
|
||||
|
||||
// Fixed mode not supported.
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentFixedMode;
|
||||
value = 0;
|
||||
memcpy_s(request.dataBuffer, sizeof(int32_t), &value, sizeof(int32_t));
|
||||
|
||||
status = pKmdSysManager->requestSingle(request, response);
|
||||
|
||||
if (status != ZE_RESULT_SUCCESS) {
|
||||
return status;
|
||||
}
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageMode;
|
||||
|
||||
value = (currentVoltageMode == ZES_OC_MODE_OVERRIDE) ? 1 : 0;
|
||||
memcpy_s(request.dataBuffer, sizeof(int32_t), &value, sizeof(int32_t));
|
||||
|
||||
status = pKmdSysManager->requestSingle(request, response);
|
||||
|
||||
if (status != ZE_RESULT_SUCCESS) {
|
||||
return status;
|
||||
}
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageOffset;
|
||||
|
||||
value = static_cast<int32_t>(currentVoltageOffset);
|
||||
memcpy_s(request.dataBuffer, sizeof(int32_t), &value, sizeof(int32_t));
|
||||
|
||||
status = pKmdSysManager->requestSingle(request, response);
|
||||
|
||||
if (status != ZE_RESULT_SUCCESS) {
|
||||
return status;
|
||||
}
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageTarget;
|
||||
|
||||
value = static_cast<int32_t>(currentVoltageTarget);
|
||||
memcpy_s(request.dataBuffer, sizeof(int32_t), &value, sizeof(int32_t));
|
||||
vRequests.push_back(request);
|
||||
|
||||
status = pKmdSysManager->requestSingle(request, response);
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentFrequencyTarget;
|
||||
value = static_cast<int32_t>(currentFrequencyTarget);
|
||||
memcpy_s(request.dataBuffer, sizeof(int32_t), &value, sizeof(int32_t));
|
||||
vRequests.push_back(request);
|
||||
|
||||
if (status != ZE_RESULT_SUCCESS) {
|
||||
ze_result_t status = pKmdSysManager->requestMultiple(vRequests, vResponses);
|
||||
|
||||
if ((status != ZE_RESULT_SUCCESS) || (vResponses.size() != vRequests.size())) {
|
||||
return status;
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentFrequencyTarget;
|
||||
for (uint32_t i = 0; i < vResponses.size(); i++) {
|
||||
if (vResponses[i].returnCode != KmdSysman::ReturnCodes::Success) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
}
|
||||
|
||||
value = static_cast<int32_t>(currentFrequencyTarget);
|
||||
memcpy_s(request.dataBuffer, sizeof(int32_t), &value, sizeof(int32_t));
|
||||
|
||||
return pKmdSysManager->requestSingle(request, response);
|
||||
return status;
|
||||
}
|
||||
|
||||
void WddmFrequencyImp::readOverclockingInfo() {
|
||||
uint32_t value = 0;
|
||||
KmdSysman::RequestProperty request;
|
||||
KmdSysman::ResponseProperty response;
|
||||
std::vector<KmdSysman::RequestProperty> vRequests = {};
|
||||
std::vector<KmdSysman::ResponseProperty> vResponses = {};
|
||||
KmdSysman::RequestProperty request = {};
|
||||
|
||||
request.commandId = KmdSysman::Command::Get;
|
||||
request.componentId = KmdSysman::Component::FrequencyComponent;
|
||||
request.requestId = KmdSysman::Requests::Frequency::ExtendedOcSupported;
|
||||
request.paramInfo = static_cast<uint32_t>(this->frequencyDomainNumber);
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
request.requestId = KmdSysman::Requests::Frequency::ExtendedOcSupported;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::FixedModeSupported;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::HighVoltageModeSupported;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::HighVoltageEnabled;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentIccMax;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::FrequencyOcSupported;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentTjMax;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::MaxNonOcFrequencyDefault;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::MaxNonOcVoltageDefault;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::MaxOcFrequencyDefault;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::MaxOcVoltageDefault;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentFrequencyTarget;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageTarget;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageOffset;
|
||||
vRequests.push_back(request);
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageMode;
|
||||
vRequests.push_back(request);
|
||||
|
||||
ze_result_t status = pKmdSysManager->requestMultiple(vRequests, vResponses);
|
||||
|
||||
if ((status != ZE_RESULT_SUCCESS) || (vResponses.size() != vRequests.size())) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (vResponses[0].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[0].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.isExtendedModeSupported = static_cast<ze_bool_t>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::FixedModeSupported;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[1].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[1].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.isFixedModeSupported = static_cast<ze_bool_t>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::HighVoltageModeSupported;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[2].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[2].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.isHighVoltModeCapable = static_cast<ze_bool_t>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::HighVoltageEnabled;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[3].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[3].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.isHighVoltModeEnabled = static_cast<ze_bool_t>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentIccMax;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[4].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[4].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.isIccMaxSupported = static_cast<ze_bool_t>(value > 0);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::FrequencyOcSupported;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[5].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[5].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.isOcSupported = static_cast<ze_bool_t>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentTjMax;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[6].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[6].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.isTjMaxSupported = static_cast<ze_bool_t>(value > 0);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::MaxNonOcFrequencyDefault;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[7].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[7].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.maxFactoryDefaultFrequency = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::MaxNonOcVoltageDefault;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[8].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[8].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.maxFactoryDefaultVoltage = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::MaxOcFrequencyDefault;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[9].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[9].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.maxOcFrequency = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::MaxOcVoltageDefault;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[10].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[10].dataBuffer, sizeof(uint32_t));
|
||||
ocCapabilities.maxOcVoltage = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentFrequencyTarget;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[11].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[11].dataBuffer, sizeof(uint32_t));
|
||||
currentFrequencyTarget = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageTarget;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[12].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[12].dataBuffer, sizeof(uint32_t));
|
||||
currentVoltageTarget = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageOffset;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[13].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[13].dataBuffer, sizeof(uint32_t));
|
||||
currentVoltageOffset = static_cast<double>(value);
|
||||
}
|
||||
|
||||
request.requestId = KmdSysman::Requests::Frequency::CurrentVoltageMode;
|
||||
|
||||
if (pKmdSysManager->requestSingle(request, response) == ZE_RESULT_SUCCESS) {
|
||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||
if (vResponses[14].returnCode == KmdSysman::Success) {
|
||||
memcpy_s(&value, sizeof(uint32_t), vResponses[14].dataBuffer, sizeof(uint32_t));
|
||||
currentVoltageMode = value ? ZES_OC_MODE_OVERRIDE : ZES_OC_MODE_INTERPOLATIVE;
|
||||
}
|
||||
|
||||
if (currentFrequencyTarget == 0.0 || currentVoltageTarget == 0.0) {
|
||||
if (currentFrequencyTarget == 0.0) {
|
||||
currentFrequencyTarget = ocCapabilities.maxFactoryDefaultFrequency;
|
||||
}
|
||||
|
||||
if (currentVoltageTarget == 0.0) {
|
||||
currentVoltageTarget = ocCapabilities.maxFactoryDefaultVoltage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WddmFrequencyImp::WddmFrequencyImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId, zes_freq_domain_t frequencyDomainNumber) {
|
||||
|
||||
@@ -19,14 +19,21 @@ struct KmdThrottleReasons {
|
||||
union {
|
||||
uint32_t bitfield;
|
||||
struct {
|
||||
uint32_t reserved1 : KMD_BIT_RANGE(16, 0);
|
||||
uint32_t thermal : KMD_BIT_RANGE(17, 17);
|
||||
uint32_t reserved2 : KMD_BIT_RANGE(23, 18);
|
||||
uint32_t powerlimit4 : KMD_BIT_RANGE(24, 24);
|
||||
uint32_t reserved3 : KMD_BIT_RANGE(25, 25);
|
||||
uint32_t powerlimit1 : KMD_BIT_RANGE(26, 26);
|
||||
uint32_t powerlimit2 : KMD_BIT_RANGE(27, 27);
|
||||
uint32_t reserved4 : KMD_BIT_RANGE(31, 28);
|
||||
uint32_t thermal1 : KMD_BIT_RANGE(0, 0);
|
||||
uint32_t thermal2 : KMD_BIT_RANGE(1, 1);
|
||||
uint32_t reserved1 : KMD_BIT_RANGE(3, 2);
|
||||
uint32_t power1 : KMD_BIT_RANGE(4, 4);
|
||||
uint32_t power2 : KMD_BIT_RANGE(5, 5);
|
||||
uint32_t thermal3 : KMD_BIT_RANGE(6, 6);
|
||||
uint32_t thermal4 : KMD_BIT_RANGE(7, 7);
|
||||
uint32_t current1 : KMD_BIT_RANGE(8, 8);
|
||||
uint32_t reserved2 : KMD_BIT_RANGE(9, 9);
|
||||
uint32_t power3 : KMD_BIT_RANGE(10, 10);
|
||||
uint32_t power4 : KMD_BIT_RANGE(11, 11);
|
||||
uint32_t inefficient1 : KMD_BIT_RANGE(12, 12);
|
||||
uint32_t reserved3 : KMD_BIT_RANGE(13, 13);
|
||||
uint32_t inefficient2 : KMD_BIT_RANGE(14, 14);
|
||||
uint32_t reserved4 : KMD_BIT_RANGE(31, 15);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user