drm/amd/display: Reduce number of arguments of dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport()
Most of the arguments are identical between the two call sites and they can be accessed through the 'struct vba_vars_st' pointer created at the top of dml32_ModeSupportAndSystemConfigurationFull(). This reduces the total amount of stack space that dml32_ModeSupportAndSystemConfigurationFull() uses by 216 bytes with LLVM 16 (2152 -> 1936), helping clear up the following clang warning: drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_32.c:1721:6: error: stack frame size (2152) exceeds limit (2048) in 'dml32_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than] void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib) ^ 1 error generated. Additionally, while modifying the arguments to dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(), use 'v' consistently, instead of 'v' mixed with 'mode_lib->vba'. Link: https://github.com/ClangBuiltLinux/linux/issues/1681 Reported-by: "Sudip Mukherjee (Codethink)" <sudipm.mukherjee@gmail.com> Tested-by: Maíra Canal <mairacanal@riseup.net> Reviewed-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
d978c51f8d
commit
c4be0ac987
@ -1163,58 +1163,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
|
|||||||
v->dummy_vars.DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation.mmSOCParameters.SMNLatency = mode_lib->vba.SMNLatency;
|
v->dummy_vars.DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation.mmSOCParameters.SMNLatency = mode_lib->vba.SMNLatency;
|
||||||
|
|
||||||
dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
||||||
mode_lib->vba.USRRetrainingRequiredFinal,
|
v,
|
||||||
mode_lib->vba.UsesMALLForPStateChange,
|
v->PrefetchModePerState[v->VoltageLevel][v->maxMpcComb],
|
||||||
mode_lib->vba.PrefetchModePerState[mode_lib->vba.VoltageLevel][mode_lib->vba.maxMpcComb],
|
v->DCFCLK,
|
||||||
mode_lib->vba.NumberOfActiveSurfaces,
|
v->ReturnBW,
|
||||||
mode_lib->vba.MaxLineBufferLines,
|
|
||||||
mode_lib->vba.LineBufferSizeFinal,
|
|
||||||
mode_lib->vba.WritebackInterfaceBufferSize,
|
|
||||||
mode_lib->vba.DCFCLK,
|
|
||||||
mode_lib->vba.ReturnBW,
|
|
||||||
mode_lib->vba.SynchronizeTimingsFinal,
|
|
||||||
mode_lib->vba.SynchronizeDRRDisplaysForUCLKPStateChangeFinal,
|
|
||||||
mode_lib->vba.DRRDisplay,
|
|
||||||
v->dpte_group_bytes,
|
|
||||||
v->meta_row_height,
|
|
||||||
v->meta_row_height_chroma,
|
|
||||||
v->dummy_vars.DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation.mmSOCParameters,
|
v->dummy_vars.DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation.mmSOCParameters,
|
||||||
mode_lib->vba.WritebackChunkSize,
|
v->SOCCLK,
|
||||||
mode_lib->vba.SOCCLK,
|
|
||||||
v->DCFCLKDeepSleep,
|
v->DCFCLKDeepSleep,
|
||||||
mode_lib->vba.DETBufferSizeY,
|
v->DETBufferSizeY,
|
||||||
mode_lib->vba.DETBufferSizeC,
|
v->DETBufferSizeC,
|
||||||
mode_lib->vba.SwathHeightY,
|
v->SwathHeightY,
|
||||||
mode_lib->vba.SwathHeightC,
|
v->SwathHeightC,
|
||||||
mode_lib->vba.LBBitPerPixel,
|
|
||||||
v->SwathWidthY,
|
v->SwathWidthY,
|
||||||
v->SwathWidthC,
|
v->SwathWidthC,
|
||||||
mode_lib->vba.HRatio,
|
v->DPPPerPlane,
|
||||||
mode_lib->vba.HRatioChroma,
|
|
||||||
mode_lib->vba.vtaps,
|
|
||||||
mode_lib->vba.VTAPsChroma,
|
|
||||||
mode_lib->vba.VRatio,
|
|
||||||
mode_lib->vba.VRatioChroma,
|
|
||||||
mode_lib->vba.HTotal,
|
|
||||||
mode_lib->vba.VTotal,
|
|
||||||
mode_lib->vba.VActive,
|
|
||||||
mode_lib->vba.PixelClock,
|
|
||||||
mode_lib->vba.BlendingAndTiming,
|
|
||||||
mode_lib->vba.DPPPerPlane,
|
|
||||||
v->BytePerPixelDETY,
|
v->BytePerPixelDETY,
|
||||||
v->BytePerPixelDETC,
|
v->BytePerPixelDETC,
|
||||||
v->DSTXAfterScaler,
|
v->DSTXAfterScaler,
|
||||||
v->DSTYAfterScaler,
|
v->DSTYAfterScaler,
|
||||||
mode_lib->vba.WritebackEnable,
|
|
||||||
mode_lib->vba.WritebackPixelFormat,
|
|
||||||
mode_lib->vba.WritebackDestinationWidth,
|
|
||||||
mode_lib->vba.WritebackDestinationHeight,
|
|
||||||
mode_lib->vba.WritebackSourceHeight,
|
|
||||||
v->UnboundedRequestEnabled,
|
v->UnboundedRequestEnabled,
|
||||||
v->CompressedBufferSizeInkByte,
|
v->CompressedBufferSizeInkByte,
|
||||||
|
|
||||||
/* Output */
|
/* Output */
|
||||||
&v->Watermark,
|
|
||||||
&v->dummy_vars.DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation.dummy_dramchange_support,
|
&v->dummy_vars.DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation.dummy_dramchange_support,
|
||||||
v->MaxActiveDRAMClockChangeLatencySupported,
|
v->MaxActiveDRAMClockChangeLatencySupported,
|
||||||
v->SubViewportLinesNeededInMALL,
|
v->SubViewportLinesNeededInMALL,
|
||||||
@ -3557,62 +3527,32 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
|||||||
|
|
||||||
{
|
{
|
||||||
dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
||||||
mode_lib->vba.USRRetrainingRequiredFinal,
|
v,
|
||||||
mode_lib->vba.UsesMALLForPStateChange,
|
v->PrefetchModePerState[i][j],
|
||||||
mode_lib->vba.PrefetchModePerState[i][j],
|
v->DCFCLKState[i][j],
|
||||||
mode_lib->vba.NumberOfActiveSurfaces,
|
v->ReturnBWPerState[i][j],
|
||||||
mode_lib->vba.MaxLineBufferLines,
|
|
||||||
mode_lib->vba.LineBufferSizeFinal,
|
|
||||||
mode_lib->vba.WritebackInterfaceBufferSize,
|
|
||||||
mode_lib->vba.DCFCLKState[i][j],
|
|
||||||
mode_lib->vba.ReturnBWPerState[i][j],
|
|
||||||
mode_lib->vba.SynchronizeTimingsFinal,
|
|
||||||
mode_lib->vba.SynchronizeDRRDisplaysForUCLKPStateChangeFinal,
|
|
||||||
mode_lib->vba.DRRDisplay,
|
|
||||||
mode_lib->vba.dpte_group_bytes,
|
|
||||||
mode_lib->vba.meta_row_height,
|
|
||||||
mode_lib->vba.meta_row_height_chroma,
|
|
||||||
v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.mSOCParameters,
|
v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.mSOCParameters,
|
||||||
mode_lib->vba.WritebackChunkSize,
|
v->SOCCLKPerState[i],
|
||||||
mode_lib->vba.SOCCLKPerState[i],
|
v->ProjectedDCFCLKDeepSleep[i][j],
|
||||||
mode_lib->vba.ProjectedDCFCLKDeepSleep[i][j],
|
v->DETBufferSizeYThisState,
|
||||||
mode_lib->vba.DETBufferSizeYThisState,
|
v->DETBufferSizeCThisState,
|
||||||
mode_lib->vba.DETBufferSizeCThisState,
|
v->SwathHeightYThisState,
|
||||||
mode_lib->vba.SwathHeightYThisState,
|
v->SwathHeightCThisState,
|
||||||
mode_lib->vba.SwathHeightCThisState,
|
v->SwathWidthYThisState, // 24
|
||||||
mode_lib->vba.LBBitPerPixel,
|
v->SwathWidthCThisState,
|
||||||
mode_lib->vba.SwathWidthYThisState, // 24
|
v->NoOfDPPThisState,
|
||||||
mode_lib->vba.SwathWidthCThisState,
|
v->BytePerPixelInDETY,
|
||||||
mode_lib->vba.HRatio,
|
v->BytePerPixelInDETC,
|
||||||
mode_lib->vba.HRatioChroma,
|
|
||||||
mode_lib->vba.vtaps,
|
|
||||||
mode_lib->vba.VTAPsChroma,
|
|
||||||
mode_lib->vba.VRatio,
|
|
||||||
mode_lib->vba.VRatioChroma,
|
|
||||||
mode_lib->vba.HTotal,
|
|
||||||
mode_lib->vba.VTotal,
|
|
||||||
mode_lib->vba.VActive,
|
|
||||||
mode_lib->vba.PixelClock,
|
|
||||||
mode_lib->vba.BlendingAndTiming,
|
|
||||||
mode_lib->vba.NoOfDPPThisState,
|
|
||||||
mode_lib->vba.BytePerPixelInDETY,
|
|
||||||
mode_lib->vba.BytePerPixelInDETC,
|
|
||||||
v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.DSTXAfterScaler,
|
v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.DSTXAfterScaler,
|
||||||
v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.DSTYAfterScaler,
|
v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.DSTYAfterScaler,
|
||||||
mode_lib->vba.WritebackEnable,
|
v->UnboundedRequestEnabledThisState,
|
||||||
mode_lib->vba.WritebackPixelFormat,
|
v->CompressedBufferSizeInkByteThisState,
|
||||||
mode_lib->vba.WritebackDestinationWidth,
|
|
||||||
mode_lib->vba.WritebackDestinationHeight,
|
|
||||||
mode_lib->vba.WritebackSourceHeight,
|
|
||||||
mode_lib->vba.UnboundedRequestEnabledThisState,
|
|
||||||
mode_lib->vba.CompressedBufferSizeInkByteThisState,
|
|
||||||
|
|
||||||
/* Output */
|
/* Output */
|
||||||
&mode_lib->vba.Watermark, // Store the values in vba
|
&v->DRAMClockChangeSupport[i][j],
|
||||||
&mode_lib->vba.DRAMClockChangeSupport[i][j],
|
|
||||||
&v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single2[0], // double *MaxActiveDRAMClockChangeLatencySupported
|
&v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single2[0], // double *MaxActiveDRAMClockChangeLatencySupported
|
||||||
&v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer[0], // Long SubViewportLinesNeededInMALL[]
|
&v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer[0], // Long SubViewportLinesNeededInMALL[]
|
||||||
&mode_lib->vba.FCLKChangeSupport[i][j],
|
&v->FCLKChangeSupport[i][j],
|
||||||
&v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single2[1], // double *MinActiveFCLKChangeLatencySupported
|
&v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single2[1], // double *MinActiveFCLKChangeLatencySupported
|
||||||
&mode_lib->vba.USRRetrainingSupport[i][j],
|
&mode_lib->vba.USRRetrainingSupport[i][j],
|
||||||
mode_lib->vba.ActiveDRAMClockChangeLatencyMargin);
|
mode_lib->vba.ActiveDRAMClockChangeLatencyMargin);
|
||||||
|
@ -4206,58 +4206,28 @@ void dml32_CalculateFlipSchedule(
|
|||||||
} // CalculateFlipSchedule
|
} // CalculateFlipSchedule
|
||||||
|
|
||||||
void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
||||||
bool USRRetrainingRequiredFinal,
|
struct vba_vars_st *v,
|
||||||
enum dm_use_mall_for_pstate_change_mode UseMALLForPStateChange[],
|
|
||||||
unsigned int PrefetchMode,
|
unsigned int PrefetchMode,
|
||||||
unsigned int NumberOfActiveSurfaces,
|
|
||||||
unsigned int MaxLineBufferLines,
|
|
||||||
unsigned int LineBufferSize,
|
|
||||||
unsigned int WritebackInterfaceBufferSize,
|
|
||||||
double DCFCLK,
|
double DCFCLK,
|
||||||
double ReturnBW,
|
double ReturnBW,
|
||||||
bool SynchronizeTimingsFinal,
|
|
||||||
bool SynchronizeDRRDisplaysForUCLKPStateChangeFinal,
|
|
||||||
bool DRRDisplay[],
|
|
||||||
unsigned int dpte_group_bytes[],
|
|
||||||
unsigned int meta_row_height[],
|
|
||||||
unsigned int meta_row_height_chroma[],
|
|
||||||
SOCParametersList mmSOCParameters,
|
SOCParametersList mmSOCParameters,
|
||||||
unsigned int WritebackChunkSize,
|
|
||||||
double SOCCLK,
|
double SOCCLK,
|
||||||
double DCFClkDeepSleep,
|
double DCFClkDeepSleep,
|
||||||
unsigned int DETBufferSizeY[],
|
unsigned int DETBufferSizeY[],
|
||||||
unsigned int DETBufferSizeC[],
|
unsigned int DETBufferSizeC[],
|
||||||
unsigned int SwathHeightY[],
|
unsigned int SwathHeightY[],
|
||||||
unsigned int SwathHeightC[],
|
unsigned int SwathHeightC[],
|
||||||
unsigned int LBBitPerPixel[],
|
|
||||||
double SwathWidthY[],
|
double SwathWidthY[],
|
||||||
double SwathWidthC[],
|
double SwathWidthC[],
|
||||||
double HRatio[],
|
|
||||||
double HRatioChroma[],
|
|
||||||
unsigned int VTaps[],
|
|
||||||
unsigned int VTapsChroma[],
|
|
||||||
double VRatio[],
|
|
||||||
double VRatioChroma[],
|
|
||||||
unsigned int HTotal[],
|
|
||||||
unsigned int VTotal[],
|
|
||||||
unsigned int VActive[],
|
|
||||||
double PixelClock[],
|
|
||||||
unsigned int BlendingAndTiming[],
|
|
||||||
unsigned int DPPPerSurface[],
|
unsigned int DPPPerSurface[],
|
||||||
double BytePerPixelDETY[],
|
double BytePerPixelDETY[],
|
||||||
double BytePerPixelDETC[],
|
double BytePerPixelDETC[],
|
||||||
double DSTXAfterScaler[],
|
double DSTXAfterScaler[],
|
||||||
double DSTYAfterScaler[],
|
double DSTYAfterScaler[],
|
||||||
bool WritebackEnable[],
|
|
||||||
enum source_format_class WritebackPixelFormat[],
|
|
||||||
double WritebackDestinationWidth[],
|
|
||||||
double WritebackDestinationHeight[],
|
|
||||||
double WritebackSourceHeight[],
|
|
||||||
bool UnboundedRequestEnabled,
|
bool UnboundedRequestEnabled,
|
||||||
unsigned int CompressedBufferSizeInkByte,
|
unsigned int CompressedBufferSizeInkByte,
|
||||||
|
|
||||||
/* Output */
|
/* Output */
|
||||||
Watermarks *Watermark,
|
|
||||||
enum clock_change_support *DRAMClockChangeSupport,
|
enum clock_change_support *DRAMClockChangeSupport,
|
||||||
double MaxActiveDRAMClockChangeLatencySupported[],
|
double MaxActiveDRAMClockChangeLatencySupported[],
|
||||||
unsigned int SubViewportLinesNeededInMALL[],
|
unsigned int SubViewportLinesNeededInMALL[],
|
||||||
@ -4299,136 +4269,136 @@ void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
|||||||
unsigned int LBLatencyHidingSourceLinesY[DC__NUM_DPP__MAX];
|
unsigned int LBLatencyHidingSourceLinesY[DC__NUM_DPP__MAX];
|
||||||
unsigned int LBLatencyHidingSourceLinesC[DC__NUM_DPP__MAX];
|
unsigned int LBLatencyHidingSourceLinesC[DC__NUM_DPP__MAX];
|
||||||
|
|
||||||
Watermark->UrgentWatermark = mmSOCParameters.UrgentLatency + mmSOCParameters.ExtraLatency;
|
v->Watermark.UrgentWatermark = mmSOCParameters.UrgentLatency + mmSOCParameters.ExtraLatency;
|
||||||
Watermark->USRRetrainingWatermark = mmSOCParameters.UrgentLatency + mmSOCParameters.ExtraLatency
|
v->Watermark.USRRetrainingWatermark = mmSOCParameters.UrgentLatency + mmSOCParameters.ExtraLatency
|
||||||
+ mmSOCParameters.USRRetrainingLatency + mmSOCParameters.SMNLatency;
|
+ mmSOCParameters.USRRetrainingLatency + mmSOCParameters.SMNLatency;
|
||||||
Watermark->DRAMClockChangeWatermark = mmSOCParameters.DRAMClockChangeLatency + Watermark->UrgentWatermark;
|
v->Watermark.DRAMClockChangeWatermark = mmSOCParameters.DRAMClockChangeLatency + v->Watermark.UrgentWatermark;
|
||||||
Watermark->FCLKChangeWatermark = mmSOCParameters.FCLKChangeLatency + Watermark->UrgentWatermark;
|
v->Watermark.FCLKChangeWatermark = mmSOCParameters.FCLKChangeLatency + v->Watermark.UrgentWatermark;
|
||||||
Watermark->StutterExitWatermark = mmSOCParameters.SRExitTime + mmSOCParameters.ExtraLatency
|
v->Watermark.StutterExitWatermark = mmSOCParameters.SRExitTime + mmSOCParameters.ExtraLatency
|
||||||
+ 10 / DCFClkDeepSleep;
|
+ 10 / DCFClkDeepSleep;
|
||||||
Watermark->StutterEnterPlusExitWatermark = mmSOCParameters.SREnterPlusExitTime + mmSOCParameters.ExtraLatency
|
v->Watermark.StutterEnterPlusExitWatermark = mmSOCParameters.SREnterPlusExitTime + mmSOCParameters.ExtraLatency
|
||||||
+ 10 / DCFClkDeepSleep;
|
+ 10 / DCFClkDeepSleep;
|
||||||
Watermark->Z8StutterExitWatermark = mmSOCParameters.SRExitZ8Time + mmSOCParameters.ExtraLatency
|
v->Watermark.Z8StutterExitWatermark = mmSOCParameters.SRExitZ8Time + mmSOCParameters.ExtraLatency
|
||||||
+ 10 / DCFClkDeepSleep;
|
+ 10 / DCFClkDeepSleep;
|
||||||
Watermark->Z8StutterEnterPlusExitWatermark = mmSOCParameters.SREnterPlusExitZ8Time
|
v->Watermark.Z8StutterEnterPlusExitWatermark = mmSOCParameters.SREnterPlusExitZ8Time
|
||||||
+ mmSOCParameters.ExtraLatency + 10 / DCFClkDeepSleep;
|
+ mmSOCParameters.ExtraLatency + 10 / DCFClkDeepSleep;
|
||||||
|
|
||||||
#ifdef __DML_VBA_DEBUG__
|
#ifdef __DML_VBA_DEBUG__
|
||||||
dml_print("DML::%s: UrgentLatency = %f\n", __func__, mmSOCParameters.UrgentLatency);
|
dml_print("DML::%s: UrgentLatency = %f\n", __func__, mmSOCParameters.UrgentLatency);
|
||||||
dml_print("DML::%s: ExtraLatency = %f\n", __func__, mmSOCParameters.ExtraLatency);
|
dml_print("DML::%s: ExtraLatency = %f\n", __func__, mmSOCParameters.ExtraLatency);
|
||||||
dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, mmSOCParameters.DRAMClockChangeLatency);
|
dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, mmSOCParameters.DRAMClockChangeLatency);
|
||||||
dml_print("DML::%s: UrgentWatermark = %f\n", __func__, Watermark->UrgentWatermark);
|
dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->Watermark.UrgentWatermark);
|
||||||
dml_print("DML::%s: USRRetrainingWatermark = %f\n", __func__, Watermark->USRRetrainingWatermark);
|
dml_print("DML::%s: USRRetrainingWatermark = %f\n", __func__, v->Watermark.USRRetrainingWatermark);
|
||||||
dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, Watermark->DRAMClockChangeWatermark);
|
dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->Watermark.DRAMClockChangeWatermark);
|
||||||
dml_print("DML::%s: FCLKChangeWatermark = %f\n", __func__, Watermark->FCLKChangeWatermark);
|
dml_print("DML::%s: FCLKChangeWatermark = %f\n", __func__, v->Watermark.FCLKChangeWatermark);
|
||||||
dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, Watermark->StutterExitWatermark);
|
dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, v->Watermark.StutterExitWatermark);
|
||||||
dml_print("DML::%s: StutterEnterPlusExitWatermark = %f\n", __func__, Watermark->StutterEnterPlusExitWatermark);
|
dml_print("DML::%s: StutterEnterPlusExitWatermark = %f\n", __func__, v->Watermark.StutterEnterPlusExitWatermark);
|
||||||
dml_print("DML::%s: Z8StutterExitWatermark = %f\n", __func__, Watermark->Z8StutterExitWatermark);
|
dml_print("DML::%s: Z8StutterExitWatermark = %f\n", __func__, v->Watermark.Z8StutterExitWatermark);
|
||||||
dml_print("DML::%s: Z8StutterEnterPlusExitWatermark = %f\n",
|
dml_print("DML::%s: Z8StutterEnterPlusExitWatermark = %f\n",
|
||||||
__func__, Watermark->Z8StutterEnterPlusExitWatermark);
|
__func__, v->Watermark.Z8StutterEnterPlusExitWatermark);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
TotalActiveWriteback = 0;
|
TotalActiveWriteback = 0;
|
||||||
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
for (k = 0; k < v->NumberOfActiveSurfaces; ++k) {
|
||||||
if (WritebackEnable[k] == true)
|
if (v->WritebackEnable[k] == true)
|
||||||
TotalActiveWriteback = TotalActiveWriteback + 1;
|
TotalActiveWriteback = TotalActiveWriteback + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TotalActiveWriteback <= 1) {
|
if (TotalActiveWriteback <= 1) {
|
||||||
Watermark->WritebackUrgentWatermark = mmSOCParameters.WritebackLatency;
|
v->Watermark.WritebackUrgentWatermark = mmSOCParameters.WritebackLatency;
|
||||||
} else {
|
} else {
|
||||||
Watermark->WritebackUrgentWatermark = mmSOCParameters.WritebackLatency
|
v->Watermark.WritebackUrgentWatermark = mmSOCParameters.WritebackLatency
|
||||||
+ WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
|
+ v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
|
||||||
}
|
}
|
||||||
if (USRRetrainingRequiredFinal)
|
if (v->USRRetrainingRequiredFinal)
|
||||||
Watermark->WritebackUrgentWatermark = Watermark->WritebackUrgentWatermark
|
v->Watermark.WritebackUrgentWatermark = v->Watermark.WritebackUrgentWatermark
|
||||||
+ mmSOCParameters.USRRetrainingLatency;
|
+ mmSOCParameters.USRRetrainingLatency;
|
||||||
|
|
||||||
if (TotalActiveWriteback <= 1) {
|
if (TotalActiveWriteback <= 1) {
|
||||||
Watermark->WritebackDRAMClockChangeWatermark = mmSOCParameters.DRAMClockChangeLatency
|
v->Watermark.WritebackDRAMClockChangeWatermark = mmSOCParameters.DRAMClockChangeLatency
|
||||||
+ mmSOCParameters.WritebackLatency;
|
+ mmSOCParameters.WritebackLatency;
|
||||||
Watermark->WritebackFCLKChangeWatermark = mmSOCParameters.FCLKChangeLatency
|
v->Watermark.WritebackFCLKChangeWatermark = mmSOCParameters.FCLKChangeLatency
|
||||||
+ mmSOCParameters.WritebackLatency;
|
+ mmSOCParameters.WritebackLatency;
|
||||||
} else {
|
} else {
|
||||||
Watermark->WritebackDRAMClockChangeWatermark = mmSOCParameters.DRAMClockChangeLatency
|
v->Watermark.WritebackDRAMClockChangeWatermark = mmSOCParameters.DRAMClockChangeLatency
|
||||||
+ mmSOCParameters.WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
|
+ mmSOCParameters.WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
|
||||||
Watermark->WritebackFCLKChangeWatermark = mmSOCParameters.FCLKChangeLatency
|
v->Watermark.WritebackFCLKChangeWatermark = mmSOCParameters.FCLKChangeLatency
|
||||||
+ mmSOCParameters.WritebackLatency + WritebackChunkSize * 1024 / 32 / SOCCLK;
|
+ mmSOCParameters.WritebackLatency + v->WritebackChunkSize * 1024 / 32 / SOCCLK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (USRRetrainingRequiredFinal)
|
if (v->USRRetrainingRequiredFinal)
|
||||||
Watermark->WritebackDRAMClockChangeWatermark = Watermark->WritebackDRAMClockChangeWatermark
|
v->Watermark.WritebackDRAMClockChangeWatermark = v->Watermark.WritebackDRAMClockChangeWatermark
|
||||||
+ mmSOCParameters.USRRetrainingLatency;
|
+ mmSOCParameters.USRRetrainingLatency;
|
||||||
|
|
||||||
if (USRRetrainingRequiredFinal)
|
if (v->USRRetrainingRequiredFinal)
|
||||||
Watermark->WritebackFCLKChangeWatermark = Watermark->WritebackFCLKChangeWatermark
|
v->Watermark.WritebackFCLKChangeWatermark = v->Watermark.WritebackFCLKChangeWatermark
|
||||||
+ mmSOCParameters.USRRetrainingLatency;
|
+ mmSOCParameters.USRRetrainingLatency;
|
||||||
|
|
||||||
#ifdef __DML_VBA_DEBUG__
|
#ifdef __DML_VBA_DEBUG__
|
||||||
dml_print("DML::%s: WritebackDRAMClockChangeWatermark = %f\n",
|
dml_print("DML::%s: WritebackDRAMClockChangeWatermark = %f\n",
|
||||||
__func__, Watermark->WritebackDRAMClockChangeWatermark);
|
__func__, v->Watermark.WritebackDRAMClockChangeWatermark);
|
||||||
dml_print("DML::%s: WritebackFCLKChangeWatermark = %f\n", __func__, Watermark->WritebackFCLKChangeWatermark);
|
dml_print("DML::%s: WritebackFCLKChangeWatermark = %f\n", __func__, v->Watermark.WritebackFCLKChangeWatermark);
|
||||||
dml_print("DML::%s: WritebackUrgentWatermark = %f\n", __func__, Watermark->WritebackUrgentWatermark);
|
dml_print("DML::%s: WritebackUrgentWatermark = %f\n", __func__, v->Watermark.WritebackUrgentWatermark);
|
||||||
dml_print("DML::%s: USRRetrainingRequiredFinal = %d\n", __func__, USRRetrainingRequiredFinal);
|
dml_print("DML::%s: v->USRRetrainingRequiredFinal = %d\n", __func__, v->USRRetrainingRequiredFinal);
|
||||||
dml_print("DML::%s: USRRetrainingLatency = %f\n", __func__, mmSOCParameters.USRRetrainingLatency);
|
dml_print("DML::%s: USRRetrainingLatency = %f\n", __func__, mmSOCParameters.USRRetrainingLatency);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
for (k = 0; k < v->NumberOfActiveSurfaces; ++k) {
|
||||||
TotalPixelBW = TotalPixelBW + DPPPerSurface[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] +
|
TotalPixelBW = TotalPixelBW + DPPPerSurface[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] +
|
||||||
SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k]) / (HTotal[k] / PixelClock[k]);
|
SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k]) / (v->HTotal[k] / v->PixelClock[k]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
for (k = 0; k < v->NumberOfActiveSurfaces; ++k) {
|
||||||
|
|
||||||
LBLatencyHidingSourceLinesY[k] = dml_min((double) MaxLineBufferLines, dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (VTaps[k] - 1);
|
LBLatencyHidingSourceLinesY[k] = dml_min((double) v->MaxLineBufferLines, dml_floor(v->LineBufferSizeFinal / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
|
||||||
LBLatencyHidingSourceLinesC[k] = dml_min((double) MaxLineBufferLines, dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTapsChroma[k] - 1);
|
LBLatencyHidingSourceLinesC[k] = dml_min((double) v->MaxLineBufferLines, dml_floor(v->LineBufferSizeFinal / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __DML_VBA_DEBUG__
|
#ifdef __DML_VBA_DEBUG__
|
||||||
dml_print("DML::%s: k=%d, MaxLineBufferLines = %d\n", __func__, k, MaxLineBufferLines);
|
dml_print("DML::%s: k=%d, v->MaxLineBufferLines = %d\n", __func__, k, v->MaxLineBufferLines);
|
||||||
dml_print("DML::%s: k=%d, LineBufferSize = %d\n", __func__, k, LineBufferSize);
|
dml_print("DML::%s: k=%d, v->LineBufferSizeFinal = %d\n", __func__, k, v->LineBufferSizeFinal);
|
||||||
dml_print("DML::%s: k=%d, LBBitPerPixel = %d\n", __func__, k, LBBitPerPixel[k]);
|
dml_print("DML::%s: k=%d, v->LBBitPerPixel = %d\n", __func__, k, v->LBBitPerPixel[k]);
|
||||||
dml_print("DML::%s: k=%d, HRatio = %f\n", __func__, k, HRatio[k]);
|
dml_print("DML::%s: k=%d, v->HRatio = %f\n", __func__, k, v->HRatio[k]);
|
||||||
dml_print("DML::%s: k=%d, VTaps = %d\n", __func__, k, VTaps[k]);
|
dml_print("DML::%s: k=%d, v->vtaps = %d\n", __func__, k, v->vtaps[k]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EffectiveLBLatencyHidingY = LBLatencyHidingSourceLinesY[k] / VRatio[k] * (HTotal[k] / PixelClock[k]);
|
EffectiveLBLatencyHidingY = LBLatencyHidingSourceLinesY[k] / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
|
||||||
EffectiveLBLatencyHidingC = LBLatencyHidingSourceLinesC[k] / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
|
EffectiveLBLatencyHidingC = LBLatencyHidingSourceLinesC[k] / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
|
||||||
EffectiveDETBufferSizeY = DETBufferSizeY[k];
|
EffectiveDETBufferSizeY = DETBufferSizeY[k];
|
||||||
|
|
||||||
if (UnboundedRequestEnabled) {
|
if (UnboundedRequestEnabled) {
|
||||||
EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
|
EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
|
||||||
+ CompressedBufferSizeInkByte * 1024
|
+ CompressedBufferSizeInkByte * 1024
|
||||||
* (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k])
|
* (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k])
|
||||||
/ (HTotal[k] / PixelClock[k]) / TotalPixelBW;
|
/ (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
|
||||||
}
|
}
|
||||||
|
|
||||||
LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[k];
|
LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[k];
|
||||||
LinesInDETYRoundedDownToSwath[k] = dml_floor(LinesInDETY[k], SwathHeightY[k]);
|
LinesInDETYRoundedDownToSwath[k] = dml_floor(LinesInDETY[k], SwathHeightY[k]);
|
||||||
FullDETBufferingTimeY = LinesInDETYRoundedDownToSwath[k] * (HTotal[k] / PixelClock[k]) / VRatio[k];
|
FullDETBufferingTimeY = LinesInDETYRoundedDownToSwath[k] * (v->HTotal[k] / v->PixelClock[k]) / v->VRatio[k];
|
||||||
|
|
||||||
ActiveClockChangeLatencyHidingY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
|
ActiveClockChangeLatencyHidingY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
|
||||||
- (DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k];
|
- (DSTXAfterScaler[k] / v->HTotal[k] + DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k];
|
||||||
|
|
||||||
if (NumberOfActiveSurfaces > 1) {
|
if (v->NumberOfActiveSurfaces > 1) {
|
||||||
ActiveClockChangeLatencyHidingY = ActiveClockChangeLatencyHidingY
|
ActiveClockChangeLatencyHidingY = ActiveClockChangeLatencyHidingY
|
||||||
- (1 - 1 / NumberOfActiveSurfaces) * SwathHeightY[k] * HTotal[k]
|
- (1 - 1 / v->NumberOfActiveSurfaces) * SwathHeightY[k] * v->HTotal[k]
|
||||||
/ PixelClock[k] / VRatio[k];
|
/ v->PixelClock[k] / v->VRatio[k];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BytePerPixelDETC[k] > 0) {
|
if (BytePerPixelDETC[k] > 0) {
|
||||||
LinesInDETC[k] = DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
|
LinesInDETC[k] = DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
|
||||||
LinesInDETCRoundedDownToSwath[k] = dml_floor(LinesInDETC[k], SwathHeightC[k]);
|
LinesInDETCRoundedDownToSwath[k] = dml_floor(LinesInDETC[k], SwathHeightC[k]);
|
||||||
FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath[k] * (HTotal[k] / PixelClock[k])
|
FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath[k] * (v->HTotal[k] / v->PixelClock[k])
|
||||||
/ VRatioChroma[k];
|
/ v->VRatioChroma[k];
|
||||||
ActiveClockChangeLatencyHidingC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
|
ActiveClockChangeLatencyHidingC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
|
||||||
- (DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k]
|
- (DSTXAfterScaler[k] / v->HTotal[k] + DSTYAfterScaler[k]) * v->HTotal[k]
|
||||||
/ PixelClock[k];
|
/ v->PixelClock[k];
|
||||||
if (NumberOfActiveSurfaces > 1) {
|
if (v->NumberOfActiveSurfaces > 1) {
|
||||||
ActiveClockChangeLatencyHidingC = ActiveClockChangeLatencyHidingC
|
ActiveClockChangeLatencyHidingC = ActiveClockChangeLatencyHidingC
|
||||||
- (1 - 1 / NumberOfActiveSurfaces) * SwathHeightC[k] * HTotal[k]
|
- (1 - 1 / v->NumberOfActiveSurfaces) * SwathHeightC[k] * v->HTotal[k]
|
||||||
/ PixelClock[k] / VRatioChroma[k];
|
/ v->PixelClock[k] / v->VRatioChroma[k];
|
||||||
}
|
}
|
||||||
ActiveClockChangeLatencyHiding = dml_min(ActiveClockChangeLatencyHidingY,
|
ActiveClockChangeLatencyHiding = dml_min(ActiveClockChangeLatencyHidingY,
|
||||||
ActiveClockChangeLatencyHidingC);
|
ActiveClockChangeLatencyHidingC);
|
||||||
@ -4436,24 +4406,24 @@ void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
|||||||
ActiveClockChangeLatencyHiding = ActiveClockChangeLatencyHidingY;
|
ActiveClockChangeLatencyHiding = ActiveClockChangeLatencyHidingY;
|
||||||
}
|
}
|
||||||
|
|
||||||
ActiveDRAMClockChangeLatencyMargin[k] = ActiveClockChangeLatencyHiding - Watermark->UrgentWatermark
|
ActiveDRAMClockChangeLatencyMargin[k] = ActiveClockChangeLatencyHiding - v->Watermark.UrgentWatermark
|
||||||
- Watermark->DRAMClockChangeWatermark;
|
- v->Watermark.DRAMClockChangeWatermark;
|
||||||
ActiveFCLKChangeLatencyMargin[k] = ActiveClockChangeLatencyHiding - Watermark->UrgentWatermark
|
ActiveFCLKChangeLatencyMargin[k] = ActiveClockChangeLatencyHiding - v->Watermark.UrgentWatermark
|
||||||
- Watermark->FCLKChangeWatermark;
|
- v->Watermark.FCLKChangeWatermark;
|
||||||
USRRetrainingLatencyMargin[k] = ActiveClockChangeLatencyHiding - Watermark->USRRetrainingWatermark;
|
USRRetrainingLatencyMargin[k] = ActiveClockChangeLatencyHiding - v->Watermark.USRRetrainingWatermark;
|
||||||
|
|
||||||
if (WritebackEnable[k]) {
|
if (v->WritebackEnable[k]) {
|
||||||
WritebackLatencyHiding = WritebackInterfaceBufferSize * 1024
|
WritebackLatencyHiding = v->WritebackInterfaceBufferSize * 1024
|
||||||
/ (WritebackDestinationWidth[k] * WritebackDestinationHeight[k]
|
/ (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]
|
||||||
/ (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
|
/ (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
|
||||||
if (WritebackPixelFormat[k] == dm_444_64)
|
if (v->WritebackPixelFormat[k] == dm_444_64)
|
||||||
WritebackLatencyHiding = WritebackLatencyHiding / 2;
|
WritebackLatencyHiding = WritebackLatencyHiding / 2;
|
||||||
|
|
||||||
WritebackDRAMClockChangeLatencyMargin = WritebackLatencyHiding
|
WritebackDRAMClockChangeLatencyMargin = WritebackLatencyHiding
|
||||||
- Watermark->WritebackDRAMClockChangeWatermark;
|
- v->Watermark.WritebackDRAMClockChangeWatermark;
|
||||||
|
|
||||||
WritebackFCLKChangeLatencyMargin = WritebackLatencyHiding
|
WritebackFCLKChangeLatencyMargin = WritebackLatencyHiding
|
||||||
- Watermark->WritebackFCLKChangeWatermark;
|
- v->Watermark.WritebackFCLKChangeWatermark;
|
||||||
|
|
||||||
ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMargin[k],
|
ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMargin[k],
|
||||||
WritebackFCLKChangeLatencyMargin);
|
WritebackFCLKChangeLatencyMargin);
|
||||||
@ -4461,22 +4431,22 @@ void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
|||||||
WritebackDRAMClockChangeLatencyMargin);
|
WritebackDRAMClockChangeLatencyMargin);
|
||||||
}
|
}
|
||||||
MaxActiveDRAMClockChangeLatencySupported[k] =
|
MaxActiveDRAMClockChangeLatencySupported[k] =
|
||||||
(UseMALLForPStateChange[k] == dm_use_mall_pstate_change_phantom_pipe) ?
|
(v->UsesMALLForPStateChange[k] == dm_use_mall_pstate_change_phantom_pipe) ?
|
||||||
0 :
|
0 :
|
||||||
(ActiveDRAMClockChangeLatencyMargin[k]
|
(ActiveDRAMClockChangeLatencyMargin[k]
|
||||||
+ mmSOCParameters.DRAMClockChangeLatency);
|
+ mmSOCParameters.DRAMClockChangeLatency);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < NumberOfActiveSurfaces; ++i) {
|
for (i = 0; i < v->NumberOfActiveSurfaces; ++i) {
|
||||||
for (j = 0; j < NumberOfActiveSurfaces; ++j) {
|
for (j = 0; j < v->NumberOfActiveSurfaces; ++j) {
|
||||||
if (i == j ||
|
if (i == j ||
|
||||||
(BlendingAndTiming[i] == i && BlendingAndTiming[j] == i) ||
|
(v->BlendingAndTiming[i] == i && v->BlendingAndTiming[j] == i) ||
|
||||||
(BlendingAndTiming[j] == j && BlendingAndTiming[i] == j) ||
|
(v->BlendingAndTiming[j] == j && v->BlendingAndTiming[i] == j) ||
|
||||||
(BlendingAndTiming[i] == BlendingAndTiming[j] && BlendingAndTiming[i] != i) ||
|
(v->BlendingAndTiming[i] == v->BlendingAndTiming[j] && v->BlendingAndTiming[i] != i) ||
|
||||||
(SynchronizeTimingsFinal && PixelClock[i] == PixelClock[j] &&
|
(v->SynchronizeTimingsFinal && v->PixelClock[i] == v->PixelClock[j] &&
|
||||||
HTotal[i] == HTotal[j] && VTotal[i] == VTotal[j] &&
|
v->HTotal[i] == v->HTotal[j] && v->VTotal[i] == v->VTotal[j] &&
|
||||||
VActive[i] == VActive[j]) || (SynchronizeDRRDisplaysForUCLKPStateChangeFinal &&
|
v->VActive[i] == v->VActive[j]) || (v->SynchronizeDRRDisplaysForUCLKPStateChangeFinal &&
|
||||||
(DRRDisplay[i] || DRRDisplay[j]))) {
|
(v->DRRDisplay[i] || v->DRRDisplay[j]))) {
|
||||||
SynchronizedSurfaces[i][j] = true;
|
SynchronizedSurfaces[i][j] = true;
|
||||||
} else {
|
} else {
|
||||||
SynchronizedSurfaces[i][j] = false;
|
SynchronizedSurfaces[i][j] = false;
|
||||||
@ -4484,8 +4454,8 @@ void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
for (k = 0; k < v->NumberOfActiveSurfaces; ++k) {
|
||||||
if ((UseMALLForPStateChange[k] != dm_use_mall_pstate_change_phantom_pipe) &&
|
if ((v->UsesMALLForPStateChange[k] != dm_use_mall_pstate_change_phantom_pipe) &&
|
||||||
(!FoundFirstSurfaceWithMinActiveFCLKChangeMargin ||
|
(!FoundFirstSurfaceWithMinActiveFCLKChangeMargin ||
|
||||||
ActiveFCLKChangeLatencyMargin[k] < MinActiveFCLKChangeMargin)) {
|
ActiveFCLKChangeLatencyMargin[k] < MinActiveFCLKChangeMargin)) {
|
||||||
FoundFirstSurfaceWithMinActiveFCLKChangeMargin = true;
|
FoundFirstSurfaceWithMinActiveFCLKChangeMargin = true;
|
||||||
@ -4497,9 +4467,9 @@ void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
|||||||
*MinActiveFCLKChangeLatencySupported = MinActiveFCLKChangeMargin + mmSOCParameters.FCLKChangeLatency;
|
*MinActiveFCLKChangeLatencySupported = MinActiveFCLKChangeMargin + mmSOCParameters.FCLKChangeLatency;
|
||||||
|
|
||||||
SameTimingForFCLKChange = true;
|
SameTimingForFCLKChange = true;
|
||||||
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
for (k = 0; k < v->NumberOfActiveSurfaces; ++k) {
|
||||||
if (!SynchronizedSurfaces[k][SurfaceWithMinActiveFCLKChangeMargin]) {
|
if (!SynchronizedSurfaces[k][SurfaceWithMinActiveFCLKChangeMargin]) {
|
||||||
if ((UseMALLForPStateChange[k] != dm_use_mall_pstate_change_phantom_pipe) &&
|
if ((v->UsesMALLForPStateChange[k] != dm_use_mall_pstate_change_phantom_pipe) &&
|
||||||
(SameTimingForFCLKChange ||
|
(SameTimingForFCLKChange ||
|
||||||
ActiveFCLKChangeLatencyMargin[k] <
|
ActiveFCLKChangeLatencyMargin[k] <
|
||||||
SecondMinActiveFCLKChangeMarginOneDisplayInVBLank)) {
|
SecondMinActiveFCLKChangeMarginOneDisplayInVBLank)) {
|
||||||
@ -4519,17 +4489,17 @@ void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
|||||||
}
|
}
|
||||||
|
|
||||||
*USRRetrainingSupport = true;
|
*USRRetrainingSupport = true;
|
||||||
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
for (k = 0; k < v->NumberOfActiveSurfaces; ++k) {
|
||||||
if ((UseMALLForPStateChange[k] != dm_use_mall_pstate_change_phantom_pipe) &&
|
if ((v->UsesMALLForPStateChange[k] != dm_use_mall_pstate_change_phantom_pipe) &&
|
||||||
(USRRetrainingLatencyMargin[k] < 0)) {
|
(USRRetrainingLatencyMargin[k] < 0)) {
|
||||||
*USRRetrainingSupport = false;
|
*USRRetrainingSupport = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
for (k = 0; k < v->NumberOfActiveSurfaces; ++k) {
|
||||||
if (UseMALLForPStateChange[k] != dm_use_mall_pstate_change_full_frame &&
|
if (v->UsesMALLForPStateChange[k] != dm_use_mall_pstate_change_full_frame &&
|
||||||
UseMALLForPStateChange[k] != dm_use_mall_pstate_change_sub_viewport &&
|
v->UsesMALLForPStateChange[k] != dm_use_mall_pstate_change_sub_viewport &&
|
||||||
UseMALLForPStateChange[k] != dm_use_mall_pstate_change_phantom_pipe &&
|
v->UsesMALLForPStateChange[k] != dm_use_mall_pstate_change_phantom_pipe &&
|
||||||
ActiveDRAMClockChangeLatencyMargin[k] < 0) {
|
ActiveDRAMClockChangeLatencyMargin[k] < 0) {
|
||||||
if (PrefetchMode > 0) {
|
if (PrefetchMode > 0) {
|
||||||
DRAMClockChangeSupportNumber = 2;
|
DRAMClockChangeSupportNumber = 2;
|
||||||
@ -4543,10 +4513,10 @@ void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
for (k = 0; k < v->NumberOfActiveSurfaces; ++k) {
|
||||||
if (UseMALLForPStateChange[k] == dm_use_mall_pstate_change_full_frame)
|
if (v->UsesMALLForPStateChange[k] == dm_use_mall_pstate_change_full_frame)
|
||||||
DRAMClockChangeMethod = 1;
|
DRAMClockChangeMethod = 1;
|
||||||
else if (UseMALLForPStateChange[k] == dm_use_mall_pstate_change_sub_viewport)
|
else if (v->UsesMALLForPStateChange[k] == dm_use_mall_pstate_change_sub_viewport)
|
||||||
DRAMClockChangeMethod = 2;
|
DRAMClockChangeMethod = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4573,16 +4543,16 @@ void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
|||||||
*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
|
*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (k = 0; k < NumberOfActiveSurfaces; ++k) {
|
for (k = 0; k < v->NumberOfActiveSurfaces; ++k) {
|
||||||
unsigned int dst_y_pstate;
|
unsigned int dst_y_pstate;
|
||||||
unsigned int src_y_pstate_l;
|
unsigned int src_y_pstate_l;
|
||||||
unsigned int src_y_pstate_c;
|
unsigned int src_y_pstate_c;
|
||||||
unsigned int src_y_ahead_l, src_y_ahead_c, sub_vp_lines_l, sub_vp_lines_c;
|
unsigned int src_y_ahead_l, src_y_ahead_c, sub_vp_lines_l, sub_vp_lines_c;
|
||||||
|
|
||||||
dst_y_pstate = dml_ceil((mmSOCParameters.DRAMClockChangeLatency + mmSOCParameters.UrgentLatency) / (HTotal[k] / PixelClock[k]), 1);
|
dst_y_pstate = dml_ceil((mmSOCParameters.DRAMClockChangeLatency + mmSOCParameters.UrgentLatency) / (v->HTotal[k] / v->PixelClock[k]), 1);
|
||||||
src_y_pstate_l = dml_ceil(dst_y_pstate * VRatio[k], SwathHeightY[k]);
|
src_y_pstate_l = dml_ceil(dst_y_pstate * v->VRatio[k], SwathHeightY[k]);
|
||||||
src_y_ahead_l = dml_floor(DETBufferSizeY[k] / BytePerPixelDETY[k] / SwathWidthY[k], SwathHeightY[k]) + LBLatencyHidingSourceLinesY[k];
|
src_y_ahead_l = dml_floor(DETBufferSizeY[k] / BytePerPixelDETY[k] / SwathWidthY[k], SwathHeightY[k]) + LBLatencyHidingSourceLinesY[k];
|
||||||
sub_vp_lines_l = src_y_pstate_l + src_y_ahead_l + meta_row_height[k];
|
sub_vp_lines_l = src_y_pstate_l + src_y_ahead_l + v->meta_row_height[k];
|
||||||
|
|
||||||
#ifdef __DML_VBA_DEBUG__
|
#ifdef __DML_VBA_DEBUG__
|
||||||
dml_print("DML::%s: k=%d, DETBufferSizeY = %d\n", __func__, k, DETBufferSizeY[k]);
|
dml_print("DML::%s: k=%d, DETBufferSizeY = %d\n", __func__, k, DETBufferSizeY[k]);
|
||||||
@ -4593,21 +4563,21 @@ dml_print("DML::%s: k=%d, LBLatencyHidingSourceLinesY = %d\n", __func__, k, LBL
|
|||||||
dml_print("DML::%s: k=%d, dst_y_pstate = %d\n", __func__, k, dst_y_pstate);
|
dml_print("DML::%s: k=%d, dst_y_pstate = %d\n", __func__, k, dst_y_pstate);
|
||||||
dml_print("DML::%s: k=%d, src_y_pstate_l = %d\n", __func__, k, src_y_pstate_l);
|
dml_print("DML::%s: k=%d, src_y_pstate_l = %d\n", __func__, k, src_y_pstate_l);
|
||||||
dml_print("DML::%s: k=%d, src_y_ahead_l = %d\n", __func__, k, src_y_ahead_l);
|
dml_print("DML::%s: k=%d, src_y_ahead_l = %d\n", __func__, k, src_y_ahead_l);
|
||||||
dml_print("DML::%s: k=%d, meta_row_height = %d\n", __func__, k, meta_row_height[k]);
|
dml_print("DML::%s: k=%d, v->meta_row_height = %d\n", __func__, k, v->meta_row_height[k]);
|
||||||
dml_print("DML::%s: k=%d, sub_vp_lines_l = %d\n", __func__, k, sub_vp_lines_l);
|
dml_print("DML::%s: k=%d, sub_vp_lines_l = %d\n", __func__, k, sub_vp_lines_l);
|
||||||
#endif
|
#endif
|
||||||
SubViewportLinesNeededInMALL[k] = sub_vp_lines_l;
|
SubViewportLinesNeededInMALL[k] = sub_vp_lines_l;
|
||||||
|
|
||||||
if (BytePerPixelDETC[k] > 0) {
|
if (BytePerPixelDETC[k] > 0) {
|
||||||
src_y_pstate_c = dml_ceil(dst_y_pstate * VRatioChroma[k], SwathHeightC[k]);
|
src_y_pstate_c = dml_ceil(dst_y_pstate * v->VRatioChroma[k], SwathHeightC[k]);
|
||||||
src_y_ahead_c = dml_floor(DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k], SwathHeightC[k]) + LBLatencyHidingSourceLinesC[k];
|
src_y_ahead_c = dml_floor(DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k], SwathHeightC[k]) + LBLatencyHidingSourceLinesC[k];
|
||||||
sub_vp_lines_c = src_y_pstate_c + src_y_ahead_c + meta_row_height_chroma[k];
|
sub_vp_lines_c = src_y_pstate_c + src_y_ahead_c + v->meta_row_height_chroma[k];
|
||||||
SubViewportLinesNeededInMALL[k] = dml_max(sub_vp_lines_l, sub_vp_lines_c);
|
SubViewportLinesNeededInMALL[k] = dml_max(sub_vp_lines_l, sub_vp_lines_c);
|
||||||
|
|
||||||
#ifdef __DML_VBA_DEBUG__
|
#ifdef __DML_VBA_DEBUG__
|
||||||
dml_print("DML::%s: k=%d, src_y_pstate_c = %d\n", __func__, k, src_y_pstate_c);
|
dml_print("DML::%s: k=%d, src_y_pstate_c = %d\n", __func__, k, src_y_pstate_c);
|
||||||
dml_print("DML::%s: k=%d, src_y_ahead_c = %d\n", __func__, k, src_y_ahead_c);
|
dml_print("DML::%s: k=%d, src_y_ahead_c = %d\n", __func__, k, src_y_ahead_c);
|
||||||
dml_print("DML::%s: k=%d, meta_row_height_chroma = %d\n", __func__, k, meta_row_height_chroma[k]);
|
dml_print("DML::%s: k=%d, v->meta_row_height_chroma = %d\n", __func__, k, v->meta_row_height_chroma[k]);
|
||||||
dml_print("DML::%s: k=%d, sub_vp_lines_c = %d\n", __func__, k, sub_vp_lines_c);
|
dml_print("DML::%s: k=%d, sub_vp_lines_c = %d\n", __func__, k, sub_vp_lines_c);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "os_types.h"
|
#include "os_types.h"
|
||||||
#include "../dc_features.h"
|
#include "../dc_features.h"
|
||||||
#include "../display_mode_structs.h"
|
#include "../display_mode_structs.h"
|
||||||
|
#include "dml/display_mode_vba.h"
|
||||||
|
|
||||||
unsigned int dml32_dscceComputeDelay(
|
unsigned int dml32_dscceComputeDelay(
|
||||||
unsigned int bpc,
|
unsigned int bpc,
|
||||||
@ -807,58 +808,28 @@ void dml32_CalculateFlipSchedule(
|
|||||||
bool *ImmediateFlipSupportedForPipe);
|
bool *ImmediateFlipSupportedForPipe);
|
||||||
|
|
||||||
void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
|
||||||
bool USRRetrainingRequiredFinal,
|
struct vba_vars_st *v,
|
||||||
enum dm_use_mall_for_pstate_change_mode UseMALLForPStateChange[],
|
|
||||||
unsigned int PrefetchMode,
|
unsigned int PrefetchMode,
|
||||||
unsigned int NumberOfActiveSurfaces,
|
|
||||||
unsigned int MaxLineBufferLines,
|
|
||||||
unsigned int LineBufferSize,
|
|
||||||
unsigned int WritebackInterfaceBufferSize,
|
|
||||||
double DCFCLK,
|
double DCFCLK,
|
||||||
double ReturnBW,
|
double ReturnBW,
|
||||||
bool SynchronizeTimingsFinal,
|
|
||||||
bool SynchronizeDRRDisplaysForUCLKPStateChangeFinal,
|
|
||||||
bool DRRDisplay[],
|
|
||||||
unsigned int dpte_group_bytes[],
|
|
||||||
unsigned int meta_row_height[],
|
|
||||||
unsigned int meta_row_height_chroma[],
|
|
||||||
SOCParametersList mmSOCParameters,
|
SOCParametersList mmSOCParameters,
|
||||||
unsigned int WritebackChunkSize,
|
|
||||||
double SOCCLK,
|
double SOCCLK,
|
||||||
double DCFClkDeepSleep,
|
double DCFClkDeepSleep,
|
||||||
unsigned int DETBufferSizeY[],
|
unsigned int DETBufferSizeY[],
|
||||||
unsigned int DETBufferSizeC[],
|
unsigned int DETBufferSizeC[],
|
||||||
unsigned int SwathHeightY[],
|
unsigned int SwathHeightY[],
|
||||||
unsigned int SwathHeightC[],
|
unsigned int SwathHeightC[],
|
||||||
unsigned int LBBitPerPixel[],
|
|
||||||
double SwathWidthY[],
|
double SwathWidthY[],
|
||||||
double SwathWidthC[],
|
double SwathWidthC[],
|
||||||
double HRatio[],
|
|
||||||
double HRatioChroma[],
|
|
||||||
unsigned int VTaps[],
|
|
||||||
unsigned int VTapsChroma[],
|
|
||||||
double VRatio[],
|
|
||||||
double VRatioChroma[],
|
|
||||||
unsigned int HTotal[],
|
|
||||||
unsigned int VTotal[],
|
|
||||||
unsigned int VActive[],
|
|
||||||
double PixelClock[],
|
|
||||||
unsigned int BlendingAndTiming[],
|
|
||||||
unsigned int DPPPerSurface[],
|
unsigned int DPPPerSurface[],
|
||||||
double BytePerPixelDETY[],
|
double BytePerPixelDETY[],
|
||||||
double BytePerPixelDETC[],
|
double BytePerPixelDETC[],
|
||||||
double DSTXAfterScaler[],
|
double DSTXAfterScaler[],
|
||||||
double DSTYAfterScaler[],
|
double DSTYAfterScaler[],
|
||||||
bool WritebackEnable[],
|
|
||||||
enum source_format_class WritebackPixelFormat[],
|
|
||||||
double WritebackDestinationWidth[],
|
|
||||||
double WritebackDestinationHeight[],
|
|
||||||
double WritebackSourceHeight[],
|
|
||||||
bool UnboundedRequestEnabled,
|
bool UnboundedRequestEnabled,
|
||||||
unsigned int CompressedBufferSizeInkByte,
|
unsigned int CompressedBufferSizeInkByte,
|
||||||
|
|
||||||
/* Output */
|
/* Output */
|
||||||
Watermarks *Watermark,
|
|
||||||
enum clock_change_support *DRAMClockChangeSupport,
|
enum clock_change_support *DRAMClockChangeSupport,
|
||||||
double MaxActiveDRAMClockChangeLatencySupported[],
|
double MaxActiveDRAMClockChangeLatencySupported[],
|
||||||
unsigned int SubViewportLinesNeededInMALL[],
|
unsigned int SubViewportLinesNeededInMALL[],
|
||||||
|
Loading…
Reference in New Issue
Block a user