mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-01-30 21:19:49 +00:00
535.86.05
This commit is contained in:
@@ -98,6 +98,8 @@ typedef struct {
|
||||
|
||||
NvBool nvkms_output_rounding_fix(void);
|
||||
|
||||
NvBool nvkms_disable_vrr_memclk_switch(void);
|
||||
|
||||
void nvkms_call_rm (void *ops);
|
||||
void* nvkms_alloc (size_t size,
|
||||
NvBool zero);
|
||||
|
||||
@@ -922,22 +922,42 @@ static void ConfigVrrPstateSwitch(NVDispEvoPtr pDispEvo, NvBool vrrEnabled,
|
||||
NV0073_CTRL_SYSTEM_CONFIG_VRR_PSTATE_SWITCH_PARAMS params = { };
|
||||
NvU32 ret;
|
||||
const NVDispHeadStateEvoRec *pHeadState = &pDispEvo->headState[head];
|
||||
const NVHwModeTimingsEvo *pTimings = &pHeadState->timings;
|
||||
|
||||
if (nvkms_disable_vrr_memclk_switch() ||
|
||||
(pTimings->vrr.type == NVKMS_DPY_VRR_TYPE_NONE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* An inactive head should always have pTimings->vrr.type ==
|
||||
* NVKMS_DPY_VRR_TYPE_NONE and therefore return early above.
|
||||
*/
|
||||
nvAssert(nvHeadIsActive(pDispEvo, head));
|
||||
|
||||
params.displayId = pHeadState->activeRmId;
|
||||
params.bVrrEnabled = vrrEnabled;
|
||||
params.bVrrState = vrrState;
|
||||
params.bVrrDirty = vrrDirty;
|
||||
|
||||
params.subDeviceInstance = pDispEvo->displayOwner;
|
||||
if (params.bVrrDirty) {
|
||||
NvU64 frameTimeUs = axb_div_c(pTimings->rasterSize.y * 1000ULL,
|
||||
pTimings->rasterSize.x, pTimings->pixelClock);
|
||||
NvU64 timePerLineNs = (frameTimeUs * 1000ULL) / pTimings->rasterSize.y;
|
||||
|
||||
if (pHeadState->timings.vrr.type != NVKMS_DPY_VRR_TYPE_NONE) {
|
||||
ret = nvRmApiControl(nvEvoGlobal.clientHandle,
|
||||
pDispEvo->pDevEvo->displayCommonHandle,
|
||||
NV0073_CTRL_CMD_SYSTEM_CONFIG_VRR_PSTATE_SWITCH,
|
||||
¶ms, sizeof(params));
|
||||
if (ret != NVOS_STATUS_SUCCESS) {
|
||||
nvEvoLogDispDebug(pDispEvo, EVO_LOG_WARN,
|
||||
"NV0073_CTRL_CMD_SYSTEM_CONFIG_VRR_PSTATE_SWITCH failed");
|
||||
}
|
||||
NvU64 maxFrameTimeUs = pTimings->vrr.timeoutMicroseconds;
|
||||
NvU64 maxVblankExtTimeNs = (maxFrameTimeUs - frameTimeUs) * 1000ULL;
|
||||
|
||||
params.maxVblankExtension = maxVblankExtTimeNs / timePerLineNs;
|
||||
}
|
||||
|
||||
ret = nvRmApiControl(nvEvoGlobal.clientHandle,
|
||||
pDispEvo->pDevEvo->displayCommonHandle,
|
||||
NV0073_CTRL_CMD_SYSTEM_CONFIG_VRR_PSTATE_SWITCH,
|
||||
¶ms, sizeof(params));
|
||||
if (ret != NVOS_STATUS_SUCCESS) {
|
||||
nvEvoLogDispDebug(pDispEvo, EVO_LOG_WARN,
|
||||
"NV0073_CTRL_CMD_SYSTEM_CONFIG_VRR_PSTATE_SWITCH failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user