535.86.05

This commit is contained in:
Bernhard Stoeckner
2023-07-18 15:54:53 +02:00
parent 22a077c4fe
commit 337e28efda
264 changed files with 67251 additions and 107479 deletions

View File

@@ -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);

View File

@@ -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,
&params, 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,
&params, sizeof(params));
if (ret != NVOS_STATUS_SUCCESS) {
nvEvoLogDispDebug(pDispEvo, EVO_LOG_WARN,
"NV0073_CTRL_CMD_SYSTEM_CONFIG_VRR_PSTATE_SWITCH failed");
}
}