All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-16 21:06 ` Nathan Chancellor
  0 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-16 21:06 UTC (permalink / raw)
  To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
	Christian König, Pan, Xinhui
  Cc: Nick Desaulniers, Tom Rix, amd-gfx, dri-devel, llvm, patches,
	Nathan Chancellor, kernelci.org bot

Most of the arguments are identical between the two call sites and they
can be accessed through the 'struct vba_vars_st' pointer. This reduces
the total amount of stack space that
dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
LLVM 16 (2216 -> 1976), helping clear up the following clang warning:

  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
  void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
       ^
  1 error generated.

Link: https://github.com/ClangBuiltLinux/linux/issues/1710
Reported-by: "kernelci.org bot" <bot@kernelci.org>
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
---

This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
applied to dml314.

 .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
 1 file changed, 52 insertions(+), 196 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
index 2829f179f982..32ceb72f7a14 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
@@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
 static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 		struct display_mode_lib *mode_lib,
 		unsigned int PrefetchMode,
-		unsigned int NumberOfActivePlanes,
-		unsigned int MaxLineBufferLines,
-		unsigned int LineBufferSize,
-		unsigned int WritebackInterfaceBufferSize,
 		double DCFCLK,
 		double ReturnBW,
-		bool SynchronizedVBlank,
-		unsigned int dpte_group_bytes[],
-		unsigned int MetaChunkSize,
 		double UrgentLatency,
 		double ExtraLatency,
-		double WritebackLatency,
-		double WritebackChunkSize,
 		double SOCCLK,
-		double DRAMClockChangeLatency,
-		double SRExitTime,
-		double SREnterPlusExitTime,
-		double SRExitZ8Time,
-		double SREnterPlusExitZ8Time,
 		double DCFCLKDeepSleep,
 		unsigned int DETBufferSizeY[],
 		unsigned int DETBufferSizeC[],
 		unsigned int SwathHeightY[],
 		unsigned int SwathHeightC[],
-		unsigned int LBBitPerPixel[],
 		double SwathWidthY[],
 		double SwathWidthC[],
-		double HRatio[],
-		double HRatioChroma[],
-		unsigned int vtaps[],
-		unsigned int VTAPsChroma[],
-		double VRatio[],
-		double VRatioChroma[],
-		unsigned int HTotal[],
-		double PixelClock[],
-		unsigned int BlendingAndTiming[],
 		unsigned int DPPPerPlane[],
 		double BytePerPixelDETY[],
 		double BytePerPixelDETC[],
-		double DSTXAfterScaler[],
-		double DSTYAfterScaler[],
-		bool WritebackEnable[],
-		enum source_format_class WritebackPixelFormat[],
-		double WritebackDestinationWidth[],
-		double WritebackDestinationHeight[],
-		double WritebackSourceHeight[],
 		bool UnboundedRequestEnabled,
 		unsigned int CompressedBufferSizeInkByte,
 		enum clock_change_support *DRAMClockChangeSupport,
-		double *UrgentWatermark,
-		double *WritebackUrgentWatermark,
-		double *DRAMClockChangeWatermark,
-		double *WritebackDRAMClockChangeWatermark,
 		double *StutterExitWatermark,
 		double *StutterEnterPlusExitWatermark,
 		double *Z8StutterExitWatermark,
-		double *Z8StutterEnterPlusExitWatermark,
-		double *MinActiveDRAMClockChangeLatencySupported);
+		double *Z8StutterEnterPlusExitWatermark);
 
 static void CalculateDCFCLKDeepSleep(
 		struct display_mode_lib *mode_lib,
@@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
 		CalculateWatermarksAndDRAMSpeedChangeSupport(
 				mode_lib,
 				PrefetchMode,
-				v->NumberOfActivePlanes,
-				v->MaxLineBufferLines,
-				v->LineBufferSize,
-				v->WritebackInterfaceBufferSize,
 				v->DCFCLK,
 				v->ReturnBW,
-				v->SynchronizedVBlank,
-				v->dpte_group_bytes,
-				v->MetaChunkSize,
 				v->UrgentLatency,
 				v->UrgentExtraLatency,
-				v->WritebackLatency,
-				v->WritebackChunkSize,
 				v->SOCCLK,
-				v->DRAMClockChangeLatency,
-				v->SRExitTime,
-				v->SREnterPlusExitTime,
-				v->SRExitZ8Time,
-				v->SREnterPlusExitZ8Time,
 				v->DCFCLKDeepSleep,
 				v->DETBufferSizeY,
 				v->DETBufferSizeC,
 				v->SwathHeightY,
 				v->SwathHeightC,
-				v->LBBitPerPixel,
 				v->SwathWidthY,
 				v->SwathWidthC,
-				v->HRatio,
-				v->HRatioChroma,
-				v->vtaps,
-				v->VTAPsChroma,
-				v->VRatio,
-				v->VRatioChroma,
-				v->HTotal,
-				v->PixelClock,
-				v->BlendingAndTiming,
 				v->DPPPerPlane,
 				v->BytePerPixelDETY,
 				v->BytePerPixelDETC,
-				v->DSTXAfterScaler,
-				v->DSTYAfterScaler,
-				v->WritebackEnable,
-				v->WritebackPixelFormat,
-				v->WritebackDestinationWidth,
-				v->WritebackDestinationHeight,
-				v->WritebackSourceHeight,
 				v->UnboundedRequestEnabled,
 				v->CompressedBufferSizeInkByte,
 				&DRAMClockChangeSupport,
-				&v->UrgentWatermark,
-				&v->WritebackUrgentWatermark,
-				&v->DRAMClockChangeWatermark,
-				&v->WritebackDRAMClockChangeWatermark,
 				&v->StutterExitWatermark,
 				&v->StutterEnterPlusExitWatermark,
 				&v->Z8StutterExitWatermark,
-				&v->Z8StutterEnterPlusExitWatermark,
-				&v->MinActiveDRAMClockChangeLatencySupported);
+				&v->Z8StutterEnterPlusExitWatermark);
 
 		for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 			if (v->WritebackEnable[k] == true) {
@@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
 			CalculateWatermarksAndDRAMSpeedChangeSupport(
 					mode_lib,
 					v->PrefetchModePerState[i][j],
-					v->NumberOfActivePlanes,
-					v->MaxLineBufferLines,
-					v->LineBufferSize,
-					v->WritebackInterfaceBufferSize,
 					v->DCFCLKState[i][j],
 					v->ReturnBWPerState[i][j],
-					v->SynchronizedVBlank,
-					v->dpte_group_bytes,
-					v->MetaChunkSize,
 					v->UrgLatency[i],
 					v->ExtraLatency,
-					v->WritebackLatency,
-					v->WritebackChunkSize,
 					v->SOCCLKPerState[i],
-					v->DRAMClockChangeLatency,
-					v->SRExitTime,
-					v->SREnterPlusExitTime,
-					v->SRExitZ8Time,
-					v->SREnterPlusExitZ8Time,
 					v->ProjectedDCFCLKDeepSleep[i][j],
 					v->DETBufferSizeYThisState,
 					v->DETBufferSizeCThisState,
 					v->SwathHeightYThisState,
 					v->SwathHeightCThisState,
-					v->LBBitPerPixel,
 					v->SwathWidthYThisState,
 					v->SwathWidthCThisState,
-					v->HRatio,
-					v->HRatioChroma,
-					v->vtaps,
-					v->VTAPsChroma,
-					v->VRatio,
-					v->VRatioChroma,
-					v->HTotal,
-					v->PixelClock,
-					v->BlendingAndTiming,
 					v->NoOfDPPThisState,
 					v->BytePerPixelInDETY,
 					v->BytePerPixelInDETC,
-					v->DSTXAfterScaler,
-					v->DSTYAfterScaler,
-					v->WritebackEnable,
-					v->WritebackPixelFormat,
-					v->WritebackDestinationWidth,
-					v->WritebackDestinationHeight,
-					v->WritebackSourceHeight,
 					UnboundedRequestEnabledThisState,
 					CompressedBufferSizeInkByteThisState,
 					&v->DRAMClockChangeSupport[i][j],
-					&v->UrgentWatermark,
-					&v->WritebackUrgentWatermark,
-					&v->DRAMClockChangeWatermark,
-					&v->WritebackDRAMClockChangeWatermark,
-					&dummy,
 					&dummy,
 					&dummy,
 					&dummy,
-					&v->MinActiveDRAMClockChangeLatencySupported);
+					&dummy);
 		}
 	}
 
@@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
 static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 		struct display_mode_lib *mode_lib,
 		unsigned int PrefetchMode,
-		unsigned int NumberOfActivePlanes,
-		unsigned int MaxLineBufferLines,
-		unsigned int LineBufferSize,
-		unsigned int WritebackInterfaceBufferSize,
 		double DCFCLK,
 		double ReturnBW,
-		bool SynchronizedVBlank,
-		unsigned int dpte_group_bytes[],
-		unsigned int MetaChunkSize,
 		double UrgentLatency,
 		double ExtraLatency,
-		double WritebackLatency,
-		double WritebackChunkSize,
 		double SOCCLK,
-		double DRAMClockChangeLatency,
-		double SRExitTime,
-		double SREnterPlusExitTime,
-		double SRExitZ8Time,
-		double SREnterPlusExitZ8Time,
 		double DCFCLKDeepSleep,
 		unsigned int DETBufferSizeY[],
 		unsigned int DETBufferSizeC[],
 		unsigned int SwathHeightY[],
 		unsigned int SwathHeightC[],
-		unsigned int LBBitPerPixel[],
 		double SwathWidthY[],
 		double SwathWidthC[],
-		double HRatio[],
-		double HRatioChroma[],
-		unsigned int vtaps[],
-		unsigned int VTAPsChroma[],
-		double VRatio[],
-		double VRatioChroma[],
-		unsigned int HTotal[],
-		double PixelClock[],
-		unsigned int BlendingAndTiming[],
 		unsigned int DPPPerPlane[],
 		double BytePerPixelDETY[],
 		double BytePerPixelDETC[],
-		double DSTXAfterScaler[],
-		double DSTYAfterScaler[],
-		bool WritebackEnable[],
-		enum source_format_class WritebackPixelFormat[],
-		double WritebackDestinationWidth[],
-		double WritebackDestinationHeight[],
-		double WritebackSourceHeight[],
 		bool UnboundedRequestEnabled,
 		unsigned int CompressedBufferSizeInkByte,
 		enum clock_change_support *DRAMClockChangeSupport,
-		double *UrgentWatermark,
-		double *WritebackUrgentWatermark,
-		double *DRAMClockChangeWatermark,
-		double *WritebackDRAMClockChangeWatermark,
 		double *StutterExitWatermark,
 		double *StutterEnterPlusExitWatermark,
 		double *Z8StutterExitWatermark,
-		double *Z8StutterEnterPlusExitWatermark,
-		double *MinActiveDRAMClockChangeLatencySupported)
+		double *Z8StutterEnterPlusExitWatermark)
 {
 	struct vba_vars_st *v = &mode_lib->vba;
 	double EffectiveLBLatencyHidingY;
@@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 	double TotalPixelBW = 0.0;
 	int k, j;
 
-	*UrgentWatermark = UrgentLatency + ExtraLatency;
+	v->UrgentWatermark = UrgentLatency + ExtraLatency;
 
 #ifdef __DML_VBA_DEBUG__
 	dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
 	dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
-	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
+	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
 #endif
 
-	*DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
+	v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
 
 #ifdef __DML_VBA_DEBUG__
-	dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
-	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
+	dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
+	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
 #endif
 
 	v->TotalActiveWriteback = 0;
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
-		if (WritebackEnable[k] == true) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
+		if (v->WritebackEnable[k] == true) {
 			v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
 		}
 	}
 
 	if (v->TotalActiveWriteback <= 1) {
-		*WritebackUrgentWatermark = WritebackLatency;
+		v->WritebackUrgentWatermark = v->WritebackLatency;
 	} else {
-		*WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
+		v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
 	}
 
 	if (v->TotalActiveWriteback <= 1) {
-		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
+		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
 	} else {
-		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
+		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
 	}
 
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 		TotalPixelBW = TotalPixelBW
-				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
-						/ (HTotal[k] / PixelClock[k]);
+				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
+						/ (v->HTotal[k] / v->PixelClock[k]);
 	}
 
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 		double EffectiveDETBufferSizeY = DETBufferSizeY[k];
 
 		v->LBLatencyHidingSourceLinesY = dml_min(
-				(double) MaxLineBufferLines,
-				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
+				(double) v->MaxLineBufferLines,
+				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
 
 		v->LBLatencyHidingSourceLinesC = dml_min(
-				(double) MaxLineBufferLines,
-				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
+				(double) v->MaxLineBufferLines,
+				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
 
-		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
+		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
 
-		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
+		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
 
 		if (UnboundedRequestEnabled) {
 			EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
-					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
+					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
 		}
 
 		LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
 		if (BytePerPixelDETC[k] > 0) {
 			LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
 			LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
-			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
+			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
 		} else {
 			LinesInDETC = 0;
 			FullDETBufferingTimeC = 999999;
 		}
 
 		ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
-				- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
+				- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
 
-		if (NumberOfActivePlanes > 1) {
+		if (v->NumberOfActivePlanes > 1) {
 			ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
-					- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
+					- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
 		}
 
 		if (BytePerPixelDETC[k] > 0) {
 			ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
-					- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
+					- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
 
-			if (NumberOfActivePlanes > 1) {
+			if (v->NumberOfActivePlanes > 1) {
 				ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
-						- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
+						- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
 			}
 			v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
 		} else {
 			v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
 		}
 
-		if (WritebackEnable[k] == true) {
-			WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
-					/ (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
-			if (WritebackPixelFormat[k] == dm_444_64) {
+		if (v->WritebackEnable[k] == true) {
+			WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
+					/ (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
+			if (v->WritebackPixelFormat[k] == dm_444_64) {
 				WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
 			}
 			WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
@@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 
 	v->MinActiveDRAMClockChangeMargin = 999999;
 	PlaneWithMinActiveDRAMClockChangeMargin = 0;
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 		if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
 			v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
-			if (BlendingAndTiming[k] == k) {
+			if (v->BlendingAndTiming[k] == k) {
 				PlaneWithMinActiveDRAMClockChangeMargin = k;
 			} else {
-				for (j = 0; j < NumberOfActivePlanes; ++j) {
-					if (BlendingAndTiming[k] == j) {
+				for (j = 0; j < v->NumberOfActivePlanes; ++j) {
+					if (v->BlendingAndTiming[k] == j) {
 						PlaneWithMinActiveDRAMClockChangeMargin = j;
 					}
 				}
@@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 		}
 	}
 
-	*MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
+	v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
 
 	SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
-		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
+		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
 				&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
 			SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
 		}
@@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 
 	v->TotalNumberOfActiveOTG = 0;
 
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
-		if (BlendingAndTiming[k] == k) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
+		if (v->BlendingAndTiming[k] == k) {
 			v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
 		}
 	}
 
 	if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
 		*DRAMClockChangeSupport = dm_dram_clock_change_vactive;
-	} else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
+	} else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
 			|| SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
 		*DRAMClockChangeSupport = dm_dram_clock_change_vblank;
 	} else {
 		*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
 	}
 
-	*StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
-	*StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
-	*Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
-	*Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
+	*StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
+	*StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
+	*Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
+	*Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
 
 #ifdef __DML_VBA_DEBUG__
 	dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);

base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-16 21:06 ` Nathan Chancellor
  0 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-16 21:06 UTC (permalink / raw)
  To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
	Christian König, Pan, Xinhui
  Cc: kernelci.org bot, Tom Rix, llvm, Nick Desaulniers, patches,
	dri-devel, Nathan Chancellor, amd-gfx

Most of the arguments are identical between the two call sites and they
can be accessed through the 'struct vba_vars_st' pointer. This reduces
the total amount of stack space that
dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
LLVM 16 (2216 -> 1976), helping clear up the following clang warning:

  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
  void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
       ^
  1 error generated.

Link: https://github.com/ClangBuiltLinux/linux/issues/1710
Reported-by: "kernelci.org bot" <bot@kernelci.org>
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
---

This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
applied to dml314.

 .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
 1 file changed, 52 insertions(+), 196 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
index 2829f179f982..32ceb72f7a14 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
@@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
 static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 		struct display_mode_lib *mode_lib,
 		unsigned int PrefetchMode,
-		unsigned int NumberOfActivePlanes,
-		unsigned int MaxLineBufferLines,
-		unsigned int LineBufferSize,
-		unsigned int WritebackInterfaceBufferSize,
 		double DCFCLK,
 		double ReturnBW,
-		bool SynchronizedVBlank,
-		unsigned int dpte_group_bytes[],
-		unsigned int MetaChunkSize,
 		double UrgentLatency,
 		double ExtraLatency,
-		double WritebackLatency,
-		double WritebackChunkSize,
 		double SOCCLK,
-		double DRAMClockChangeLatency,
-		double SRExitTime,
-		double SREnterPlusExitTime,
-		double SRExitZ8Time,
-		double SREnterPlusExitZ8Time,
 		double DCFCLKDeepSleep,
 		unsigned int DETBufferSizeY[],
 		unsigned int DETBufferSizeC[],
 		unsigned int SwathHeightY[],
 		unsigned int SwathHeightC[],
-		unsigned int LBBitPerPixel[],
 		double SwathWidthY[],
 		double SwathWidthC[],
-		double HRatio[],
-		double HRatioChroma[],
-		unsigned int vtaps[],
-		unsigned int VTAPsChroma[],
-		double VRatio[],
-		double VRatioChroma[],
-		unsigned int HTotal[],
-		double PixelClock[],
-		unsigned int BlendingAndTiming[],
 		unsigned int DPPPerPlane[],
 		double BytePerPixelDETY[],
 		double BytePerPixelDETC[],
-		double DSTXAfterScaler[],
-		double DSTYAfterScaler[],
-		bool WritebackEnable[],
-		enum source_format_class WritebackPixelFormat[],
-		double WritebackDestinationWidth[],
-		double WritebackDestinationHeight[],
-		double WritebackSourceHeight[],
 		bool UnboundedRequestEnabled,
 		unsigned int CompressedBufferSizeInkByte,
 		enum clock_change_support *DRAMClockChangeSupport,
-		double *UrgentWatermark,
-		double *WritebackUrgentWatermark,
-		double *DRAMClockChangeWatermark,
-		double *WritebackDRAMClockChangeWatermark,
 		double *StutterExitWatermark,
 		double *StutterEnterPlusExitWatermark,
 		double *Z8StutterExitWatermark,
-		double *Z8StutterEnterPlusExitWatermark,
-		double *MinActiveDRAMClockChangeLatencySupported);
+		double *Z8StutterEnterPlusExitWatermark);
 
 static void CalculateDCFCLKDeepSleep(
 		struct display_mode_lib *mode_lib,
@@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
 		CalculateWatermarksAndDRAMSpeedChangeSupport(
 				mode_lib,
 				PrefetchMode,
-				v->NumberOfActivePlanes,
-				v->MaxLineBufferLines,
-				v->LineBufferSize,
-				v->WritebackInterfaceBufferSize,
 				v->DCFCLK,
 				v->ReturnBW,
-				v->SynchronizedVBlank,
-				v->dpte_group_bytes,
-				v->MetaChunkSize,
 				v->UrgentLatency,
 				v->UrgentExtraLatency,
-				v->WritebackLatency,
-				v->WritebackChunkSize,
 				v->SOCCLK,
-				v->DRAMClockChangeLatency,
-				v->SRExitTime,
-				v->SREnterPlusExitTime,
-				v->SRExitZ8Time,
-				v->SREnterPlusExitZ8Time,
 				v->DCFCLKDeepSleep,
 				v->DETBufferSizeY,
 				v->DETBufferSizeC,
 				v->SwathHeightY,
 				v->SwathHeightC,
-				v->LBBitPerPixel,
 				v->SwathWidthY,
 				v->SwathWidthC,
-				v->HRatio,
-				v->HRatioChroma,
-				v->vtaps,
-				v->VTAPsChroma,
-				v->VRatio,
-				v->VRatioChroma,
-				v->HTotal,
-				v->PixelClock,
-				v->BlendingAndTiming,
 				v->DPPPerPlane,
 				v->BytePerPixelDETY,
 				v->BytePerPixelDETC,
-				v->DSTXAfterScaler,
-				v->DSTYAfterScaler,
-				v->WritebackEnable,
-				v->WritebackPixelFormat,
-				v->WritebackDestinationWidth,
-				v->WritebackDestinationHeight,
-				v->WritebackSourceHeight,
 				v->UnboundedRequestEnabled,
 				v->CompressedBufferSizeInkByte,
 				&DRAMClockChangeSupport,
-				&v->UrgentWatermark,
-				&v->WritebackUrgentWatermark,
-				&v->DRAMClockChangeWatermark,
-				&v->WritebackDRAMClockChangeWatermark,
 				&v->StutterExitWatermark,
 				&v->StutterEnterPlusExitWatermark,
 				&v->Z8StutterExitWatermark,
-				&v->Z8StutterEnterPlusExitWatermark,
-				&v->MinActiveDRAMClockChangeLatencySupported);
+				&v->Z8StutterEnterPlusExitWatermark);
 
 		for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 			if (v->WritebackEnable[k] == true) {
@@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
 			CalculateWatermarksAndDRAMSpeedChangeSupport(
 					mode_lib,
 					v->PrefetchModePerState[i][j],
-					v->NumberOfActivePlanes,
-					v->MaxLineBufferLines,
-					v->LineBufferSize,
-					v->WritebackInterfaceBufferSize,
 					v->DCFCLKState[i][j],
 					v->ReturnBWPerState[i][j],
-					v->SynchronizedVBlank,
-					v->dpte_group_bytes,
-					v->MetaChunkSize,
 					v->UrgLatency[i],
 					v->ExtraLatency,
-					v->WritebackLatency,
-					v->WritebackChunkSize,
 					v->SOCCLKPerState[i],
-					v->DRAMClockChangeLatency,
-					v->SRExitTime,
-					v->SREnterPlusExitTime,
-					v->SRExitZ8Time,
-					v->SREnterPlusExitZ8Time,
 					v->ProjectedDCFCLKDeepSleep[i][j],
 					v->DETBufferSizeYThisState,
 					v->DETBufferSizeCThisState,
 					v->SwathHeightYThisState,
 					v->SwathHeightCThisState,
-					v->LBBitPerPixel,
 					v->SwathWidthYThisState,
 					v->SwathWidthCThisState,
-					v->HRatio,
-					v->HRatioChroma,
-					v->vtaps,
-					v->VTAPsChroma,
-					v->VRatio,
-					v->VRatioChroma,
-					v->HTotal,
-					v->PixelClock,
-					v->BlendingAndTiming,
 					v->NoOfDPPThisState,
 					v->BytePerPixelInDETY,
 					v->BytePerPixelInDETC,
-					v->DSTXAfterScaler,
-					v->DSTYAfterScaler,
-					v->WritebackEnable,
-					v->WritebackPixelFormat,
-					v->WritebackDestinationWidth,
-					v->WritebackDestinationHeight,
-					v->WritebackSourceHeight,
 					UnboundedRequestEnabledThisState,
 					CompressedBufferSizeInkByteThisState,
 					&v->DRAMClockChangeSupport[i][j],
-					&v->UrgentWatermark,
-					&v->WritebackUrgentWatermark,
-					&v->DRAMClockChangeWatermark,
-					&v->WritebackDRAMClockChangeWatermark,
-					&dummy,
 					&dummy,
 					&dummy,
 					&dummy,
-					&v->MinActiveDRAMClockChangeLatencySupported);
+					&dummy);
 		}
 	}
 
@@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
 static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 		struct display_mode_lib *mode_lib,
 		unsigned int PrefetchMode,
-		unsigned int NumberOfActivePlanes,
-		unsigned int MaxLineBufferLines,
-		unsigned int LineBufferSize,
-		unsigned int WritebackInterfaceBufferSize,
 		double DCFCLK,
 		double ReturnBW,
-		bool SynchronizedVBlank,
-		unsigned int dpte_group_bytes[],
-		unsigned int MetaChunkSize,
 		double UrgentLatency,
 		double ExtraLatency,
-		double WritebackLatency,
-		double WritebackChunkSize,
 		double SOCCLK,
-		double DRAMClockChangeLatency,
-		double SRExitTime,
-		double SREnterPlusExitTime,
-		double SRExitZ8Time,
-		double SREnterPlusExitZ8Time,
 		double DCFCLKDeepSleep,
 		unsigned int DETBufferSizeY[],
 		unsigned int DETBufferSizeC[],
 		unsigned int SwathHeightY[],
 		unsigned int SwathHeightC[],
-		unsigned int LBBitPerPixel[],
 		double SwathWidthY[],
 		double SwathWidthC[],
-		double HRatio[],
-		double HRatioChroma[],
-		unsigned int vtaps[],
-		unsigned int VTAPsChroma[],
-		double VRatio[],
-		double VRatioChroma[],
-		unsigned int HTotal[],
-		double PixelClock[],
-		unsigned int BlendingAndTiming[],
 		unsigned int DPPPerPlane[],
 		double BytePerPixelDETY[],
 		double BytePerPixelDETC[],
-		double DSTXAfterScaler[],
-		double DSTYAfterScaler[],
-		bool WritebackEnable[],
-		enum source_format_class WritebackPixelFormat[],
-		double WritebackDestinationWidth[],
-		double WritebackDestinationHeight[],
-		double WritebackSourceHeight[],
 		bool UnboundedRequestEnabled,
 		unsigned int CompressedBufferSizeInkByte,
 		enum clock_change_support *DRAMClockChangeSupport,
-		double *UrgentWatermark,
-		double *WritebackUrgentWatermark,
-		double *DRAMClockChangeWatermark,
-		double *WritebackDRAMClockChangeWatermark,
 		double *StutterExitWatermark,
 		double *StutterEnterPlusExitWatermark,
 		double *Z8StutterExitWatermark,
-		double *Z8StutterEnterPlusExitWatermark,
-		double *MinActiveDRAMClockChangeLatencySupported)
+		double *Z8StutterEnterPlusExitWatermark)
 {
 	struct vba_vars_st *v = &mode_lib->vba;
 	double EffectiveLBLatencyHidingY;
@@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 	double TotalPixelBW = 0.0;
 	int k, j;
 
-	*UrgentWatermark = UrgentLatency + ExtraLatency;
+	v->UrgentWatermark = UrgentLatency + ExtraLatency;
 
 #ifdef __DML_VBA_DEBUG__
 	dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
 	dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
-	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
+	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
 #endif
 
-	*DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
+	v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
 
 #ifdef __DML_VBA_DEBUG__
-	dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
-	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
+	dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
+	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
 #endif
 
 	v->TotalActiveWriteback = 0;
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
-		if (WritebackEnable[k] == true) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
+		if (v->WritebackEnable[k] == true) {
 			v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
 		}
 	}
 
 	if (v->TotalActiveWriteback <= 1) {
-		*WritebackUrgentWatermark = WritebackLatency;
+		v->WritebackUrgentWatermark = v->WritebackLatency;
 	} else {
-		*WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
+		v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
 	}
 
 	if (v->TotalActiveWriteback <= 1) {
-		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
+		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
 	} else {
-		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
+		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
 	}
 
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 		TotalPixelBW = TotalPixelBW
-				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
-						/ (HTotal[k] / PixelClock[k]);
+				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
+						/ (v->HTotal[k] / v->PixelClock[k]);
 	}
 
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 		double EffectiveDETBufferSizeY = DETBufferSizeY[k];
 
 		v->LBLatencyHidingSourceLinesY = dml_min(
-				(double) MaxLineBufferLines,
-				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
+				(double) v->MaxLineBufferLines,
+				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
 
 		v->LBLatencyHidingSourceLinesC = dml_min(
-				(double) MaxLineBufferLines,
-				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
+				(double) v->MaxLineBufferLines,
+				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
 
-		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
+		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
 
-		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
+		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
 
 		if (UnboundedRequestEnabled) {
 			EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
-					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
+					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
 		}
 
 		LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
 		if (BytePerPixelDETC[k] > 0) {
 			LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
 			LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
-			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
+			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
 		} else {
 			LinesInDETC = 0;
 			FullDETBufferingTimeC = 999999;
 		}
 
 		ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
-				- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
+				- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
 
-		if (NumberOfActivePlanes > 1) {
+		if (v->NumberOfActivePlanes > 1) {
 			ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
-					- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
+					- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
 		}
 
 		if (BytePerPixelDETC[k] > 0) {
 			ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
-					- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
+					- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
 
-			if (NumberOfActivePlanes > 1) {
+			if (v->NumberOfActivePlanes > 1) {
 				ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
-						- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
+						- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
 			}
 			v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
 		} else {
 			v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
 		}
 
-		if (WritebackEnable[k] == true) {
-			WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
-					/ (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
-			if (WritebackPixelFormat[k] == dm_444_64) {
+		if (v->WritebackEnable[k] == true) {
+			WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
+					/ (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
+			if (v->WritebackPixelFormat[k] == dm_444_64) {
 				WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
 			}
 			WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
@@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 
 	v->MinActiveDRAMClockChangeMargin = 999999;
 	PlaneWithMinActiveDRAMClockChangeMargin = 0;
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 		if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
 			v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
-			if (BlendingAndTiming[k] == k) {
+			if (v->BlendingAndTiming[k] == k) {
 				PlaneWithMinActiveDRAMClockChangeMargin = k;
 			} else {
-				for (j = 0; j < NumberOfActivePlanes; ++j) {
-					if (BlendingAndTiming[k] == j) {
+				for (j = 0; j < v->NumberOfActivePlanes; ++j) {
+					if (v->BlendingAndTiming[k] == j) {
 						PlaneWithMinActiveDRAMClockChangeMargin = j;
 					}
 				}
@@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 		}
 	}
 
-	*MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
+	v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
 
 	SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
-		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
+		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
 				&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
 			SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
 		}
@@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
 
 	v->TotalNumberOfActiveOTG = 0;
 
-	for (k = 0; k < NumberOfActivePlanes; ++k) {
-		if (BlendingAndTiming[k] == k) {
+	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
+		if (v->BlendingAndTiming[k] == k) {
 			v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
 		}
 	}
 
 	if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
 		*DRAMClockChangeSupport = dm_dram_clock_change_vactive;
-	} else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
+	} else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
 			|| SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
 		*DRAMClockChangeSupport = dm_dram_clock_change_vblank;
 	} else {
 		*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
 	}
 
-	*StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
-	*StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
-	*Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
-	*Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
+	*StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
+	*StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
+	*Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
+	*Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
 
 #ifdef __DML_VBA_DEBUG__
 	dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);

base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/2] drm/amd/display: Reduce number of arguments of dml314's CalculateFlipSchedule()
  2022-09-16 21:06 ` Nathan Chancellor
@ 2022-09-16 21:06   ` Nathan Chancellor
  -1 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-16 21:06 UTC (permalink / raw)
  To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
	Christian König, Pan, Xinhui
  Cc: Nick Desaulniers, Tom Rix, amd-gfx, dri-devel, llvm, patches,
	Nathan Chancellor, kernelci.org bot

Most of the arguments are identical between the two call sites and they
can be accessed through the 'struct vba_vars_st' pointer. This reduces
the total amount of stack space that
dml314_ModeSupportAndSystemConfigurationFull() uses by 112 bytes with
LLVM 16 (1976 -> 1864), helping clear up the following clang warning:

  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
  void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
       ^
  1 error generated.

Link: https://github.com/ClangBuiltLinux/linux/issues/1710
Reported-by: "kernelci.org bot" <bot@kernelci.org>
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
---

This is just commit 1dbec5b4b0ef ("drm/amd/display: Reduce number of
arguments of dml31's CalculateFlipSchedule()") applied to dml314.

 .../dc/dml/dcn314/display_mode_vba_314.c      | 172 +++++-------------
 1 file changed, 47 insertions(+), 125 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
index 32ceb72f7a14..e4dfa714207a 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
@@ -265,33 +265,13 @@ static void CalculateRowBandwidth(
 
 static void CalculateFlipSchedule(
 		struct display_mode_lib *mode_lib,
+		unsigned int k,
 		double HostVMInefficiencyFactor,
 		double UrgentExtraLatency,
 		double UrgentLatency,
-		unsigned int GPUVMMaxPageTableLevels,
-		bool HostVMEnable,
-		unsigned int HostVMMaxNonCachedPageTableLevels,
-		bool GPUVMEnable,
-		double HostVMMinPageSize,
 		double PDEAndMetaPTEBytesPerFrame,
 		double MetaRowBytes,
-		double DPTEBytesPerRow,
-		double BandwidthAvailableForImmediateFlip,
-		unsigned int TotImmediateFlipBytes,
-		enum source_format_class SourcePixelFormat,
-		double LineTime,
-		double VRatio,
-		double VRatioChroma,
-		double Tno_bw,
-		bool DCCEnable,
-		unsigned int dpte_row_height,
-		unsigned int meta_row_height,
-		unsigned int dpte_row_height_chroma,
-		unsigned int meta_row_height_chroma,
-		double *DestinationLinesToRequestVMInImmediateFlip,
-		double *DestinationLinesToRequestRowInImmediateFlip,
-		double *final_flip_bw,
-		bool *ImmediateFlipSupportedForPipe);
+		double DPTEBytesPerRow);
 static double CalculateWriteBackDelay(
 		enum source_format_class WritebackPixelFormat,
 		double WritebackHRatio,
@@ -2892,33 +2872,13 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
 			for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 				CalculateFlipSchedule(
 						mode_lib,
+						k,
 						HostVMInefficiencyFactor,
 						v->UrgentExtraLatency,
 						v->UrgentLatency,
-						v->GPUVMMaxPageTableLevels,
-						v->HostVMEnable,
-						v->HostVMMaxNonCachedPageTableLevels,
-						v->GPUVMEnable,
-						v->HostVMMinPageSize,
 						v->PDEAndMetaPTEBytesFrame[k],
 						v->MetaRowByte[k],
-						v->PixelPTEBytesPerRow[k],
-						v->BandwidthAvailableForImmediateFlip,
-						v->TotImmediateFlipBytes,
-						v->SourcePixelFormat[k],
-						v->HTotal[k] / v->PixelClock[k],
-						v->VRatio[k],
-						v->VRatioChroma[k],
-						v->Tno_bw[k],
-						v->DCCEnable[k],
-						v->dpte_row_height[k],
-						v->meta_row_height[k],
-						v->dpte_row_height_chroma[k],
-						v->meta_row_height_chroma[k],
-						&v->DestinationLinesToRequestVMInImmediateFlip[k],
-						&v->DestinationLinesToRequestRowInImmediateFlip[k],
-						&v->final_flip_bw[k],
-						&v->ImmediateFlipSupportedForPipe[k]);
+						v->PixelPTEBytesPerRow[k]);
 			}
 
 			v->total_dcn_read_bw_with_flip = 0.0;
@@ -3638,61 +3598,43 @@ static void CalculateRowBandwidth(
 
 static void CalculateFlipSchedule(
 		struct display_mode_lib *mode_lib,
+		unsigned int k,
 		double HostVMInefficiencyFactor,
 		double UrgentExtraLatency,
 		double UrgentLatency,
-		unsigned int GPUVMMaxPageTableLevels,
-		bool HostVMEnable,
-		unsigned int HostVMMaxNonCachedPageTableLevels,
-		bool GPUVMEnable,
-		double HostVMMinPageSize,
 		double PDEAndMetaPTEBytesPerFrame,
 		double MetaRowBytes,
-		double DPTEBytesPerRow,
-		double BandwidthAvailableForImmediateFlip,
-		unsigned int TotImmediateFlipBytes,
-		enum source_format_class SourcePixelFormat,
-		double LineTime,
-		double VRatio,
-		double VRatioChroma,
-		double Tno_bw,
-		bool DCCEnable,
-		unsigned int dpte_row_height,
-		unsigned int meta_row_height,
-		unsigned int dpte_row_height_chroma,
-		unsigned int meta_row_height_chroma,
-		double *DestinationLinesToRequestVMInImmediateFlip,
-		double *DestinationLinesToRequestRowInImmediateFlip,
-		double *final_flip_bw,
-		bool *ImmediateFlipSupportedForPipe)
+		double DPTEBytesPerRow)
 {
+	struct vba_vars_st *v = &mode_lib->vba;
 	double min_row_time = 0.0;
 	unsigned int HostVMDynamicLevelsTrips;
 	double TimeForFetchingMetaPTEImmediateFlip;
 	double TimeForFetchingRowInVBlankImmediateFlip;
 	double ImmediateFlipBW;
+	double LineTime = v->HTotal[k] / v->PixelClock[k];
 
-	if (GPUVMEnable == true && HostVMEnable == true) {
-		HostVMDynamicLevelsTrips = HostVMMaxNonCachedPageTableLevels;
+	if (v->GPUVMEnable == true && v->HostVMEnable == true) {
+		HostVMDynamicLevelsTrips = v->HostVMMaxNonCachedPageTableLevels;
 	} else {
 		HostVMDynamicLevelsTrips = 0;
 	}
 
-	if (GPUVMEnable == true || DCCEnable == true) {
-		ImmediateFlipBW = (PDEAndMetaPTEBytesPerFrame + MetaRowBytes + DPTEBytesPerRow) * BandwidthAvailableForImmediateFlip / TotImmediateFlipBytes;
+	if (v->GPUVMEnable == true || v->DCCEnable[k] == true) {
+		ImmediateFlipBW = (PDEAndMetaPTEBytesPerFrame + MetaRowBytes + DPTEBytesPerRow) * v->BandwidthAvailableForImmediateFlip / v->TotImmediateFlipBytes;
 	}
 
-	if (GPUVMEnable == true) {
+	if (v->GPUVMEnable == true) {
 		TimeForFetchingMetaPTEImmediateFlip = dml_max3(
-				Tno_bw + PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / ImmediateFlipBW,
-				UrgentExtraLatency + UrgentLatency * (GPUVMMaxPageTableLevels * (HostVMDynamicLevelsTrips + 1) - 1),
+				v->Tno_bw[k] + PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / ImmediateFlipBW,
+				UrgentExtraLatency + UrgentLatency * (v->GPUVMMaxPageTableLevels * (HostVMDynamicLevelsTrips + 1) - 1),
 				LineTime / 4.0);
 	} else {
 		TimeForFetchingMetaPTEImmediateFlip = 0;
 	}
 
-	*DestinationLinesToRequestVMInImmediateFlip = dml_ceil(4.0 * (TimeForFetchingMetaPTEImmediateFlip / LineTime), 1) / 4.0;
-	if ((GPUVMEnable == true || DCCEnable == true)) {
+	v->DestinationLinesToRequestVMInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingMetaPTEImmediateFlip / LineTime), 1) / 4.0;
+	if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) {
 		TimeForFetchingRowInVBlankImmediateFlip = dml_max3(
 				(MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / ImmediateFlipBW,
 				UrgentLatency * (HostVMDynamicLevelsTrips + 1),
@@ -3701,54 +3643,54 @@ static void CalculateFlipSchedule(
 		TimeForFetchingRowInVBlankImmediateFlip = 0;
 	}
 
-	*DestinationLinesToRequestRowInImmediateFlip = dml_ceil(4.0 * (TimeForFetchingRowInVBlankImmediateFlip / LineTime), 1) / 4.0;
+	v->DestinationLinesToRequestRowInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingRowInVBlankImmediateFlip / LineTime), 1) / 4.0;
 
-	if (GPUVMEnable == true) {
-		*final_flip_bw = dml_max(
-				PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / (*DestinationLinesToRequestVMInImmediateFlip * LineTime),
-				(MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (*DestinationLinesToRequestRowInImmediateFlip * LineTime));
-	} else if ((GPUVMEnable == true || DCCEnable == true)) {
-		*final_flip_bw = (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (*DestinationLinesToRequestRowInImmediateFlip * LineTime);
+	if (v->GPUVMEnable == true) {
+		v->final_flip_bw[k] = dml_max(
+				PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / (v->DestinationLinesToRequestVMInImmediateFlip[k] * LineTime),
+				(MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (v->DestinationLinesToRequestRowInImmediateFlip[k] * LineTime));
+	} else if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) {
+		v->final_flip_bw[k] = (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (v->DestinationLinesToRequestRowInImmediateFlip[k] * LineTime);
 	} else {
-		*final_flip_bw = 0;
+		v->final_flip_bw[k] = 0;
 	}
 
-	if (SourcePixelFormat == dm_420_8 || SourcePixelFormat == dm_420_10 || SourcePixelFormat == dm_rgbe_alpha) {
-		if (GPUVMEnable == true && DCCEnable != true) {
-			min_row_time = dml_min(dpte_row_height * LineTime / VRatio, dpte_row_height_chroma * LineTime / VRatioChroma);
-		} else if (GPUVMEnable != true && DCCEnable == true) {
-			min_row_time = dml_min(meta_row_height * LineTime / VRatio, meta_row_height_chroma * LineTime / VRatioChroma);
+	if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelFormat[k] == dm_rgbe_alpha) {
+		if (v->GPUVMEnable == true && v->DCCEnable[k] != true) {
+			min_row_time = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->dpte_row_height_chroma[k] * LineTime / v->VRatioChroma[k]);
+		} else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) {
+			min_row_time = dml_min(v->meta_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height_chroma[k] * LineTime / v->VRatioChroma[k]);
 		} else {
 			min_row_time = dml_min4(
-					dpte_row_height * LineTime / VRatio,
-					meta_row_height * LineTime / VRatio,
-					dpte_row_height_chroma * LineTime / VRatioChroma,
-					meta_row_height_chroma * LineTime / VRatioChroma);
+					v->dpte_row_height[k] * LineTime / v->VRatio[k],
+					v->meta_row_height[k] * LineTime / v->VRatio[k],
+					v->dpte_row_height_chroma[k] * LineTime / v->VRatioChroma[k],
+					v->meta_row_height_chroma[k] * LineTime / v->VRatioChroma[k]);
 		}
 	} else {
-		if (GPUVMEnable == true && DCCEnable != true) {
-			min_row_time = dpte_row_height * LineTime / VRatio;
-		} else if (GPUVMEnable != true && DCCEnable == true) {
-			min_row_time = meta_row_height * LineTime / VRatio;
+		if (v->GPUVMEnable == true && v->DCCEnable[k] != true) {
+			min_row_time = v->dpte_row_height[k] * LineTime / v->VRatio[k];
+		} else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) {
+			min_row_time = v->meta_row_height[k] * LineTime / v->VRatio[k];
 		} else {
-			min_row_time = dml_min(dpte_row_height * LineTime / VRatio, meta_row_height * LineTime / VRatio);
+			min_row_time = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height[k] * LineTime / v->VRatio[k]);
 		}
 	}
 
-	if (*DestinationLinesToRequestVMInImmediateFlip >= 32 || *DestinationLinesToRequestRowInImmediateFlip >= 16
+	if (v->DestinationLinesToRequestVMInImmediateFlip[k] >= 32 || v->DestinationLinesToRequestRowInImmediateFlip[k] >= 16
 			|| TimeForFetchingMetaPTEImmediateFlip + 2 * TimeForFetchingRowInVBlankImmediateFlip > min_row_time) {
-		*ImmediateFlipSupportedForPipe = false;
+		v->ImmediateFlipSupportedForPipe[k] = false;
 	} else {
-		*ImmediateFlipSupportedForPipe = true;
+		v->ImmediateFlipSupportedForPipe[k] = true;
 	}
 
 #ifdef __DML_VBA_DEBUG__
-	dml_print("DML::%s: DestinationLinesToRequestVMInImmediateFlip = %f\n", __func__, *DestinationLinesToRequestVMInImmediateFlip);
-	dml_print("DML::%s: DestinationLinesToRequestRowInImmediateFlip = %f\n", __func__, *DestinationLinesToRequestRowInImmediateFlip);
+	dml_print("DML::%s: DestinationLinesToRequestVMInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestVMInImmediateFlip[k]);
+	dml_print("DML::%s: DestinationLinesToRequestRowInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestRowInImmediateFlip[k]);
 	dml_print("DML::%s: TimeForFetchingMetaPTEImmediateFlip = %f\n", __func__, TimeForFetchingMetaPTEImmediateFlip);
 	dml_print("DML::%s: TimeForFetchingRowInVBlankImmediateFlip = %f\n", __func__, TimeForFetchingRowInVBlankImmediateFlip);
 	dml_print("DML::%s: min_row_time = %f\n", __func__, min_row_time);
-	dml_print("DML::%s: ImmediateFlipSupportedForPipe = %d\n", __func__, *ImmediateFlipSupportedForPipe);
+	dml_print("DML::%s: ImmediateFlipSupportedForPipe = %d\n", __func__, v->ImmediateFlipSupportedForPipe[k]);
 #endif
 
 }
@@ -5340,33 +5282,13 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
 					for (k = 0; k < v->NumberOfActivePlanes; k++) {
 						CalculateFlipSchedule(
 								mode_lib,
+								k,
 								HostVMInefficiencyFactor,
 								v->ExtraLatency,
 								v->UrgLatency[i],
-								v->GPUVMMaxPageTableLevels,
-								v->HostVMEnable,
-								v->HostVMMaxNonCachedPageTableLevels,
-								v->GPUVMEnable,
-								v->HostVMMinPageSize,
 								v->PDEAndMetaPTEBytesPerFrame[i][j][k],
 								v->MetaRowBytes[i][j][k],
-								v->DPTEBytesPerRow[i][j][k],
-								v->BandwidthAvailableForImmediateFlip,
-								v->TotImmediateFlipBytes,
-								v->SourcePixelFormat[k],
-								v->HTotal[k] / v->PixelClock[k],
-								v->VRatio[k],
-								v->VRatioChroma[k],
-								v->Tno_bw[k],
-								v->DCCEnable[k],
-								v->dpte_row_height[k],
-								v->meta_row_height[k],
-								v->dpte_row_height_chroma[k],
-								v->meta_row_height_chroma[k],
-								&v->DestinationLinesToRequestVMInImmediateFlip[k],
-								&v->DestinationLinesToRequestRowInImmediateFlip[k],
-								&v->final_flip_bw[k],
-								&v->ImmediateFlipSupportedForPipe[k]);
+								v->DPTEBytesPerRow[i][j][k]);
 					}
 					v->total_dcn_read_bw_with_flip = 0.0;
 					for (k = 0; k < v->NumberOfActivePlanes; k++) {
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/2] drm/amd/display: Reduce number of arguments of dml314's CalculateFlipSchedule()
@ 2022-09-16 21:06   ` Nathan Chancellor
  0 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-16 21:06 UTC (permalink / raw)
  To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
	Christian König, Pan, Xinhui
  Cc: kernelci.org bot, Tom Rix, llvm, Nick Desaulniers, patches,
	dri-devel, Nathan Chancellor, amd-gfx

Most of the arguments are identical between the two call sites and they
can be accessed through the 'struct vba_vars_st' pointer. This reduces
the total amount of stack space that
dml314_ModeSupportAndSystemConfigurationFull() uses by 112 bytes with
LLVM 16 (1976 -> 1864), helping clear up the following clang warning:

  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
  void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
       ^
  1 error generated.

Link: https://github.com/ClangBuiltLinux/linux/issues/1710
Reported-by: "kernelci.org bot" <bot@kernelci.org>
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
---

This is just commit 1dbec5b4b0ef ("drm/amd/display: Reduce number of
arguments of dml31's CalculateFlipSchedule()") applied to dml314.

 .../dc/dml/dcn314/display_mode_vba_314.c      | 172 +++++-------------
 1 file changed, 47 insertions(+), 125 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
index 32ceb72f7a14..e4dfa714207a 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
@@ -265,33 +265,13 @@ static void CalculateRowBandwidth(
 
 static void CalculateFlipSchedule(
 		struct display_mode_lib *mode_lib,
+		unsigned int k,
 		double HostVMInefficiencyFactor,
 		double UrgentExtraLatency,
 		double UrgentLatency,
-		unsigned int GPUVMMaxPageTableLevels,
-		bool HostVMEnable,
-		unsigned int HostVMMaxNonCachedPageTableLevels,
-		bool GPUVMEnable,
-		double HostVMMinPageSize,
 		double PDEAndMetaPTEBytesPerFrame,
 		double MetaRowBytes,
-		double DPTEBytesPerRow,
-		double BandwidthAvailableForImmediateFlip,
-		unsigned int TotImmediateFlipBytes,
-		enum source_format_class SourcePixelFormat,
-		double LineTime,
-		double VRatio,
-		double VRatioChroma,
-		double Tno_bw,
-		bool DCCEnable,
-		unsigned int dpte_row_height,
-		unsigned int meta_row_height,
-		unsigned int dpte_row_height_chroma,
-		unsigned int meta_row_height_chroma,
-		double *DestinationLinesToRequestVMInImmediateFlip,
-		double *DestinationLinesToRequestRowInImmediateFlip,
-		double *final_flip_bw,
-		bool *ImmediateFlipSupportedForPipe);
+		double DPTEBytesPerRow);
 static double CalculateWriteBackDelay(
 		enum source_format_class WritebackPixelFormat,
 		double WritebackHRatio,
@@ -2892,33 +2872,13 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
 			for (k = 0; k < v->NumberOfActivePlanes; ++k) {
 				CalculateFlipSchedule(
 						mode_lib,
+						k,
 						HostVMInefficiencyFactor,
 						v->UrgentExtraLatency,
 						v->UrgentLatency,
-						v->GPUVMMaxPageTableLevels,
-						v->HostVMEnable,
-						v->HostVMMaxNonCachedPageTableLevels,
-						v->GPUVMEnable,
-						v->HostVMMinPageSize,
 						v->PDEAndMetaPTEBytesFrame[k],
 						v->MetaRowByte[k],
-						v->PixelPTEBytesPerRow[k],
-						v->BandwidthAvailableForImmediateFlip,
-						v->TotImmediateFlipBytes,
-						v->SourcePixelFormat[k],
-						v->HTotal[k] / v->PixelClock[k],
-						v->VRatio[k],
-						v->VRatioChroma[k],
-						v->Tno_bw[k],
-						v->DCCEnable[k],
-						v->dpte_row_height[k],
-						v->meta_row_height[k],
-						v->dpte_row_height_chroma[k],
-						v->meta_row_height_chroma[k],
-						&v->DestinationLinesToRequestVMInImmediateFlip[k],
-						&v->DestinationLinesToRequestRowInImmediateFlip[k],
-						&v->final_flip_bw[k],
-						&v->ImmediateFlipSupportedForPipe[k]);
+						v->PixelPTEBytesPerRow[k]);
 			}
 
 			v->total_dcn_read_bw_with_flip = 0.0;
@@ -3638,61 +3598,43 @@ static void CalculateRowBandwidth(
 
 static void CalculateFlipSchedule(
 		struct display_mode_lib *mode_lib,
+		unsigned int k,
 		double HostVMInefficiencyFactor,
 		double UrgentExtraLatency,
 		double UrgentLatency,
-		unsigned int GPUVMMaxPageTableLevels,
-		bool HostVMEnable,
-		unsigned int HostVMMaxNonCachedPageTableLevels,
-		bool GPUVMEnable,
-		double HostVMMinPageSize,
 		double PDEAndMetaPTEBytesPerFrame,
 		double MetaRowBytes,
-		double DPTEBytesPerRow,
-		double BandwidthAvailableForImmediateFlip,
-		unsigned int TotImmediateFlipBytes,
-		enum source_format_class SourcePixelFormat,
-		double LineTime,
-		double VRatio,
-		double VRatioChroma,
-		double Tno_bw,
-		bool DCCEnable,
-		unsigned int dpte_row_height,
-		unsigned int meta_row_height,
-		unsigned int dpte_row_height_chroma,
-		unsigned int meta_row_height_chroma,
-		double *DestinationLinesToRequestVMInImmediateFlip,
-		double *DestinationLinesToRequestRowInImmediateFlip,
-		double *final_flip_bw,
-		bool *ImmediateFlipSupportedForPipe)
+		double DPTEBytesPerRow)
 {
+	struct vba_vars_st *v = &mode_lib->vba;
 	double min_row_time = 0.0;
 	unsigned int HostVMDynamicLevelsTrips;
 	double TimeForFetchingMetaPTEImmediateFlip;
 	double TimeForFetchingRowInVBlankImmediateFlip;
 	double ImmediateFlipBW;
+	double LineTime = v->HTotal[k] / v->PixelClock[k];
 
-	if (GPUVMEnable == true && HostVMEnable == true) {
-		HostVMDynamicLevelsTrips = HostVMMaxNonCachedPageTableLevels;
+	if (v->GPUVMEnable == true && v->HostVMEnable == true) {
+		HostVMDynamicLevelsTrips = v->HostVMMaxNonCachedPageTableLevels;
 	} else {
 		HostVMDynamicLevelsTrips = 0;
 	}
 
-	if (GPUVMEnable == true || DCCEnable == true) {
-		ImmediateFlipBW = (PDEAndMetaPTEBytesPerFrame + MetaRowBytes + DPTEBytesPerRow) * BandwidthAvailableForImmediateFlip / TotImmediateFlipBytes;
+	if (v->GPUVMEnable == true || v->DCCEnable[k] == true) {
+		ImmediateFlipBW = (PDEAndMetaPTEBytesPerFrame + MetaRowBytes + DPTEBytesPerRow) * v->BandwidthAvailableForImmediateFlip / v->TotImmediateFlipBytes;
 	}
 
-	if (GPUVMEnable == true) {
+	if (v->GPUVMEnable == true) {
 		TimeForFetchingMetaPTEImmediateFlip = dml_max3(
-				Tno_bw + PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / ImmediateFlipBW,
-				UrgentExtraLatency + UrgentLatency * (GPUVMMaxPageTableLevels * (HostVMDynamicLevelsTrips + 1) - 1),
+				v->Tno_bw[k] + PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / ImmediateFlipBW,
+				UrgentExtraLatency + UrgentLatency * (v->GPUVMMaxPageTableLevels * (HostVMDynamicLevelsTrips + 1) - 1),
 				LineTime / 4.0);
 	} else {
 		TimeForFetchingMetaPTEImmediateFlip = 0;
 	}
 
-	*DestinationLinesToRequestVMInImmediateFlip = dml_ceil(4.0 * (TimeForFetchingMetaPTEImmediateFlip / LineTime), 1) / 4.0;
-	if ((GPUVMEnable == true || DCCEnable == true)) {
+	v->DestinationLinesToRequestVMInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingMetaPTEImmediateFlip / LineTime), 1) / 4.0;
+	if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) {
 		TimeForFetchingRowInVBlankImmediateFlip = dml_max3(
 				(MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / ImmediateFlipBW,
 				UrgentLatency * (HostVMDynamicLevelsTrips + 1),
@@ -3701,54 +3643,54 @@ static void CalculateFlipSchedule(
 		TimeForFetchingRowInVBlankImmediateFlip = 0;
 	}
 
-	*DestinationLinesToRequestRowInImmediateFlip = dml_ceil(4.0 * (TimeForFetchingRowInVBlankImmediateFlip / LineTime), 1) / 4.0;
+	v->DestinationLinesToRequestRowInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingRowInVBlankImmediateFlip / LineTime), 1) / 4.0;
 
-	if (GPUVMEnable == true) {
-		*final_flip_bw = dml_max(
-				PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / (*DestinationLinesToRequestVMInImmediateFlip * LineTime),
-				(MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (*DestinationLinesToRequestRowInImmediateFlip * LineTime));
-	} else if ((GPUVMEnable == true || DCCEnable == true)) {
-		*final_flip_bw = (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (*DestinationLinesToRequestRowInImmediateFlip * LineTime);
+	if (v->GPUVMEnable == true) {
+		v->final_flip_bw[k] = dml_max(
+				PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / (v->DestinationLinesToRequestVMInImmediateFlip[k] * LineTime),
+				(MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (v->DestinationLinesToRequestRowInImmediateFlip[k] * LineTime));
+	} else if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) {
+		v->final_flip_bw[k] = (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (v->DestinationLinesToRequestRowInImmediateFlip[k] * LineTime);
 	} else {
-		*final_flip_bw = 0;
+		v->final_flip_bw[k] = 0;
 	}
 
-	if (SourcePixelFormat == dm_420_8 || SourcePixelFormat == dm_420_10 || SourcePixelFormat == dm_rgbe_alpha) {
-		if (GPUVMEnable == true && DCCEnable != true) {
-			min_row_time = dml_min(dpte_row_height * LineTime / VRatio, dpte_row_height_chroma * LineTime / VRatioChroma);
-		} else if (GPUVMEnable != true && DCCEnable == true) {
-			min_row_time = dml_min(meta_row_height * LineTime / VRatio, meta_row_height_chroma * LineTime / VRatioChroma);
+	if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelFormat[k] == dm_rgbe_alpha) {
+		if (v->GPUVMEnable == true && v->DCCEnable[k] != true) {
+			min_row_time = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->dpte_row_height_chroma[k] * LineTime / v->VRatioChroma[k]);
+		} else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) {
+			min_row_time = dml_min(v->meta_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height_chroma[k] * LineTime / v->VRatioChroma[k]);
 		} else {
 			min_row_time = dml_min4(
-					dpte_row_height * LineTime / VRatio,
-					meta_row_height * LineTime / VRatio,
-					dpte_row_height_chroma * LineTime / VRatioChroma,
-					meta_row_height_chroma * LineTime / VRatioChroma);
+					v->dpte_row_height[k] * LineTime / v->VRatio[k],
+					v->meta_row_height[k] * LineTime / v->VRatio[k],
+					v->dpte_row_height_chroma[k] * LineTime / v->VRatioChroma[k],
+					v->meta_row_height_chroma[k] * LineTime / v->VRatioChroma[k]);
 		}
 	} else {
-		if (GPUVMEnable == true && DCCEnable != true) {
-			min_row_time = dpte_row_height * LineTime / VRatio;
-		} else if (GPUVMEnable != true && DCCEnable == true) {
-			min_row_time = meta_row_height * LineTime / VRatio;
+		if (v->GPUVMEnable == true && v->DCCEnable[k] != true) {
+			min_row_time = v->dpte_row_height[k] * LineTime / v->VRatio[k];
+		} else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) {
+			min_row_time = v->meta_row_height[k] * LineTime / v->VRatio[k];
 		} else {
-			min_row_time = dml_min(dpte_row_height * LineTime / VRatio, meta_row_height * LineTime / VRatio);
+			min_row_time = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height[k] * LineTime / v->VRatio[k]);
 		}
 	}
 
-	if (*DestinationLinesToRequestVMInImmediateFlip >= 32 || *DestinationLinesToRequestRowInImmediateFlip >= 16
+	if (v->DestinationLinesToRequestVMInImmediateFlip[k] >= 32 || v->DestinationLinesToRequestRowInImmediateFlip[k] >= 16
 			|| TimeForFetchingMetaPTEImmediateFlip + 2 * TimeForFetchingRowInVBlankImmediateFlip > min_row_time) {
-		*ImmediateFlipSupportedForPipe = false;
+		v->ImmediateFlipSupportedForPipe[k] = false;
 	} else {
-		*ImmediateFlipSupportedForPipe = true;
+		v->ImmediateFlipSupportedForPipe[k] = true;
 	}
 
 #ifdef __DML_VBA_DEBUG__
-	dml_print("DML::%s: DestinationLinesToRequestVMInImmediateFlip = %f\n", __func__, *DestinationLinesToRequestVMInImmediateFlip);
-	dml_print("DML::%s: DestinationLinesToRequestRowInImmediateFlip = %f\n", __func__, *DestinationLinesToRequestRowInImmediateFlip);
+	dml_print("DML::%s: DestinationLinesToRequestVMInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestVMInImmediateFlip[k]);
+	dml_print("DML::%s: DestinationLinesToRequestRowInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestRowInImmediateFlip[k]);
 	dml_print("DML::%s: TimeForFetchingMetaPTEImmediateFlip = %f\n", __func__, TimeForFetchingMetaPTEImmediateFlip);
 	dml_print("DML::%s: TimeForFetchingRowInVBlankImmediateFlip = %f\n", __func__, TimeForFetchingRowInVBlankImmediateFlip);
 	dml_print("DML::%s: min_row_time = %f\n", __func__, min_row_time);
-	dml_print("DML::%s: ImmediateFlipSupportedForPipe = %d\n", __func__, *ImmediateFlipSupportedForPipe);
+	dml_print("DML::%s: ImmediateFlipSupportedForPipe = %d\n", __func__, v->ImmediateFlipSupportedForPipe[k]);
 #endif
 
 }
@@ -5340,33 +5282,13 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
 					for (k = 0; k < v->NumberOfActivePlanes; k++) {
 						CalculateFlipSchedule(
 								mode_lib,
+								k,
 								HostVMInefficiencyFactor,
 								v->ExtraLatency,
 								v->UrgLatency[i],
-								v->GPUVMMaxPageTableLevels,
-								v->HostVMEnable,
-								v->HostVMMaxNonCachedPageTableLevels,
-								v->GPUVMEnable,
-								v->HostVMMinPageSize,
 								v->PDEAndMetaPTEBytesPerFrame[i][j][k],
 								v->MetaRowBytes[i][j][k],
-								v->DPTEBytesPerRow[i][j][k],
-								v->BandwidthAvailableForImmediateFlip,
-								v->TotImmediateFlipBytes,
-								v->SourcePixelFormat[k],
-								v->HTotal[k] / v->PixelClock[k],
-								v->VRatio[k],
-								v->VRatioChroma[k],
-								v->Tno_bw[k],
-								v->DCCEnable[k],
-								v->dpte_row_height[k],
-								v->meta_row_height[k],
-								v->dpte_row_height_chroma[k],
-								v->meta_row_height_chroma[k],
-								&v->DestinationLinesToRequestVMInImmediateFlip[k],
-								&v->DestinationLinesToRequestRowInImmediateFlip[k],
-								&v->final_flip_bw[k],
-								&v->ImmediateFlipSupportedForPipe[k]);
+								v->DPTEBytesPerRow[i][j][k]);
 					}
 					v->total_dcn_read_bw_with_flip = 0.0;
 					for (k = 0; k < v->NumberOfActivePlanes; k++) {
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
  2022-09-16 21:06 ` Nathan Chancellor
@ 2022-09-16 22:04   ` Tom Rix
  -1 siblings, 0 replies; 19+ messages in thread
From: Tom Rix @ 2022-09-16 22:04 UTC (permalink / raw)
  To: Nathan Chancellor, Harry Wentland, Leo Li, Rodrigo Siqueira,
	Alex Deucher, Christian König, Pan, Xinhui
  Cc: Nick Desaulniers, amd-gfx, dri-devel, llvm, patches, kernelci.org bot


On 9/16/22 2:06 PM, Nathan Chancellor wrote:
> Most of the arguments are identical between the two call sites and they
> can be accessed through the 'struct vba_vars_st' pointer. This reduces
> the total amount of stack space that
> dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
>
>    drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
>    void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
>         ^
>    1 error generated.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> Reported-by: "kernelci.org bot" <bot@kernelci.org>
> Signed-off-by: Nathan Chancellor <nathan@kernel.org>

Nathan,

I like this change but I don't think it goes far enough.

There are many similar functions in this file and there other 
display_node_vba_*.c files that pass too many vba_vars_st elements.

I think most/all of the static functions should be refactored to pass 
vba_vars_st * or vba_vars_st **

fwiw, i found the calling function 
DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation, 
hilariously long :)

I'll do the change if you want to pass this to me, I promise not to add 
to the above function name.

Tom

> ---
>
> This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> applied to dml314.
>
>   .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
>   1 file changed, 52 insertions(+), 196 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> index 2829f179f982..32ceb72f7a14 100644
> --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
>   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   		struct display_mode_lib *mode_lib,
>   		unsigned int PrefetchMode,
> -		unsigned int NumberOfActivePlanes,
> -		unsigned int MaxLineBufferLines,
> -		unsigned int LineBufferSize,
> -		unsigned int WritebackInterfaceBufferSize,
>   		double DCFCLK,
>   		double ReturnBW,
> -		bool SynchronizedVBlank,
> -		unsigned int dpte_group_bytes[],
> -		unsigned int MetaChunkSize,
>   		double UrgentLatency,
>   		double ExtraLatency,
> -		double WritebackLatency,
> -		double WritebackChunkSize,
>   		double SOCCLK,
> -		double DRAMClockChangeLatency,
> -		double SRExitTime,
> -		double SREnterPlusExitTime,
> -		double SRExitZ8Time,
> -		double SREnterPlusExitZ8Time,
>   		double DCFCLKDeepSleep,
>   		unsigned int DETBufferSizeY[],
>   		unsigned int DETBufferSizeC[],
>   		unsigned int SwathHeightY[],
>   		unsigned int SwathHeightC[],
> -		unsigned int LBBitPerPixel[],
>   		double SwathWidthY[],
>   		double SwathWidthC[],
> -		double HRatio[],
> -		double HRatioChroma[],
> -		unsigned int vtaps[],
> -		unsigned int VTAPsChroma[],
> -		double VRatio[],
> -		double VRatioChroma[],
> -		unsigned int HTotal[],
> -		double PixelClock[],
> -		unsigned int BlendingAndTiming[],
>   		unsigned int DPPPerPlane[],
>   		double BytePerPixelDETY[],
>   		double BytePerPixelDETC[],
> -		double DSTXAfterScaler[],
> -		double DSTYAfterScaler[],
> -		bool WritebackEnable[],
> -		enum source_format_class WritebackPixelFormat[],
> -		double WritebackDestinationWidth[],
> -		double WritebackDestinationHeight[],
> -		double WritebackSourceHeight[],
>   		bool UnboundedRequestEnabled,
>   		unsigned int CompressedBufferSizeInkByte,
>   		enum clock_change_support *DRAMClockChangeSupport,
> -		double *UrgentWatermark,
> -		double *WritebackUrgentWatermark,
> -		double *DRAMClockChangeWatermark,
> -		double *WritebackDRAMClockChangeWatermark,
>   		double *StutterExitWatermark,
>   		double *StutterEnterPlusExitWatermark,
>   		double *Z8StutterExitWatermark,
> -		double *Z8StutterEnterPlusExitWatermark,
> -		double *MinActiveDRAMClockChangeLatencySupported);
> +		double *Z8StutterEnterPlusExitWatermark);
>   
>   static void CalculateDCFCLKDeepSleep(
>   		struct display_mode_lib *mode_lib,
> @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
>   		CalculateWatermarksAndDRAMSpeedChangeSupport(
>   				mode_lib,
>   				PrefetchMode,
> -				v->NumberOfActivePlanes,
> -				v->MaxLineBufferLines,
> -				v->LineBufferSize,
> -				v->WritebackInterfaceBufferSize,
>   				v->DCFCLK,
>   				v->ReturnBW,
> -				v->SynchronizedVBlank,
> -				v->dpte_group_bytes,
> -				v->MetaChunkSize,
>   				v->UrgentLatency,
>   				v->UrgentExtraLatency,
> -				v->WritebackLatency,
> -				v->WritebackChunkSize,
>   				v->SOCCLK,
> -				v->DRAMClockChangeLatency,
> -				v->SRExitTime,
> -				v->SREnterPlusExitTime,
> -				v->SRExitZ8Time,
> -				v->SREnterPlusExitZ8Time,
>   				v->DCFCLKDeepSleep,
>   				v->DETBufferSizeY,
>   				v->DETBufferSizeC,
>   				v->SwathHeightY,
>   				v->SwathHeightC,
> -				v->LBBitPerPixel,
>   				v->SwathWidthY,
>   				v->SwathWidthC,
> -				v->HRatio,
> -				v->HRatioChroma,
> -				v->vtaps,
> -				v->VTAPsChroma,
> -				v->VRatio,
> -				v->VRatioChroma,
> -				v->HTotal,
> -				v->PixelClock,
> -				v->BlendingAndTiming,
>   				v->DPPPerPlane,
>   				v->BytePerPixelDETY,
>   				v->BytePerPixelDETC,
> -				v->DSTXAfterScaler,
> -				v->DSTYAfterScaler,
> -				v->WritebackEnable,
> -				v->WritebackPixelFormat,
> -				v->WritebackDestinationWidth,
> -				v->WritebackDestinationHeight,
> -				v->WritebackSourceHeight,
>   				v->UnboundedRequestEnabled,
>   				v->CompressedBufferSizeInkByte,
>   				&DRAMClockChangeSupport,
> -				&v->UrgentWatermark,
> -				&v->WritebackUrgentWatermark,
> -				&v->DRAMClockChangeWatermark,
> -				&v->WritebackDRAMClockChangeWatermark,
>   				&v->StutterExitWatermark,
>   				&v->StutterEnterPlusExitWatermark,
>   				&v->Z8StutterExitWatermark,
> -				&v->Z8StutterEnterPlusExitWatermark,
> -				&v->MinActiveDRAMClockChangeLatencySupported);
> +				&v->Z8StutterEnterPlusExitWatermark);
>   
>   		for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>   			if (v->WritebackEnable[k] == true) {
> @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
>   			CalculateWatermarksAndDRAMSpeedChangeSupport(
>   					mode_lib,
>   					v->PrefetchModePerState[i][j],
> -					v->NumberOfActivePlanes,
> -					v->MaxLineBufferLines,
> -					v->LineBufferSize,
> -					v->WritebackInterfaceBufferSize,
>   					v->DCFCLKState[i][j],
>   					v->ReturnBWPerState[i][j],
> -					v->SynchronizedVBlank,
> -					v->dpte_group_bytes,
> -					v->MetaChunkSize,
>   					v->UrgLatency[i],
>   					v->ExtraLatency,
> -					v->WritebackLatency,
> -					v->WritebackChunkSize,
>   					v->SOCCLKPerState[i],
> -					v->DRAMClockChangeLatency,
> -					v->SRExitTime,
> -					v->SREnterPlusExitTime,
> -					v->SRExitZ8Time,
> -					v->SREnterPlusExitZ8Time,
>   					v->ProjectedDCFCLKDeepSleep[i][j],
>   					v->DETBufferSizeYThisState,
>   					v->DETBufferSizeCThisState,
>   					v->SwathHeightYThisState,
>   					v->SwathHeightCThisState,
> -					v->LBBitPerPixel,
>   					v->SwathWidthYThisState,
>   					v->SwathWidthCThisState,
> -					v->HRatio,
> -					v->HRatioChroma,
> -					v->vtaps,
> -					v->VTAPsChroma,
> -					v->VRatio,
> -					v->VRatioChroma,
> -					v->HTotal,
> -					v->PixelClock,
> -					v->BlendingAndTiming,
>   					v->NoOfDPPThisState,
>   					v->BytePerPixelInDETY,
>   					v->BytePerPixelInDETC,
> -					v->DSTXAfterScaler,
> -					v->DSTYAfterScaler,
> -					v->WritebackEnable,
> -					v->WritebackPixelFormat,
> -					v->WritebackDestinationWidth,
> -					v->WritebackDestinationHeight,
> -					v->WritebackSourceHeight,
>   					UnboundedRequestEnabledThisState,
>   					CompressedBufferSizeInkByteThisState,
>   					&v->DRAMClockChangeSupport[i][j],
> -					&v->UrgentWatermark,
> -					&v->WritebackUrgentWatermark,
> -					&v->DRAMClockChangeWatermark,
> -					&v->WritebackDRAMClockChangeWatermark,
> -					&dummy,
>   					&dummy,
>   					&dummy,
>   					&dummy,
> -					&v->MinActiveDRAMClockChangeLatencySupported);
> +					&dummy);
>   		}
>   	}
>   
> @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
>   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   		struct display_mode_lib *mode_lib,
>   		unsigned int PrefetchMode,
> -		unsigned int NumberOfActivePlanes,
> -		unsigned int MaxLineBufferLines,
> -		unsigned int LineBufferSize,
> -		unsigned int WritebackInterfaceBufferSize,
>   		double DCFCLK,
>   		double ReturnBW,
> -		bool SynchronizedVBlank,
> -		unsigned int dpte_group_bytes[],
> -		unsigned int MetaChunkSize,
>   		double UrgentLatency,
>   		double ExtraLatency,
> -		double WritebackLatency,
> -		double WritebackChunkSize,
>   		double SOCCLK,
> -		double DRAMClockChangeLatency,
> -		double SRExitTime,
> -		double SREnterPlusExitTime,
> -		double SRExitZ8Time,
> -		double SREnterPlusExitZ8Time,
>   		double DCFCLKDeepSleep,
>   		unsigned int DETBufferSizeY[],
>   		unsigned int DETBufferSizeC[],
>   		unsigned int SwathHeightY[],
>   		unsigned int SwathHeightC[],
> -		unsigned int LBBitPerPixel[],
>   		double SwathWidthY[],
>   		double SwathWidthC[],
> -		double HRatio[],
> -		double HRatioChroma[],
> -		unsigned int vtaps[],
> -		unsigned int VTAPsChroma[],
> -		double VRatio[],
> -		double VRatioChroma[],
> -		unsigned int HTotal[],
> -		double PixelClock[],
> -		unsigned int BlendingAndTiming[],
>   		unsigned int DPPPerPlane[],
>   		double BytePerPixelDETY[],
>   		double BytePerPixelDETC[],
> -		double DSTXAfterScaler[],
> -		double DSTYAfterScaler[],
> -		bool WritebackEnable[],
> -		enum source_format_class WritebackPixelFormat[],
> -		double WritebackDestinationWidth[],
> -		double WritebackDestinationHeight[],
> -		double WritebackSourceHeight[],
>   		bool UnboundedRequestEnabled,
>   		unsigned int CompressedBufferSizeInkByte,
>   		enum clock_change_support *DRAMClockChangeSupport,
> -		double *UrgentWatermark,
> -		double *WritebackUrgentWatermark,
> -		double *DRAMClockChangeWatermark,
> -		double *WritebackDRAMClockChangeWatermark,
>   		double *StutterExitWatermark,
>   		double *StutterEnterPlusExitWatermark,
>   		double *Z8StutterExitWatermark,
> -		double *Z8StutterEnterPlusExitWatermark,
> -		double *MinActiveDRAMClockChangeLatencySupported)
> +		double *Z8StutterEnterPlusExitWatermark)
>   {
>   	struct vba_vars_st *v = &mode_lib->vba;
>   	double EffectiveLBLatencyHidingY;
> @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   	double TotalPixelBW = 0.0;
>   	int k, j;
>   
> -	*UrgentWatermark = UrgentLatency + ExtraLatency;
> +	v->UrgentWatermark = UrgentLatency + ExtraLatency;
>   
>   #ifdef __DML_VBA_DEBUG__
>   	dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
>   	dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> -	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> +	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
>   #endif
>   
> -	*DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> +	v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
>   
>   #ifdef __DML_VBA_DEBUG__
> -	dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> -	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> +	dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> +	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
>   #endif
>   
>   	v->TotalActiveWriteback = 0;
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> -		if (WritebackEnable[k] == true) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> +		if (v->WritebackEnable[k] == true) {
>   			v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
>   		}
>   	}
>   
>   	if (v->TotalActiveWriteback <= 1) {
> -		*WritebackUrgentWatermark = WritebackLatency;
> +		v->WritebackUrgentWatermark = v->WritebackLatency;
>   	} else {
> -		*WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> +		v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
>   	}
>   
>   	if (v->TotalActiveWriteback <= 1) {
> -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
>   	} else {
> -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
>   	}
>   
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>   		TotalPixelBW = TotalPixelBW
> -				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> -						/ (HTotal[k] / PixelClock[k]);
> +				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> +						/ (v->HTotal[k] / v->PixelClock[k]);
>   	}
>   
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>   		double EffectiveDETBufferSizeY = DETBufferSizeY[k];
>   
>   		v->LBLatencyHidingSourceLinesY = dml_min(
> -				(double) MaxLineBufferLines,
> -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> +				(double) v->MaxLineBufferLines,
> +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
>   
>   		v->LBLatencyHidingSourceLinesC = dml_min(
> -				(double) MaxLineBufferLines,
> -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> +				(double) v->MaxLineBufferLines,
> +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
>   
> -		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> +		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
>   
> -		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> +		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
>   
>   		if (UnboundedRequestEnabled) {
>   			EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> -					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> +					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
>   		}
>   
>   		LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
>   		if (BytePerPixelDETC[k] > 0) {
>   			LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
>   			LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> -			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> +			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
>   		} else {
>   			LinesInDETC = 0;
>   			FullDETBufferingTimeC = 999999;
>   		}
>   
>   		ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> -				- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> +				- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
>   
> -		if (NumberOfActivePlanes > 1) {
> +		if (v->NumberOfActivePlanes > 1) {
>   			ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> -					- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> +					- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
>   		}
>   
>   		if (BytePerPixelDETC[k] > 0) {
>   			ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> -					- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> +					- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
>   
> -			if (NumberOfActivePlanes > 1) {
> +			if (v->NumberOfActivePlanes > 1) {
>   				ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> -						- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> +						- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
>   			}
>   			v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
>   		} else {
>   			v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
>   		}
>   
> -		if (WritebackEnable[k] == true) {
> -			WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> -					/ (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> -			if (WritebackPixelFormat[k] == dm_444_64) {
> +		if (v->WritebackEnable[k] == true) {
> +			WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> +					/ (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> +			if (v->WritebackPixelFormat[k] == dm_444_64) {
>   				WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
>   			}
>   			WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   
>   	v->MinActiveDRAMClockChangeMargin = 999999;
>   	PlaneWithMinActiveDRAMClockChangeMargin = 0;
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>   		if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
>   			v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> -			if (BlendingAndTiming[k] == k) {
> +			if (v->BlendingAndTiming[k] == k) {
>   				PlaneWithMinActiveDRAMClockChangeMargin = k;
>   			} else {
> -				for (j = 0; j < NumberOfActivePlanes; ++j) {
> -					if (BlendingAndTiming[k] == j) {
> +				for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> +					if (v->BlendingAndTiming[k] == j) {
>   						PlaneWithMinActiveDRAMClockChangeMargin = j;
>   					}
>   				}
> @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   		}
>   	}
>   
> -	*MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> +	v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
>   
>   	SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> -		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> +		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
>   				&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
>   			SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
>   		}
> @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   
>   	v->TotalNumberOfActiveOTG = 0;
>   
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> -		if (BlendingAndTiming[k] == k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> +		if (v->BlendingAndTiming[k] == k) {
>   			v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
>   		}
>   	}
>   
>   	if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
>   		*DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> -	} else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> +	} else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
>   			|| SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
>   		*DRAMClockChangeSupport = dm_dram_clock_change_vblank;
>   	} else {
>   		*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
>   	}
>   
> -	*StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> -	*StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> -	*Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> -	*Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> +	*StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> +	*StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> +	*Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> +	*Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
>   
>   #ifdef __DML_VBA_DEBUG__
>   	dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
>
> base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-16 22:04   ` Tom Rix
  0 siblings, 0 replies; 19+ messages in thread
From: Tom Rix @ 2022-09-16 22:04 UTC (permalink / raw)
  To: Nathan Chancellor, Harry Wentland, Leo Li, Rodrigo Siqueira,
	Alex Deucher, Christian König, Pan, Xinhui
  Cc: kernelci.org bot, llvm, Nick Desaulniers, patches, dri-devel, amd-gfx


On 9/16/22 2:06 PM, Nathan Chancellor wrote:
> Most of the arguments are identical between the two call sites and they
> can be accessed through the 'struct vba_vars_st' pointer. This reduces
> the total amount of stack space that
> dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
>
>    drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
>    void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
>         ^
>    1 error generated.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> Reported-by: "kernelci.org bot" <bot@kernelci.org>
> Signed-off-by: Nathan Chancellor <nathan@kernel.org>

Nathan,

I like this change but I don't think it goes far enough.

There are many similar functions in this file and there other 
display_node_vba_*.c files that pass too many vba_vars_st elements.

I think most/all of the static functions should be refactored to pass 
vba_vars_st * or vba_vars_st **

fwiw, i found the calling function 
DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation, 
hilariously long :)

I'll do the change if you want to pass this to me, I promise not to add 
to the above function name.

Tom

> ---
>
> This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> applied to dml314.
>
>   .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
>   1 file changed, 52 insertions(+), 196 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> index 2829f179f982..32ceb72f7a14 100644
> --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
>   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   		struct display_mode_lib *mode_lib,
>   		unsigned int PrefetchMode,
> -		unsigned int NumberOfActivePlanes,
> -		unsigned int MaxLineBufferLines,
> -		unsigned int LineBufferSize,
> -		unsigned int WritebackInterfaceBufferSize,
>   		double DCFCLK,
>   		double ReturnBW,
> -		bool SynchronizedVBlank,
> -		unsigned int dpte_group_bytes[],
> -		unsigned int MetaChunkSize,
>   		double UrgentLatency,
>   		double ExtraLatency,
> -		double WritebackLatency,
> -		double WritebackChunkSize,
>   		double SOCCLK,
> -		double DRAMClockChangeLatency,
> -		double SRExitTime,
> -		double SREnterPlusExitTime,
> -		double SRExitZ8Time,
> -		double SREnterPlusExitZ8Time,
>   		double DCFCLKDeepSleep,
>   		unsigned int DETBufferSizeY[],
>   		unsigned int DETBufferSizeC[],
>   		unsigned int SwathHeightY[],
>   		unsigned int SwathHeightC[],
> -		unsigned int LBBitPerPixel[],
>   		double SwathWidthY[],
>   		double SwathWidthC[],
> -		double HRatio[],
> -		double HRatioChroma[],
> -		unsigned int vtaps[],
> -		unsigned int VTAPsChroma[],
> -		double VRatio[],
> -		double VRatioChroma[],
> -		unsigned int HTotal[],
> -		double PixelClock[],
> -		unsigned int BlendingAndTiming[],
>   		unsigned int DPPPerPlane[],
>   		double BytePerPixelDETY[],
>   		double BytePerPixelDETC[],
> -		double DSTXAfterScaler[],
> -		double DSTYAfterScaler[],
> -		bool WritebackEnable[],
> -		enum source_format_class WritebackPixelFormat[],
> -		double WritebackDestinationWidth[],
> -		double WritebackDestinationHeight[],
> -		double WritebackSourceHeight[],
>   		bool UnboundedRequestEnabled,
>   		unsigned int CompressedBufferSizeInkByte,
>   		enum clock_change_support *DRAMClockChangeSupport,
> -		double *UrgentWatermark,
> -		double *WritebackUrgentWatermark,
> -		double *DRAMClockChangeWatermark,
> -		double *WritebackDRAMClockChangeWatermark,
>   		double *StutterExitWatermark,
>   		double *StutterEnterPlusExitWatermark,
>   		double *Z8StutterExitWatermark,
> -		double *Z8StutterEnterPlusExitWatermark,
> -		double *MinActiveDRAMClockChangeLatencySupported);
> +		double *Z8StutterEnterPlusExitWatermark);
>   
>   static void CalculateDCFCLKDeepSleep(
>   		struct display_mode_lib *mode_lib,
> @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
>   		CalculateWatermarksAndDRAMSpeedChangeSupport(
>   				mode_lib,
>   				PrefetchMode,
> -				v->NumberOfActivePlanes,
> -				v->MaxLineBufferLines,
> -				v->LineBufferSize,
> -				v->WritebackInterfaceBufferSize,
>   				v->DCFCLK,
>   				v->ReturnBW,
> -				v->SynchronizedVBlank,
> -				v->dpte_group_bytes,
> -				v->MetaChunkSize,
>   				v->UrgentLatency,
>   				v->UrgentExtraLatency,
> -				v->WritebackLatency,
> -				v->WritebackChunkSize,
>   				v->SOCCLK,
> -				v->DRAMClockChangeLatency,
> -				v->SRExitTime,
> -				v->SREnterPlusExitTime,
> -				v->SRExitZ8Time,
> -				v->SREnterPlusExitZ8Time,
>   				v->DCFCLKDeepSleep,
>   				v->DETBufferSizeY,
>   				v->DETBufferSizeC,
>   				v->SwathHeightY,
>   				v->SwathHeightC,
> -				v->LBBitPerPixel,
>   				v->SwathWidthY,
>   				v->SwathWidthC,
> -				v->HRatio,
> -				v->HRatioChroma,
> -				v->vtaps,
> -				v->VTAPsChroma,
> -				v->VRatio,
> -				v->VRatioChroma,
> -				v->HTotal,
> -				v->PixelClock,
> -				v->BlendingAndTiming,
>   				v->DPPPerPlane,
>   				v->BytePerPixelDETY,
>   				v->BytePerPixelDETC,
> -				v->DSTXAfterScaler,
> -				v->DSTYAfterScaler,
> -				v->WritebackEnable,
> -				v->WritebackPixelFormat,
> -				v->WritebackDestinationWidth,
> -				v->WritebackDestinationHeight,
> -				v->WritebackSourceHeight,
>   				v->UnboundedRequestEnabled,
>   				v->CompressedBufferSizeInkByte,
>   				&DRAMClockChangeSupport,
> -				&v->UrgentWatermark,
> -				&v->WritebackUrgentWatermark,
> -				&v->DRAMClockChangeWatermark,
> -				&v->WritebackDRAMClockChangeWatermark,
>   				&v->StutterExitWatermark,
>   				&v->StutterEnterPlusExitWatermark,
>   				&v->Z8StutterExitWatermark,
> -				&v->Z8StutterEnterPlusExitWatermark,
> -				&v->MinActiveDRAMClockChangeLatencySupported);
> +				&v->Z8StutterEnterPlusExitWatermark);
>   
>   		for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>   			if (v->WritebackEnable[k] == true) {
> @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
>   			CalculateWatermarksAndDRAMSpeedChangeSupport(
>   					mode_lib,
>   					v->PrefetchModePerState[i][j],
> -					v->NumberOfActivePlanes,
> -					v->MaxLineBufferLines,
> -					v->LineBufferSize,
> -					v->WritebackInterfaceBufferSize,
>   					v->DCFCLKState[i][j],
>   					v->ReturnBWPerState[i][j],
> -					v->SynchronizedVBlank,
> -					v->dpte_group_bytes,
> -					v->MetaChunkSize,
>   					v->UrgLatency[i],
>   					v->ExtraLatency,
> -					v->WritebackLatency,
> -					v->WritebackChunkSize,
>   					v->SOCCLKPerState[i],
> -					v->DRAMClockChangeLatency,
> -					v->SRExitTime,
> -					v->SREnterPlusExitTime,
> -					v->SRExitZ8Time,
> -					v->SREnterPlusExitZ8Time,
>   					v->ProjectedDCFCLKDeepSleep[i][j],
>   					v->DETBufferSizeYThisState,
>   					v->DETBufferSizeCThisState,
>   					v->SwathHeightYThisState,
>   					v->SwathHeightCThisState,
> -					v->LBBitPerPixel,
>   					v->SwathWidthYThisState,
>   					v->SwathWidthCThisState,
> -					v->HRatio,
> -					v->HRatioChroma,
> -					v->vtaps,
> -					v->VTAPsChroma,
> -					v->VRatio,
> -					v->VRatioChroma,
> -					v->HTotal,
> -					v->PixelClock,
> -					v->BlendingAndTiming,
>   					v->NoOfDPPThisState,
>   					v->BytePerPixelInDETY,
>   					v->BytePerPixelInDETC,
> -					v->DSTXAfterScaler,
> -					v->DSTYAfterScaler,
> -					v->WritebackEnable,
> -					v->WritebackPixelFormat,
> -					v->WritebackDestinationWidth,
> -					v->WritebackDestinationHeight,
> -					v->WritebackSourceHeight,
>   					UnboundedRequestEnabledThisState,
>   					CompressedBufferSizeInkByteThisState,
>   					&v->DRAMClockChangeSupport[i][j],
> -					&v->UrgentWatermark,
> -					&v->WritebackUrgentWatermark,
> -					&v->DRAMClockChangeWatermark,
> -					&v->WritebackDRAMClockChangeWatermark,
> -					&dummy,
>   					&dummy,
>   					&dummy,
>   					&dummy,
> -					&v->MinActiveDRAMClockChangeLatencySupported);
> +					&dummy);
>   		}
>   	}
>   
> @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
>   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   		struct display_mode_lib *mode_lib,
>   		unsigned int PrefetchMode,
> -		unsigned int NumberOfActivePlanes,
> -		unsigned int MaxLineBufferLines,
> -		unsigned int LineBufferSize,
> -		unsigned int WritebackInterfaceBufferSize,
>   		double DCFCLK,
>   		double ReturnBW,
> -		bool SynchronizedVBlank,
> -		unsigned int dpte_group_bytes[],
> -		unsigned int MetaChunkSize,
>   		double UrgentLatency,
>   		double ExtraLatency,
> -		double WritebackLatency,
> -		double WritebackChunkSize,
>   		double SOCCLK,
> -		double DRAMClockChangeLatency,
> -		double SRExitTime,
> -		double SREnterPlusExitTime,
> -		double SRExitZ8Time,
> -		double SREnterPlusExitZ8Time,
>   		double DCFCLKDeepSleep,
>   		unsigned int DETBufferSizeY[],
>   		unsigned int DETBufferSizeC[],
>   		unsigned int SwathHeightY[],
>   		unsigned int SwathHeightC[],
> -		unsigned int LBBitPerPixel[],
>   		double SwathWidthY[],
>   		double SwathWidthC[],
> -		double HRatio[],
> -		double HRatioChroma[],
> -		unsigned int vtaps[],
> -		unsigned int VTAPsChroma[],
> -		double VRatio[],
> -		double VRatioChroma[],
> -		unsigned int HTotal[],
> -		double PixelClock[],
> -		unsigned int BlendingAndTiming[],
>   		unsigned int DPPPerPlane[],
>   		double BytePerPixelDETY[],
>   		double BytePerPixelDETC[],
> -		double DSTXAfterScaler[],
> -		double DSTYAfterScaler[],
> -		bool WritebackEnable[],
> -		enum source_format_class WritebackPixelFormat[],
> -		double WritebackDestinationWidth[],
> -		double WritebackDestinationHeight[],
> -		double WritebackSourceHeight[],
>   		bool UnboundedRequestEnabled,
>   		unsigned int CompressedBufferSizeInkByte,
>   		enum clock_change_support *DRAMClockChangeSupport,
> -		double *UrgentWatermark,
> -		double *WritebackUrgentWatermark,
> -		double *DRAMClockChangeWatermark,
> -		double *WritebackDRAMClockChangeWatermark,
>   		double *StutterExitWatermark,
>   		double *StutterEnterPlusExitWatermark,
>   		double *Z8StutterExitWatermark,
> -		double *Z8StutterEnterPlusExitWatermark,
> -		double *MinActiveDRAMClockChangeLatencySupported)
> +		double *Z8StutterEnterPlusExitWatermark)
>   {
>   	struct vba_vars_st *v = &mode_lib->vba;
>   	double EffectiveLBLatencyHidingY;
> @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   	double TotalPixelBW = 0.0;
>   	int k, j;
>   
> -	*UrgentWatermark = UrgentLatency + ExtraLatency;
> +	v->UrgentWatermark = UrgentLatency + ExtraLatency;
>   
>   #ifdef __DML_VBA_DEBUG__
>   	dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
>   	dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> -	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> +	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
>   #endif
>   
> -	*DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> +	v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
>   
>   #ifdef __DML_VBA_DEBUG__
> -	dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> -	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> +	dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> +	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
>   #endif
>   
>   	v->TotalActiveWriteback = 0;
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> -		if (WritebackEnable[k] == true) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> +		if (v->WritebackEnable[k] == true) {
>   			v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
>   		}
>   	}
>   
>   	if (v->TotalActiveWriteback <= 1) {
> -		*WritebackUrgentWatermark = WritebackLatency;
> +		v->WritebackUrgentWatermark = v->WritebackLatency;
>   	} else {
> -		*WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> +		v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
>   	}
>   
>   	if (v->TotalActiveWriteback <= 1) {
> -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
>   	} else {
> -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
>   	}
>   
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>   		TotalPixelBW = TotalPixelBW
> -				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> -						/ (HTotal[k] / PixelClock[k]);
> +				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> +						/ (v->HTotal[k] / v->PixelClock[k]);
>   	}
>   
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>   		double EffectiveDETBufferSizeY = DETBufferSizeY[k];
>   
>   		v->LBLatencyHidingSourceLinesY = dml_min(
> -				(double) MaxLineBufferLines,
> -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> +				(double) v->MaxLineBufferLines,
> +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
>   
>   		v->LBLatencyHidingSourceLinesC = dml_min(
> -				(double) MaxLineBufferLines,
> -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> +				(double) v->MaxLineBufferLines,
> +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
>   
> -		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> +		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
>   
> -		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> +		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
>   
>   		if (UnboundedRequestEnabled) {
>   			EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> -					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> +					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
>   		}
>   
>   		LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
>   		if (BytePerPixelDETC[k] > 0) {
>   			LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
>   			LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> -			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> +			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
>   		} else {
>   			LinesInDETC = 0;
>   			FullDETBufferingTimeC = 999999;
>   		}
>   
>   		ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> -				- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> +				- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
>   
> -		if (NumberOfActivePlanes > 1) {
> +		if (v->NumberOfActivePlanes > 1) {
>   			ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> -					- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> +					- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
>   		}
>   
>   		if (BytePerPixelDETC[k] > 0) {
>   			ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> -					- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> +					- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
>   
> -			if (NumberOfActivePlanes > 1) {
> +			if (v->NumberOfActivePlanes > 1) {
>   				ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> -						- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> +						- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
>   			}
>   			v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
>   		} else {
>   			v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
>   		}
>   
> -		if (WritebackEnable[k] == true) {
> -			WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> -					/ (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> -			if (WritebackPixelFormat[k] == dm_444_64) {
> +		if (v->WritebackEnable[k] == true) {
> +			WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> +					/ (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> +			if (v->WritebackPixelFormat[k] == dm_444_64) {
>   				WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
>   			}
>   			WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   
>   	v->MinActiveDRAMClockChangeMargin = 999999;
>   	PlaneWithMinActiveDRAMClockChangeMargin = 0;
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>   		if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
>   			v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> -			if (BlendingAndTiming[k] == k) {
> +			if (v->BlendingAndTiming[k] == k) {
>   				PlaneWithMinActiveDRAMClockChangeMargin = k;
>   			} else {
> -				for (j = 0; j < NumberOfActivePlanes; ++j) {
> -					if (BlendingAndTiming[k] == j) {
> +				for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> +					if (v->BlendingAndTiming[k] == j) {
>   						PlaneWithMinActiveDRAMClockChangeMargin = j;
>   					}
>   				}
> @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   		}
>   	}
>   
> -	*MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> +	v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
>   
>   	SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> -		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> +		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
>   				&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
>   			SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
>   		}
> @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>   
>   	v->TotalNumberOfActiveOTG = 0;
>   
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> -		if (BlendingAndTiming[k] == k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> +		if (v->BlendingAndTiming[k] == k) {
>   			v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
>   		}
>   	}
>   
>   	if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
>   		*DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> -	} else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> +	} else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
>   			|| SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
>   		*DRAMClockChangeSupport = dm_dram_clock_change_vblank;
>   	} else {
>   		*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
>   	}
>   
> -	*StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> -	*StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> -	*Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> -	*Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> +	*StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> +	*StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> +	*Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> +	*Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
>   
>   #ifdef __DML_VBA_DEBUG__
>   	dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
>
> base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
  2022-09-16 22:04   ` Tom Rix
  (?)
@ 2022-09-16 22:16     ` Nathan Chancellor
  -1 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-16 22:16 UTC (permalink / raw)
  To: Tom Rix
  Cc: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
	Christian König, Pan, Xinhui, Nick Desaulniers, amd-gfx,
	dri-devel, llvm, patches, kernelci.org bot

On Fri, Sep 16, 2022 at 03:04:53PM -0700, Tom Rix wrote:
> 
> On 9/16/22 2:06 PM, Nathan Chancellor wrote:
> > Most of the arguments are identical between the two call sites and they
> > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > the total amount of stack space that
> > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> > 
> >    drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> >    void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> >         ^
> >    1 error generated.
> > 
> > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> 
> Nathan,
> 
> I like this change but I don't think it goes far enough.
> 
> There are many similar functions in this file and there other
> display_node_vba_*.c files that pass too many vba_vars_st elements.
> 
> I think most/all of the static functions should be refactored to pass
> vba_vars_st * or vba_vars_st **
> 
> fwiw, i found the calling function DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation,
> hilariously long :)
> 
> I'll do the change if you want to pass this to me, I promise not to add to
> the above function name.

Right, there is definitely more that could be done here; I just picked
the couple of functions that would appear to make the most impact, as I
am only concerned with keeping the code warning free with clang so that
-Werror does not break us. I think it makes sense to take this series to
fix the warnings right now (especially since this patch has technically
already been accepted, as it was applied to dcn31) then follow up with
refactoring, which I am more than happy to let you do if you so desire
:)

Thank you for the input as always!

Cheers,
Nathan

> > ---
> > 
> > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > applied to dml314.
> > 
> >   .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> >   1 file changed, 52 insertions(+), 196 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > index 2829f179f982..32ceb72f7a14 100644
> > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> >   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   		struct display_mode_lib *mode_lib,
> >   		unsigned int PrefetchMode,
> > -		unsigned int NumberOfActivePlanes,
> > -		unsigned int MaxLineBufferLines,
> > -		unsigned int LineBufferSize,
> > -		unsigned int WritebackInterfaceBufferSize,
> >   		double DCFCLK,
> >   		double ReturnBW,
> > -		bool SynchronizedVBlank,
> > -		unsigned int dpte_group_bytes[],
> > -		unsigned int MetaChunkSize,
> >   		double UrgentLatency,
> >   		double ExtraLatency,
> > -		double WritebackLatency,
> > -		double WritebackChunkSize,
> >   		double SOCCLK,
> > -		double DRAMClockChangeLatency,
> > -		double SRExitTime,
> > -		double SREnterPlusExitTime,
> > -		double SRExitZ8Time,
> > -		double SREnterPlusExitZ8Time,
> >   		double DCFCLKDeepSleep,
> >   		unsigned int DETBufferSizeY[],
> >   		unsigned int DETBufferSizeC[],
> >   		unsigned int SwathHeightY[],
> >   		unsigned int SwathHeightC[],
> > -		unsigned int LBBitPerPixel[],
> >   		double SwathWidthY[],
> >   		double SwathWidthC[],
> > -		double HRatio[],
> > -		double HRatioChroma[],
> > -		unsigned int vtaps[],
> > -		unsigned int VTAPsChroma[],
> > -		double VRatio[],
> > -		double VRatioChroma[],
> > -		unsigned int HTotal[],
> > -		double PixelClock[],
> > -		unsigned int BlendingAndTiming[],
> >   		unsigned int DPPPerPlane[],
> >   		double BytePerPixelDETY[],
> >   		double BytePerPixelDETC[],
> > -		double DSTXAfterScaler[],
> > -		double DSTYAfterScaler[],
> > -		bool WritebackEnable[],
> > -		enum source_format_class WritebackPixelFormat[],
> > -		double WritebackDestinationWidth[],
> > -		double WritebackDestinationHeight[],
> > -		double WritebackSourceHeight[],
> >   		bool UnboundedRequestEnabled,
> >   		unsigned int CompressedBufferSizeInkByte,
> >   		enum clock_change_support *DRAMClockChangeSupport,
> > -		double *UrgentWatermark,
> > -		double *WritebackUrgentWatermark,
> > -		double *DRAMClockChangeWatermark,
> > -		double *WritebackDRAMClockChangeWatermark,
> >   		double *StutterExitWatermark,
> >   		double *StutterEnterPlusExitWatermark,
> >   		double *Z8StutterExitWatermark,
> > -		double *Z8StutterEnterPlusExitWatermark,
> > -		double *MinActiveDRAMClockChangeLatencySupported);
> > +		double *Z8StutterEnterPlusExitWatermark);
> >   static void CalculateDCFCLKDeepSleep(
> >   		struct display_mode_lib *mode_lib,
> > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> >   		CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   				mode_lib,
> >   				PrefetchMode,
> > -				v->NumberOfActivePlanes,
> > -				v->MaxLineBufferLines,
> > -				v->LineBufferSize,
> > -				v->WritebackInterfaceBufferSize,
> >   				v->DCFCLK,
> >   				v->ReturnBW,
> > -				v->SynchronizedVBlank,
> > -				v->dpte_group_bytes,
> > -				v->MetaChunkSize,
> >   				v->UrgentLatency,
> >   				v->UrgentExtraLatency,
> > -				v->WritebackLatency,
> > -				v->WritebackChunkSize,
> >   				v->SOCCLK,
> > -				v->DRAMClockChangeLatency,
> > -				v->SRExitTime,
> > -				v->SREnterPlusExitTime,
> > -				v->SRExitZ8Time,
> > -				v->SREnterPlusExitZ8Time,
> >   				v->DCFCLKDeepSleep,
> >   				v->DETBufferSizeY,
> >   				v->DETBufferSizeC,
> >   				v->SwathHeightY,
> >   				v->SwathHeightC,
> > -				v->LBBitPerPixel,
> >   				v->SwathWidthY,
> >   				v->SwathWidthC,
> > -				v->HRatio,
> > -				v->HRatioChroma,
> > -				v->vtaps,
> > -				v->VTAPsChroma,
> > -				v->VRatio,
> > -				v->VRatioChroma,
> > -				v->HTotal,
> > -				v->PixelClock,
> > -				v->BlendingAndTiming,
> >   				v->DPPPerPlane,
> >   				v->BytePerPixelDETY,
> >   				v->BytePerPixelDETC,
> > -				v->DSTXAfterScaler,
> > -				v->DSTYAfterScaler,
> > -				v->WritebackEnable,
> > -				v->WritebackPixelFormat,
> > -				v->WritebackDestinationWidth,
> > -				v->WritebackDestinationHeight,
> > -				v->WritebackSourceHeight,
> >   				v->UnboundedRequestEnabled,
> >   				v->CompressedBufferSizeInkByte,
> >   				&DRAMClockChangeSupport,
> > -				&v->UrgentWatermark,
> > -				&v->WritebackUrgentWatermark,
> > -				&v->DRAMClockChangeWatermark,
> > -				&v->WritebackDRAMClockChangeWatermark,
> >   				&v->StutterExitWatermark,
> >   				&v->StutterEnterPlusExitWatermark,
> >   				&v->Z8StutterExitWatermark,
> > -				&v->Z8StutterEnterPlusExitWatermark,
> > -				&v->MinActiveDRAMClockChangeLatencySupported);
> > +				&v->Z8StutterEnterPlusExitWatermark);
> >   		for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   			if (v->WritebackEnable[k] == true) {
> > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >   			CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   					mode_lib,
> >   					v->PrefetchModePerState[i][j],
> > -					v->NumberOfActivePlanes,
> > -					v->MaxLineBufferLines,
> > -					v->LineBufferSize,
> > -					v->WritebackInterfaceBufferSize,
> >   					v->DCFCLKState[i][j],
> >   					v->ReturnBWPerState[i][j],
> > -					v->SynchronizedVBlank,
> > -					v->dpte_group_bytes,
> > -					v->MetaChunkSize,
> >   					v->UrgLatency[i],
> >   					v->ExtraLatency,
> > -					v->WritebackLatency,
> > -					v->WritebackChunkSize,
> >   					v->SOCCLKPerState[i],
> > -					v->DRAMClockChangeLatency,
> > -					v->SRExitTime,
> > -					v->SREnterPlusExitTime,
> > -					v->SRExitZ8Time,
> > -					v->SREnterPlusExitZ8Time,
> >   					v->ProjectedDCFCLKDeepSleep[i][j],
> >   					v->DETBufferSizeYThisState,
> >   					v->DETBufferSizeCThisState,
> >   					v->SwathHeightYThisState,
> >   					v->SwathHeightCThisState,
> > -					v->LBBitPerPixel,
> >   					v->SwathWidthYThisState,
> >   					v->SwathWidthCThisState,
> > -					v->HRatio,
> > -					v->HRatioChroma,
> > -					v->vtaps,
> > -					v->VTAPsChroma,
> > -					v->VRatio,
> > -					v->VRatioChroma,
> > -					v->HTotal,
> > -					v->PixelClock,
> > -					v->BlendingAndTiming,
> >   					v->NoOfDPPThisState,
> >   					v->BytePerPixelInDETY,
> >   					v->BytePerPixelInDETC,
> > -					v->DSTXAfterScaler,
> > -					v->DSTYAfterScaler,
> > -					v->WritebackEnable,
> > -					v->WritebackPixelFormat,
> > -					v->WritebackDestinationWidth,
> > -					v->WritebackDestinationHeight,
> > -					v->WritebackSourceHeight,
> >   					UnboundedRequestEnabledThisState,
> >   					CompressedBufferSizeInkByteThisState,
> >   					&v->DRAMClockChangeSupport[i][j],
> > -					&v->UrgentWatermark,
> > -					&v->WritebackUrgentWatermark,
> > -					&v->DRAMClockChangeWatermark,
> > -					&v->WritebackDRAMClockChangeWatermark,
> > -					&dummy,
> >   					&dummy,
> >   					&dummy,
> >   					&dummy,
> > -					&v->MinActiveDRAMClockChangeLatencySupported);
> > +					&dummy);
> >   		}
> >   	}
> > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   		struct display_mode_lib *mode_lib,
> >   		unsigned int PrefetchMode,
> > -		unsigned int NumberOfActivePlanes,
> > -		unsigned int MaxLineBufferLines,
> > -		unsigned int LineBufferSize,
> > -		unsigned int WritebackInterfaceBufferSize,
> >   		double DCFCLK,
> >   		double ReturnBW,
> > -		bool SynchronizedVBlank,
> > -		unsigned int dpte_group_bytes[],
> > -		unsigned int MetaChunkSize,
> >   		double UrgentLatency,
> >   		double ExtraLatency,
> > -		double WritebackLatency,
> > -		double WritebackChunkSize,
> >   		double SOCCLK,
> > -		double DRAMClockChangeLatency,
> > -		double SRExitTime,
> > -		double SREnterPlusExitTime,
> > -		double SRExitZ8Time,
> > -		double SREnterPlusExitZ8Time,
> >   		double DCFCLKDeepSleep,
> >   		unsigned int DETBufferSizeY[],
> >   		unsigned int DETBufferSizeC[],
> >   		unsigned int SwathHeightY[],
> >   		unsigned int SwathHeightC[],
> > -		unsigned int LBBitPerPixel[],
> >   		double SwathWidthY[],
> >   		double SwathWidthC[],
> > -		double HRatio[],
> > -		double HRatioChroma[],
> > -		unsigned int vtaps[],
> > -		unsigned int VTAPsChroma[],
> > -		double VRatio[],
> > -		double VRatioChroma[],
> > -		unsigned int HTotal[],
> > -		double PixelClock[],
> > -		unsigned int BlendingAndTiming[],
> >   		unsigned int DPPPerPlane[],
> >   		double BytePerPixelDETY[],
> >   		double BytePerPixelDETC[],
> > -		double DSTXAfterScaler[],
> > -		double DSTYAfterScaler[],
> > -		bool WritebackEnable[],
> > -		enum source_format_class WritebackPixelFormat[],
> > -		double WritebackDestinationWidth[],
> > -		double WritebackDestinationHeight[],
> > -		double WritebackSourceHeight[],
> >   		bool UnboundedRequestEnabled,
> >   		unsigned int CompressedBufferSizeInkByte,
> >   		enum clock_change_support *DRAMClockChangeSupport,
> > -		double *UrgentWatermark,
> > -		double *WritebackUrgentWatermark,
> > -		double *DRAMClockChangeWatermark,
> > -		double *WritebackDRAMClockChangeWatermark,
> >   		double *StutterExitWatermark,
> >   		double *StutterEnterPlusExitWatermark,
> >   		double *Z8StutterExitWatermark,
> > -		double *Z8StutterEnterPlusExitWatermark,
> > -		double *MinActiveDRAMClockChangeLatencySupported)
> > +		double *Z8StutterEnterPlusExitWatermark)
> >   {
> >   	struct vba_vars_st *v = &mode_lib->vba;
> >   	double EffectiveLBLatencyHidingY;
> > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   	double TotalPixelBW = 0.0;
> >   	int k, j;
> > -	*UrgentWatermark = UrgentLatency + ExtraLatency;
> > +	v->UrgentWatermark = UrgentLatency + ExtraLatency;
> >   #ifdef __DML_VBA_DEBUG__
> >   	dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> >   	dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > -	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > +	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> >   #endif
> > -	*DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > +	v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> >   #ifdef __DML_VBA_DEBUG__
> > -	dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > -	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > +	dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > +	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> >   #endif
> >   	v->TotalActiveWriteback = 0;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -		if (WritebackEnable[k] == true) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +		if (v->WritebackEnable[k] == true) {
> >   			v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> >   		}
> >   	}
> >   	if (v->TotalActiveWriteback <= 1) {
> > -		*WritebackUrgentWatermark = WritebackLatency;
> > +		v->WritebackUrgentWatermark = v->WritebackLatency;
> >   	} else {
> > -		*WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +		v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >   	}
> >   	if (v->TotalActiveWriteback <= 1) {
> > -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> >   	} else {
> > -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >   	}
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   		TotalPixelBW = TotalPixelBW
> > -				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > -						/ (HTotal[k] / PixelClock[k]);
> > +				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > +						/ (v->HTotal[k] / v->PixelClock[k]);
> >   	}
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   		double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> >   		v->LBLatencyHidingSourceLinesY = dml_min(
> > -				(double) MaxLineBufferLines,
> > -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > +				(double) v->MaxLineBufferLines,
> > +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> >   		v->LBLatencyHidingSourceLinesC = dml_min(
> > -				(double) MaxLineBufferLines,
> > -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > +				(double) v->MaxLineBufferLines,
> > +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> > -		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > +		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> > -		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > +		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> >   		if (UnboundedRequestEnabled) {
> >   			EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > -					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > +					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> >   		}
> >   		LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> >   		if (BytePerPixelDETC[k] > 0) {
> >   			LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> >   			LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > -			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > +			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> >   		} else {
> >   			LinesInDETC = 0;
> >   			FullDETBufferingTimeC = 999999;
> >   		}
> >   		ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > -				- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +				- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > -		if (NumberOfActivePlanes > 1) {
> > +		if (v->NumberOfActivePlanes > 1) {
> >   			ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > -					- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > +					- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> >   		}
> >   		if (BytePerPixelDETC[k] > 0) {
> >   			ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > -					- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +					- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > -			if (NumberOfActivePlanes > 1) {
> > +			if (v->NumberOfActivePlanes > 1) {
> >   				ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > -						- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > +						- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> >   			}
> >   			v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> >   		} else {
> >   			v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> >   		}
> > -		if (WritebackEnable[k] == true) {
> > -			WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > -					/ (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > -			if (WritebackPixelFormat[k] == dm_444_64) {
> > +		if (v->WritebackEnable[k] == true) {
> > +			WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > +					/ (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > +			if (v->WritebackPixelFormat[k] == dm_444_64) {
> >   				WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> >   			}
> >   			WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   	v->MinActiveDRAMClockChangeMargin = 999999;
> >   	PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   		if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> >   			v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > -			if (BlendingAndTiming[k] == k) {
> > +			if (v->BlendingAndTiming[k] == k) {
> >   				PlaneWithMinActiveDRAMClockChangeMargin = k;
> >   			} else {
> > -				for (j = 0; j < NumberOfActivePlanes; ++j) {
> > -					if (BlendingAndTiming[k] == j) {
> > +				for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > +					if (v->BlendingAndTiming[k] == j) {
> >   						PlaneWithMinActiveDRAMClockChangeMargin = j;
> >   					}
> >   				}
> > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   		}
> >   	}
> > -	*MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > +	v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> >   	SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> >   				&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> >   			SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> >   		}
> > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   	v->TotalNumberOfActiveOTG = 0;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -		if (BlendingAndTiming[k] == k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +		if (v->BlendingAndTiming[k] == k) {
> >   			v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> >   		}
> >   	}
> >   	if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> >   		*DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > -	} else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > +	} else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> >   			|| SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> >   		*DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> >   	} else {
> >   		*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> >   	}
> > -	*StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -	*StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > -	*Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -	*Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +	*StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +	*StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > +	*Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +	*Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> >   #ifdef __DML_VBA_DEBUG__
> >   	dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> > 
> > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105
> 
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-16 22:16     ` Nathan Chancellor
  0 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-16 22:16 UTC (permalink / raw)
  To: Tom Rix
  Cc: llvm, kernelci.org bot, Leo Li, Nick Desaulniers, Pan, Xinhui,
	Rodrigo Siqueira, patches, amd-gfx, dri-devel, Alex Deucher,
	Christian König

On Fri, Sep 16, 2022 at 03:04:53PM -0700, Tom Rix wrote:
> 
> On 9/16/22 2:06 PM, Nathan Chancellor wrote:
> > Most of the arguments are identical between the two call sites and they
> > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > the total amount of stack space that
> > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> > 
> >    drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> >    void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> >         ^
> >    1 error generated.
> > 
> > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> 
> Nathan,
> 
> I like this change but I don't think it goes far enough.
> 
> There are many similar functions in this file and there other
> display_node_vba_*.c files that pass too many vba_vars_st elements.
> 
> I think most/all of the static functions should be refactored to pass
> vba_vars_st * or vba_vars_st **
> 
> fwiw, i found the calling function DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation,
> hilariously long :)
> 
> I'll do the change if you want to pass this to me, I promise not to add to
> the above function name.

Right, there is definitely more that could be done here; I just picked
the couple of functions that would appear to make the most impact, as I
am only concerned with keeping the code warning free with clang so that
-Werror does not break us. I think it makes sense to take this series to
fix the warnings right now (especially since this patch has technically
already been accepted, as it was applied to dcn31) then follow up with
refactoring, which I am more than happy to let you do if you so desire
:)

Thank you for the input as always!

Cheers,
Nathan

> > ---
> > 
> > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > applied to dml314.
> > 
> >   .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> >   1 file changed, 52 insertions(+), 196 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > index 2829f179f982..32ceb72f7a14 100644
> > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> >   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   		struct display_mode_lib *mode_lib,
> >   		unsigned int PrefetchMode,
> > -		unsigned int NumberOfActivePlanes,
> > -		unsigned int MaxLineBufferLines,
> > -		unsigned int LineBufferSize,
> > -		unsigned int WritebackInterfaceBufferSize,
> >   		double DCFCLK,
> >   		double ReturnBW,
> > -		bool SynchronizedVBlank,
> > -		unsigned int dpte_group_bytes[],
> > -		unsigned int MetaChunkSize,
> >   		double UrgentLatency,
> >   		double ExtraLatency,
> > -		double WritebackLatency,
> > -		double WritebackChunkSize,
> >   		double SOCCLK,
> > -		double DRAMClockChangeLatency,
> > -		double SRExitTime,
> > -		double SREnterPlusExitTime,
> > -		double SRExitZ8Time,
> > -		double SREnterPlusExitZ8Time,
> >   		double DCFCLKDeepSleep,
> >   		unsigned int DETBufferSizeY[],
> >   		unsigned int DETBufferSizeC[],
> >   		unsigned int SwathHeightY[],
> >   		unsigned int SwathHeightC[],
> > -		unsigned int LBBitPerPixel[],
> >   		double SwathWidthY[],
> >   		double SwathWidthC[],
> > -		double HRatio[],
> > -		double HRatioChroma[],
> > -		unsigned int vtaps[],
> > -		unsigned int VTAPsChroma[],
> > -		double VRatio[],
> > -		double VRatioChroma[],
> > -		unsigned int HTotal[],
> > -		double PixelClock[],
> > -		unsigned int BlendingAndTiming[],
> >   		unsigned int DPPPerPlane[],
> >   		double BytePerPixelDETY[],
> >   		double BytePerPixelDETC[],
> > -		double DSTXAfterScaler[],
> > -		double DSTYAfterScaler[],
> > -		bool WritebackEnable[],
> > -		enum source_format_class WritebackPixelFormat[],
> > -		double WritebackDestinationWidth[],
> > -		double WritebackDestinationHeight[],
> > -		double WritebackSourceHeight[],
> >   		bool UnboundedRequestEnabled,
> >   		unsigned int CompressedBufferSizeInkByte,
> >   		enum clock_change_support *DRAMClockChangeSupport,
> > -		double *UrgentWatermark,
> > -		double *WritebackUrgentWatermark,
> > -		double *DRAMClockChangeWatermark,
> > -		double *WritebackDRAMClockChangeWatermark,
> >   		double *StutterExitWatermark,
> >   		double *StutterEnterPlusExitWatermark,
> >   		double *Z8StutterExitWatermark,
> > -		double *Z8StutterEnterPlusExitWatermark,
> > -		double *MinActiveDRAMClockChangeLatencySupported);
> > +		double *Z8StutterEnterPlusExitWatermark);
> >   static void CalculateDCFCLKDeepSleep(
> >   		struct display_mode_lib *mode_lib,
> > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> >   		CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   				mode_lib,
> >   				PrefetchMode,
> > -				v->NumberOfActivePlanes,
> > -				v->MaxLineBufferLines,
> > -				v->LineBufferSize,
> > -				v->WritebackInterfaceBufferSize,
> >   				v->DCFCLK,
> >   				v->ReturnBW,
> > -				v->SynchronizedVBlank,
> > -				v->dpte_group_bytes,
> > -				v->MetaChunkSize,
> >   				v->UrgentLatency,
> >   				v->UrgentExtraLatency,
> > -				v->WritebackLatency,
> > -				v->WritebackChunkSize,
> >   				v->SOCCLK,
> > -				v->DRAMClockChangeLatency,
> > -				v->SRExitTime,
> > -				v->SREnterPlusExitTime,
> > -				v->SRExitZ8Time,
> > -				v->SREnterPlusExitZ8Time,
> >   				v->DCFCLKDeepSleep,
> >   				v->DETBufferSizeY,
> >   				v->DETBufferSizeC,
> >   				v->SwathHeightY,
> >   				v->SwathHeightC,
> > -				v->LBBitPerPixel,
> >   				v->SwathWidthY,
> >   				v->SwathWidthC,
> > -				v->HRatio,
> > -				v->HRatioChroma,
> > -				v->vtaps,
> > -				v->VTAPsChroma,
> > -				v->VRatio,
> > -				v->VRatioChroma,
> > -				v->HTotal,
> > -				v->PixelClock,
> > -				v->BlendingAndTiming,
> >   				v->DPPPerPlane,
> >   				v->BytePerPixelDETY,
> >   				v->BytePerPixelDETC,
> > -				v->DSTXAfterScaler,
> > -				v->DSTYAfterScaler,
> > -				v->WritebackEnable,
> > -				v->WritebackPixelFormat,
> > -				v->WritebackDestinationWidth,
> > -				v->WritebackDestinationHeight,
> > -				v->WritebackSourceHeight,
> >   				v->UnboundedRequestEnabled,
> >   				v->CompressedBufferSizeInkByte,
> >   				&DRAMClockChangeSupport,
> > -				&v->UrgentWatermark,
> > -				&v->WritebackUrgentWatermark,
> > -				&v->DRAMClockChangeWatermark,
> > -				&v->WritebackDRAMClockChangeWatermark,
> >   				&v->StutterExitWatermark,
> >   				&v->StutterEnterPlusExitWatermark,
> >   				&v->Z8StutterExitWatermark,
> > -				&v->Z8StutterEnterPlusExitWatermark,
> > -				&v->MinActiveDRAMClockChangeLatencySupported);
> > +				&v->Z8StutterEnterPlusExitWatermark);
> >   		for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   			if (v->WritebackEnable[k] == true) {
> > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >   			CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   					mode_lib,
> >   					v->PrefetchModePerState[i][j],
> > -					v->NumberOfActivePlanes,
> > -					v->MaxLineBufferLines,
> > -					v->LineBufferSize,
> > -					v->WritebackInterfaceBufferSize,
> >   					v->DCFCLKState[i][j],
> >   					v->ReturnBWPerState[i][j],
> > -					v->SynchronizedVBlank,
> > -					v->dpte_group_bytes,
> > -					v->MetaChunkSize,
> >   					v->UrgLatency[i],
> >   					v->ExtraLatency,
> > -					v->WritebackLatency,
> > -					v->WritebackChunkSize,
> >   					v->SOCCLKPerState[i],
> > -					v->DRAMClockChangeLatency,
> > -					v->SRExitTime,
> > -					v->SREnterPlusExitTime,
> > -					v->SRExitZ8Time,
> > -					v->SREnterPlusExitZ8Time,
> >   					v->ProjectedDCFCLKDeepSleep[i][j],
> >   					v->DETBufferSizeYThisState,
> >   					v->DETBufferSizeCThisState,
> >   					v->SwathHeightYThisState,
> >   					v->SwathHeightCThisState,
> > -					v->LBBitPerPixel,
> >   					v->SwathWidthYThisState,
> >   					v->SwathWidthCThisState,
> > -					v->HRatio,
> > -					v->HRatioChroma,
> > -					v->vtaps,
> > -					v->VTAPsChroma,
> > -					v->VRatio,
> > -					v->VRatioChroma,
> > -					v->HTotal,
> > -					v->PixelClock,
> > -					v->BlendingAndTiming,
> >   					v->NoOfDPPThisState,
> >   					v->BytePerPixelInDETY,
> >   					v->BytePerPixelInDETC,
> > -					v->DSTXAfterScaler,
> > -					v->DSTYAfterScaler,
> > -					v->WritebackEnable,
> > -					v->WritebackPixelFormat,
> > -					v->WritebackDestinationWidth,
> > -					v->WritebackDestinationHeight,
> > -					v->WritebackSourceHeight,
> >   					UnboundedRequestEnabledThisState,
> >   					CompressedBufferSizeInkByteThisState,
> >   					&v->DRAMClockChangeSupport[i][j],
> > -					&v->UrgentWatermark,
> > -					&v->WritebackUrgentWatermark,
> > -					&v->DRAMClockChangeWatermark,
> > -					&v->WritebackDRAMClockChangeWatermark,
> > -					&dummy,
> >   					&dummy,
> >   					&dummy,
> >   					&dummy,
> > -					&v->MinActiveDRAMClockChangeLatencySupported);
> > +					&dummy);
> >   		}
> >   	}
> > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   		struct display_mode_lib *mode_lib,
> >   		unsigned int PrefetchMode,
> > -		unsigned int NumberOfActivePlanes,
> > -		unsigned int MaxLineBufferLines,
> > -		unsigned int LineBufferSize,
> > -		unsigned int WritebackInterfaceBufferSize,
> >   		double DCFCLK,
> >   		double ReturnBW,
> > -		bool SynchronizedVBlank,
> > -		unsigned int dpte_group_bytes[],
> > -		unsigned int MetaChunkSize,
> >   		double UrgentLatency,
> >   		double ExtraLatency,
> > -		double WritebackLatency,
> > -		double WritebackChunkSize,
> >   		double SOCCLK,
> > -		double DRAMClockChangeLatency,
> > -		double SRExitTime,
> > -		double SREnterPlusExitTime,
> > -		double SRExitZ8Time,
> > -		double SREnterPlusExitZ8Time,
> >   		double DCFCLKDeepSleep,
> >   		unsigned int DETBufferSizeY[],
> >   		unsigned int DETBufferSizeC[],
> >   		unsigned int SwathHeightY[],
> >   		unsigned int SwathHeightC[],
> > -		unsigned int LBBitPerPixel[],
> >   		double SwathWidthY[],
> >   		double SwathWidthC[],
> > -		double HRatio[],
> > -		double HRatioChroma[],
> > -		unsigned int vtaps[],
> > -		unsigned int VTAPsChroma[],
> > -		double VRatio[],
> > -		double VRatioChroma[],
> > -		unsigned int HTotal[],
> > -		double PixelClock[],
> > -		unsigned int BlendingAndTiming[],
> >   		unsigned int DPPPerPlane[],
> >   		double BytePerPixelDETY[],
> >   		double BytePerPixelDETC[],
> > -		double DSTXAfterScaler[],
> > -		double DSTYAfterScaler[],
> > -		bool WritebackEnable[],
> > -		enum source_format_class WritebackPixelFormat[],
> > -		double WritebackDestinationWidth[],
> > -		double WritebackDestinationHeight[],
> > -		double WritebackSourceHeight[],
> >   		bool UnboundedRequestEnabled,
> >   		unsigned int CompressedBufferSizeInkByte,
> >   		enum clock_change_support *DRAMClockChangeSupport,
> > -		double *UrgentWatermark,
> > -		double *WritebackUrgentWatermark,
> > -		double *DRAMClockChangeWatermark,
> > -		double *WritebackDRAMClockChangeWatermark,
> >   		double *StutterExitWatermark,
> >   		double *StutterEnterPlusExitWatermark,
> >   		double *Z8StutterExitWatermark,
> > -		double *Z8StutterEnterPlusExitWatermark,
> > -		double *MinActiveDRAMClockChangeLatencySupported)
> > +		double *Z8StutterEnterPlusExitWatermark)
> >   {
> >   	struct vba_vars_st *v = &mode_lib->vba;
> >   	double EffectiveLBLatencyHidingY;
> > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   	double TotalPixelBW = 0.0;
> >   	int k, j;
> > -	*UrgentWatermark = UrgentLatency + ExtraLatency;
> > +	v->UrgentWatermark = UrgentLatency + ExtraLatency;
> >   #ifdef __DML_VBA_DEBUG__
> >   	dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> >   	dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > -	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > +	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> >   #endif
> > -	*DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > +	v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> >   #ifdef __DML_VBA_DEBUG__
> > -	dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > -	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > +	dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > +	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> >   #endif
> >   	v->TotalActiveWriteback = 0;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -		if (WritebackEnable[k] == true) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +		if (v->WritebackEnable[k] == true) {
> >   			v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> >   		}
> >   	}
> >   	if (v->TotalActiveWriteback <= 1) {
> > -		*WritebackUrgentWatermark = WritebackLatency;
> > +		v->WritebackUrgentWatermark = v->WritebackLatency;
> >   	} else {
> > -		*WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +		v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >   	}
> >   	if (v->TotalActiveWriteback <= 1) {
> > -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> >   	} else {
> > -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >   	}
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   		TotalPixelBW = TotalPixelBW
> > -				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > -						/ (HTotal[k] / PixelClock[k]);
> > +				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > +						/ (v->HTotal[k] / v->PixelClock[k]);
> >   	}
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   		double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> >   		v->LBLatencyHidingSourceLinesY = dml_min(
> > -				(double) MaxLineBufferLines,
> > -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > +				(double) v->MaxLineBufferLines,
> > +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> >   		v->LBLatencyHidingSourceLinesC = dml_min(
> > -				(double) MaxLineBufferLines,
> > -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > +				(double) v->MaxLineBufferLines,
> > +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> > -		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > +		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> > -		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > +		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> >   		if (UnboundedRequestEnabled) {
> >   			EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > -					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > +					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> >   		}
> >   		LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> >   		if (BytePerPixelDETC[k] > 0) {
> >   			LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> >   			LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > -			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > +			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> >   		} else {
> >   			LinesInDETC = 0;
> >   			FullDETBufferingTimeC = 999999;
> >   		}
> >   		ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > -				- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +				- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > -		if (NumberOfActivePlanes > 1) {
> > +		if (v->NumberOfActivePlanes > 1) {
> >   			ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > -					- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > +					- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> >   		}
> >   		if (BytePerPixelDETC[k] > 0) {
> >   			ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > -					- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +					- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > -			if (NumberOfActivePlanes > 1) {
> > +			if (v->NumberOfActivePlanes > 1) {
> >   				ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > -						- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > +						- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> >   			}
> >   			v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> >   		} else {
> >   			v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> >   		}
> > -		if (WritebackEnable[k] == true) {
> > -			WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > -					/ (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > -			if (WritebackPixelFormat[k] == dm_444_64) {
> > +		if (v->WritebackEnable[k] == true) {
> > +			WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > +					/ (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > +			if (v->WritebackPixelFormat[k] == dm_444_64) {
> >   				WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> >   			}
> >   			WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   	v->MinActiveDRAMClockChangeMargin = 999999;
> >   	PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   		if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> >   			v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > -			if (BlendingAndTiming[k] == k) {
> > +			if (v->BlendingAndTiming[k] == k) {
> >   				PlaneWithMinActiveDRAMClockChangeMargin = k;
> >   			} else {
> > -				for (j = 0; j < NumberOfActivePlanes; ++j) {
> > -					if (BlendingAndTiming[k] == j) {
> > +				for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > +					if (v->BlendingAndTiming[k] == j) {
> >   						PlaneWithMinActiveDRAMClockChangeMargin = j;
> >   					}
> >   				}
> > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   		}
> >   	}
> > -	*MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > +	v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> >   	SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> >   				&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> >   			SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> >   		}
> > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   	v->TotalNumberOfActiveOTG = 0;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -		if (BlendingAndTiming[k] == k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +		if (v->BlendingAndTiming[k] == k) {
> >   			v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> >   		}
> >   	}
> >   	if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> >   		*DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > -	} else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > +	} else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> >   			|| SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> >   		*DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> >   	} else {
> >   		*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> >   	}
> > -	*StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -	*StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > -	*Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -	*Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +	*StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +	*StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > +	*Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +	*Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> >   #ifdef __DML_VBA_DEBUG__
> >   	dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> > 
> > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105
> 
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-16 22:16     ` Nathan Chancellor
  0 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-16 22:16 UTC (permalink / raw)
  To: Tom Rix
  Cc: llvm, kernelci.org bot, Leo Li, Nick Desaulniers, Pan, Xinhui,
	Rodrigo Siqueira, patches, amd-gfx, dri-devel, Alex Deucher,
	Harry Wentland, Christian König

On Fri, Sep 16, 2022 at 03:04:53PM -0700, Tom Rix wrote:
> 
> On 9/16/22 2:06 PM, Nathan Chancellor wrote:
> > Most of the arguments are identical between the two call sites and they
> > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > the total amount of stack space that
> > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> > 
> >    drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> >    void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> >         ^
> >    1 error generated.
> > 
> > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> 
> Nathan,
> 
> I like this change but I don't think it goes far enough.
> 
> There are many similar functions in this file and there other
> display_node_vba_*.c files that pass too many vba_vars_st elements.
> 
> I think most/all of the static functions should be refactored to pass
> vba_vars_st * or vba_vars_st **
> 
> fwiw, i found the calling function DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation,
> hilariously long :)
> 
> I'll do the change if you want to pass this to me, I promise not to add to
> the above function name.

Right, there is definitely more that could be done here; I just picked
the couple of functions that would appear to make the most impact, as I
am only concerned with keeping the code warning free with clang so that
-Werror does not break us. I think it makes sense to take this series to
fix the warnings right now (especially since this patch has technically
already been accepted, as it was applied to dcn31) then follow up with
refactoring, which I am more than happy to let you do if you so desire
:)

Thank you for the input as always!

Cheers,
Nathan

> > ---
> > 
> > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > applied to dml314.
> > 
> >   .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> >   1 file changed, 52 insertions(+), 196 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > index 2829f179f982..32ceb72f7a14 100644
> > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> >   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   		struct display_mode_lib *mode_lib,
> >   		unsigned int PrefetchMode,
> > -		unsigned int NumberOfActivePlanes,
> > -		unsigned int MaxLineBufferLines,
> > -		unsigned int LineBufferSize,
> > -		unsigned int WritebackInterfaceBufferSize,
> >   		double DCFCLK,
> >   		double ReturnBW,
> > -		bool SynchronizedVBlank,
> > -		unsigned int dpte_group_bytes[],
> > -		unsigned int MetaChunkSize,
> >   		double UrgentLatency,
> >   		double ExtraLatency,
> > -		double WritebackLatency,
> > -		double WritebackChunkSize,
> >   		double SOCCLK,
> > -		double DRAMClockChangeLatency,
> > -		double SRExitTime,
> > -		double SREnterPlusExitTime,
> > -		double SRExitZ8Time,
> > -		double SREnterPlusExitZ8Time,
> >   		double DCFCLKDeepSleep,
> >   		unsigned int DETBufferSizeY[],
> >   		unsigned int DETBufferSizeC[],
> >   		unsigned int SwathHeightY[],
> >   		unsigned int SwathHeightC[],
> > -		unsigned int LBBitPerPixel[],
> >   		double SwathWidthY[],
> >   		double SwathWidthC[],
> > -		double HRatio[],
> > -		double HRatioChroma[],
> > -		unsigned int vtaps[],
> > -		unsigned int VTAPsChroma[],
> > -		double VRatio[],
> > -		double VRatioChroma[],
> > -		unsigned int HTotal[],
> > -		double PixelClock[],
> > -		unsigned int BlendingAndTiming[],
> >   		unsigned int DPPPerPlane[],
> >   		double BytePerPixelDETY[],
> >   		double BytePerPixelDETC[],
> > -		double DSTXAfterScaler[],
> > -		double DSTYAfterScaler[],
> > -		bool WritebackEnable[],
> > -		enum source_format_class WritebackPixelFormat[],
> > -		double WritebackDestinationWidth[],
> > -		double WritebackDestinationHeight[],
> > -		double WritebackSourceHeight[],
> >   		bool UnboundedRequestEnabled,
> >   		unsigned int CompressedBufferSizeInkByte,
> >   		enum clock_change_support *DRAMClockChangeSupport,
> > -		double *UrgentWatermark,
> > -		double *WritebackUrgentWatermark,
> > -		double *DRAMClockChangeWatermark,
> > -		double *WritebackDRAMClockChangeWatermark,
> >   		double *StutterExitWatermark,
> >   		double *StutterEnterPlusExitWatermark,
> >   		double *Z8StutterExitWatermark,
> > -		double *Z8StutterEnterPlusExitWatermark,
> > -		double *MinActiveDRAMClockChangeLatencySupported);
> > +		double *Z8StutterEnterPlusExitWatermark);
> >   static void CalculateDCFCLKDeepSleep(
> >   		struct display_mode_lib *mode_lib,
> > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> >   		CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   				mode_lib,
> >   				PrefetchMode,
> > -				v->NumberOfActivePlanes,
> > -				v->MaxLineBufferLines,
> > -				v->LineBufferSize,
> > -				v->WritebackInterfaceBufferSize,
> >   				v->DCFCLK,
> >   				v->ReturnBW,
> > -				v->SynchronizedVBlank,
> > -				v->dpte_group_bytes,
> > -				v->MetaChunkSize,
> >   				v->UrgentLatency,
> >   				v->UrgentExtraLatency,
> > -				v->WritebackLatency,
> > -				v->WritebackChunkSize,
> >   				v->SOCCLK,
> > -				v->DRAMClockChangeLatency,
> > -				v->SRExitTime,
> > -				v->SREnterPlusExitTime,
> > -				v->SRExitZ8Time,
> > -				v->SREnterPlusExitZ8Time,
> >   				v->DCFCLKDeepSleep,
> >   				v->DETBufferSizeY,
> >   				v->DETBufferSizeC,
> >   				v->SwathHeightY,
> >   				v->SwathHeightC,
> > -				v->LBBitPerPixel,
> >   				v->SwathWidthY,
> >   				v->SwathWidthC,
> > -				v->HRatio,
> > -				v->HRatioChroma,
> > -				v->vtaps,
> > -				v->VTAPsChroma,
> > -				v->VRatio,
> > -				v->VRatioChroma,
> > -				v->HTotal,
> > -				v->PixelClock,
> > -				v->BlendingAndTiming,
> >   				v->DPPPerPlane,
> >   				v->BytePerPixelDETY,
> >   				v->BytePerPixelDETC,
> > -				v->DSTXAfterScaler,
> > -				v->DSTYAfterScaler,
> > -				v->WritebackEnable,
> > -				v->WritebackPixelFormat,
> > -				v->WritebackDestinationWidth,
> > -				v->WritebackDestinationHeight,
> > -				v->WritebackSourceHeight,
> >   				v->UnboundedRequestEnabled,
> >   				v->CompressedBufferSizeInkByte,
> >   				&DRAMClockChangeSupport,
> > -				&v->UrgentWatermark,
> > -				&v->WritebackUrgentWatermark,
> > -				&v->DRAMClockChangeWatermark,
> > -				&v->WritebackDRAMClockChangeWatermark,
> >   				&v->StutterExitWatermark,
> >   				&v->StutterEnterPlusExitWatermark,
> >   				&v->Z8StutterExitWatermark,
> > -				&v->Z8StutterEnterPlusExitWatermark,
> > -				&v->MinActiveDRAMClockChangeLatencySupported);
> > +				&v->Z8StutterEnterPlusExitWatermark);
> >   		for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   			if (v->WritebackEnable[k] == true) {
> > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >   			CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   					mode_lib,
> >   					v->PrefetchModePerState[i][j],
> > -					v->NumberOfActivePlanes,
> > -					v->MaxLineBufferLines,
> > -					v->LineBufferSize,
> > -					v->WritebackInterfaceBufferSize,
> >   					v->DCFCLKState[i][j],
> >   					v->ReturnBWPerState[i][j],
> > -					v->SynchronizedVBlank,
> > -					v->dpte_group_bytes,
> > -					v->MetaChunkSize,
> >   					v->UrgLatency[i],
> >   					v->ExtraLatency,
> > -					v->WritebackLatency,
> > -					v->WritebackChunkSize,
> >   					v->SOCCLKPerState[i],
> > -					v->DRAMClockChangeLatency,
> > -					v->SRExitTime,
> > -					v->SREnterPlusExitTime,
> > -					v->SRExitZ8Time,
> > -					v->SREnterPlusExitZ8Time,
> >   					v->ProjectedDCFCLKDeepSleep[i][j],
> >   					v->DETBufferSizeYThisState,
> >   					v->DETBufferSizeCThisState,
> >   					v->SwathHeightYThisState,
> >   					v->SwathHeightCThisState,
> > -					v->LBBitPerPixel,
> >   					v->SwathWidthYThisState,
> >   					v->SwathWidthCThisState,
> > -					v->HRatio,
> > -					v->HRatioChroma,
> > -					v->vtaps,
> > -					v->VTAPsChroma,
> > -					v->VRatio,
> > -					v->VRatioChroma,
> > -					v->HTotal,
> > -					v->PixelClock,
> > -					v->BlendingAndTiming,
> >   					v->NoOfDPPThisState,
> >   					v->BytePerPixelInDETY,
> >   					v->BytePerPixelInDETC,
> > -					v->DSTXAfterScaler,
> > -					v->DSTYAfterScaler,
> > -					v->WritebackEnable,
> > -					v->WritebackPixelFormat,
> > -					v->WritebackDestinationWidth,
> > -					v->WritebackDestinationHeight,
> > -					v->WritebackSourceHeight,
> >   					UnboundedRequestEnabledThisState,
> >   					CompressedBufferSizeInkByteThisState,
> >   					&v->DRAMClockChangeSupport[i][j],
> > -					&v->UrgentWatermark,
> > -					&v->WritebackUrgentWatermark,
> > -					&v->DRAMClockChangeWatermark,
> > -					&v->WritebackDRAMClockChangeWatermark,
> > -					&dummy,
> >   					&dummy,
> >   					&dummy,
> >   					&dummy,
> > -					&v->MinActiveDRAMClockChangeLatencySupported);
> > +					&dummy);
> >   		}
> >   	}
> > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >   static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   		struct display_mode_lib *mode_lib,
> >   		unsigned int PrefetchMode,
> > -		unsigned int NumberOfActivePlanes,
> > -		unsigned int MaxLineBufferLines,
> > -		unsigned int LineBufferSize,
> > -		unsigned int WritebackInterfaceBufferSize,
> >   		double DCFCLK,
> >   		double ReturnBW,
> > -		bool SynchronizedVBlank,
> > -		unsigned int dpte_group_bytes[],
> > -		unsigned int MetaChunkSize,
> >   		double UrgentLatency,
> >   		double ExtraLatency,
> > -		double WritebackLatency,
> > -		double WritebackChunkSize,
> >   		double SOCCLK,
> > -		double DRAMClockChangeLatency,
> > -		double SRExitTime,
> > -		double SREnterPlusExitTime,
> > -		double SRExitZ8Time,
> > -		double SREnterPlusExitZ8Time,
> >   		double DCFCLKDeepSleep,
> >   		unsigned int DETBufferSizeY[],
> >   		unsigned int DETBufferSizeC[],
> >   		unsigned int SwathHeightY[],
> >   		unsigned int SwathHeightC[],
> > -		unsigned int LBBitPerPixel[],
> >   		double SwathWidthY[],
> >   		double SwathWidthC[],
> > -		double HRatio[],
> > -		double HRatioChroma[],
> > -		unsigned int vtaps[],
> > -		unsigned int VTAPsChroma[],
> > -		double VRatio[],
> > -		double VRatioChroma[],
> > -		unsigned int HTotal[],
> > -		double PixelClock[],
> > -		unsigned int BlendingAndTiming[],
> >   		unsigned int DPPPerPlane[],
> >   		double BytePerPixelDETY[],
> >   		double BytePerPixelDETC[],
> > -		double DSTXAfterScaler[],
> > -		double DSTYAfterScaler[],
> > -		bool WritebackEnable[],
> > -		enum source_format_class WritebackPixelFormat[],
> > -		double WritebackDestinationWidth[],
> > -		double WritebackDestinationHeight[],
> > -		double WritebackSourceHeight[],
> >   		bool UnboundedRequestEnabled,
> >   		unsigned int CompressedBufferSizeInkByte,
> >   		enum clock_change_support *DRAMClockChangeSupport,
> > -		double *UrgentWatermark,
> > -		double *WritebackUrgentWatermark,
> > -		double *DRAMClockChangeWatermark,
> > -		double *WritebackDRAMClockChangeWatermark,
> >   		double *StutterExitWatermark,
> >   		double *StutterEnterPlusExitWatermark,
> >   		double *Z8StutterExitWatermark,
> > -		double *Z8StutterEnterPlusExitWatermark,
> > -		double *MinActiveDRAMClockChangeLatencySupported)
> > +		double *Z8StutterEnterPlusExitWatermark)
> >   {
> >   	struct vba_vars_st *v = &mode_lib->vba;
> >   	double EffectiveLBLatencyHidingY;
> > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   	double TotalPixelBW = 0.0;
> >   	int k, j;
> > -	*UrgentWatermark = UrgentLatency + ExtraLatency;
> > +	v->UrgentWatermark = UrgentLatency + ExtraLatency;
> >   #ifdef __DML_VBA_DEBUG__
> >   	dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> >   	dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > -	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > +	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> >   #endif
> > -	*DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > +	v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> >   #ifdef __DML_VBA_DEBUG__
> > -	dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > -	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > +	dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > +	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> >   #endif
> >   	v->TotalActiveWriteback = 0;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -		if (WritebackEnable[k] == true) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +		if (v->WritebackEnable[k] == true) {
> >   			v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> >   		}
> >   	}
> >   	if (v->TotalActiveWriteback <= 1) {
> > -		*WritebackUrgentWatermark = WritebackLatency;
> > +		v->WritebackUrgentWatermark = v->WritebackLatency;
> >   	} else {
> > -		*WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +		v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >   	}
> >   	if (v->TotalActiveWriteback <= 1) {
> > -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> >   	} else {
> > -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >   	}
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   		TotalPixelBW = TotalPixelBW
> > -				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > -						/ (HTotal[k] / PixelClock[k]);
> > +				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > +						/ (v->HTotal[k] / v->PixelClock[k]);
> >   	}
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   		double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> >   		v->LBLatencyHidingSourceLinesY = dml_min(
> > -				(double) MaxLineBufferLines,
> > -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > +				(double) v->MaxLineBufferLines,
> > +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> >   		v->LBLatencyHidingSourceLinesC = dml_min(
> > -				(double) MaxLineBufferLines,
> > -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > +				(double) v->MaxLineBufferLines,
> > +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> > -		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > +		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> > -		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > +		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> >   		if (UnboundedRequestEnabled) {
> >   			EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > -					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > +					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> >   		}
> >   		LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> >   		if (BytePerPixelDETC[k] > 0) {
> >   			LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> >   			LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > -			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > +			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> >   		} else {
> >   			LinesInDETC = 0;
> >   			FullDETBufferingTimeC = 999999;
> >   		}
> >   		ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > -				- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +				- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > -		if (NumberOfActivePlanes > 1) {
> > +		if (v->NumberOfActivePlanes > 1) {
> >   			ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > -					- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > +					- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> >   		}
> >   		if (BytePerPixelDETC[k] > 0) {
> >   			ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > -					- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +					- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > -			if (NumberOfActivePlanes > 1) {
> > +			if (v->NumberOfActivePlanes > 1) {
> >   				ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > -						- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > +						- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> >   			}
> >   			v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> >   		} else {
> >   			v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> >   		}
> > -		if (WritebackEnable[k] == true) {
> > -			WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > -					/ (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > -			if (WritebackPixelFormat[k] == dm_444_64) {
> > +		if (v->WritebackEnable[k] == true) {
> > +			WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > +					/ (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > +			if (v->WritebackPixelFormat[k] == dm_444_64) {
> >   				WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> >   			}
> >   			WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   	v->MinActiveDRAMClockChangeMargin = 999999;
> >   	PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >   		if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> >   			v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > -			if (BlendingAndTiming[k] == k) {
> > +			if (v->BlendingAndTiming[k] == k) {
> >   				PlaneWithMinActiveDRAMClockChangeMargin = k;
> >   			} else {
> > -				for (j = 0; j < NumberOfActivePlanes; ++j) {
> > -					if (BlendingAndTiming[k] == j) {
> > +				for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > +					if (v->BlendingAndTiming[k] == j) {
> >   						PlaneWithMinActiveDRAMClockChangeMargin = j;
> >   					}
> >   				}
> > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   		}
> >   	}
> > -	*MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > +	v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> >   	SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> >   				&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> >   			SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> >   		}
> > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >   	v->TotalNumberOfActiveOTG = 0;
> > -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -		if (BlendingAndTiming[k] == k) {
> > +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +		if (v->BlendingAndTiming[k] == k) {
> >   			v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> >   		}
> >   	}
> >   	if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> >   		*DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > -	} else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > +	} else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> >   			|| SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> >   		*DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> >   	} else {
> >   		*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> >   	}
> > -	*StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -	*StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > -	*Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -	*Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +	*StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +	*StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > +	*Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +	*Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> >   #ifdef __DML_VBA_DEBUG__
> >   	dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> > 
> > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105
> 
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
  2022-09-16 21:06 ` Nathan Chancellor
                   ` (2 preceding siblings ...)
  (?)
@ 2022-09-17 12:38 ` Maíra Canal
  2022-09-20 16:06     ` Alex Deucher
  -1 siblings, 1 reply; 19+ messages in thread
From: Maíra Canal @ 2022-09-17 12:38 UTC (permalink / raw)
  To: Nathan Chancellor, Harry Wentland, Leo Li, Rodrigo Siqueira,
	Alex Deucher, Christian König, Pan, Xinhui
  Cc: kernelci.org bot, Tom Rix, llvm, Nick Desaulniers, patches,
	dri-devel, amd-gfx

Hi Nathan,

On 9/16/22 18:06, Nathan Chancellor wrote:
> Most of the arguments are identical between the two call sites and they
> can be accessed through the 'struct vba_vars_st' pointer. This reduces
> the total amount of stack space that
> dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> 
>   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
>   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
>        ^
>   1 error generated.
> 
> Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> Reported-by: "kernelci.org bot" <bot@kernelci.org>
> Signed-off-by: Nathan Chancellor <nathan@kernel.org>

I have built-tested the whole series with clang 14.0.5 (Fedora
14.0.5-1.fc36), using:

$ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
drivers/gpu/drm/amd/amdgpu/

Another great patch to the DML! As Tom, I also would like to see this
expand to all display_mode_vba files, but so far this is great to
unbreak the build.

To the whole series:

Tested-by: Maíra Canal <mairacanal@riseup.net>

Best Regards,
- Maíra Canal

> ---
> 
> This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> applied to dml314.
> 
>  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
>  1 file changed, 52 insertions(+), 196 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> index 2829f179f982..32ceb72f7a14 100644
> --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
>  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>  		struct display_mode_lib *mode_lib,
>  		unsigned int PrefetchMode,
> -		unsigned int NumberOfActivePlanes,
> -		unsigned int MaxLineBufferLines,
> -		unsigned int LineBufferSize,
> -		unsigned int WritebackInterfaceBufferSize,
>  		double DCFCLK,
>  		double ReturnBW,
> -		bool SynchronizedVBlank,
> -		unsigned int dpte_group_bytes[],
> -		unsigned int MetaChunkSize,
>  		double UrgentLatency,
>  		double ExtraLatency,
> -		double WritebackLatency,
> -		double WritebackChunkSize,
>  		double SOCCLK,
> -		double DRAMClockChangeLatency,
> -		double SRExitTime,
> -		double SREnterPlusExitTime,
> -		double SRExitZ8Time,
> -		double SREnterPlusExitZ8Time,
>  		double DCFCLKDeepSleep,
>  		unsigned int DETBufferSizeY[],
>  		unsigned int DETBufferSizeC[],
>  		unsigned int SwathHeightY[],
>  		unsigned int SwathHeightC[],
> -		unsigned int LBBitPerPixel[],
>  		double SwathWidthY[],
>  		double SwathWidthC[],
> -		double HRatio[],
> -		double HRatioChroma[],
> -		unsigned int vtaps[],
> -		unsigned int VTAPsChroma[],
> -		double VRatio[],
> -		double VRatioChroma[],
> -		unsigned int HTotal[],
> -		double PixelClock[],
> -		unsigned int BlendingAndTiming[],
>  		unsigned int DPPPerPlane[],
>  		double BytePerPixelDETY[],
>  		double BytePerPixelDETC[],
> -		double DSTXAfterScaler[],
> -		double DSTYAfterScaler[],
> -		bool WritebackEnable[],
> -		enum source_format_class WritebackPixelFormat[],
> -		double WritebackDestinationWidth[],
> -		double WritebackDestinationHeight[],
> -		double WritebackSourceHeight[],
>  		bool UnboundedRequestEnabled,
>  		unsigned int CompressedBufferSizeInkByte,
>  		enum clock_change_support *DRAMClockChangeSupport,
> -		double *UrgentWatermark,
> -		double *WritebackUrgentWatermark,
> -		double *DRAMClockChangeWatermark,
> -		double *WritebackDRAMClockChangeWatermark,
>  		double *StutterExitWatermark,
>  		double *StutterEnterPlusExitWatermark,
>  		double *Z8StutterExitWatermark,
> -		double *Z8StutterEnterPlusExitWatermark,
> -		double *MinActiveDRAMClockChangeLatencySupported);
> +		double *Z8StutterEnterPlusExitWatermark);
>  
>  static void CalculateDCFCLKDeepSleep(
>  		struct display_mode_lib *mode_lib,
> @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
>  		CalculateWatermarksAndDRAMSpeedChangeSupport(
>  				mode_lib,
>  				PrefetchMode,
> -				v->NumberOfActivePlanes,
> -				v->MaxLineBufferLines,
> -				v->LineBufferSize,
> -				v->WritebackInterfaceBufferSize,
>  				v->DCFCLK,
>  				v->ReturnBW,
> -				v->SynchronizedVBlank,
> -				v->dpte_group_bytes,
> -				v->MetaChunkSize,
>  				v->UrgentLatency,
>  				v->UrgentExtraLatency,
> -				v->WritebackLatency,
> -				v->WritebackChunkSize,
>  				v->SOCCLK,
> -				v->DRAMClockChangeLatency,
> -				v->SRExitTime,
> -				v->SREnterPlusExitTime,
> -				v->SRExitZ8Time,
> -				v->SREnterPlusExitZ8Time,
>  				v->DCFCLKDeepSleep,
>  				v->DETBufferSizeY,
>  				v->DETBufferSizeC,
>  				v->SwathHeightY,
>  				v->SwathHeightC,
> -				v->LBBitPerPixel,
>  				v->SwathWidthY,
>  				v->SwathWidthC,
> -				v->HRatio,
> -				v->HRatioChroma,
> -				v->vtaps,
> -				v->VTAPsChroma,
> -				v->VRatio,
> -				v->VRatioChroma,
> -				v->HTotal,
> -				v->PixelClock,
> -				v->BlendingAndTiming,
>  				v->DPPPerPlane,
>  				v->BytePerPixelDETY,
>  				v->BytePerPixelDETC,
> -				v->DSTXAfterScaler,
> -				v->DSTYAfterScaler,
> -				v->WritebackEnable,
> -				v->WritebackPixelFormat,
> -				v->WritebackDestinationWidth,
> -				v->WritebackDestinationHeight,
> -				v->WritebackSourceHeight,
>  				v->UnboundedRequestEnabled,
>  				v->CompressedBufferSizeInkByte,
>  				&DRAMClockChangeSupport,
> -				&v->UrgentWatermark,
> -				&v->WritebackUrgentWatermark,
> -				&v->DRAMClockChangeWatermark,
> -				&v->WritebackDRAMClockChangeWatermark,
>  				&v->StutterExitWatermark,
>  				&v->StutterEnterPlusExitWatermark,
>  				&v->Z8StutterExitWatermark,
> -				&v->Z8StutterEnterPlusExitWatermark,
> -				&v->MinActiveDRAMClockChangeLatencySupported);
> +				&v->Z8StutterEnterPlusExitWatermark);
>  
>  		for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>  			if (v->WritebackEnable[k] == true) {
> @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
>  			CalculateWatermarksAndDRAMSpeedChangeSupport(
>  					mode_lib,
>  					v->PrefetchModePerState[i][j],
> -					v->NumberOfActivePlanes,
> -					v->MaxLineBufferLines,
> -					v->LineBufferSize,
> -					v->WritebackInterfaceBufferSize,
>  					v->DCFCLKState[i][j],
>  					v->ReturnBWPerState[i][j],
> -					v->SynchronizedVBlank,
> -					v->dpte_group_bytes,
> -					v->MetaChunkSize,
>  					v->UrgLatency[i],
>  					v->ExtraLatency,
> -					v->WritebackLatency,
> -					v->WritebackChunkSize,
>  					v->SOCCLKPerState[i],
> -					v->DRAMClockChangeLatency,
> -					v->SRExitTime,
> -					v->SREnterPlusExitTime,
> -					v->SRExitZ8Time,
> -					v->SREnterPlusExitZ8Time,
>  					v->ProjectedDCFCLKDeepSleep[i][j],
>  					v->DETBufferSizeYThisState,
>  					v->DETBufferSizeCThisState,
>  					v->SwathHeightYThisState,
>  					v->SwathHeightCThisState,
> -					v->LBBitPerPixel,
>  					v->SwathWidthYThisState,
>  					v->SwathWidthCThisState,
> -					v->HRatio,
> -					v->HRatioChroma,
> -					v->vtaps,
> -					v->VTAPsChroma,
> -					v->VRatio,
> -					v->VRatioChroma,
> -					v->HTotal,
> -					v->PixelClock,
> -					v->BlendingAndTiming,
>  					v->NoOfDPPThisState,
>  					v->BytePerPixelInDETY,
>  					v->BytePerPixelInDETC,
> -					v->DSTXAfterScaler,
> -					v->DSTYAfterScaler,
> -					v->WritebackEnable,
> -					v->WritebackPixelFormat,
> -					v->WritebackDestinationWidth,
> -					v->WritebackDestinationHeight,
> -					v->WritebackSourceHeight,
>  					UnboundedRequestEnabledThisState,
>  					CompressedBufferSizeInkByteThisState,
>  					&v->DRAMClockChangeSupport[i][j],
> -					&v->UrgentWatermark,
> -					&v->WritebackUrgentWatermark,
> -					&v->DRAMClockChangeWatermark,
> -					&v->WritebackDRAMClockChangeWatermark,
> -					&dummy,
>  					&dummy,
>  					&dummy,
>  					&dummy,
> -					&v->MinActiveDRAMClockChangeLatencySupported);
> +					&dummy);
>  		}
>  	}
>  
> @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
>  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>  		struct display_mode_lib *mode_lib,
>  		unsigned int PrefetchMode,
> -		unsigned int NumberOfActivePlanes,
> -		unsigned int MaxLineBufferLines,
> -		unsigned int LineBufferSize,
> -		unsigned int WritebackInterfaceBufferSize,
>  		double DCFCLK,
>  		double ReturnBW,
> -		bool SynchronizedVBlank,
> -		unsigned int dpte_group_bytes[],
> -		unsigned int MetaChunkSize,
>  		double UrgentLatency,
>  		double ExtraLatency,
> -		double WritebackLatency,
> -		double WritebackChunkSize,
>  		double SOCCLK,
> -		double DRAMClockChangeLatency,
> -		double SRExitTime,
> -		double SREnterPlusExitTime,
> -		double SRExitZ8Time,
> -		double SREnterPlusExitZ8Time,
>  		double DCFCLKDeepSleep,
>  		unsigned int DETBufferSizeY[],
>  		unsigned int DETBufferSizeC[],
>  		unsigned int SwathHeightY[],
>  		unsigned int SwathHeightC[],
> -		unsigned int LBBitPerPixel[],
>  		double SwathWidthY[],
>  		double SwathWidthC[],
> -		double HRatio[],
> -		double HRatioChroma[],
> -		unsigned int vtaps[],
> -		unsigned int VTAPsChroma[],
> -		double VRatio[],
> -		double VRatioChroma[],
> -		unsigned int HTotal[],
> -		double PixelClock[],
> -		unsigned int BlendingAndTiming[],
>  		unsigned int DPPPerPlane[],
>  		double BytePerPixelDETY[],
>  		double BytePerPixelDETC[],
> -		double DSTXAfterScaler[],
> -		double DSTYAfterScaler[],
> -		bool WritebackEnable[],
> -		enum source_format_class WritebackPixelFormat[],
> -		double WritebackDestinationWidth[],
> -		double WritebackDestinationHeight[],
> -		double WritebackSourceHeight[],
>  		bool UnboundedRequestEnabled,
>  		unsigned int CompressedBufferSizeInkByte,
>  		enum clock_change_support *DRAMClockChangeSupport,
> -		double *UrgentWatermark,
> -		double *WritebackUrgentWatermark,
> -		double *DRAMClockChangeWatermark,
> -		double *WritebackDRAMClockChangeWatermark,
>  		double *StutterExitWatermark,
>  		double *StutterEnterPlusExitWatermark,
>  		double *Z8StutterExitWatermark,
> -		double *Z8StutterEnterPlusExitWatermark,
> -		double *MinActiveDRAMClockChangeLatencySupported)
> +		double *Z8StutterEnterPlusExitWatermark)
>  {
>  	struct vba_vars_st *v = &mode_lib->vba;
>  	double EffectiveLBLatencyHidingY;
> @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>  	double TotalPixelBW = 0.0;
>  	int k, j;
>  
> -	*UrgentWatermark = UrgentLatency + ExtraLatency;
> +	v->UrgentWatermark = UrgentLatency + ExtraLatency;
>  
>  #ifdef __DML_VBA_DEBUG__
>  	dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
>  	dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> -	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> +	dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
>  #endif
>  
> -	*DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> +	v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
>  
>  #ifdef __DML_VBA_DEBUG__
> -	dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> -	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> +	dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> +	dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
>  #endif
>  
>  	v->TotalActiveWriteback = 0;
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> -		if (WritebackEnable[k] == true) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> +		if (v->WritebackEnable[k] == true) {
>  			v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
>  		}
>  	}
>  
>  	if (v->TotalActiveWriteback <= 1) {
> -		*WritebackUrgentWatermark = WritebackLatency;
> +		v->WritebackUrgentWatermark = v->WritebackLatency;
>  	} else {
> -		*WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> +		v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
>  	}
>  
>  	if (v->TotalActiveWriteback <= 1) {
> -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
>  	} else {
> -		*WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> +		v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
>  	}
>  
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>  		TotalPixelBW = TotalPixelBW
> -				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> -						/ (HTotal[k] / PixelClock[k]);
> +				+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> +						/ (v->HTotal[k] / v->PixelClock[k]);
>  	}
>  
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>  		double EffectiveDETBufferSizeY = DETBufferSizeY[k];
>  
>  		v->LBLatencyHidingSourceLinesY = dml_min(
> -				(double) MaxLineBufferLines,
> -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> +				(double) v->MaxLineBufferLines,
> +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
>  
>  		v->LBLatencyHidingSourceLinesC = dml_min(
> -				(double) MaxLineBufferLines,
> -				dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> +				(double) v->MaxLineBufferLines,
> +				dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
>  
> -		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> +		EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
>  
> -		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> +		EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
>  
>  		if (UnboundedRequestEnabled) {
>  			EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> -					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> +					+ CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
>  		}
>  
>  		LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
>  		if (BytePerPixelDETC[k] > 0) {
>  			LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
>  			LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> -			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> +			FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
>  		} else {
>  			LinesInDETC = 0;
>  			FullDETBufferingTimeC = 999999;
>  		}
>  
>  		ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> -				- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> +				- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
>  
> -		if (NumberOfActivePlanes > 1) {
> +		if (v->NumberOfActivePlanes > 1) {
>  			ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> -					- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> +					- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
>  		}
>  
>  		if (BytePerPixelDETC[k] > 0) {
>  			ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> -					- ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> +					- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
>  
> -			if (NumberOfActivePlanes > 1) {
> +			if (v->NumberOfActivePlanes > 1) {
>  				ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> -						- (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> +						- (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
>  			}
>  			v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
>  		} else {
>  			v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
>  		}
>  
> -		if (WritebackEnable[k] == true) {
> -			WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> -					/ (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> -			if (WritebackPixelFormat[k] == dm_444_64) {
> +		if (v->WritebackEnable[k] == true) {
> +			WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> +					/ (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> +			if (v->WritebackPixelFormat[k] == dm_444_64) {
>  				WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
>  			}
>  			WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>  
>  	v->MinActiveDRAMClockChangeMargin = 999999;
>  	PlaneWithMinActiveDRAMClockChangeMargin = 0;
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
>  		if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
>  			v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> -			if (BlendingAndTiming[k] == k) {
> +			if (v->BlendingAndTiming[k] == k) {
>  				PlaneWithMinActiveDRAMClockChangeMargin = k;
>  			} else {
> -				for (j = 0; j < NumberOfActivePlanes; ++j) {
> -					if (BlendingAndTiming[k] == j) {
> +				for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> +					if (v->BlendingAndTiming[k] == j) {
>  						PlaneWithMinActiveDRAMClockChangeMargin = j;
>  					}
>  				}
> @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>  		}
>  	}
>  
> -	*MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> +	v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
>  
>  	SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> -		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> +		if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
>  				&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
>  			SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
>  		}
> @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
>  
>  	v->TotalNumberOfActiveOTG = 0;
>  
> -	for (k = 0; k < NumberOfActivePlanes; ++k) {
> -		if (BlendingAndTiming[k] == k) {
> +	for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> +		if (v->BlendingAndTiming[k] == k) {
>  			v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
>  		}
>  	}
>  
>  	if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
>  		*DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> -	} else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> +	} else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
>  			|| SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
>  		*DRAMClockChangeSupport = dm_dram_clock_change_vblank;
>  	} else {
>  		*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
>  	}
>  
> -	*StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> -	*StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> -	*Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> -	*Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> +	*StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> +	*StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> +	*Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> +	*Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
>  
>  #ifdef __DML_VBA_DEBUG__
>  	dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> 
> base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
  2022-09-17 12:38 ` Maíra Canal
  2022-09-20 16:06     ` Alex Deucher
@ 2022-09-20 16:06     ` Alex Deucher
  0 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2022-09-20 16:06 UTC (permalink / raw)
  To: Maíra Canal
  Cc: Nathan Chancellor, Harry Wentland, Leo Li, Rodrigo Siqueira,
	Alex Deucher, Christian König, Pan, Xinhui,
	kernelci.org bot, Tom Rix, llvm, Nick Desaulniers, patches,
	dri-devel, amd-gfx

Applied the series.  Thanks!

Alex

On Sat, Sep 17, 2022 at 8:38 AM Maíra Canal <mairacanal@riseup.net> wrote:
>
> Hi Nathan,
>
> On 9/16/22 18:06, Nathan Chancellor wrote:
> > Most of the arguments are identical between the two call sites and they
> > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > the total amount of stack space that
> > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> >
> >   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> >   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> >        ^
> >   1 error generated.
> >
> > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
>
> I have built-tested the whole series with clang 14.0.5 (Fedora
> 14.0.5-1.fc36), using:
>
> $ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
> drivers/gpu/drm/amd/amdgpu/
>
> Another great patch to the DML! As Tom, I also would like to see this
> expand to all display_mode_vba files, but so far this is great to
> unbreak the build.
>
> To the whole series:
>
> Tested-by: Maíra Canal <mairacanal@riseup.net>
>
> Best Regards,
> - Maíra Canal
>
> > ---
> >
> > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > applied to dml314.
> >
> >  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> >  1 file changed, 52 insertions(+), 196 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > index 2829f179f982..32ceb72f7a14 100644
> > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >               struct display_mode_lib *mode_lib,
> >               unsigned int PrefetchMode,
> > -             unsigned int NumberOfActivePlanes,
> > -             unsigned int MaxLineBufferLines,
> > -             unsigned int LineBufferSize,
> > -             unsigned int WritebackInterfaceBufferSize,
> >               double DCFCLK,
> >               double ReturnBW,
> > -             bool SynchronizedVBlank,
> > -             unsigned int dpte_group_bytes[],
> > -             unsigned int MetaChunkSize,
> >               double UrgentLatency,
> >               double ExtraLatency,
> > -             double WritebackLatency,
> > -             double WritebackChunkSize,
> >               double SOCCLK,
> > -             double DRAMClockChangeLatency,
> > -             double SRExitTime,
> > -             double SREnterPlusExitTime,
> > -             double SRExitZ8Time,
> > -             double SREnterPlusExitZ8Time,
> >               double DCFCLKDeepSleep,
> >               unsigned int DETBufferSizeY[],
> >               unsigned int DETBufferSizeC[],
> >               unsigned int SwathHeightY[],
> >               unsigned int SwathHeightC[],
> > -             unsigned int LBBitPerPixel[],
> >               double SwathWidthY[],
> >               double SwathWidthC[],
> > -             double HRatio[],
> > -             double HRatioChroma[],
> > -             unsigned int vtaps[],
> > -             unsigned int VTAPsChroma[],
> > -             double VRatio[],
> > -             double VRatioChroma[],
> > -             unsigned int HTotal[],
> > -             double PixelClock[],
> > -             unsigned int BlendingAndTiming[],
> >               unsigned int DPPPerPlane[],
> >               double BytePerPixelDETY[],
> >               double BytePerPixelDETC[],
> > -             double DSTXAfterScaler[],
> > -             double DSTYAfterScaler[],
> > -             bool WritebackEnable[],
> > -             enum source_format_class WritebackPixelFormat[],
> > -             double WritebackDestinationWidth[],
> > -             double WritebackDestinationHeight[],
> > -             double WritebackSourceHeight[],
> >               bool UnboundedRequestEnabled,
> >               unsigned int CompressedBufferSizeInkByte,
> >               enum clock_change_support *DRAMClockChangeSupport,
> > -             double *UrgentWatermark,
> > -             double *WritebackUrgentWatermark,
> > -             double *DRAMClockChangeWatermark,
> > -             double *WritebackDRAMClockChangeWatermark,
> >               double *StutterExitWatermark,
> >               double *StutterEnterPlusExitWatermark,
> >               double *Z8StutterExitWatermark,
> > -             double *Z8StutterEnterPlusExitWatermark,
> > -             double *MinActiveDRAMClockChangeLatencySupported);
> > +             double *Z8StutterEnterPlusExitWatermark);
> >
> >  static void CalculateDCFCLKDeepSleep(
> >               struct display_mode_lib *mode_lib,
> > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> >               CalculateWatermarksAndDRAMSpeedChangeSupport(
> >                               mode_lib,
> >                               PrefetchMode,
> > -                             v->NumberOfActivePlanes,
> > -                             v->MaxLineBufferLines,
> > -                             v->LineBufferSize,
> > -                             v->WritebackInterfaceBufferSize,
> >                               v->DCFCLK,
> >                               v->ReturnBW,
> > -                             v->SynchronizedVBlank,
> > -                             v->dpte_group_bytes,
> > -                             v->MetaChunkSize,
> >                               v->UrgentLatency,
> >                               v->UrgentExtraLatency,
> > -                             v->WritebackLatency,
> > -                             v->WritebackChunkSize,
> >                               v->SOCCLK,
> > -                             v->DRAMClockChangeLatency,
> > -                             v->SRExitTime,
> > -                             v->SREnterPlusExitTime,
> > -                             v->SRExitZ8Time,
> > -                             v->SREnterPlusExitZ8Time,
> >                               v->DCFCLKDeepSleep,
> >                               v->DETBufferSizeY,
> >                               v->DETBufferSizeC,
> >                               v->SwathHeightY,
> >                               v->SwathHeightC,
> > -                             v->LBBitPerPixel,
> >                               v->SwathWidthY,
> >                               v->SwathWidthC,
> > -                             v->HRatio,
> > -                             v->HRatioChroma,
> > -                             v->vtaps,
> > -                             v->VTAPsChroma,
> > -                             v->VRatio,
> > -                             v->VRatioChroma,
> > -                             v->HTotal,
> > -                             v->PixelClock,
> > -                             v->BlendingAndTiming,
> >                               v->DPPPerPlane,
> >                               v->BytePerPixelDETY,
> >                               v->BytePerPixelDETC,
> > -                             v->DSTXAfterScaler,
> > -                             v->DSTYAfterScaler,
> > -                             v->WritebackEnable,
> > -                             v->WritebackPixelFormat,
> > -                             v->WritebackDestinationWidth,
> > -                             v->WritebackDestinationHeight,
> > -                             v->WritebackSourceHeight,
> >                               v->UnboundedRequestEnabled,
> >                               v->CompressedBufferSizeInkByte,
> >                               &DRAMClockChangeSupport,
> > -                             &v->UrgentWatermark,
> > -                             &v->WritebackUrgentWatermark,
> > -                             &v->DRAMClockChangeWatermark,
> > -                             &v->WritebackDRAMClockChangeWatermark,
> >                               &v->StutterExitWatermark,
> >                               &v->StutterEnterPlusExitWatermark,
> >                               &v->Z8StutterExitWatermark,
> > -                             &v->Z8StutterEnterPlusExitWatermark,
> > -                             &v->MinActiveDRAMClockChangeLatencySupported);
> > +                             &v->Z8StutterEnterPlusExitWatermark);
> >
> >               for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >                       if (v->WritebackEnable[k] == true) {
> > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >                       CalculateWatermarksAndDRAMSpeedChangeSupport(
> >                                       mode_lib,
> >                                       v->PrefetchModePerState[i][j],
> > -                                     v->NumberOfActivePlanes,
> > -                                     v->MaxLineBufferLines,
> > -                                     v->LineBufferSize,
> > -                                     v->WritebackInterfaceBufferSize,
> >                                       v->DCFCLKState[i][j],
> >                                       v->ReturnBWPerState[i][j],
> > -                                     v->SynchronizedVBlank,
> > -                                     v->dpte_group_bytes,
> > -                                     v->MetaChunkSize,
> >                                       v->UrgLatency[i],
> >                                       v->ExtraLatency,
> > -                                     v->WritebackLatency,
> > -                                     v->WritebackChunkSize,
> >                                       v->SOCCLKPerState[i],
> > -                                     v->DRAMClockChangeLatency,
> > -                                     v->SRExitTime,
> > -                                     v->SREnterPlusExitTime,
> > -                                     v->SRExitZ8Time,
> > -                                     v->SREnterPlusExitZ8Time,
> >                                       v->ProjectedDCFCLKDeepSleep[i][j],
> >                                       v->DETBufferSizeYThisState,
> >                                       v->DETBufferSizeCThisState,
> >                                       v->SwathHeightYThisState,
> >                                       v->SwathHeightCThisState,
> > -                                     v->LBBitPerPixel,
> >                                       v->SwathWidthYThisState,
> >                                       v->SwathWidthCThisState,
> > -                                     v->HRatio,
> > -                                     v->HRatioChroma,
> > -                                     v->vtaps,
> > -                                     v->VTAPsChroma,
> > -                                     v->VRatio,
> > -                                     v->VRatioChroma,
> > -                                     v->HTotal,
> > -                                     v->PixelClock,
> > -                                     v->BlendingAndTiming,
> >                                       v->NoOfDPPThisState,
> >                                       v->BytePerPixelInDETY,
> >                                       v->BytePerPixelInDETC,
> > -                                     v->DSTXAfterScaler,
> > -                                     v->DSTYAfterScaler,
> > -                                     v->WritebackEnable,
> > -                                     v->WritebackPixelFormat,
> > -                                     v->WritebackDestinationWidth,
> > -                                     v->WritebackDestinationHeight,
> > -                                     v->WritebackSourceHeight,
> >                                       UnboundedRequestEnabledThisState,
> >                                       CompressedBufferSizeInkByteThisState,
> >                                       &v->DRAMClockChangeSupport[i][j],
> > -                                     &v->UrgentWatermark,
> > -                                     &v->WritebackUrgentWatermark,
> > -                                     &v->DRAMClockChangeWatermark,
> > -                                     &v->WritebackDRAMClockChangeWatermark,
> > -                                     &dummy,
> >                                       &dummy,
> >                                       &dummy,
> >                                       &dummy,
> > -                                     &v->MinActiveDRAMClockChangeLatencySupported);
> > +                                     &dummy);
> >               }
> >       }
> >
> > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >               struct display_mode_lib *mode_lib,
> >               unsigned int PrefetchMode,
> > -             unsigned int NumberOfActivePlanes,
> > -             unsigned int MaxLineBufferLines,
> > -             unsigned int LineBufferSize,
> > -             unsigned int WritebackInterfaceBufferSize,
> >               double DCFCLK,
> >               double ReturnBW,
> > -             bool SynchronizedVBlank,
> > -             unsigned int dpte_group_bytes[],
> > -             unsigned int MetaChunkSize,
> >               double UrgentLatency,
> >               double ExtraLatency,
> > -             double WritebackLatency,
> > -             double WritebackChunkSize,
> >               double SOCCLK,
> > -             double DRAMClockChangeLatency,
> > -             double SRExitTime,
> > -             double SREnterPlusExitTime,
> > -             double SRExitZ8Time,
> > -             double SREnterPlusExitZ8Time,
> >               double DCFCLKDeepSleep,
> >               unsigned int DETBufferSizeY[],
> >               unsigned int DETBufferSizeC[],
> >               unsigned int SwathHeightY[],
> >               unsigned int SwathHeightC[],
> > -             unsigned int LBBitPerPixel[],
> >               double SwathWidthY[],
> >               double SwathWidthC[],
> > -             double HRatio[],
> > -             double HRatioChroma[],
> > -             unsigned int vtaps[],
> > -             unsigned int VTAPsChroma[],
> > -             double VRatio[],
> > -             double VRatioChroma[],
> > -             unsigned int HTotal[],
> > -             double PixelClock[],
> > -             unsigned int BlendingAndTiming[],
> >               unsigned int DPPPerPlane[],
> >               double BytePerPixelDETY[],
> >               double BytePerPixelDETC[],
> > -             double DSTXAfterScaler[],
> > -             double DSTYAfterScaler[],
> > -             bool WritebackEnable[],
> > -             enum source_format_class WritebackPixelFormat[],
> > -             double WritebackDestinationWidth[],
> > -             double WritebackDestinationHeight[],
> > -             double WritebackSourceHeight[],
> >               bool UnboundedRequestEnabled,
> >               unsigned int CompressedBufferSizeInkByte,
> >               enum clock_change_support *DRAMClockChangeSupport,
> > -             double *UrgentWatermark,
> > -             double *WritebackUrgentWatermark,
> > -             double *DRAMClockChangeWatermark,
> > -             double *WritebackDRAMClockChangeWatermark,
> >               double *StutterExitWatermark,
> >               double *StutterEnterPlusExitWatermark,
> >               double *Z8StutterExitWatermark,
> > -             double *Z8StutterEnterPlusExitWatermark,
> > -             double *MinActiveDRAMClockChangeLatencySupported)
> > +             double *Z8StutterEnterPlusExitWatermark)
> >  {
> >       struct vba_vars_st *v = &mode_lib->vba;
> >       double EffectiveLBLatencyHidingY;
> > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >       double TotalPixelBW = 0.0;
> >       int k, j;
> >
> > -     *UrgentWatermark = UrgentLatency + ExtraLatency;
> > +     v->UrgentWatermark = UrgentLatency + ExtraLatency;
> >
> >  #ifdef __DML_VBA_DEBUG__
> >       dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> >       dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > -     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > +     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> >  #endif
> >
> > -     *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > +     v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> >
> >  #ifdef __DML_VBA_DEBUG__
> > -     dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > -     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > +     dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > +     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> >  #endif
> >
> >       v->TotalActiveWriteback = 0;
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -             if (WritebackEnable[k] == true) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +             if (v->WritebackEnable[k] == true) {
> >                       v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> >               }
> >       }
> >
> >       if (v->TotalActiveWriteback <= 1) {
> > -             *WritebackUrgentWatermark = WritebackLatency;
> > +             v->WritebackUrgentWatermark = v->WritebackLatency;
> >       } else {
> > -             *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +             v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >       }
> >
> >       if (v->TotalActiveWriteback <= 1) {
> > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> >       } else {
> > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >       }
> >
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >               TotalPixelBW = TotalPixelBW
> > -                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > -                                             / (HTotal[k] / PixelClock[k]);
> > +                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > +                                             / (v->HTotal[k] / v->PixelClock[k]);
> >       }
> >
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >               double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> >
> >               v->LBLatencyHidingSourceLinesY = dml_min(
> > -                             (double) MaxLineBufferLines,
> > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > +                             (double) v->MaxLineBufferLines,
> > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> >
> >               v->LBLatencyHidingSourceLinesC = dml_min(
> > -                             (double) MaxLineBufferLines,
> > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > +                             (double) v->MaxLineBufferLines,
> > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> >
> > -             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > +             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> >
> > -             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > +             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> >
> >               if (UnboundedRequestEnabled) {
> >                       EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > -                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > +                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> >               }
> >
> >               LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> >               if (BytePerPixelDETC[k] > 0) {
> >                       LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> >                       LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > -                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > +                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> >               } else {
> >                       LinesInDETC = 0;
> >                       FullDETBufferingTimeC = 999999;
> >               }
> >
> >               ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > -                             - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +                             - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> >
> > -             if (NumberOfActivePlanes > 1) {
> > +             if (v->NumberOfActivePlanes > 1) {
> >                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > -                                     - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > +                                     - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> >               }
> >
> >               if (BytePerPixelDETC[k] > 0) {
> >                       ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > -                                     - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +                                     - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> >
> > -                     if (NumberOfActivePlanes > 1) {
> > +                     if (v->NumberOfActivePlanes > 1) {
> >                               ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > -                                             - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > +                                             - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> >                       }
> >                       v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> >               } else {
> >                       v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> >               }
> >
> > -             if (WritebackEnable[k] == true) {
> > -                     WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > -                                     / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > -                     if (WritebackPixelFormat[k] == dm_444_64) {
> > +             if (v->WritebackEnable[k] == true) {
> > +                     WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > +                                     / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > +                     if (v->WritebackPixelFormat[k] == dm_444_64) {
> >                               WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> >                       }
> >                       WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >
> >       v->MinActiveDRAMClockChangeMargin = 999999;
> >       PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >               if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> >                       v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > -                     if (BlendingAndTiming[k] == k) {
> > +                     if (v->BlendingAndTiming[k] == k) {
> >                               PlaneWithMinActiveDRAMClockChangeMargin = k;
> >                       } else {
> > -                             for (j = 0; j < NumberOfActivePlanes; ++j) {
> > -                                     if (BlendingAndTiming[k] == j) {
> > +                             for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > +                                     if (v->BlendingAndTiming[k] == j) {
> >                                               PlaneWithMinActiveDRAMClockChangeMargin = j;
> >                                       }
> >                               }
> > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >               }
> >       }
> >
> > -     *MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > +     v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> >
> >       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> >                               && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> >                       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> >               }
> > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >
> >       v->TotalNumberOfActiveOTG = 0;
> >
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -             if (BlendingAndTiming[k] == k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +             if (v->BlendingAndTiming[k] == k) {
> >                       v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> >               }
> >       }
> >
> >       if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> >               *DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > -     } else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > +     } else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> >                       || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> >               *DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> >       } else {
> >               *DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> >       }
> >
> > -     *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -     *StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > -     *Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -     *Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +     *StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +     *StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > +     *Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +     *Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> >
> >  #ifdef __DML_VBA_DEBUG__
> >       dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> >
> > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-20 16:06     ` Alex Deucher
  0 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2022-09-20 16:06 UTC (permalink / raw)
  To: Maíra Canal
  Cc: Nick Desaulniers, llvm, kernelci.org bot, Leo Li, Tom Rix, Pan,
	Xinhui, Rodrigo Siqueira, patches, dri-devel, Nathan Chancellor,
	amd-gfx, Alex Deucher, Christian König

Applied the series.  Thanks!

Alex

On Sat, Sep 17, 2022 at 8:38 AM Maíra Canal <mairacanal@riseup.net> wrote:
>
> Hi Nathan,
>
> On 9/16/22 18:06, Nathan Chancellor wrote:
> > Most of the arguments are identical between the two call sites and they
> > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > the total amount of stack space that
> > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> >
> >   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> >   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> >        ^
> >   1 error generated.
> >
> > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
>
> I have built-tested the whole series with clang 14.0.5 (Fedora
> 14.0.5-1.fc36), using:
>
> $ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
> drivers/gpu/drm/amd/amdgpu/
>
> Another great patch to the DML! As Tom, I also would like to see this
> expand to all display_mode_vba files, but so far this is great to
> unbreak the build.
>
> To the whole series:
>
> Tested-by: Maíra Canal <mairacanal@riseup.net>
>
> Best Regards,
> - Maíra Canal
>
> > ---
> >
> > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > applied to dml314.
> >
> >  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> >  1 file changed, 52 insertions(+), 196 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > index 2829f179f982..32ceb72f7a14 100644
> > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >               struct display_mode_lib *mode_lib,
> >               unsigned int PrefetchMode,
> > -             unsigned int NumberOfActivePlanes,
> > -             unsigned int MaxLineBufferLines,
> > -             unsigned int LineBufferSize,
> > -             unsigned int WritebackInterfaceBufferSize,
> >               double DCFCLK,
> >               double ReturnBW,
> > -             bool SynchronizedVBlank,
> > -             unsigned int dpte_group_bytes[],
> > -             unsigned int MetaChunkSize,
> >               double UrgentLatency,
> >               double ExtraLatency,
> > -             double WritebackLatency,
> > -             double WritebackChunkSize,
> >               double SOCCLK,
> > -             double DRAMClockChangeLatency,
> > -             double SRExitTime,
> > -             double SREnterPlusExitTime,
> > -             double SRExitZ8Time,
> > -             double SREnterPlusExitZ8Time,
> >               double DCFCLKDeepSleep,
> >               unsigned int DETBufferSizeY[],
> >               unsigned int DETBufferSizeC[],
> >               unsigned int SwathHeightY[],
> >               unsigned int SwathHeightC[],
> > -             unsigned int LBBitPerPixel[],
> >               double SwathWidthY[],
> >               double SwathWidthC[],
> > -             double HRatio[],
> > -             double HRatioChroma[],
> > -             unsigned int vtaps[],
> > -             unsigned int VTAPsChroma[],
> > -             double VRatio[],
> > -             double VRatioChroma[],
> > -             unsigned int HTotal[],
> > -             double PixelClock[],
> > -             unsigned int BlendingAndTiming[],
> >               unsigned int DPPPerPlane[],
> >               double BytePerPixelDETY[],
> >               double BytePerPixelDETC[],
> > -             double DSTXAfterScaler[],
> > -             double DSTYAfterScaler[],
> > -             bool WritebackEnable[],
> > -             enum source_format_class WritebackPixelFormat[],
> > -             double WritebackDestinationWidth[],
> > -             double WritebackDestinationHeight[],
> > -             double WritebackSourceHeight[],
> >               bool UnboundedRequestEnabled,
> >               unsigned int CompressedBufferSizeInkByte,
> >               enum clock_change_support *DRAMClockChangeSupport,
> > -             double *UrgentWatermark,
> > -             double *WritebackUrgentWatermark,
> > -             double *DRAMClockChangeWatermark,
> > -             double *WritebackDRAMClockChangeWatermark,
> >               double *StutterExitWatermark,
> >               double *StutterEnterPlusExitWatermark,
> >               double *Z8StutterExitWatermark,
> > -             double *Z8StutterEnterPlusExitWatermark,
> > -             double *MinActiveDRAMClockChangeLatencySupported);
> > +             double *Z8StutterEnterPlusExitWatermark);
> >
> >  static void CalculateDCFCLKDeepSleep(
> >               struct display_mode_lib *mode_lib,
> > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> >               CalculateWatermarksAndDRAMSpeedChangeSupport(
> >                               mode_lib,
> >                               PrefetchMode,
> > -                             v->NumberOfActivePlanes,
> > -                             v->MaxLineBufferLines,
> > -                             v->LineBufferSize,
> > -                             v->WritebackInterfaceBufferSize,
> >                               v->DCFCLK,
> >                               v->ReturnBW,
> > -                             v->SynchronizedVBlank,
> > -                             v->dpte_group_bytes,
> > -                             v->MetaChunkSize,
> >                               v->UrgentLatency,
> >                               v->UrgentExtraLatency,
> > -                             v->WritebackLatency,
> > -                             v->WritebackChunkSize,
> >                               v->SOCCLK,
> > -                             v->DRAMClockChangeLatency,
> > -                             v->SRExitTime,
> > -                             v->SREnterPlusExitTime,
> > -                             v->SRExitZ8Time,
> > -                             v->SREnterPlusExitZ8Time,
> >                               v->DCFCLKDeepSleep,
> >                               v->DETBufferSizeY,
> >                               v->DETBufferSizeC,
> >                               v->SwathHeightY,
> >                               v->SwathHeightC,
> > -                             v->LBBitPerPixel,
> >                               v->SwathWidthY,
> >                               v->SwathWidthC,
> > -                             v->HRatio,
> > -                             v->HRatioChroma,
> > -                             v->vtaps,
> > -                             v->VTAPsChroma,
> > -                             v->VRatio,
> > -                             v->VRatioChroma,
> > -                             v->HTotal,
> > -                             v->PixelClock,
> > -                             v->BlendingAndTiming,
> >                               v->DPPPerPlane,
> >                               v->BytePerPixelDETY,
> >                               v->BytePerPixelDETC,
> > -                             v->DSTXAfterScaler,
> > -                             v->DSTYAfterScaler,
> > -                             v->WritebackEnable,
> > -                             v->WritebackPixelFormat,
> > -                             v->WritebackDestinationWidth,
> > -                             v->WritebackDestinationHeight,
> > -                             v->WritebackSourceHeight,
> >                               v->UnboundedRequestEnabled,
> >                               v->CompressedBufferSizeInkByte,
> >                               &DRAMClockChangeSupport,
> > -                             &v->UrgentWatermark,
> > -                             &v->WritebackUrgentWatermark,
> > -                             &v->DRAMClockChangeWatermark,
> > -                             &v->WritebackDRAMClockChangeWatermark,
> >                               &v->StutterExitWatermark,
> >                               &v->StutterEnterPlusExitWatermark,
> >                               &v->Z8StutterExitWatermark,
> > -                             &v->Z8StutterEnterPlusExitWatermark,
> > -                             &v->MinActiveDRAMClockChangeLatencySupported);
> > +                             &v->Z8StutterEnterPlusExitWatermark);
> >
> >               for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >                       if (v->WritebackEnable[k] == true) {
> > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >                       CalculateWatermarksAndDRAMSpeedChangeSupport(
> >                                       mode_lib,
> >                                       v->PrefetchModePerState[i][j],
> > -                                     v->NumberOfActivePlanes,
> > -                                     v->MaxLineBufferLines,
> > -                                     v->LineBufferSize,
> > -                                     v->WritebackInterfaceBufferSize,
> >                                       v->DCFCLKState[i][j],
> >                                       v->ReturnBWPerState[i][j],
> > -                                     v->SynchronizedVBlank,
> > -                                     v->dpte_group_bytes,
> > -                                     v->MetaChunkSize,
> >                                       v->UrgLatency[i],
> >                                       v->ExtraLatency,
> > -                                     v->WritebackLatency,
> > -                                     v->WritebackChunkSize,
> >                                       v->SOCCLKPerState[i],
> > -                                     v->DRAMClockChangeLatency,
> > -                                     v->SRExitTime,
> > -                                     v->SREnterPlusExitTime,
> > -                                     v->SRExitZ8Time,
> > -                                     v->SREnterPlusExitZ8Time,
> >                                       v->ProjectedDCFCLKDeepSleep[i][j],
> >                                       v->DETBufferSizeYThisState,
> >                                       v->DETBufferSizeCThisState,
> >                                       v->SwathHeightYThisState,
> >                                       v->SwathHeightCThisState,
> > -                                     v->LBBitPerPixel,
> >                                       v->SwathWidthYThisState,
> >                                       v->SwathWidthCThisState,
> > -                                     v->HRatio,
> > -                                     v->HRatioChroma,
> > -                                     v->vtaps,
> > -                                     v->VTAPsChroma,
> > -                                     v->VRatio,
> > -                                     v->VRatioChroma,
> > -                                     v->HTotal,
> > -                                     v->PixelClock,
> > -                                     v->BlendingAndTiming,
> >                                       v->NoOfDPPThisState,
> >                                       v->BytePerPixelInDETY,
> >                                       v->BytePerPixelInDETC,
> > -                                     v->DSTXAfterScaler,
> > -                                     v->DSTYAfterScaler,
> > -                                     v->WritebackEnable,
> > -                                     v->WritebackPixelFormat,
> > -                                     v->WritebackDestinationWidth,
> > -                                     v->WritebackDestinationHeight,
> > -                                     v->WritebackSourceHeight,
> >                                       UnboundedRequestEnabledThisState,
> >                                       CompressedBufferSizeInkByteThisState,
> >                                       &v->DRAMClockChangeSupport[i][j],
> > -                                     &v->UrgentWatermark,
> > -                                     &v->WritebackUrgentWatermark,
> > -                                     &v->DRAMClockChangeWatermark,
> > -                                     &v->WritebackDRAMClockChangeWatermark,
> > -                                     &dummy,
> >                                       &dummy,
> >                                       &dummy,
> >                                       &dummy,
> > -                                     &v->MinActiveDRAMClockChangeLatencySupported);
> > +                                     &dummy);
> >               }
> >       }
> >
> > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >               struct display_mode_lib *mode_lib,
> >               unsigned int PrefetchMode,
> > -             unsigned int NumberOfActivePlanes,
> > -             unsigned int MaxLineBufferLines,
> > -             unsigned int LineBufferSize,
> > -             unsigned int WritebackInterfaceBufferSize,
> >               double DCFCLK,
> >               double ReturnBW,
> > -             bool SynchronizedVBlank,
> > -             unsigned int dpte_group_bytes[],
> > -             unsigned int MetaChunkSize,
> >               double UrgentLatency,
> >               double ExtraLatency,
> > -             double WritebackLatency,
> > -             double WritebackChunkSize,
> >               double SOCCLK,
> > -             double DRAMClockChangeLatency,
> > -             double SRExitTime,
> > -             double SREnterPlusExitTime,
> > -             double SRExitZ8Time,
> > -             double SREnterPlusExitZ8Time,
> >               double DCFCLKDeepSleep,
> >               unsigned int DETBufferSizeY[],
> >               unsigned int DETBufferSizeC[],
> >               unsigned int SwathHeightY[],
> >               unsigned int SwathHeightC[],
> > -             unsigned int LBBitPerPixel[],
> >               double SwathWidthY[],
> >               double SwathWidthC[],
> > -             double HRatio[],
> > -             double HRatioChroma[],
> > -             unsigned int vtaps[],
> > -             unsigned int VTAPsChroma[],
> > -             double VRatio[],
> > -             double VRatioChroma[],
> > -             unsigned int HTotal[],
> > -             double PixelClock[],
> > -             unsigned int BlendingAndTiming[],
> >               unsigned int DPPPerPlane[],
> >               double BytePerPixelDETY[],
> >               double BytePerPixelDETC[],
> > -             double DSTXAfterScaler[],
> > -             double DSTYAfterScaler[],
> > -             bool WritebackEnable[],
> > -             enum source_format_class WritebackPixelFormat[],
> > -             double WritebackDestinationWidth[],
> > -             double WritebackDestinationHeight[],
> > -             double WritebackSourceHeight[],
> >               bool UnboundedRequestEnabled,
> >               unsigned int CompressedBufferSizeInkByte,
> >               enum clock_change_support *DRAMClockChangeSupport,
> > -             double *UrgentWatermark,
> > -             double *WritebackUrgentWatermark,
> > -             double *DRAMClockChangeWatermark,
> > -             double *WritebackDRAMClockChangeWatermark,
> >               double *StutterExitWatermark,
> >               double *StutterEnterPlusExitWatermark,
> >               double *Z8StutterExitWatermark,
> > -             double *Z8StutterEnterPlusExitWatermark,
> > -             double *MinActiveDRAMClockChangeLatencySupported)
> > +             double *Z8StutterEnterPlusExitWatermark)
> >  {
> >       struct vba_vars_st *v = &mode_lib->vba;
> >       double EffectiveLBLatencyHidingY;
> > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >       double TotalPixelBW = 0.0;
> >       int k, j;
> >
> > -     *UrgentWatermark = UrgentLatency + ExtraLatency;
> > +     v->UrgentWatermark = UrgentLatency + ExtraLatency;
> >
> >  #ifdef __DML_VBA_DEBUG__
> >       dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> >       dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > -     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > +     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> >  #endif
> >
> > -     *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > +     v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> >
> >  #ifdef __DML_VBA_DEBUG__
> > -     dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > -     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > +     dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > +     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> >  #endif
> >
> >       v->TotalActiveWriteback = 0;
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -             if (WritebackEnable[k] == true) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +             if (v->WritebackEnable[k] == true) {
> >                       v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> >               }
> >       }
> >
> >       if (v->TotalActiveWriteback <= 1) {
> > -             *WritebackUrgentWatermark = WritebackLatency;
> > +             v->WritebackUrgentWatermark = v->WritebackLatency;
> >       } else {
> > -             *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +             v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >       }
> >
> >       if (v->TotalActiveWriteback <= 1) {
> > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> >       } else {
> > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >       }
> >
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >               TotalPixelBW = TotalPixelBW
> > -                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > -                                             / (HTotal[k] / PixelClock[k]);
> > +                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > +                                             / (v->HTotal[k] / v->PixelClock[k]);
> >       }
> >
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >               double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> >
> >               v->LBLatencyHidingSourceLinesY = dml_min(
> > -                             (double) MaxLineBufferLines,
> > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > +                             (double) v->MaxLineBufferLines,
> > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> >
> >               v->LBLatencyHidingSourceLinesC = dml_min(
> > -                             (double) MaxLineBufferLines,
> > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > +                             (double) v->MaxLineBufferLines,
> > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> >
> > -             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > +             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> >
> > -             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > +             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> >
> >               if (UnboundedRequestEnabled) {
> >                       EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > -                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > +                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> >               }
> >
> >               LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> >               if (BytePerPixelDETC[k] > 0) {
> >                       LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> >                       LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > -                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > +                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> >               } else {
> >                       LinesInDETC = 0;
> >                       FullDETBufferingTimeC = 999999;
> >               }
> >
> >               ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > -                             - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +                             - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> >
> > -             if (NumberOfActivePlanes > 1) {
> > +             if (v->NumberOfActivePlanes > 1) {
> >                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > -                                     - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > +                                     - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> >               }
> >
> >               if (BytePerPixelDETC[k] > 0) {
> >                       ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > -                                     - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +                                     - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> >
> > -                     if (NumberOfActivePlanes > 1) {
> > +                     if (v->NumberOfActivePlanes > 1) {
> >                               ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > -                                             - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > +                                             - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> >                       }
> >                       v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> >               } else {
> >                       v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> >               }
> >
> > -             if (WritebackEnable[k] == true) {
> > -                     WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > -                                     / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > -                     if (WritebackPixelFormat[k] == dm_444_64) {
> > +             if (v->WritebackEnable[k] == true) {
> > +                     WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > +                                     / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > +                     if (v->WritebackPixelFormat[k] == dm_444_64) {
> >                               WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> >                       }
> >                       WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >
> >       v->MinActiveDRAMClockChangeMargin = 999999;
> >       PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >               if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> >                       v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > -                     if (BlendingAndTiming[k] == k) {
> > +                     if (v->BlendingAndTiming[k] == k) {
> >                               PlaneWithMinActiveDRAMClockChangeMargin = k;
> >                       } else {
> > -                             for (j = 0; j < NumberOfActivePlanes; ++j) {
> > -                                     if (BlendingAndTiming[k] == j) {
> > +                             for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > +                                     if (v->BlendingAndTiming[k] == j) {
> >                                               PlaneWithMinActiveDRAMClockChangeMargin = j;
> >                                       }
> >                               }
> > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >               }
> >       }
> >
> > -     *MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > +     v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> >
> >       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> >                               && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> >                       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> >               }
> > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >
> >       v->TotalNumberOfActiveOTG = 0;
> >
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -             if (BlendingAndTiming[k] == k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +             if (v->BlendingAndTiming[k] == k) {
> >                       v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> >               }
> >       }
> >
> >       if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> >               *DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > -     } else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > +     } else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> >                       || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> >               *DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> >       } else {
> >               *DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> >       }
> >
> > -     *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -     *StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > -     *Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -     *Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +     *StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +     *StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > +     *Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +     *Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> >
> >  #ifdef __DML_VBA_DEBUG__
> >       dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> >
> > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-20 16:06     ` Alex Deucher
  0 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2022-09-20 16:06 UTC (permalink / raw)
  To: Maíra Canal
  Cc: Nick Desaulniers, llvm, kernelci.org bot, Leo Li, Tom Rix, Pan,
	Xinhui, Rodrigo Siqueira, patches, dri-devel, Nathan Chancellor,
	amd-gfx, Alex Deucher, Harry Wentland, Christian König

Applied the series.  Thanks!

Alex

On Sat, Sep 17, 2022 at 8:38 AM Maíra Canal <mairacanal@riseup.net> wrote:
>
> Hi Nathan,
>
> On 9/16/22 18:06, Nathan Chancellor wrote:
> > Most of the arguments are identical between the two call sites and they
> > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > the total amount of stack space that
> > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> >
> >   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> >   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> >        ^
> >   1 error generated.
> >
> > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
>
> I have built-tested the whole series with clang 14.0.5 (Fedora
> 14.0.5-1.fc36), using:
>
> $ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
> drivers/gpu/drm/amd/amdgpu/
>
> Another great patch to the DML! As Tom, I also would like to see this
> expand to all display_mode_vba files, but so far this is great to
> unbreak the build.
>
> To the whole series:
>
> Tested-by: Maíra Canal <mairacanal@riseup.net>
>
> Best Regards,
> - Maíra Canal
>
> > ---
> >
> > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > applied to dml314.
> >
> >  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> >  1 file changed, 52 insertions(+), 196 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > index 2829f179f982..32ceb72f7a14 100644
> > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >               struct display_mode_lib *mode_lib,
> >               unsigned int PrefetchMode,
> > -             unsigned int NumberOfActivePlanes,
> > -             unsigned int MaxLineBufferLines,
> > -             unsigned int LineBufferSize,
> > -             unsigned int WritebackInterfaceBufferSize,
> >               double DCFCLK,
> >               double ReturnBW,
> > -             bool SynchronizedVBlank,
> > -             unsigned int dpte_group_bytes[],
> > -             unsigned int MetaChunkSize,
> >               double UrgentLatency,
> >               double ExtraLatency,
> > -             double WritebackLatency,
> > -             double WritebackChunkSize,
> >               double SOCCLK,
> > -             double DRAMClockChangeLatency,
> > -             double SRExitTime,
> > -             double SREnterPlusExitTime,
> > -             double SRExitZ8Time,
> > -             double SREnterPlusExitZ8Time,
> >               double DCFCLKDeepSleep,
> >               unsigned int DETBufferSizeY[],
> >               unsigned int DETBufferSizeC[],
> >               unsigned int SwathHeightY[],
> >               unsigned int SwathHeightC[],
> > -             unsigned int LBBitPerPixel[],
> >               double SwathWidthY[],
> >               double SwathWidthC[],
> > -             double HRatio[],
> > -             double HRatioChroma[],
> > -             unsigned int vtaps[],
> > -             unsigned int VTAPsChroma[],
> > -             double VRatio[],
> > -             double VRatioChroma[],
> > -             unsigned int HTotal[],
> > -             double PixelClock[],
> > -             unsigned int BlendingAndTiming[],
> >               unsigned int DPPPerPlane[],
> >               double BytePerPixelDETY[],
> >               double BytePerPixelDETC[],
> > -             double DSTXAfterScaler[],
> > -             double DSTYAfterScaler[],
> > -             bool WritebackEnable[],
> > -             enum source_format_class WritebackPixelFormat[],
> > -             double WritebackDestinationWidth[],
> > -             double WritebackDestinationHeight[],
> > -             double WritebackSourceHeight[],
> >               bool UnboundedRequestEnabled,
> >               unsigned int CompressedBufferSizeInkByte,
> >               enum clock_change_support *DRAMClockChangeSupport,
> > -             double *UrgentWatermark,
> > -             double *WritebackUrgentWatermark,
> > -             double *DRAMClockChangeWatermark,
> > -             double *WritebackDRAMClockChangeWatermark,
> >               double *StutterExitWatermark,
> >               double *StutterEnterPlusExitWatermark,
> >               double *Z8StutterExitWatermark,
> > -             double *Z8StutterEnterPlusExitWatermark,
> > -             double *MinActiveDRAMClockChangeLatencySupported);
> > +             double *Z8StutterEnterPlusExitWatermark);
> >
> >  static void CalculateDCFCLKDeepSleep(
> >               struct display_mode_lib *mode_lib,
> > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> >               CalculateWatermarksAndDRAMSpeedChangeSupport(
> >                               mode_lib,
> >                               PrefetchMode,
> > -                             v->NumberOfActivePlanes,
> > -                             v->MaxLineBufferLines,
> > -                             v->LineBufferSize,
> > -                             v->WritebackInterfaceBufferSize,
> >                               v->DCFCLK,
> >                               v->ReturnBW,
> > -                             v->SynchronizedVBlank,
> > -                             v->dpte_group_bytes,
> > -                             v->MetaChunkSize,
> >                               v->UrgentLatency,
> >                               v->UrgentExtraLatency,
> > -                             v->WritebackLatency,
> > -                             v->WritebackChunkSize,
> >                               v->SOCCLK,
> > -                             v->DRAMClockChangeLatency,
> > -                             v->SRExitTime,
> > -                             v->SREnterPlusExitTime,
> > -                             v->SRExitZ8Time,
> > -                             v->SREnterPlusExitZ8Time,
> >                               v->DCFCLKDeepSleep,
> >                               v->DETBufferSizeY,
> >                               v->DETBufferSizeC,
> >                               v->SwathHeightY,
> >                               v->SwathHeightC,
> > -                             v->LBBitPerPixel,
> >                               v->SwathWidthY,
> >                               v->SwathWidthC,
> > -                             v->HRatio,
> > -                             v->HRatioChroma,
> > -                             v->vtaps,
> > -                             v->VTAPsChroma,
> > -                             v->VRatio,
> > -                             v->VRatioChroma,
> > -                             v->HTotal,
> > -                             v->PixelClock,
> > -                             v->BlendingAndTiming,
> >                               v->DPPPerPlane,
> >                               v->BytePerPixelDETY,
> >                               v->BytePerPixelDETC,
> > -                             v->DSTXAfterScaler,
> > -                             v->DSTYAfterScaler,
> > -                             v->WritebackEnable,
> > -                             v->WritebackPixelFormat,
> > -                             v->WritebackDestinationWidth,
> > -                             v->WritebackDestinationHeight,
> > -                             v->WritebackSourceHeight,
> >                               v->UnboundedRequestEnabled,
> >                               v->CompressedBufferSizeInkByte,
> >                               &DRAMClockChangeSupport,
> > -                             &v->UrgentWatermark,
> > -                             &v->WritebackUrgentWatermark,
> > -                             &v->DRAMClockChangeWatermark,
> > -                             &v->WritebackDRAMClockChangeWatermark,
> >                               &v->StutterExitWatermark,
> >                               &v->StutterEnterPlusExitWatermark,
> >                               &v->Z8StutterExitWatermark,
> > -                             &v->Z8StutterEnterPlusExitWatermark,
> > -                             &v->MinActiveDRAMClockChangeLatencySupported);
> > +                             &v->Z8StutterEnterPlusExitWatermark);
> >
> >               for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >                       if (v->WritebackEnable[k] == true) {
> > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >                       CalculateWatermarksAndDRAMSpeedChangeSupport(
> >                                       mode_lib,
> >                                       v->PrefetchModePerState[i][j],
> > -                                     v->NumberOfActivePlanes,
> > -                                     v->MaxLineBufferLines,
> > -                                     v->LineBufferSize,
> > -                                     v->WritebackInterfaceBufferSize,
> >                                       v->DCFCLKState[i][j],
> >                                       v->ReturnBWPerState[i][j],
> > -                                     v->SynchronizedVBlank,
> > -                                     v->dpte_group_bytes,
> > -                                     v->MetaChunkSize,
> >                                       v->UrgLatency[i],
> >                                       v->ExtraLatency,
> > -                                     v->WritebackLatency,
> > -                                     v->WritebackChunkSize,
> >                                       v->SOCCLKPerState[i],
> > -                                     v->DRAMClockChangeLatency,
> > -                                     v->SRExitTime,
> > -                                     v->SREnterPlusExitTime,
> > -                                     v->SRExitZ8Time,
> > -                                     v->SREnterPlusExitZ8Time,
> >                                       v->ProjectedDCFCLKDeepSleep[i][j],
> >                                       v->DETBufferSizeYThisState,
> >                                       v->DETBufferSizeCThisState,
> >                                       v->SwathHeightYThisState,
> >                                       v->SwathHeightCThisState,
> > -                                     v->LBBitPerPixel,
> >                                       v->SwathWidthYThisState,
> >                                       v->SwathWidthCThisState,
> > -                                     v->HRatio,
> > -                                     v->HRatioChroma,
> > -                                     v->vtaps,
> > -                                     v->VTAPsChroma,
> > -                                     v->VRatio,
> > -                                     v->VRatioChroma,
> > -                                     v->HTotal,
> > -                                     v->PixelClock,
> > -                                     v->BlendingAndTiming,
> >                                       v->NoOfDPPThisState,
> >                                       v->BytePerPixelInDETY,
> >                                       v->BytePerPixelInDETC,
> > -                                     v->DSTXAfterScaler,
> > -                                     v->DSTYAfterScaler,
> > -                                     v->WritebackEnable,
> > -                                     v->WritebackPixelFormat,
> > -                                     v->WritebackDestinationWidth,
> > -                                     v->WritebackDestinationHeight,
> > -                                     v->WritebackSourceHeight,
> >                                       UnboundedRequestEnabledThisState,
> >                                       CompressedBufferSizeInkByteThisState,
> >                                       &v->DRAMClockChangeSupport[i][j],
> > -                                     &v->UrgentWatermark,
> > -                                     &v->WritebackUrgentWatermark,
> > -                                     &v->DRAMClockChangeWatermark,
> > -                                     &v->WritebackDRAMClockChangeWatermark,
> > -                                     &dummy,
> >                                       &dummy,
> >                                       &dummy,
> >                                       &dummy,
> > -                                     &v->MinActiveDRAMClockChangeLatencySupported);
> > +                                     &dummy);
> >               }
> >       }
> >
> > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >               struct display_mode_lib *mode_lib,
> >               unsigned int PrefetchMode,
> > -             unsigned int NumberOfActivePlanes,
> > -             unsigned int MaxLineBufferLines,
> > -             unsigned int LineBufferSize,
> > -             unsigned int WritebackInterfaceBufferSize,
> >               double DCFCLK,
> >               double ReturnBW,
> > -             bool SynchronizedVBlank,
> > -             unsigned int dpte_group_bytes[],
> > -             unsigned int MetaChunkSize,
> >               double UrgentLatency,
> >               double ExtraLatency,
> > -             double WritebackLatency,
> > -             double WritebackChunkSize,
> >               double SOCCLK,
> > -             double DRAMClockChangeLatency,
> > -             double SRExitTime,
> > -             double SREnterPlusExitTime,
> > -             double SRExitZ8Time,
> > -             double SREnterPlusExitZ8Time,
> >               double DCFCLKDeepSleep,
> >               unsigned int DETBufferSizeY[],
> >               unsigned int DETBufferSizeC[],
> >               unsigned int SwathHeightY[],
> >               unsigned int SwathHeightC[],
> > -             unsigned int LBBitPerPixel[],
> >               double SwathWidthY[],
> >               double SwathWidthC[],
> > -             double HRatio[],
> > -             double HRatioChroma[],
> > -             unsigned int vtaps[],
> > -             unsigned int VTAPsChroma[],
> > -             double VRatio[],
> > -             double VRatioChroma[],
> > -             unsigned int HTotal[],
> > -             double PixelClock[],
> > -             unsigned int BlendingAndTiming[],
> >               unsigned int DPPPerPlane[],
> >               double BytePerPixelDETY[],
> >               double BytePerPixelDETC[],
> > -             double DSTXAfterScaler[],
> > -             double DSTYAfterScaler[],
> > -             bool WritebackEnable[],
> > -             enum source_format_class WritebackPixelFormat[],
> > -             double WritebackDestinationWidth[],
> > -             double WritebackDestinationHeight[],
> > -             double WritebackSourceHeight[],
> >               bool UnboundedRequestEnabled,
> >               unsigned int CompressedBufferSizeInkByte,
> >               enum clock_change_support *DRAMClockChangeSupport,
> > -             double *UrgentWatermark,
> > -             double *WritebackUrgentWatermark,
> > -             double *DRAMClockChangeWatermark,
> > -             double *WritebackDRAMClockChangeWatermark,
> >               double *StutterExitWatermark,
> >               double *StutterEnterPlusExitWatermark,
> >               double *Z8StutterExitWatermark,
> > -             double *Z8StutterEnterPlusExitWatermark,
> > -             double *MinActiveDRAMClockChangeLatencySupported)
> > +             double *Z8StutterEnterPlusExitWatermark)
> >  {
> >       struct vba_vars_st *v = &mode_lib->vba;
> >       double EffectiveLBLatencyHidingY;
> > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >       double TotalPixelBW = 0.0;
> >       int k, j;
> >
> > -     *UrgentWatermark = UrgentLatency + ExtraLatency;
> > +     v->UrgentWatermark = UrgentLatency + ExtraLatency;
> >
> >  #ifdef __DML_VBA_DEBUG__
> >       dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> >       dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > -     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > +     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> >  #endif
> >
> > -     *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > +     v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> >
> >  #ifdef __DML_VBA_DEBUG__
> > -     dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > -     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > +     dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > +     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> >  #endif
> >
> >       v->TotalActiveWriteback = 0;
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -             if (WritebackEnable[k] == true) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +             if (v->WritebackEnable[k] == true) {
> >                       v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> >               }
> >       }
> >
> >       if (v->TotalActiveWriteback <= 1) {
> > -             *WritebackUrgentWatermark = WritebackLatency;
> > +             v->WritebackUrgentWatermark = v->WritebackLatency;
> >       } else {
> > -             *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +             v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >       }
> >
> >       if (v->TotalActiveWriteback <= 1) {
> > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> >       } else {
> > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> >       }
> >
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >               TotalPixelBW = TotalPixelBW
> > -                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > -                                             / (HTotal[k] / PixelClock[k]);
> > +                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > +                                             / (v->HTotal[k] / v->PixelClock[k]);
> >       }
> >
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >               double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> >
> >               v->LBLatencyHidingSourceLinesY = dml_min(
> > -                             (double) MaxLineBufferLines,
> > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > +                             (double) v->MaxLineBufferLines,
> > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> >
> >               v->LBLatencyHidingSourceLinesC = dml_min(
> > -                             (double) MaxLineBufferLines,
> > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > +                             (double) v->MaxLineBufferLines,
> > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> >
> > -             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > +             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> >
> > -             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > +             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> >
> >               if (UnboundedRequestEnabled) {
> >                       EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > -                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > +                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> >               }
> >
> >               LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> >               if (BytePerPixelDETC[k] > 0) {
> >                       LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> >                       LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > -                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > +                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> >               } else {
> >                       LinesInDETC = 0;
> >                       FullDETBufferingTimeC = 999999;
> >               }
> >
> >               ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > -                             - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +                             - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> >
> > -             if (NumberOfActivePlanes > 1) {
> > +             if (v->NumberOfActivePlanes > 1) {
> >                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > -                                     - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > +                                     - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> >               }
> >
> >               if (BytePerPixelDETC[k] > 0) {
> >                       ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > -                                     - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > +                                     - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> >
> > -                     if (NumberOfActivePlanes > 1) {
> > +                     if (v->NumberOfActivePlanes > 1) {
> >                               ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > -                                             - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > +                                             - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> >                       }
> >                       v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> >               } else {
> >                       v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> >               }
> >
> > -             if (WritebackEnable[k] == true) {
> > -                     WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > -                                     / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > -                     if (WritebackPixelFormat[k] == dm_444_64) {
> > +             if (v->WritebackEnable[k] == true) {
> > +                     WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > +                                     / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > +                     if (v->WritebackPixelFormat[k] == dm_444_64) {
> >                               WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> >                       }
> >                       WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >
> >       v->MinActiveDRAMClockChangeMargin = 999999;
> >       PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> >               if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> >                       v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > -                     if (BlendingAndTiming[k] == k) {
> > +                     if (v->BlendingAndTiming[k] == k) {
> >                               PlaneWithMinActiveDRAMClockChangeMargin = k;
> >                       } else {
> > -                             for (j = 0; j < NumberOfActivePlanes; ++j) {
> > -                                     if (BlendingAndTiming[k] == j) {
> > +                             for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > +                                     if (v->BlendingAndTiming[k] == j) {
> >                                               PlaneWithMinActiveDRAMClockChangeMargin = j;
> >                                       }
> >                               }
> > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >               }
> >       }
> >
> > -     *MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > +     v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> >
> >       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> >                               && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> >                       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> >               }
> > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> >
> >       v->TotalNumberOfActiveOTG = 0;
> >
> > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > -             if (BlendingAndTiming[k] == k) {
> > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > +             if (v->BlendingAndTiming[k] == k) {
> >                       v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> >               }
> >       }
> >
> >       if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> >               *DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > -     } else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > +     } else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> >                       || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> >               *DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> >       } else {
> >               *DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> >       }
> >
> > -     *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -     *StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > -     *Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > -     *Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +     *StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +     *StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > +     *Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > +     *Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> >
> >  #ifdef __DML_VBA_DEBUG__
> >       dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> >
> > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
  2022-09-20 16:06     ` Alex Deucher
  (?)
@ 2022-09-20 23:48       ` Nathan Chancellor
  -1 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-20 23:48 UTC (permalink / raw)
  To: Alex Deucher
  Cc: Maíra Canal, Harry Wentland, Leo Li, Rodrigo Siqueira,
	Alex Deucher, Christian König, Pan, Xinhui,
	kernelci.org bot, Tom Rix, llvm, Nick Desaulniers, patches,
	dri-devel, amd-gfx

On Tue, Sep 20, 2022 at 12:06:46PM -0400, Alex Deucher wrote:
> Applied the series.  Thanks!

Great, thank you so much! Hopefully these could also be applied to the
6.0 branch so that this error can be resolved there as well. No worries
on timeline if that was already the plan but I just want to keep -Werror
on for arm64 and x86_64 allmodconfig for this release.

Cheers,
Nathan

> On Sat, Sep 17, 2022 at 8:38 AM Maíra Canal <mairacanal@riseup.net> wrote:
> >
> > Hi Nathan,
> >
> > On 9/16/22 18:06, Nathan Chancellor wrote:
> > > Most of the arguments are identical between the two call sites and they
> > > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > > the total amount of stack space that
> > > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> > >
> > >   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> > >   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> > >        ^
> > >   1 error generated.
> > >
> > > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> >
> > I have built-tested the whole series with clang 14.0.5 (Fedora
> > 14.0.5-1.fc36), using:
> >
> > $ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
> > drivers/gpu/drm/amd/amdgpu/
> >
> > Another great patch to the DML! As Tom, I also would like to see this
> > expand to all display_mode_vba files, but so far this is great to
> > unbreak the build.
> >
> > To the whole series:
> >
> > Tested-by: Maíra Canal <mairacanal@riseup.net>
> >
> > Best Regards,
> > - Maíra Canal
> >
> > > ---
> > >
> > > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > > applied to dml314.
> > >
> > >  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> > >  1 file changed, 52 insertions(+), 196 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > index 2829f179f982..32ceb72f7a14 100644
> > > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >               struct display_mode_lib *mode_lib,
> > >               unsigned int PrefetchMode,
> > > -             unsigned int NumberOfActivePlanes,
> > > -             unsigned int MaxLineBufferLines,
> > > -             unsigned int LineBufferSize,
> > > -             unsigned int WritebackInterfaceBufferSize,
> > >               double DCFCLK,
> > >               double ReturnBW,
> > > -             bool SynchronizedVBlank,
> > > -             unsigned int dpte_group_bytes[],
> > > -             unsigned int MetaChunkSize,
> > >               double UrgentLatency,
> > >               double ExtraLatency,
> > > -             double WritebackLatency,
> > > -             double WritebackChunkSize,
> > >               double SOCCLK,
> > > -             double DRAMClockChangeLatency,
> > > -             double SRExitTime,
> > > -             double SREnterPlusExitTime,
> > > -             double SRExitZ8Time,
> > > -             double SREnterPlusExitZ8Time,
> > >               double DCFCLKDeepSleep,
> > >               unsigned int DETBufferSizeY[],
> > >               unsigned int DETBufferSizeC[],
> > >               unsigned int SwathHeightY[],
> > >               unsigned int SwathHeightC[],
> > > -             unsigned int LBBitPerPixel[],
> > >               double SwathWidthY[],
> > >               double SwathWidthC[],
> > > -             double HRatio[],
> > > -             double HRatioChroma[],
> > > -             unsigned int vtaps[],
> > > -             unsigned int VTAPsChroma[],
> > > -             double VRatio[],
> > > -             double VRatioChroma[],
> > > -             unsigned int HTotal[],
> > > -             double PixelClock[],
> > > -             unsigned int BlendingAndTiming[],
> > >               unsigned int DPPPerPlane[],
> > >               double BytePerPixelDETY[],
> > >               double BytePerPixelDETC[],
> > > -             double DSTXAfterScaler[],
> > > -             double DSTYAfterScaler[],
> > > -             bool WritebackEnable[],
> > > -             enum source_format_class WritebackPixelFormat[],
> > > -             double WritebackDestinationWidth[],
> > > -             double WritebackDestinationHeight[],
> > > -             double WritebackSourceHeight[],
> > >               bool UnboundedRequestEnabled,
> > >               unsigned int CompressedBufferSizeInkByte,
> > >               enum clock_change_support *DRAMClockChangeSupport,
> > > -             double *UrgentWatermark,
> > > -             double *WritebackUrgentWatermark,
> > > -             double *DRAMClockChangeWatermark,
> > > -             double *WritebackDRAMClockChangeWatermark,
> > >               double *StutterExitWatermark,
> > >               double *StutterEnterPlusExitWatermark,
> > >               double *Z8StutterExitWatermark,
> > > -             double *Z8StutterEnterPlusExitWatermark,
> > > -             double *MinActiveDRAMClockChangeLatencySupported);
> > > +             double *Z8StutterEnterPlusExitWatermark);
> > >
> > >  static void CalculateDCFCLKDeepSleep(
> > >               struct display_mode_lib *mode_lib,
> > > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> > >               CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >                               mode_lib,
> > >                               PrefetchMode,
> > > -                             v->NumberOfActivePlanes,
> > > -                             v->MaxLineBufferLines,
> > > -                             v->LineBufferSize,
> > > -                             v->WritebackInterfaceBufferSize,
> > >                               v->DCFCLK,
> > >                               v->ReturnBW,
> > > -                             v->SynchronizedVBlank,
> > > -                             v->dpte_group_bytes,
> > > -                             v->MetaChunkSize,
> > >                               v->UrgentLatency,
> > >                               v->UrgentExtraLatency,
> > > -                             v->WritebackLatency,
> > > -                             v->WritebackChunkSize,
> > >                               v->SOCCLK,
> > > -                             v->DRAMClockChangeLatency,
> > > -                             v->SRExitTime,
> > > -                             v->SREnterPlusExitTime,
> > > -                             v->SRExitZ8Time,
> > > -                             v->SREnterPlusExitZ8Time,
> > >                               v->DCFCLKDeepSleep,
> > >                               v->DETBufferSizeY,
> > >                               v->DETBufferSizeC,
> > >                               v->SwathHeightY,
> > >                               v->SwathHeightC,
> > > -                             v->LBBitPerPixel,
> > >                               v->SwathWidthY,
> > >                               v->SwathWidthC,
> > > -                             v->HRatio,
> > > -                             v->HRatioChroma,
> > > -                             v->vtaps,
> > > -                             v->VTAPsChroma,
> > > -                             v->VRatio,
> > > -                             v->VRatioChroma,
> > > -                             v->HTotal,
> > > -                             v->PixelClock,
> > > -                             v->BlendingAndTiming,
> > >                               v->DPPPerPlane,
> > >                               v->BytePerPixelDETY,
> > >                               v->BytePerPixelDETC,
> > > -                             v->DSTXAfterScaler,
> > > -                             v->DSTYAfterScaler,
> > > -                             v->WritebackEnable,
> > > -                             v->WritebackPixelFormat,
> > > -                             v->WritebackDestinationWidth,
> > > -                             v->WritebackDestinationHeight,
> > > -                             v->WritebackSourceHeight,
> > >                               v->UnboundedRequestEnabled,
> > >                               v->CompressedBufferSizeInkByte,
> > >                               &DRAMClockChangeSupport,
> > > -                             &v->UrgentWatermark,
> > > -                             &v->WritebackUrgentWatermark,
> > > -                             &v->DRAMClockChangeWatermark,
> > > -                             &v->WritebackDRAMClockChangeWatermark,
> > >                               &v->StutterExitWatermark,
> > >                               &v->StutterEnterPlusExitWatermark,
> > >                               &v->Z8StutterExitWatermark,
> > > -                             &v->Z8StutterEnterPlusExitWatermark,
> > > -                             &v->MinActiveDRAMClockChangeLatencySupported);
> > > +                             &v->Z8StutterEnterPlusExitWatermark);
> > >
> > >               for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >                       if (v->WritebackEnable[k] == true) {
> > > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > >                       CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >                                       mode_lib,
> > >                                       v->PrefetchModePerState[i][j],
> > > -                                     v->NumberOfActivePlanes,
> > > -                                     v->MaxLineBufferLines,
> > > -                                     v->LineBufferSize,
> > > -                                     v->WritebackInterfaceBufferSize,
> > >                                       v->DCFCLKState[i][j],
> > >                                       v->ReturnBWPerState[i][j],
> > > -                                     v->SynchronizedVBlank,
> > > -                                     v->dpte_group_bytes,
> > > -                                     v->MetaChunkSize,
> > >                                       v->UrgLatency[i],
> > >                                       v->ExtraLatency,
> > > -                                     v->WritebackLatency,
> > > -                                     v->WritebackChunkSize,
> > >                                       v->SOCCLKPerState[i],
> > > -                                     v->DRAMClockChangeLatency,
> > > -                                     v->SRExitTime,
> > > -                                     v->SREnterPlusExitTime,
> > > -                                     v->SRExitZ8Time,
> > > -                                     v->SREnterPlusExitZ8Time,
> > >                                       v->ProjectedDCFCLKDeepSleep[i][j],
> > >                                       v->DETBufferSizeYThisState,
> > >                                       v->DETBufferSizeCThisState,
> > >                                       v->SwathHeightYThisState,
> > >                                       v->SwathHeightCThisState,
> > > -                                     v->LBBitPerPixel,
> > >                                       v->SwathWidthYThisState,
> > >                                       v->SwathWidthCThisState,
> > > -                                     v->HRatio,
> > > -                                     v->HRatioChroma,
> > > -                                     v->vtaps,
> > > -                                     v->VTAPsChroma,
> > > -                                     v->VRatio,
> > > -                                     v->VRatioChroma,
> > > -                                     v->HTotal,
> > > -                                     v->PixelClock,
> > > -                                     v->BlendingAndTiming,
> > >                                       v->NoOfDPPThisState,
> > >                                       v->BytePerPixelInDETY,
> > >                                       v->BytePerPixelInDETC,
> > > -                                     v->DSTXAfterScaler,
> > > -                                     v->DSTYAfterScaler,
> > > -                                     v->WritebackEnable,
> > > -                                     v->WritebackPixelFormat,
> > > -                                     v->WritebackDestinationWidth,
> > > -                                     v->WritebackDestinationHeight,
> > > -                                     v->WritebackSourceHeight,
> > >                                       UnboundedRequestEnabledThisState,
> > >                                       CompressedBufferSizeInkByteThisState,
> > >                                       &v->DRAMClockChangeSupport[i][j],
> > > -                                     &v->UrgentWatermark,
> > > -                                     &v->WritebackUrgentWatermark,
> > > -                                     &v->DRAMClockChangeWatermark,
> > > -                                     &v->WritebackDRAMClockChangeWatermark,
> > > -                                     &dummy,
> > >                                       &dummy,
> > >                                       &dummy,
> > >                                       &dummy,
> > > -                                     &v->MinActiveDRAMClockChangeLatencySupported);
> > > +                                     &dummy);
> > >               }
> > >       }
> > >
> > > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >               struct display_mode_lib *mode_lib,
> > >               unsigned int PrefetchMode,
> > > -             unsigned int NumberOfActivePlanes,
> > > -             unsigned int MaxLineBufferLines,
> > > -             unsigned int LineBufferSize,
> > > -             unsigned int WritebackInterfaceBufferSize,
> > >               double DCFCLK,
> > >               double ReturnBW,
> > > -             bool SynchronizedVBlank,
> > > -             unsigned int dpte_group_bytes[],
> > > -             unsigned int MetaChunkSize,
> > >               double UrgentLatency,
> > >               double ExtraLatency,
> > > -             double WritebackLatency,
> > > -             double WritebackChunkSize,
> > >               double SOCCLK,
> > > -             double DRAMClockChangeLatency,
> > > -             double SRExitTime,
> > > -             double SREnterPlusExitTime,
> > > -             double SRExitZ8Time,
> > > -             double SREnterPlusExitZ8Time,
> > >               double DCFCLKDeepSleep,
> > >               unsigned int DETBufferSizeY[],
> > >               unsigned int DETBufferSizeC[],
> > >               unsigned int SwathHeightY[],
> > >               unsigned int SwathHeightC[],
> > > -             unsigned int LBBitPerPixel[],
> > >               double SwathWidthY[],
> > >               double SwathWidthC[],
> > > -             double HRatio[],
> > > -             double HRatioChroma[],
> > > -             unsigned int vtaps[],
> > > -             unsigned int VTAPsChroma[],
> > > -             double VRatio[],
> > > -             double VRatioChroma[],
> > > -             unsigned int HTotal[],
> > > -             double PixelClock[],
> > > -             unsigned int BlendingAndTiming[],
> > >               unsigned int DPPPerPlane[],
> > >               double BytePerPixelDETY[],
> > >               double BytePerPixelDETC[],
> > > -             double DSTXAfterScaler[],
> > > -             double DSTYAfterScaler[],
> > > -             bool WritebackEnable[],
> > > -             enum source_format_class WritebackPixelFormat[],
> > > -             double WritebackDestinationWidth[],
> > > -             double WritebackDestinationHeight[],
> > > -             double WritebackSourceHeight[],
> > >               bool UnboundedRequestEnabled,
> > >               unsigned int CompressedBufferSizeInkByte,
> > >               enum clock_change_support *DRAMClockChangeSupport,
> > > -             double *UrgentWatermark,
> > > -             double *WritebackUrgentWatermark,
> > > -             double *DRAMClockChangeWatermark,
> > > -             double *WritebackDRAMClockChangeWatermark,
> > >               double *StutterExitWatermark,
> > >               double *StutterEnterPlusExitWatermark,
> > >               double *Z8StutterExitWatermark,
> > > -             double *Z8StutterEnterPlusExitWatermark,
> > > -             double *MinActiveDRAMClockChangeLatencySupported)
> > > +             double *Z8StutterEnterPlusExitWatermark)
> > >  {
> > >       struct vba_vars_st *v = &mode_lib->vba;
> > >       double EffectiveLBLatencyHidingY;
> > > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >       double TotalPixelBW = 0.0;
> > >       int k, j;
> > >
> > > -     *UrgentWatermark = UrgentLatency + ExtraLatency;
> > > +     v->UrgentWatermark = UrgentLatency + ExtraLatency;
> > >
> > >  #ifdef __DML_VBA_DEBUG__
> > >       dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> > >       dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > > -     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > > +     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> > >  #endif
> > >
> > > -     *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > > +     v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> > >
> > >  #ifdef __DML_VBA_DEBUG__
> > > -     dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > > -     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > > +     dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > > +     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> > >  #endif
> > >
> > >       v->TotalActiveWriteback = 0;
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > -             if (WritebackEnable[k] == true) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > +             if (v->WritebackEnable[k] == true) {
> > >                       v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> > >               }
> > >       }
> > >
> > >       if (v->TotalActiveWriteback <= 1) {
> > > -             *WritebackUrgentWatermark = WritebackLatency;
> > > +             v->WritebackUrgentWatermark = v->WritebackLatency;
> > >       } else {
> > > -             *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > +             v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > >       }
> > >
> > >       if (v->TotalActiveWriteback <= 1) {
> > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> > >       } else {
> > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > >       }
> > >
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >               TotalPixelBW = TotalPixelBW
> > > -                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > > -                                             / (HTotal[k] / PixelClock[k]);
> > > +                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > > +                                             / (v->HTotal[k] / v->PixelClock[k]);
> > >       }
> > >
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >               double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> > >
> > >               v->LBLatencyHidingSourceLinesY = dml_min(
> > > -                             (double) MaxLineBufferLines,
> > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > > +                             (double) v->MaxLineBufferLines,
> > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> > >
> > >               v->LBLatencyHidingSourceLinesC = dml_min(
> > > -                             (double) MaxLineBufferLines,
> > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > > +                             (double) v->MaxLineBufferLines,
> > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> > >
> > > -             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > > +             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> > >
> > > -             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > > +             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> > >
> > >               if (UnboundedRequestEnabled) {
> > >                       EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > > -                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > > +                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> > >               }
> > >
> > >               LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> > >               if (BytePerPixelDETC[k] > 0) {
> > >                       LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> > >                       LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > > -                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > > +                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> > >               } else {
> > >                       LinesInDETC = 0;
> > >                       FullDETBufferingTimeC = 999999;
> > >               }
> > >
> > >               ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > > -                             - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > +                             - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > >
> > > -             if (NumberOfActivePlanes > 1) {
> > > +             if (v->NumberOfActivePlanes > 1) {
> > >                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > > -                                     - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > > +                                     - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> > >               }
> > >
> > >               if (BytePerPixelDETC[k] > 0) {
> > >                       ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > > -                                     - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > +                                     - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > >
> > > -                     if (NumberOfActivePlanes > 1) {
> > > +                     if (v->NumberOfActivePlanes > 1) {
> > >                               ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > > -                                             - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > > +                                             - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> > >                       }
> > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> > >               } else {
> > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> > >               }
> > >
> > > -             if (WritebackEnable[k] == true) {
> > > -                     WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > > -                                     / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > > -                     if (WritebackPixelFormat[k] == dm_444_64) {
> > > +             if (v->WritebackEnable[k] == true) {
> > > +                     WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > > +                                     / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > > +                     if (v->WritebackPixelFormat[k] == dm_444_64) {
> > >                               WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> > >                       }
> > >                       WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >
> > >       v->MinActiveDRAMClockChangeMargin = 999999;
> > >       PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >               if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> > >                       v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > > -                     if (BlendingAndTiming[k] == k) {
> > > +                     if (v->BlendingAndTiming[k] == k) {
> > >                               PlaneWithMinActiveDRAMClockChangeMargin = k;
> > >                       } else {
> > > -                             for (j = 0; j < NumberOfActivePlanes; ++j) {
> > > -                                     if (BlendingAndTiming[k] == j) {
> > > +                             for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > > +                                     if (v->BlendingAndTiming[k] == j) {
> > >                                               PlaneWithMinActiveDRAMClockChangeMargin = j;
> > >                                       }
> > >                               }
> > > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >               }
> > >       }
> > >
> > > -     *MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > > +     v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> > >
> > >       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > -             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > +             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > >                               && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> > >                       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> > >               }
> > > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >
> > >       v->TotalNumberOfActiveOTG = 0;
> > >
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > -             if (BlendingAndTiming[k] == k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > +             if (v->BlendingAndTiming[k] == k) {
> > >                       v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> > >               }
> > >       }
> > >
> > >       if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> > >               *DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > > -     } else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > > +     } else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > >                       || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> > >               *DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> > >       } else {
> > >               *DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> > >       }
> > >
> > > -     *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > -     *StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > -     *Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > -     *Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > +     *StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > +     *StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > +     *Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > +     *Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > >
> > >  #ifdef __DML_VBA_DEBUG__
> > >       dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> > >
> > > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-20 23:48       ` Nathan Chancellor
  0 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-20 23:48 UTC (permalink / raw)
  To: Alex Deucher
  Cc: Nick Desaulniers, llvm, kernelci.org bot, Leo Li, Tom Rix, Pan,
	Xinhui, Rodrigo Siqueira, patches, dri-devel, Maíra Canal,
	amd-gfx, Alex Deucher, Christian König

On Tue, Sep 20, 2022 at 12:06:46PM -0400, Alex Deucher wrote:
> Applied the series.  Thanks!

Great, thank you so much! Hopefully these could also be applied to the
6.0 branch so that this error can be resolved there as well. No worries
on timeline if that was already the plan but I just want to keep -Werror
on for arm64 and x86_64 allmodconfig for this release.

Cheers,
Nathan

> On Sat, Sep 17, 2022 at 8:38 AM Maíra Canal <mairacanal@riseup.net> wrote:
> >
> > Hi Nathan,
> >
> > On 9/16/22 18:06, Nathan Chancellor wrote:
> > > Most of the arguments are identical between the two call sites and they
> > > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > > the total amount of stack space that
> > > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> > >
> > >   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> > >   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> > >        ^
> > >   1 error generated.
> > >
> > > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> >
> > I have built-tested the whole series with clang 14.0.5 (Fedora
> > 14.0.5-1.fc36), using:
> >
> > $ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
> > drivers/gpu/drm/amd/amdgpu/
> >
> > Another great patch to the DML! As Tom, I also would like to see this
> > expand to all display_mode_vba files, but so far this is great to
> > unbreak the build.
> >
> > To the whole series:
> >
> > Tested-by: Maíra Canal <mairacanal@riseup.net>
> >
> > Best Regards,
> > - Maíra Canal
> >
> > > ---
> > >
> > > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > > applied to dml314.
> > >
> > >  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> > >  1 file changed, 52 insertions(+), 196 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > index 2829f179f982..32ceb72f7a14 100644
> > > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >               struct display_mode_lib *mode_lib,
> > >               unsigned int PrefetchMode,
> > > -             unsigned int NumberOfActivePlanes,
> > > -             unsigned int MaxLineBufferLines,
> > > -             unsigned int LineBufferSize,
> > > -             unsigned int WritebackInterfaceBufferSize,
> > >               double DCFCLK,
> > >               double ReturnBW,
> > > -             bool SynchronizedVBlank,
> > > -             unsigned int dpte_group_bytes[],
> > > -             unsigned int MetaChunkSize,
> > >               double UrgentLatency,
> > >               double ExtraLatency,
> > > -             double WritebackLatency,
> > > -             double WritebackChunkSize,
> > >               double SOCCLK,
> > > -             double DRAMClockChangeLatency,
> > > -             double SRExitTime,
> > > -             double SREnterPlusExitTime,
> > > -             double SRExitZ8Time,
> > > -             double SREnterPlusExitZ8Time,
> > >               double DCFCLKDeepSleep,
> > >               unsigned int DETBufferSizeY[],
> > >               unsigned int DETBufferSizeC[],
> > >               unsigned int SwathHeightY[],
> > >               unsigned int SwathHeightC[],
> > > -             unsigned int LBBitPerPixel[],
> > >               double SwathWidthY[],
> > >               double SwathWidthC[],
> > > -             double HRatio[],
> > > -             double HRatioChroma[],
> > > -             unsigned int vtaps[],
> > > -             unsigned int VTAPsChroma[],
> > > -             double VRatio[],
> > > -             double VRatioChroma[],
> > > -             unsigned int HTotal[],
> > > -             double PixelClock[],
> > > -             unsigned int BlendingAndTiming[],
> > >               unsigned int DPPPerPlane[],
> > >               double BytePerPixelDETY[],
> > >               double BytePerPixelDETC[],
> > > -             double DSTXAfterScaler[],
> > > -             double DSTYAfterScaler[],
> > > -             bool WritebackEnable[],
> > > -             enum source_format_class WritebackPixelFormat[],
> > > -             double WritebackDestinationWidth[],
> > > -             double WritebackDestinationHeight[],
> > > -             double WritebackSourceHeight[],
> > >               bool UnboundedRequestEnabled,
> > >               unsigned int CompressedBufferSizeInkByte,
> > >               enum clock_change_support *DRAMClockChangeSupport,
> > > -             double *UrgentWatermark,
> > > -             double *WritebackUrgentWatermark,
> > > -             double *DRAMClockChangeWatermark,
> > > -             double *WritebackDRAMClockChangeWatermark,
> > >               double *StutterExitWatermark,
> > >               double *StutterEnterPlusExitWatermark,
> > >               double *Z8StutterExitWatermark,
> > > -             double *Z8StutterEnterPlusExitWatermark,
> > > -             double *MinActiveDRAMClockChangeLatencySupported);
> > > +             double *Z8StutterEnterPlusExitWatermark);
> > >
> > >  static void CalculateDCFCLKDeepSleep(
> > >               struct display_mode_lib *mode_lib,
> > > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> > >               CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >                               mode_lib,
> > >                               PrefetchMode,
> > > -                             v->NumberOfActivePlanes,
> > > -                             v->MaxLineBufferLines,
> > > -                             v->LineBufferSize,
> > > -                             v->WritebackInterfaceBufferSize,
> > >                               v->DCFCLK,
> > >                               v->ReturnBW,
> > > -                             v->SynchronizedVBlank,
> > > -                             v->dpte_group_bytes,
> > > -                             v->MetaChunkSize,
> > >                               v->UrgentLatency,
> > >                               v->UrgentExtraLatency,
> > > -                             v->WritebackLatency,
> > > -                             v->WritebackChunkSize,
> > >                               v->SOCCLK,
> > > -                             v->DRAMClockChangeLatency,
> > > -                             v->SRExitTime,
> > > -                             v->SREnterPlusExitTime,
> > > -                             v->SRExitZ8Time,
> > > -                             v->SREnterPlusExitZ8Time,
> > >                               v->DCFCLKDeepSleep,
> > >                               v->DETBufferSizeY,
> > >                               v->DETBufferSizeC,
> > >                               v->SwathHeightY,
> > >                               v->SwathHeightC,
> > > -                             v->LBBitPerPixel,
> > >                               v->SwathWidthY,
> > >                               v->SwathWidthC,
> > > -                             v->HRatio,
> > > -                             v->HRatioChroma,
> > > -                             v->vtaps,
> > > -                             v->VTAPsChroma,
> > > -                             v->VRatio,
> > > -                             v->VRatioChroma,
> > > -                             v->HTotal,
> > > -                             v->PixelClock,
> > > -                             v->BlendingAndTiming,
> > >                               v->DPPPerPlane,
> > >                               v->BytePerPixelDETY,
> > >                               v->BytePerPixelDETC,
> > > -                             v->DSTXAfterScaler,
> > > -                             v->DSTYAfterScaler,
> > > -                             v->WritebackEnable,
> > > -                             v->WritebackPixelFormat,
> > > -                             v->WritebackDestinationWidth,
> > > -                             v->WritebackDestinationHeight,
> > > -                             v->WritebackSourceHeight,
> > >                               v->UnboundedRequestEnabled,
> > >                               v->CompressedBufferSizeInkByte,
> > >                               &DRAMClockChangeSupport,
> > > -                             &v->UrgentWatermark,
> > > -                             &v->WritebackUrgentWatermark,
> > > -                             &v->DRAMClockChangeWatermark,
> > > -                             &v->WritebackDRAMClockChangeWatermark,
> > >                               &v->StutterExitWatermark,
> > >                               &v->StutterEnterPlusExitWatermark,
> > >                               &v->Z8StutterExitWatermark,
> > > -                             &v->Z8StutterEnterPlusExitWatermark,
> > > -                             &v->MinActiveDRAMClockChangeLatencySupported);
> > > +                             &v->Z8StutterEnterPlusExitWatermark);
> > >
> > >               for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >                       if (v->WritebackEnable[k] == true) {
> > > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > >                       CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >                                       mode_lib,
> > >                                       v->PrefetchModePerState[i][j],
> > > -                                     v->NumberOfActivePlanes,
> > > -                                     v->MaxLineBufferLines,
> > > -                                     v->LineBufferSize,
> > > -                                     v->WritebackInterfaceBufferSize,
> > >                                       v->DCFCLKState[i][j],
> > >                                       v->ReturnBWPerState[i][j],
> > > -                                     v->SynchronizedVBlank,
> > > -                                     v->dpte_group_bytes,
> > > -                                     v->MetaChunkSize,
> > >                                       v->UrgLatency[i],
> > >                                       v->ExtraLatency,
> > > -                                     v->WritebackLatency,
> > > -                                     v->WritebackChunkSize,
> > >                                       v->SOCCLKPerState[i],
> > > -                                     v->DRAMClockChangeLatency,
> > > -                                     v->SRExitTime,
> > > -                                     v->SREnterPlusExitTime,
> > > -                                     v->SRExitZ8Time,
> > > -                                     v->SREnterPlusExitZ8Time,
> > >                                       v->ProjectedDCFCLKDeepSleep[i][j],
> > >                                       v->DETBufferSizeYThisState,
> > >                                       v->DETBufferSizeCThisState,
> > >                                       v->SwathHeightYThisState,
> > >                                       v->SwathHeightCThisState,
> > > -                                     v->LBBitPerPixel,
> > >                                       v->SwathWidthYThisState,
> > >                                       v->SwathWidthCThisState,
> > > -                                     v->HRatio,
> > > -                                     v->HRatioChroma,
> > > -                                     v->vtaps,
> > > -                                     v->VTAPsChroma,
> > > -                                     v->VRatio,
> > > -                                     v->VRatioChroma,
> > > -                                     v->HTotal,
> > > -                                     v->PixelClock,
> > > -                                     v->BlendingAndTiming,
> > >                                       v->NoOfDPPThisState,
> > >                                       v->BytePerPixelInDETY,
> > >                                       v->BytePerPixelInDETC,
> > > -                                     v->DSTXAfterScaler,
> > > -                                     v->DSTYAfterScaler,
> > > -                                     v->WritebackEnable,
> > > -                                     v->WritebackPixelFormat,
> > > -                                     v->WritebackDestinationWidth,
> > > -                                     v->WritebackDestinationHeight,
> > > -                                     v->WritebackSourceHeight,
> > >                                       UnboundedRequestEnabledThisState,
> > >                                       CompressedBufferSizeInkByteThisState,
> > >                                       &v->DRAMClockChangeSupport[i][j],
> > > -                                     &v->UrgentWatermark,
> > > -                                     &v->WritebackUrgentWatermark,
> > > -                                     &v->DRAMClockChangeWatermark,
> > > -                                     &v->WritebackDRAMClockChangeWatermark,
> > > -                                     &dummy,
> > >                                       &dummy,
> > >                                       &dummy,
> > >                                       &dummy,
> > > -                                     &v->MinActiveDRAMClockChangeLatencySupported);
> > > +                                     &dummy);
> > >               }
> > >       }
> > >
> > > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >               struct display_mode_lib *mode_lib,
> > >               unsigned int PrefetchMode,
> > > -             unsigned int NumberOfActivePlanes,
> > > -             unsigned int MaxLineBufferLines,
> > > -             unsigned int LineBufferSize,
> > > -             unsigned int WritebackInterfaceBufferSize,
> > >               double DCFCLK,
> > >               double ReturnBW,
> > > -             bool SynchronizedVBlank,
> > > -             unsigned int dpte_group_bytes[],
> > > -             unsigned int MetaChunkSize,
> > >               double UrgentLatency,
> > >               double ExtraLatency,
> > > -             double WritebackLatency,
> > > -             double WritebackChunkSize,
> > >               double SOCCLK,
> > > -             double DRAMClockChangeLatency,
> > > -             double SRExitTime,
> > > -             double SREnterPlusExitTime,
> > > -             double SRExitZ8Time,
> > > -             double SREnterPlusExitZ8Time,
> > >               double DCFCLKDeepSleep,
> > >               unsigned int DETBufferSizeY[],
> > >               unsigned int DETBufferSizeC[],
> > >               unsigned int SwathHeightY[],
> > >               unsigned int SwathHeightC[],
> > > -             unsigned int LBBitPerPixel[],
> > >               double SwathWidthY[],
> > >               double SwathWidthC[],
> > > -             double HRatio[],
> > > -             double HRatioChroma[],
> > > -             unsigned int vtaps[],
> > > -             unsigned int VTAPsChroma[],
> > > -             double VRatio[],
> > > -             double VRatioChroma[],
> > > -             unsigned int HTotal[],
> > > -             double PixelClock[],
> > > -             unsigned int BlendingAndTiming[],
> > >               unsigned int DPPPerPlane[],
> > >               double BytePerPixelDETY[],
> > >               double BytePerPixelDETC[],
> > > -             double DSTXAfterScaler[],
> > > -             double DSTYAfterScaler[],
> > > -             bool WritebackEnable[],
> > > -             enum source_format_class WritebackPixelFormat[],
> > > -             double WritebackDestinationWidth[],
> > > -             double WritebackDestinationHeight[],
> > > -             double WritebackSourceHeight[],
> > >               bool UnboundedRequestEnabled,
> > >               unsigned int CompressedBufferSizeInkByte,
> > >               enum clock_change_support *DRAMClockChangeSupport,
> > > -             double *UrgentWatermark,
> > > -             double *WritebackUrgentWatermark,
> > > -             double *DRAMClockChangeWatermark,
> > > -             double *WritebackDRAMClockChangeWatermark,
> > >               double *StutterExitWatermark,
> > >               double *StutterEnterPlusExitWatermark,
> > >               double *Z8StutterExitWatermark,
> > > -             double *Z8StutterEnterPlusExitWatermark,
> > > -             double *MinActiveDRAMClockChangeLatencySupported)
> > > +             double *Z8StutterEnterPlusExitWatermark)
> > >  {
> > >       struct vba_vars_st *v = &mode_lib->vba;
> > >       double EffectiveLBLatencyHidingY;
> > > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >       double TotalPixelBW = 0.0;
> > >       int k, j;
> > >
> > > -     *UrgentWatermark = UrgentLatency + ExtraLatency;
> > > +     v->UrgentWatermark = UrgentLatency + ExtraLatency;
> > >
> > >  #ifdef __DML_VBA_DEBUG__
> > >       dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> > >       dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > > -     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > > +     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> > >  #endif
> > >
> > > -     *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > > +     v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> > >
> > >  #ifdef __DML_VBA_DEBUG__
> > > -     dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > > -     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > > +     dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > > +     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> > >  #endif
> > >
> > >       v->TotalActiveWriteback = 0;
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > -             if (WritebackEnable[k] == true) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > +             if (v->WritebackEnable[k] == true) {
> > >                       v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> > >               }
> > >       }
> > >
> > >       if (v->TotalActiveWriteback <= 1) {
> > > -             *WritebackUrgentWatermark = WritebackLatency;
> > > +             v->WritebackUrgentWatermark = v->WritebackLatency;
> > >       } else {
> > > -             *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > +             v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > >       }
> > >
> > >       if (v->TotalActiveWriteback <= 1) {
> > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> > >       } else {
> > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > >       }
> > >
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >               TotalPixelBW = TotalPixelBW
> > > -                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > > -                                             / (HTotal[k] / PixelClock[k]);
> > > +                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > > +                                             / (v->HTotal[k] / v->PixelClock[k]);
> > >       }
> > >
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >               double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> > >
> > >               v->LBLatencyHidingSourceLinesY = dml_min(
> > > -                             (double) MaxLineBufferLines,
> > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > > +                             (double) v->MaxLineBufferLines,
> > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> > >
> > >               v->LBLatencyHidingSourceLinesC = dml_min(
> > > -                             (double) MaxLineBufferLines,
> > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > > +                             (double) v->MaxLineBufferLines,
> > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> > >
> > > -             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > > +             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> > >
> > > -             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > > +             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> > >
> > >               if (UnboundedRequestEnabled) {
> > >                       EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > > -                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > > +                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> > >               }
> > >
> > >               LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> > >               if (BytePerPixelDETC[k] > 0) {
> > >                       LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> > >                       LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > > -                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > > +                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> > >               } else {
> > >                       LinesInDETC = 0;
> > >                       FullDETBufferingTimeC = 999999;
> > >               }
> > >
> > >               ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > > -                             - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > +                             - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > >
> > > -             if (NumberOfActivePlanes > 1) {
> > > +             if (v->NumberOfActivePlanes > 1) {
> > >                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > > -                                     - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > > +                                     - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> > >               }
> > >
> > >               if (BytePerPixelDETC[k] > 0) {
> > >                       ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > > -                                     - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > +                                     - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > >
> > > -                     if (NumberOfActivePlanes > 1) {
> > > +                     if (v->NumberOfActivePlanes > 1) {
> > >                               ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > > -                                             - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > > +                                             - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> > >                       }
> > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> > >               } else {
> > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> > >               }
> > >
> > > -             if (WritebackEnable[k] == true) {
> > > -                     WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > > -                                     / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > > -                     if (WritebackPixelFormat[k] == dm_444_64) {
> > > +             if (v->WritebackEnable[k] == true) {
> > > +                     WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > > +                                     / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > > +                     if (v->WritebackPixelFormat[k] == dm_444_64) {
> > >                               WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> > >                       }
> > >                       WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >
> > >       v->MinActiveDRAMClockChangeMargin = 999999;
> > >       PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >               if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> > >                       v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > > -                     if (BlendingAndTiming[k] == k) {
> > > +                     if (v->BlendingAndTiming[k] == k) {
> > >                               PlaneWithMinActiveDRAMClockChangeMargin = k;
> > >                       } else {
> > > -                             for (j = 0; j < NumberOfActivePlanes; ++j) {
> > > -                                     if (BlendingAndTiming[k] == j) {
> > > +                             for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > > +                                     if (v->BlendingAndTiming[k] == j) {
> > >                                               PlaneWithMinActiveDRAMClockChangeMargin = j;
> > >                                       }
> > >                               }
> > > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >               }
> > >       }
> > >
> > > -     *MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > > +     v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> > >
> > >       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > -             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > +             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > >                               && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> > >                       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> > >               }
> > > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >
> > >       v->TotalNumberOfActiveOTG = 0;
> > >
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > -             if (BlendingAndTiming[k] == k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > +             if (v->BlendingAndTiming[k] == k) {
> > >                       v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> > >               }
> > >       }
> > >
> > >       if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> > >               *DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > > -     } else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > > +     } else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > >                       || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> > >               *DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> > >       } else {
> > >               *DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> > >       }
> > >
> > > -     *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > -     *StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > -     *Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > -     *Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > +     *StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > +     *StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > +     *Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > +     *Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > >
> > >  #ifdef __DML_VBA_DEBUG__
> > >       dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> > >
> > > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-20 23:48       ` Nathan Chancellor
  0 siblings, 0 replies; 19+ messages in thread
From: Nathan Chancellor @ 2022-09-20 23:48 UTC (permalink / raw)
  To: Alex Deucher
  Cc: Nick Desaulniers, llvm, kernelci.org bot, Leo Li, Tom Rix, Pan,
	Xinhui, Rodrigo Siqueira, patches, dri-devel, Maíra Canal,
	amd-gfx, Alex Deucher, Harry Wentland, Christian König

On Tue, Sep 20, 2022 at 12:06:46PM -0400, Alex Deucher wrote:
> Applied the series.  Thanks!

Great, thank you so much! Hopefully these could also be applied to the
6.0 branch so that this error can be resolved there as well. No worries
on timeline if that was already the plan but I just want to keep -Werror
on for arm64 and x86_64 allmodconfig for this release.

Cheers,
Nathan

> On Sat, Sep 17, 2022 at 8:38 AM Maíra Canal <mairacanal@riseup.net> wrote:
> >
> > Hi Nathan,
> >
> > On 9/16/22 18:06, Nathan Chancellor wrote:
> > > Most of the arguments are identical between the two call sites and they
> > > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > > the total amount of stack space that
> > > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> > >
> > >   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> > >   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> > >        ^
> > >   1 error generated.
> > >
> > > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> >
> > I have built-tested the whole series with clang 14.0.5 (Fedora
> > 14.0.5-1.fc36), using:
> >
> > $ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
> > drivers/gpu/drm/amd/amdgpu/
> >
> > Another great patch to the DML! As Tom, I also would like to see this
> > expand to all display_mode_vba files, but so far this is great to
> > unbreak the build.
> >
> > To the whole series:
> >
> > Tested-by: Maíra Canal <mairacanal@riseup.net>
> >
> > Best Regards,
> > - Maíra Canal
> >
> > > ---
> > >
> > > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > > applied to dml314.
> > >
> > >  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> > >  1 file changed, 52 insertions(+), 196 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > index 2829f179f982..32ceb72f7a14 100644
> > > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >               struct display_mode_lib *mode_lib,
> > >               unsigned int PrefetchMode,
> > > -             unsigned int NumberOfActivePlanes,
> > > -             unsigned int MaxLineBufferLines,
> > > -             unsigned int LineBufferSize,
> > > -             unsigned int WritebackInterfaceBufferSize,
> > >               double DCFCLK,
> > >               double ReturnBW,
> > > -             bool SynchronizedVBlank,
> > > -             unsigned int dpte_group_bytes[],
> > > -             unsigned int MetaChunkSize,
> > >               double UrgentLatency,
> > >               double ExtraLatency,
> > > -             double WritebackLatency,
> > > -             double WritebackChunkSize,
> > >               double SOCCLK,
> > > -             double DRAMClockChangeLatency,
> > > -             double SRExitTime,
> > > -             double SREnterPlusExitTime,
> > > -             double SRExitZ8Time,
> > > -             double SREnterPlusExitZ8Time,
> > >               double DCFCLKDeepSleep,
> > >               unsigned int DETBufferSizeY[],
> > >               unsigned int DETBufferSizeC[],
> > >               unsigned int SwathHeightY[],
> > >               unsigned int SwathHeightC[],
> > > -             unsigned int LBBitPerPixel[],
> > >               double SwathWidthY[],
> > >               double SwathWidthC[],
> > > -             double HRatio[],
> > > -             double HRatioChroma[],
> > > -             unsigned int vtaps[],
> > > -             unsigned int VTAPsChroma[],
> > > -             double VRatio[],
> > > -             double VRatioChroma[],
> > > -             unsigned int HTotal[],
> > > -             double PixelClock[],
> > > -             unsigned int BlendingAndTiming[],
> > >               unsigned int DPPPerPlane[],
> > >               double BytePerPixelDETY[],
> > >               double BytePerPixelDETC[],
> > > -             double DSTXAfterScaler[],
> > > -             double DSTYAfterScaler[],
> > > -             bool WritebackEnable[],
> > > -             enum source_format_class WritebackPixelFormat[],
> > > -             double WritebackDestinationWidth[],
> > > -             double WritebackDestinationHeight[],
> > > -             double WritebackSourceHeight[],
> > >               bool UnboundedRequestEnabled,
> > >               unsigned int CompressedBufferSizeInkByte,
> > >               enum clock_change_support *DRAMClockChangeSupport,
> > > -             double *UrgentWatermark,
> > > -             double *WritebackUrgentWatermark,
> > > -             double *DRAMClockChangeWatermark,
> > > -             double *WritebackDRAMClockChangeWatermark,
> > >               double *StutterExitWatermark,
> > >               double *StutterEnterPlusExitWatermark,
> > >               double *Z8StutterExitWatermark,
> > > -             double *Z8StutterEnterPlusExitWatermark,
> > > -             double *MinActiveDRAMClockChangeLatencySupported);
> > > +             double *Z8StutterEnterPlusExitWatermark);
> > >
> > >  static void CalculateDCFCLKDeepSleep(
> > >               struct display_mode_lib *mode_lib,
> > > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> > >               CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >                               mode_lib,
> > >                               PrefetchMode,
> > > -                             v->NumberOfActivePlanes,
> > > -                             v->MaxLineBufferLines,
> > > -                             v->LineBufferSize,
> > > -                             v->WritebackInterfaceBufferSize,
> > >                               v->DCFCLK,
> > >                               v->ReturnBW,
> > > -                             v->SynchronizedVBlank,
> > > -                             v->dpte_group_bytes,
> > > -                             v->MetaChunkSize,
> > >                               v->UrgentLatency,
> > >                               v->UrgentExtraLatency,
> > > -                             v->WritebackLatency,
> > > -                             v->WritebackChunkSize,
> > >                               v->SOCCLK,
> > > -                             v->DRAMClockChangeLatency,
> > > -                             v->SRExitTime,
> > > -                             v->SREnterPlusExitTime,
> > > -                             v->SRExitZ8Time,
> > > -                             v->SREnterPlusExitZ8Time,
> > >                               v->DCFCLKDeepSleep,
> > >                               v->DETBufferSizeY,
> > >                               v->DETBufferSizeC,
> > >                               v->SwathHeightY,
> > >                               v->SwathHeightC,
> > > -                             v->LBBitPerPixel,
> > >                               v->SwathWidthY,
> > >                               v->SwathWidthC,
> > > -                             v->HRatio,
> > > -                             v->HRatioChroma,
> > > -                             v->vtaps,
> > > -                             v->VTAPsChroma,
> > > -                             v->VRatio,
> > > -                             v->VRatioChroma,
> > > -                             v->HTotal,
> > > -                             v->PixelClock,
> > > -                             v->BlendingAndTiming,
> > >                               v->DPPPerPlane,
> > >                               v->BytePerPixelDETY,
> > >                               v->BytePerPixelDETC,
> > > -                             v->DSTXAfterScaler,
> > > -                             v->DSTYAfterScaler,
> > > -                             v->WritebackEnable,
> > > -                             v->WritebackPixelFormat,
> > > -                             v->WritebackDestinationWidth,
> > > -                             v->WritebackDestinationHeight,
> > > -                             v->WritebackSourceHeight,
> > >                               v->UnboundedRequestEnabled,
> > >                               v->CompressedBufferSizeInkByte,
> > >                               &DRAMClockChangeSupport,
> > > -                             &v->UrgentWatermark,
> > > -                             &v->WritebackUrgentWatermark,
> > > -                             &v->DRAMClockChangeWatermark,
> > > -                             &v->WritebackDRAMClockChangeWatermark,
> > >                               &v->StutterExitWatermark,
> > >                               &v->StutterEnterPlusExitWatermark,
> > >                               &v->Z8StutterExitWatermark,
> > > -                             &v->Z8StutterEnterPlusExitWatermark,
> > > -                             &v->MinActiveDRAMClockChangeLatencySupported);
> > > +                             &v->Z8StutterEnterPlusExitWatermark);
> > >
> > >               for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >                       if (v->WritebackEnable[k] == true) {
> > > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > >                       CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >                                       mode_lib,
> > >                                       v->PrefetchModePerState[i][j],
> > > -                                     v->NumberOfActivePlanes,
> > > -                                     v->MaxLineBufferLines,
> > > -                                     v->LineBufferSize,
> > > -                                     v->WritebackInterfaceBufferSize,
> > >                                       v->DCFCLKState[i][j],
> > >                                       v->ReturnBWPerState[i][j],
> > > -                                     v->SynchronizedVBlank,
> > > -                                     v->dpte_group_bytes,
> > > -                                     v->MetaChunkSize,
> > >                                       v->UrgLatency[i],
> > >                                       v->ExtraLatency,
> > > -                                     v->WritebackLatency,
> > > -                                     v->WritebackChunkSize,
> > >                                       v->SOCCLKPerState[i],
> > > -                                     v->DRAMClockChangeLatency,
> > > -                                     v->SRExitTime,
> > > -                                     v->SREnterPlusExitTime,
> > > -                                     v->SRExitZ8Time,
> > > -                                     v->SREnterPlusExitZ8Time,
> > >                                       v->ProjectedDCFCLKDeepSleep[i][j],
> > >                                       v->DETBufferSizeYThisState,
> > >                                       v->DETBufferSizeCThisState,
> > >                                       v->SwathHeightYThisState,
> > >                                       v->SwathHeightCThisState,
> > > -                                     v->LBBitPerPixel,
> > >                                       v->SwathWidthYThisState,
> > >                                       v->SwathWidthCThisState,
> > > -                                     v->HRatio,
> > > -                                     v->HRatioChroma,
> > > -                                     v->vtaps,
> > > -                                     v->VTAPsChroma,
> > > -                                     v->VRatio,
> > > -                                     v->VRatioChroma,
> > > -                                     v->HTotal,
> > > -                                     v->PixelClock,
> > > -                                     v->BlendingAndTiming,
> > >                                       v->NoOfDPPThisState,
> > >                                       v->BytePerPixelInDETY,
> > >                                       v->BytePerPixelInDETC,
> > > -                                     v->DSTXAfterScaler,
> > > -                                     v->DSTYAfterScaler,
> > > -                                     v->WritebackEnable,
> > > -                                     v->WritebackPixelFormat,
> > > -                                     v->WritebackDestinationWidth,
> > > -                                     v->WritebackDestinationHeight,
> > > -                                     v->WritebackSourceHeight,
> > >                                       UnboundedRequestEnabledThisState,
> > >                                       CompressedBufferSizeInkByteThisState,
> > >                                       &v->DRAMClockChangeSupport[i][j],
> > > -                                     &v->UrgentWatermark,
> > > -                                     &v->WritebackUrgentWatermark,
> > > -                                     &v->DRAMClockChangeWatermark,
> > > -                                     &v->WritebackDRAMClockChangeWatermark,
> > > -                                     &dummy,
> > >                                       &dummy,
> > >                                       &dummy,
> > >                                       &dummy,
> > > -                                     &v->MinActiveDRAMClockChangeLatencySupported);
> > > +                                     &dummy);
> > >               }
> > >       }
> > >
> > > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >               struct display_mode_lib *mode_lib,
> > >               unsigned int PrefetchMode,
> > > -             unsigned int NumberOfActivePlanes,
> > > -             unsigned int MaxLineBufferLines,
> > > -             unsigned int LineBufferSize,
> > > -             unsigned int WritebackInterfaceBufferSize,
> > >               double DCFCLK,
> > >               double ReturnBW,
> > > -             bool SynchronizedVBlank,
> > > -             unsigned int dpte_group_bytes[],
> > > -             unsigned int MetaChunkSize,
> > >               double UrgentLatency,
> > >               double ExtraLatency,
> > > -             double WritebackLatency,
> > > -             double WritebackChunkSize,
> > >               double SOCCLK,
> > > -             double DRAMClockChangeLatency,
> > > -             double SRExitTime,
> > > -             double SREnterPlusExitTime,
> > > -             double SRExitZ8Time,
> > > -             double SREnterPlusExitZ8Time,
> > >               double DCFCLKDeepSleep,
> > >               unsigned int DETBufferSizeY[],
> > >               unsigned int DETBufferSizeC[],
> > >               unsigned int SwathHeightY[],
> > >               unsigned int SwathHeightC[],
> > > -             unsigned int LBBitPerPixel[],
> > >               double SwathWidthY[],
> > >               double SwathWidthC[],
> > > -             double HRatio[],
> > > -             double HRatioChroma[],
> > > -             unsigned int vtaps[],
> > > -             unsigned int VTAPsChroma[],
> > > -             double VRatio[],
> > > -             double VRatioChroma[],
> > > -             unsigned int HTotal[],
> > > -             double PixelClock[],
> > > -             unsigned int BlendingAndTiming[],
> > >               unsigned int DPPPerPlane[],
> > >               double BytePerPixelDETY[],
> > >               double BytePerPixelDETC[],
> > > -             double DSTXAfterScaler[],
> > > -             double DSTYAfterScaler[],
> > > -             bool WritebackEnable[],
> > > -             enum source_format_class WritebackPixelFormat[],
> > > -             double WritebackDestinationWidth[],
> > > -             double WritebackDestinationHeight[],
> > > -             double WritebackSourceHeight[],
> > >               bool UnboundedRequestEnabled,
> > >               unsigned int CompressedBufferSizeInkByte,
> > >               enum clock_change_support *DRAMClockChangeSupport,
> > > -             double *UrgentWatermark,
> > > -             double *WritebackUrgentWatermark,
> > > -             double *DRAMClockChangeWatermark,
> > > -             double *WritebackDRAMClockChangeWatermark,
> > >               double *StutterExitWatermark,
> > >               double *StutterEnterPlusExitWatermark,
> > >               double *Z8StutterExitWatermark,
> > > -             double *Z8StutterEnterPlusExitWatermark,
> > > -             double *MinActiveDRAMClockChangeLatencySupported)
> > > +             double *Z8StutterEnterPlusExitWatermark)
> > >  {
> > >       struct vba_vars_st *v = &mode_lib->vba;
> > >       double EffectiveLBLatencyHidingY;
> > > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >       double TotalPixelBW = 0.0;
> > >       int k, j;
> > >
> > > -     *UrgentWatermark = UrgentLatency + ExtraLatency;
> > > +     v->UrgentWatermark = UrgentLatency + ExtraLatency;
> > >
> > >  #ifdef __DML_VBA_DEBUG__
> > >       dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> > >       dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > > -     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > > +     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> > >  #endif
> > >
> > > -     *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > > +     v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> > >
> > >  #ifdef __DML_VBA_DEBUG__
> > > -     dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > > -     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > > +     dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > > +     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> > >  #endif
> > >
> > >       v->TotalActiveWriteback = 0;
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > -             if (WritebackEnable[k] == true) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > +             if (v->WritebackEnable[k] == true) {
> > >                       v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> > >               }
> > >       }
> > >
> > >       if (v->TotalActiveWriteback <= 1) {
> > > -             *WritebackUrgentWatermark = WritebackLatency;
> > > +             v->WritebackUrgentWatermark = v->WritebackLatency;
> > >       } else {
> > > -             *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > +             v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > >       }
> > >
> > >       if (v->TotalActiveWriteback <= 1) {
> > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> > >       } else {
> > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > >       }
> > >
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >               TotalPixelBW = TotalPixelBW
> > > -                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > > -                                             / (HTotal[k] / PixelClock[k]);
> > > +                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > > +                                             / (v->HTotal[k] / v->PixelClock[k]);
> > >       }
> > >
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >               double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> > >
> > >               v->LBLatencyHidingSourceLinesY = dml_min(
> > > -                             (double) MaxLineBufferLines,
> > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > > +                             (double) v->MaxLineBufferLines,
> > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> > >
> > >               v->LBLatencyHidingSourceLinesC = dml_min(
> > > -                             (double) MaxLineBufferLines,
> > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > > +                             (double) v->MaxLineBufferLines,
> > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> > >
> > > -             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > > +             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> > >
> > > -             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > > +             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> > >
> > >               if (UnboundedRequestEnabled) {
> > >                       EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > > -                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > > +                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> > >               }
> > >
> > >               LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> > >               if (BytePerPixelDETC[k] > 0) {
> > >                       LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> > >                       LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > > -                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > > +                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> > >               } else {
> > >                       LinesInDETC = 0;
> > >                       FullDETBufferingTimeC = 999999;
> > >               }
> > >
> > >               ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > > -                             - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > +                             - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > >
> > > -             if (NumberOfActivePlanes > 1) {
> > > +             if (v->NumberOfActivePlanes > 1) {
> > >                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > > -                                     - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > > +                                     - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> > >               }
> > >
> > >               if (BytePerPixelDETC[k] > 0) {
> > >                       ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > > -                                     - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > +                                     - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > >
> > > -                     if (NumberOfActivePlanes > 1) {
> > > +                     if (v->NumberOfActivePlanes > 1) {
> > >                               ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > > -                                             - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > > +                                             - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> > >                       }
> > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> > >               } else {
> > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> > >               }
> > >
> > > -             if (WritebackEnable[k] == true) {
> > > -                     WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > > -                                     / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > > -                     if (WritebackPixelFormat[k] == dm_444_64) {
> > > +             if (v->WritebackEnable[k] == true) {
> > > +                     WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > > +                                     / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > > +                     if (v->WritebackPixelFormat[k] == dm_444_64) {
> > >                               WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> > >                       }
> > >                       WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >
> > >       v->MinActiveDRAMClockChangeMargin = 999999;
> > >       PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > >               if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> > >                       v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > > -                     if (BlendingAndTiming[k] == k) {
> > > +                     if (v->BlendingAndTiming[k] == k) {
> > >                               PlaneWithMinActiveDRAMClockChangeMargin = k;
> > >                       } else {
> > > -                             for (j = 0; j < NumberOfActivePlanes; ++j) {
> > > -                                     if (BlendingAndTiming[k] == j) {
> > > +                             for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > > +                                     if (v->BlendingAndTiming[k] == j) {
> > >                                               PlaneWithMinActiveDRAMClockChangeMargin = j;
> > >                                       }
> > >                               }
> > > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >               }
> > >       }
> > >
> > > -     *MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > > +     v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> > >
> > >       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > -             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > +             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > >                               && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> > >                       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> > >               }
> > > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > >
> > >       v->TotalNumberOfActiveOTG = 0;
> > >
> > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > -             if (BlendingAndTiming[k] == k) {
> > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > +             if (v->BlendingAndTiming[k] == k) {
> > >                       v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> > >               }
> > >       }
> > >
> > >       if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> > >               *DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > > -     } else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > > +     } else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > >                       || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> > >               *DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> > >       } else {
> > >               *DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> > >       }
> > >
> > > -     *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > -     *StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > -     *Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > -     *Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > +     *StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > +     *StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > +     *Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > +     *Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > >
> > >  #ifdef __DML_VBA_DEBUG__
> > >       dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> > >
> > > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
  2022-09-20 23:48       ` Nathan Chancellor
  (?)
@ 2022-09-21  1:12         ` Alex Deucher
  -1 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2022-09-21  1:12 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: Maíra Canal, Harry Wentland, Leo Li, Rodrigo Siqueira,
	Alex Deucher, Christian König, Pan, Xinhui,
	kernelci.org bot, Tom Rix, llvm, Nick Desaulniers, patches,
	dri-devel, amd-gfx

On Tue, Sep 20, 2022 at 7:48 PM Nathan Chancellor <nathan@kernel.org> wrote:
>
> On Tue, Sep 20, 2022 at 12:06:46PM -0400, Alex Deucher wrote:
> > Applied the series.  Thanks!
>
> Great, thank you so much! Hopefully these could also be applied to the
> 6.0 branch so that this error can be resolved there as well. No worries
> on timeline if that was already the plan but I just want to keep -Werror
> on for arm64 and x86_64 allmodconfig for this release.

Yes, that is the plan.

Alex

>
> Cheers,
> Nathan
>
> > On Sat, Sep 17, 2022 at 8:38 AM Maíra Canal <mairacanal@riseup.net> wrote:
> > >
> > > Hi Nathan,
> > >
> > > On 9/16/22 18:06, Nathan Chancellor wrote:
> > > > Most of the arguments are identical between the two call sites and they
> > > > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > > > the total amount of stack space that
> > > > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > > > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> > > >
> > > >   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> > > >   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> > > >        ^
> > > >   1 error generated.
> > > >
> > > > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > > > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > > > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> > >
> > > I have built-tested the whole series with clang 14.0.5 (Fedora
> > > 14.0.5-1.fc36), using:
> > >
> > > $ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
> > > drivers/gpu/drm/amd/amdgpu/
> > >
> > > Another great patch to the DML! As Tom, I also would like to see this
> > > expand to all display_mode_vba files, but so far this is great to
> > > unbreak the build.
> > >
> > > To the whole series:
> > >
> > > Tested-by: Maíra Canal <mairacanal@riseup.net>
> > >
> > > Best Regards,
> > > - Maíra Canal
> > >
> > > > ---
> > > >
> > > > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > > > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > > > applied to dml314.
> > > >
> > > >  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> > > >  1 file changed, 52 insertions(+), 196 deletions(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > > index 2829f179f982..32ceb72f7a14 100644
> > > > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> > > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >               struct display_mode_lib *mode_lib,
> > > >               unsigned int PrefetchMode,
> > > > -             unsigned int NumberOfActivePlanes,
> > > > -             unsigned int MaxLineBufferLines,
> > > > -             unsigned int LineBufferSize,
> > > > -             unsigned int WritebackInterfaceBufferSize,
> > > >               double DCFCLK,
> > > >               double ReturnBW,
> > > > -             bool SynchronizedVBlank,
> > > > -             unsigned int dpte_group_bytes[],
> > > > -             unsigned int MetaChunkSize,
> > > >               double UrgentLatency,
> > > >               double ExtraLatency,
> > > > -             double WritebackLatency,
> > > > -             double WritebackChunkSize,
> > > >               double SOCCLK,
> > > > -             double DRAMClockChangeLatency,
> > > > -             double SRExitTime,
> > > > -             double SREnterPlusExitTime,
> > > > -             double SRExitZ8Time,
> > > > -             double SREnterPlusExitZ8Time,
> > > >               double DCFCLKDeepSleep,
> > > >               unsigned int DETBufferSizeY[],
> > > >               unsigned int DETBufferSizeC[],
> > > >               unsigned int SwathHeightY[],
> > > >               unsigned int SwathHeightC[],
> > > > -             unsigned int LBBitPerPixel[],
> > > >               double SwathWidthY[],
> > > >               double SwathWidthC[],
> > > > -             double HRatio[],
> > > > -             double HRatioChroma[],
> > > > -             unsigned int vtaps[],
> > > > -             unsigned int VTAPsChroma[],
> > > > -             double VRatio[],
> > > > -             double VRatioChroma[],
> > > > -             unsigned int HTotal[],
> > > > -             double PixelClock[],
> > > > -             unsigned int BlendingAndTiming[],
> > > >               unsigned int DPPPerPlane[],
> > > >               double BytePerPixelDETY[],
> > > >               double BytePerPixelDETC[],
> > > > -             double DSTXAfterScaler[],
> > > > -             double DSTYAfterScaler[],
> > > > -             bool WritebackEnable[],
> > > > -             enum source_format_class WritebackPixelFormat[],
> > > > -             double WritebackDestinationWidth[],
> > > > -             double WritebackDestinationHeight[],
> > > > -             double WritebackSourceHeight[],
> > > >               bool UnboundedRequestEnabled,
> > > >               unsigned int CompressedBufferSizeInkByte,
> > > >               enum clock_change_support *DRAMClockChangeSupport,
> > > > -             double *UrgentWatermark,
> > > > -             double *WritebackUrgentWatermark,
> > > > -             double *DRAMClockChangeWatermark,
> > > > -             double *WritebackDRAMClockChangeWatermark,
> > > >               double *StutterExitWatermark,
> > > >               double *StutterEnterPlusExitWatermark,
> > > >               double *Z8StutterExitWatermark,
> > > > -             double *Z8StutterEnterPlusExitWatermark,
> > > > -             double *MinActiveDRAMClockChangeLatencySupported);
> > > > +             double *Z8StutterEnterPlusExitWatermark);
> > > >
> > > >  static void CalculateDCFCLKDeepSleep(
> > > >               struct display_mode_lib *mode_lib,
> > > > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> > > >               CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >                               mode_lib,
> > > >                               PrefetchMode,
> > > > -                             v->NumberOfActivePlanes,
> > > > -                             v->MaxLineBufferLines,
> > > > -                             v->LineBufferSize,
> > > > -                             v->WritebackInterfaceBufferSize,
> > > >                               v->DCFCLK,
> > > >                               v->ReturnBW,
> > > > -                             v->SynchronizedVBlank,
> > > > -                             v->dpte_group_bytes,
> > > > -                             v->MetaChunkSize,
> > > >                               v->UrgentLatency,
> > > >                               v->UrgentExtraLatency,
> > > > -                             v->WritebackLatency,
> > > > -                             v->WritebackChunkSize,
> > > >                               v->SOCCLK,
> > > > -                             v->DRAMClockChangeLatency,
> > > > -                             v->SRExitTime,
> > > > -                             v->SREnterPlusExitTime,
> > > > -                             v->SRExitZ8Time,
> > > > -                             v->SREnterPlusExitZ8Time,
> > > >                               v->DCFCLKDeepSleep,
> > > >                               v->DETBufferSizeY,
> > > >                               v->DETBufferSizeC,
> > > >                               v->SwathHeightY,
> > > >                               v->SwathHeightC,
> > > > -                             v->LBBitPerPixel,
> > > >                               v->SwathWidthY,
> > > >                               v->SwathWidthC,
> > > > -                             v->HRatio,
> > > > -                             v->HRatioChroma,
> > > > -                             v->vtaps,
> > > > -                             v->VTAPsChroma,
> > > > -                             v->VRatio,
> > > > -                             v->VRatioChroma,
> > > > -                             v->HTotal,
> > > > -                             v->PixelClock,
> > > > -                             v->BlendingAndTiming,
> > > >                               v->DPPPerPlane,
> > > >                               v->BytePerPixelDETY,
> > > >                               v->BytePerPixelDETC,
> > > > -                             v->DSTXAfterScaler,
> > > > -                             v->DSTYAfterScaler,
> > > > -                             v->WritebackEnable,
> > > > -                             v->WritebackPixelFormat,
> > > > -                             v->WritebackDestinationWidth,
> > > > -                             v->WritebackDestinationHeight,
> > > > -                             v->WritebackSourceHeight,
> > > >                               v->UnboundedRequestEnabled,
> > > >                               v->CompressedBufferSizeInkByte,
> > > >                               &DRAMClockChangeSupport,
> > > > -                             &v->UrgentWatermark,
> > > > -                             &v->WritebackUrgentWatermark,
> > > > -                             &v->DRAMClockChangeWatermark,
> > > > -                             &v->WritebackDRAMClockChangeWatermark,
> > > >                               &v->StutterExitWatermark,
> > > >                               &v->StutterEnterPlusExitWatermark,
> > > >                               &v->Z8StutterExitWatermark,
> > > > -                             &v->Z8StutterEnterPlusExitWatermark,
> > > > -                             &v->MinActiveDRAMClockChangeLatencySupported);
> > > > +                             &v->Z8StutterEnterPlusExitWatermark);
> > > >
> > > >               for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >                       if (v->WritebackEnable[k] == true) {
> > > > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > > >                       CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >                                       mode_lib,
> > > >                                       v->PrefetchModePerState[i][j],
> > > > -                                     v->NumberOfActivePlanes,
> > > > -                                     v->MaxLineBufferLines,
> > > > -                                     v->LineBufferSize,
> > > > -                                     v->WritebackInterfaceBufferSize,
> > > >                                       v->DCFCLKState[i][j],
> > > >                                       v->ReturnBWPerState[i][j],
> > > > -                                     v->SynchronizedVBlank,
> > > > -                                     v->dpte_group_bytes,
> > > > -                                     v->MetaChunkSize,
> > > >                                       v->UrgLatency[i],
> > > >                                       v->ExtraLatency,
> > > > -                                     v->WritebackLatency,
> > > > -                                     v->WritebackChunkSize,
> > > >                                       v->SOCCLKPerState[i],
> > > > -                                     v->DRAMClockChangeLatency,
> > > > -                                     v->SRExitTime,
> > > > -                                     v->SREnterPlusExitTime,
> > > > -                                     v->SRExitZ8Time,
> > > > -                                     v->SREnterPlusExitZ8Time,
> > > >                                       v->ProjectedDCFCLKDeepSleep[i][j],
> > > >                                       v->DETBufferSizeYThisState,
> > > >                                       v->DETBufferSizeCThisState,
> > > >                                       v->SwathHeightYThisState,
> > > >                                       v->SwathHeightCThisState,
> > > > -                                     v->LBBitPerPixel,
> > > >                                       v->SwathWidthYThisState,
> > > >                                       v->SwathWidthCThisState,
> > > > -                                     v->HRatio,
> > > > -                                     v->HRatioChroma,
> > > > -                                     v->vtaps,
> > > > -                                     v->VTAPsChroma,
> > > > -                                     v->VRatio,
> > > > -                                     v->VRatioChroma,
> > > > -                                     v->HTotal,
> > > > -                                     v->PixelClock,
> > > > -                                     v->BlendingAndTiming,
> > > >                                       v->NoOfDPPThisState,
> > > >                                       v->BytePerPixelInDETY,
> > > >                                       v->BytePerPixelInDETC,
> > > > -                                     v->DSTXAfterScaler,
> > > > -                                     v->DSTYAfterScaler,
> > > > -                                     v->WritebackEnable,
> > > > -                                     v->WritebackPixelFormat,
> > > > -                                     v->WritebackDestinationWidth,
> > > > -                                     v->WritebackDestinationHeight,
> > > > -                                     v->WritebackSourceHeight,
> > > >                                       UnboundedRequestEnabledThisState,
> > > >                                       CompressedBufferSizeInkByteThisState,
> > > >                                       &v->DRAMClockChangeSupport[i][j],
> > > > -                                     &v->UrgentWatermark,
> > > > -                                     &v->WritebackUrgentWatermark,
> > > > -                                     &v->DRAMClockChangeWatermark,
> > > > -                                     &v->WritebackDRAMClockChangeWatermark,
> > > > -                                     &dummy,
> > > >                                       &dummy,
> > > >                                       &dummy,
> > > >                                       &dummy,
> > > > -                                     &v->MinActiveDRAMClockChangeLatencySupported);
> > > > +                                     &dummy);
> > > >               }
> > > >       }
> > > >
> > > > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >               struct display_mode_lib *mode_lib,
> > > >               unsigned int PrefetchMode,
> > > > -             unsigned int NumberOfActivePlanes,
> > > > -             unsigned int MaxLineBufferLines,
> > > > -             unsigned int LineBufferSize,
> > > > -             unsigned int WritebackInterfaceBufferSize,
> > > >               double DCFCLK,
> > > >               double ReturnBW,
> > > > -             bool SynchronizedVBlank,
> > > > -             unsigned int dpte_group_bytes[],
> > > > -             unsigned int MetaChunkSize,
> > > >               double UrgentLatency,
> > > >               double ExtraLatency,
> > > > -             double WritebackLatency,
> > > > -             double WritebackChunkSize,
> > > >               double SOCCLK,
> > > > -             double DRAMClockChangeLatency,
> > > > -             double SRExitTime,
> > > > -             double SREnterPlusExitTime,
> > > > -             double SRExitZ8Time,
> > > > -             double SREnterPlusExitZ8Time,
> > > >               double DCFCLKDeepSleep,
> > > >               unsigned int DETBufferSizeY[],
> > > >               unsigned int DETBufferSizeC[],
> > > >               unsigned int SwathHeightY[],
> > > >               unsigned int SwathHeightC[],
> > > > -             unsigned int LBBitPerPixel[],
> > > >               double SwathWidthY[],
> > > >               double SwathWidthC[],
> > > > -             double HRatio[],
> > > > -             double HRatioChroma[],
> > > > -             unsigned int vtaps[],
> > > > -             unsigned int VTAPsChroma[],
> > > > -             double VRatio[],
> > > > -             double VRatioChroma[],
> > > > -             unsigned int HTotal[],
> > > > -             double PixelClock[],
> > > > -             unsigned int BlendingAndTiming[],
> > > >               unsigned int DPPPerPlane[],
> > > >               double BytePerPixelDETY[],
> > > >               double BytePerPixelDETC[],
> > > > -             double DSTXAfterScaler[],
> > > > -             double DSTYAfterScaler[],
> > > > -             bool WritebackEnable[],
> > > > -             enum source_format_class WritebackPixelFormat[],
> > > > -             double WritebackDestinationWidth[],
> > > > -             double WritebackDestinationHeight[],
> > > > -             double WritebackSourceHeight[],
> > > >               bool UnboundedRequestEnabled,
> > > >               unsigned int CompressedBufferSizeInkByte,
> > > >               enum clock_change_support *DRAMClockChangeSupport,
> > > > -             double *UrgentWatermark,
> > > > -             double *WritebackUrgentWatermark,
> > > > -             double *DRAMClockChangeWatermark,
> > > > -             double *WritebackDRAMClockChangeWatermark,
> > > >               double *StutterExitWatermark,
> > > >               double *StutterEnterPlusExitWatermark,
> > > >               double *Z8StutterExitWatermark,
> > > > -             double *Z8StutterEnterPlusExitWatermark,
> > > > -             double *MinActiveDRAMClockChangeLatencySupported)
> > > > +             double *Z8StutterEnterPlusExitWatermark)
> > > >  {
> > > >       struct vba_vars_st *v = &mode_lib->vba;
> > > >       double EffectiveLBLatencyHidingY;
> > > > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >       double TotalPixelBW = 0.0;
> > > >       int k, j;
> > > >
> > > > -     *UrgentWatermark = UrgentLatency + ExtraLatency;
> > > > +     v->UrgentWatermark = UrgentLatency + ExtraLatency;
> > > >
> > > >  #ifdef __DML_VBA_DEBUG__
> > > >       dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> > > >       dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > > > -     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > > > +     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> > > >  #endif
> > > >
> > > > -     *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > > > +     v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> > > >
> > > >  #ifdef __DML_VBA_DEBUG__
> > > > -     dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > > > -     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > > > +     dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > > > +     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> > > >  #endif
> > > >
> > > >       v->TotalActiveWriteback = 0;
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > -             if (WritebackEnable[k] == true) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > > +             if (v->WritebackEnable[k] == true) {
> > > >                       v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> > > >               }
> > > >       }
> > > >
> > > >       if (v->TotalActiveWriteback <= 1) {
> > > > -             *WritebackUrgentWatermark = WritebackLatency;
> > > > +             v->WritebackUrgentWatermark = v->WritebackLatency;
> > > >       } else {
> > > > -             *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > > +             v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > >       }
> > > >
> > > >       if (v->TotalActiveWriteback <= 1) {
> > > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> > > >       } else {
> > > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > >       }
> > > >
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >               TotalPixelBW = TotalPixelBW
> > > > -                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > > > -                                             / (HTotal[k] / PixelClock[k]);
> > > > +                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > > > +                                             / (v->HTotal[k] / v->PixelClock[k]);
> > > >       }
> > > >
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >               double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> > > >
> > > >               v->LBLatencyHidingSourceLinesY = dml_min(
> > > > -                             (double) MaxLineBufferLines,
> > > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > > > +                             (double) v->MaxLineBufferLines,
> > > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> > > >
> > > >               v->LBLatencyHidingSourceLinesC = dml_min(
> > > > -                             (double) MaxLineBufferLines,
> > > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > > > +                             (double) v->MaxLineBufferLines,
> > > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> > > >
> > > > -             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > > > +             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> > > >
> > > > -             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > > > +             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> > > >
> > > >               if (UnboundedRequestEnabled) {
> > > >                       EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > > > -                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > > > +                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> > > >               }
> > > >
> > > >               LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> > > >               if (BytePerPixelDETC[k] > 0) {
> > > >                       LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> > > >                       LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > > > -                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > > > +                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> > > >               } else {
> > > >                       LinesInDETC = 0;
> > > >                       FullDETBufferingTimeC = 999999;
> > > >               }
> > > >
> > > >               ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > > > -                             - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > > +                             - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > > >
> > > > -             if (NumberOfActivePlanes > 1) {
> > > > +             if (v->NumberOfActivePlanes > 1) {
> > > >                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > > > -                                     - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > > > +                                     - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> > > >               }
> > > >
> > > >               if (BytePerPixelDETC[k] > 0) {
> > > >                       ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > > > -                                     - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > > +                                     - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > > >
> > > > -                     if (NumberOfActivePlanes > 1) {
> > > > +                     if (v->NumberOfActivePlanes > 1) {
> > > >                               ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > > > -                                             - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > > > +                                             - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> > > >                       }
> > > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> > > >               } else {
> > > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> > > >               }
> > > >
> > > > -             if (WritebackEnable[k] == true) {
> > > > -                     WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > > > -                                     / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > > > -                     if (WritebackPixelFormat[k] == dm_444_64) {
> > > > +             if (v->WritebackEnable[k] == true) {
> > > > +                     WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > > > +                                     / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > > > +                     if (v->WritebackPixelFormat[k] == dm_444_64) {
> > > >                               WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> > > >                       }
> > > >                       WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > > > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >
> > > >       v->MinActiveDRAMClockChangeMargin = 999999;
> > > >       PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >               if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> > > >                       v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > > > -                     if (BlendingAndTiming[k] == k) {
> > > > +                     if (v->BlendingAndTiming[k] == k) {
> > > >                               PlaneWithMinActiveDRAMClockChangeMargin = k;
> > > >                       } else {
> > > > -                             for (j = 0; j < NumberOfActivePlanes; ++j) {
> > > > -                                     if (BlendingAndTiming[k] == j) {
> > > > +                             for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > > > +                                     if (v->BlendingAndTiming[k] == j) {
> > > >                                               PlaneWithMinActiveDRAMClockChangeMargin = j;
> > > >                                       }
> > > >                               }
> > > > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >               }
> > > >       }
> > > >
> > > > -     *MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > > > +     v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> > > >
> > > >       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > -             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > > +             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > > >                               && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> > > >                       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> > > >               }
> > > > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >
> > > >       v->TotalNumberOfActiveOTG = 0;
> > > >
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > -             if (BlendingAndTiming[k] == k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > > +             if (v->BlendingAndTiming[k] == k) {
> > > >                       v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> > > >               }
> > > >       }
> > > >
> > > >       if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> > > >               *DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > > > -     } else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > > > +     } else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > > >                       || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> > > >               *DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> > > >       } else {
> > > >               *DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> > > >       }
> > > >
> > > > -     *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > -     *StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > > -     *Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > -     *Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > +     *StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > +     *StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > > +     *Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > +     *Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > >
> > > >  #ifdef __DML_VBA_DEBUG__
> > > >       dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> > > >
> > > > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-21  1:12         ` Alex Deucher
  0 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2022-09-21  1:12 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: Nick Desaulniers, llvm, kernelci.org bot, Leo Li, Tom Rix, Pan,
	Xinhui, Rodrigo Siqueira, patches, dri-devel, Maíra Canal,
	amd-gfx, Alex Deucher, Christian König

On Tue, Sep 20, 2022 at 7:48 PM Nathan Chancellor <nathan@kernel.org> wrote:
>
> On Tue, Sep 20, 2022 at 12:06:46PM -0400, Alex Deucher wrote:
> > Applied the series.  Thanks!
>
> Great, thank you so much! Hopefully these could also be applied to the
> 6.0 branch so that this error can be resolved there as well. No worries
> on timeline if that was already the plan but I just want to keep -Werror
> on for arm64 and x86_64 allmodconfig for this release.

Yes, that is the plan.

Alex

>
> Cheers,
> Nathan
>
> > On Sat, Sep 17, 2022 at 8:38 AM Maíra Canal <mairacanal@riseup.net> wrote:
> > >
> > > Hi Nathan,
> > >
> > > On 9/16/22 18:06, Nathan Chancellor wrote:
> > > > Most of the arguments are identical between the two call sites and they
> > > > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > > > the total amount of stack space that
> > > > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > > > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> > > >
> > > >   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> > > >   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> > > >        ^
> > > >   1 error generated.
> > > >
> > > > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > > > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > > > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> > >
> > > I have built-tested the whole series with clang 14.0.5 (Fedora
> > > 14.0.5-1.fc36), using:
> > >
> > > $ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
> > > drivers/gpu/drm/amd/amdgpu/
> > >
> > > Another great patch to the DML! As Tom, I also would like to see this
> > > expand to all display_mode_vba files, but so far this is great to
> > > unbreak the build.
> > >
> > > To the whole series:
> > >
> > > Tested-by: Maíra Canal <mairacanal@riseup.net>
> > >
> > > Best Regards,
> > > - Maíra Canal
> > >
> > > > ---
> > > >
> > > > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > > > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > > > applied to dml314.
> > > >
> > > >  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> > > >  1 file changed, 52 insertions(+), 196 deletions(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > > index 2829f179f982..32ceb72f7a14 100644
> > > > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> > > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >               struct display_mode_lib *mode_lib,
> > > >               unsigned int PrefetchMode,
> > > > -             unsigned int NumberOfActivePlanes,
> > > > -             unsigned int MaxLineBufferLines,
> > > > -             unsigned int LineBufferSize,
> > > > -             unsigned int WritebackInterfaceBufferSize,
> > > >               double DCFCLK,
> > > >               double ReturnBW,
> > > > -             bool SynchronizedVBlank,
> > > > -             unsigned int dpte_group_bytes[],
> > > > -             unsigned int MetaChunkSize,
> > > >               double UrgentLatency,
> > > >               double ExtraLatency,
> > > > -             double WritebackLatency,
> > > > -             double WritebackChunkSize,
> > > >               double SOCCLK,
> > > > -             double DRAMClockChangeLatency,
> > > > -             double SRExitTime,
> > > > -             double SREnterPlusExitTime,
> > > > -             double SRExitZ8Time,
> > > > -             double SREnterPlusExitZ8Time,
> > > >               double DCFCLKDeepSleep,
> > > >               unsigned int DETBufferSizeY[],
> > > >               unsigned int DETBufferSizeC[],
> > > >               unsigned int SwathHeightY[],
> > > >               unsigned int SwathHeightC[],
> > > > -             unsigned int LBBitPerPixel[],
> > > >               double SwathWidthY[],
> > > >               double SwathWidthC[],
> > > > -             double HRatio[],
> > > > -             double HRatioChroma[],
> > > > -             unsigned int vtaps[],
> > > > -             unsigned int VTAPsChroma[],
> > > > -             double VRatio[],
> > > > -             double VRatioChroma[],
> > > > -             unsigned int HTotal[],
> > > > -             double PixelClock[],
> > > > -             unsigned int BlendingAndTiming[],
> > > >               unsigned int DPPPerPlane[],
> > > >               double BytePerPixelDETY[],
> > > >               double BytePerPixelDETC[],
> > > > -             double DSTXAfterScaler[],
> > > > -             double DSTYAfterScaler[],
> > > > -             bool WritebackEnable[],
> > > > -             enum source_format_class WritebackPixelFormat[],
> > > > -             double WritebackDestinationWidth[],
> > > > -             double WritebackDestinationHeight[],
> > > > -             double WritebackSourceHeight[],
> > > >               bool UnboundedRequestEnabled,
> > > >               unsigned int CompressedBufferSizeInkByte,
> > > >               enum clock_change_support *DRAMClockChangeSupport,
> > > > -             double *UrgentWatermark,
> > > > -             double *WritebackUrgentWatermark,
> > > > -             double *DRAMClockChangeWatermark,
> > > > -             double *WritebackDRAMClockChangeWatermark,
> > > >               double *StutterExitWatermark,
> > > >               double *StutterEnterPlusExitWatermark,
> > > >               double *Z8StutterExitWatermark,
> > > > -             double *Z8StutterEnterPlusExitWatermark,
> > > > -             double *MinActiveDRAMClockChangeLatencySupported);
> > > > +             double *Z8StutterEnterPlusExitWatermark);
> > > >
> > > >  static void CalculateDCFCLKDeepSleep(
> > > >               struct display_mode_lib *mode_lib,
> > > > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> > > >               CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >                               mode_lib,
> > > >                               PrefetchMode,
> > > > -                             v->NumberOfActivePlanes,
> > > > -                             v->MaxLineBufferLines,
> > > > -                             v->LineBufferSize,
> > > > -                             v->WritebackInterfaceBufferSize,
> > > >                               v->DCFCLK,
> > > >                               v->ReturnBW,
> > > > -                             v->SynchronizedVBlank,
> > > > -                             v->dpte_group_bytes,
> > > > -                             v->MetaChunkSize,
> > > >                               v->UrgentLatency,
> > > >                               v->UrgentExtraLatency,
> > > > -                             v->WritebackLatency,
> > > > -                             v->WritebackChunkSize,
> > > >                               v->SOCCLK,
> > > > -                             v->DRAMClockChangeLatency,
> > > > -                             v->SRExitTime,
> > > > -                             v->SREnterPlusExitTime,
> > > > -                             v->SRExitZ8Time,
> > > > -                             v->SREnterPlusExitZ8Time,
> > > >                               v->DCFCLKDeepSleep,
> > > >                               v->DETBufferSizeY,
> > > >                               v->DETBufferSizeC,
> > > >                               v->SwathHeightY,
> > > >                               v->SwathHeightC,
> > > > -                             v->LBBitPerPixel,
> > > >                               v->SwathWidthY,
> > > >                               v->SwathWidthC,
> > > > -                             v->HRatio,
> > > > -                             v->HRatioChroma,
> > > > -                             v->vtaps,
> > > > -                             v->VTAPsChroma,
> > > > -                             v->VRatio,
> > > > -                             v->VRatioChroma,
> > > > -                             v->HTotal,
> > > > -                             v->PixelClock,
> > > > -                             v->BlendingAndTiming,
> > > >                               v->DPPPerPlane,
> > > >                               v->BytePerPixelDETY,
> > > >                               v->BytePerPixelDETC,
> > > > -                             v->DSTXAfterScaler,
> > > > -                             v->DSTYAfterScaler,
> > > > -                             v->WritebackEnable,
> > > > -                             v->WritebackPixelFormat,
> > > > -                             v->WritebackDestinationWidth,
> > > > -                             v->WritebackDestinationHeight,
> > > > -                             v->WritebackSourceHeight,
> > > >                               v->UnboundedRequestEnabled,
> > > >                               v->CompressedBufferSizeInkByte,
> > > >                               &DRAMClockChangeSupport,
> > > > -                             &v->UrgentWatermark,
> > > > -                             &v->WritebackUrgentWatermark,
> > > > -                             &v->DRAMClockChangeWatermark,
> > > > -                             &v->WritebackDRAMClockChangeWatermark,
> > > >                               &v->StutterExitWatermark,
> > > >                               &v->StutterEnterPlusExitWatermark,
> > > >                               &v->Z8StutterExitWatermark,
> > > > -                             &v->Z8StutterEnterPlusExitWatermark,
> > > > -                             &v->MinActiveDRAMClockChangeLatencySupported);
> > > > +                             &v->Z8StutterEnterPlusExitWatermark);
> > > >
> > > >               for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >                       if (v->WritebackEnable[k] == true) {
> > > > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > > >                       CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >                                       mode_lib,
> > > >                                       v->PrefetchModePerState[i][j],
> > > > -                                     v->NumberOfActivePlanes,
> > > > -                                     v->MaxLineBufferLines,
> > > > -                                     v->LineBufferSize,
> > > > -                                     v->WritebackInterfaceBufferSize,
> > > >                                       v->DCFCLKState[i][j],
> > > >                                       v->ReturnBWPerState[i][j],
> > > > -                                     v->SynchronizedVBlank,
> > > > -                                     v->dpte_group_bytes,
> > > > -                                     v->MetaChunkSize,
> > > >                                       v->UrgLatency[i],
> > > >                                       v->ExtraLatency,
> > > > -                                     v->WritebackLatency,
> > > > -                                     v->WritebackChunkSize,
> > > >                                       v->SOCCLKPerState[i],
> > > > -                                     v->DRAMClockChangeLatency,
> > > > -                                     v->SRExitTime,
> > > > -                                     v->SREnterPlusExitTime,
> > > > -                                     v->SRExitZ8Time,
> > > > -                                     v->SREnterPlusExitZ8Time,
> > > >                                       v->ProjectedDCFCLKDeepSleep[i][j],
> > > >                                       v->DETBufferSizeYThisState,
> > > >                                       v->DETBufferSizeCThisState,
> > > >                                       v->SwathHeightYThisState,
> > > >                                       v->SwathHeightCThisState,
> > > > -                                     v->LBBitPerPixel,
> > > >                                       v->SwathWidthYThisState,
> > > >                                       v->SwathWidthCThisState,
> > > > -                                     v->HRatio,
> > > > -                                     v->HRatioChroma,
> > > > -                                     v->vtaps,
> > > > -                                     v->VTAPsChroma,
> > > > -                                     v->VRatio,
> > > > -                                     v->VRatioChroma,
> > > > -                                     v->HTotal,
> > > > -                                     v->PixelClock,
> > > > -                                     v->BlendingAndTiming,
> > > >                                       v->NoOfDPPThisState,
> > > >                                       v->BytePerPixelInDETY,
> > > >                                       v->BytePerPixelInDETC,
> > > > -                                     v->DSTXAfterScaler,
> > > > -                                     v->DSTYAfterScaler,
> > > > -                                     v->WritebackEnable,
> > > > -                                     v->WritebackPixelFormat,
> > > > -                                     v->WritebackDestinationWidth,
> > > > -                                     v->WritebackDestinationHeight,
> > > > -                                     v->WritebackSourceHeight,
> > > >                                       UnboundedRequestEnabledThisState,
> > > >                                       CompressedBufferSizeInkByteThisState,
> > > >                                       &v->DRAMClockChangeSupport[i][j],
> > > > -                                     &v->UrgentWatermark,
> > > > -                                     &v->WritebackUrgentWatermark,
> > > > -                                     &v->DRAMClockChangeWatermark,
> > > > -                                     &v->WritebackDRAMClockChangeWatermark,
> > > > -                                     &dummy,
> > > >                                       &dummy,
> > > >                                       &dummy,
> > > >                                       &dummy,
> > > > -                                     &v->MinActiveDRAMClockChangeLatencySupported);
> > > > +                                     &dummy);
> > > >               }
> > > >       }
> > > >
> > > > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >               struct display_mode_lib *mode_lib,
> > > >               unsigned int PrefetchMode,
> > > > -             unsigned int NumberOfActivePlanes,
> > > > -             unsigned int MaxLineBufferLines,
> > > > -             unsigned int LineBufferSize,
> > > > -             unsigned int WritebackInterfaceBufferSize,
> > > >               double DCFCLK,
> > > >               double ReturnBW,
> > > > -             bool SynchronizedVBlank,
> > > > -             unsigned int dpte_group_bytes[],
> > > > -             unsigned int MetaChunkSize,
> > > >               double UrgentLatency,
> > > >               double ExtraLatency,
> > > > -             double WritebackLatency,
> > > > -             double WritebackChunkSize,
> > > >               double SOCCLK,
> > > > -             double DRAMClockChangeLatency,
> > > > -             double SRExitTime,
> > > > -             double SREnterPlusExitTime,
> > > > -             double SRExitZ8Time,
> > > > -             double SREnterPlusExitZ8Time,
> > > >               double DCFCLKDeepSleep,
> > > >               unsigned int DETBufferSizeY[],
> > > >               unsigned int DETBufferSizeC[],
> > > >               unsigned int SwathHeightY[],
> > > >               unsigned int SwathHeightC[],
> > > > -             unsigned int LBBitPerPixel[],
> > > >               double SwathWidthY[],
> > > >               double SwathWidthC[],
> > > > -             double HRatio[],
> > > > -             double HRatioChroma[],
> > > > -             unsigned int vtaps[],
> > > > -             unsigned int VTAPsChroma[],
> > > > -             double VRatio[],
> > > > -             double VRatioChroma[],
> > > > -             unsigned int HTotal[],
> > > > -             double PixelClock[],
> > > > -             unsigned int BlendingAndTiming[],
> > > >               unsigned int DPPPerPlane[],
> > > >               double BytePerPixelDETY[],
> > > >               double BytePerPixelDETC[],
> > > > -             double DSTXAfterScaler[],
> > > > -             double DSTYAfterScaler[],
> > > > -             bool WritebackEnable[],
> > > > -             enum source_format_class WritebackPixelFormat[],
> > > > -             double WritebackDestinationWidth[],
> > > > -             double WritebackDestinationHeight[],
> > > > -             double WritebackSourceHeight[],
> > > >               bool UnboundedRequestEnabled,
> > > >               unsigned int CompressedBufferSizeInkByte,
> > > >               enum clock_change_support *DRAMClockChangeSupport,
> > > > -             double *UrgentWatermark,
> > > > -             double *WritebackUrgentWatermark,
> > > > -             double *DRAMClockChangeWatermark,
> > > > -             double *WritebackDRAMClockChangeWatermark,
> > > >               double *StutterExitWatermark,
> > > >               double *StutterEnterPlusExitWatermark,
> > > >               double *Z8StutterExitWatermark,
> > > > -             double *Z8StutterEnterPlusExitWatermark,
> > > > -             double *MinActiveDRAMClockChangeLatencySupported)
> > > > +             double *Z8StutterEnterPlusExitWatermark)
> > > >  {
> > > >       struct vba_vars_st *v = &mode_lib->vba;
> > > >       double EffectiveLBLatencyHidingY;
> > > > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >       double TotalPixelBW = 0.0;
> > > >       int k, j;
> > > >
> > > > -     *UrgentWatermark = UrgentLatency + ExtraLatency;
> > > > +     v->UrgentWatermark = UrgentLatency + ExtraLatency;
> > > >
> > > >  #ifdef __DML_VBA_DEBUG__
> > > >       dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> > > >       dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > > > -     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > > > +     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> > > >  #endif
> > > >
> > > > -     *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > > > +     v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> > > >
> > > >  #ifdef __DML_VBA_DEBUG__
> > > > -     dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > > > -     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > > > +     dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > > > +     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> > > >  #endif
> > > >
> > > >       v->TotalActiveWriteback = 0;
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > -             if (WritebackEnable[k] == true) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > > +             if (v->WritebackEnable[k] == true) {
> > > >                       v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> > > >               }
> > > >       }
> > > >
> > > >       if (v->TotalActiveWriteback <= 1) {
> > > > -             *WritebackUrgentWatermark = WritebackLatency;
> > > > +             v->WritebackUrgentWatermark = v->WritebackLatency;
> > > >       } else {
> > > > -             *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > > +             v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > >       }
> > > >
> > > >       if (v->TotalActiveWriteback <= 1) {
> > > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> > > >       } else {
> > > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > >       }
> > > >
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >               TotalPixelBW = TotalPixelBW
> > > > -                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > > > -                                             / (HTotal[k] / PixelClock[k]);
> > > > +                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > > > +                                             / (v->HTotal[k] / v->PixelClock[k]);
> > > >       }
> > > >
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >               double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> > > >
> > > >               v->LBLatencyHidingSourceLinesY = dml_min(
> > > > -                             (double) MaxLineBufferLines,
> > > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > > > +                             (double) v->MaxLineBufferLines,
> > > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> > > >
> > > >               v->LBLatencyHidingSourceLinesC = dml_min(
> > > > -                             (double) MaxLineBufferLines,
> > > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > > > +                             (double) v->MaxLineBufferLines,
> > > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> > > >
> > > > -             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > > > +             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> > > >
> > > > -             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > > > +             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> > > >
> > > >               if (UnboundedRequestEnabled) {
> > > >                       EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > > > -                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > > > +                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> > > >               }
> > > >
> > > >               LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> > > >               if (BytePerPixelDETC[k] > 0) {
> > > >                       LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> > > >                       LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > > > -                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > > > +                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> > > >               } else {
> > > >                       LinesInDETC = 0;
> > > >                       FullDETBufferingTimeC = 999999;
> > > >               }
> > > >
> > > >               ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > > > -                             - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > > +                             - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > > >
> > > > -             if (NumberOfActivePlanes > 1) {
> > > > +             if (v->NumberOfActivePlanes > 1) {
> > > >                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > > > -                                     - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > > > +                                     - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> > > >               }
> > > >
> > > >               if (BytePerPixelDETC[k] > 0) {
> > > >                       ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > > > -                                     - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > > +                                     - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > > >
> > > > -                     if (NumberOfActivePlanes > 1) {
> > > > +                     if (v->NumberOfActivePlanes > 1) {
> > > >                               ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > > > -                                             - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > > > +                                             - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> > > >                       }
> > > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> > > >               } else {
> > > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> > > >               }
> > > >
> > > > -             if (WritebackEnable[k] == true) {
> > > > -                     WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > > > -                                     / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > > > -                     if (WritebackPixelFormat[k] == dm_444_64) {
> > > > +             if (v->WritebackEnable[k] == true) {
> > > > +                     WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > > > +                                     / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > > > +                     if (v->WritebackPixelFormat[k] == dm_444_64) {
> > > >                               WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> > > >                       }
> > > >                       WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > > > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >
> > > >       v->MinActiveDRAMClockChangeMargin = 999999;
> > > >       PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >               if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> > > >                       v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > > > -                     if (BlendingAndTiming[k] == k) {
> > > > +                     if (v->BlendingAndTiming[k] == k) {
> > > >                               PlaneWithMinActiveDRAMClockChangeMargin = k;
> > > >                       } else {
> > > > -                             for (j = 0; j < NumberOfActivePlanes; ++j) {
> > > > -                                     if (BlendingAndTiming[k] == j) {
> > > > +                             for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > > > +                                     if (v->BlendingAndTiming[k] == j) {
> > > >                                               PlaneWithMinActiveDRAMClockChangeMargin = j;
> > > >                                       }
> > > >                               }
> > > > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >               }
> > > >       }
> > > >
> > > > -     *MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > > > +     v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> > > >
> > > >       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > -             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > > +             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > > >                               && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> > > >                       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> > > >               }
> > > > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >
> > > >       v->TotalNumberOfActiveOTG = 0;
> > > >
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > -             if (BlendingAndTiming[k] == k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > > +             if (v->BlendingAndTiming[k] == k) {
> > > >                       v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> > > >               }
> > > >       }
> > > >
> > > >       if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> > > >               *DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > > > -     } else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > > > +     } else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > > >                       || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> > > >               *DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> > > >       } else {
> > > >               *DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> > > >       }
> > > >
> > > > -     *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > -     *StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > > -     *Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > -     *Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > +     *StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > +     *StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > > +     *Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > +     *Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > >
> > > >  #ifdef __DML_VBA_DEBUG__
> > > >       dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> > > >
> > > > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport()
@ 2022-09-21  1:12         ` Alex Deucher
  0 siblings, 0 replies; 19+ messages in thread
From: Alex Deucher @ 2022-09-21  1:12 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: Nick Desaulniers, llvm, kernelci.org bot, Leo Li, Tom Rix, Pan,
	Xinhui, Rodrigo Siqueira, patches, dri-devel, Maíra Canal,
	amd-gfx, Alex Deucher, Harry Wentland, Christian König

On Tue, Sep 20, 2022 at 7:48 PM Nathan Chancellor <nathan@kernel.org> wrote:
>
> On Tue, Sep 20, 2022 at 12:06:46PM -0400, Alex Deucher wrote:
> > Applied the series.  Thanks!
>
> Great, thank you so much! Hopefully these could also be applied to the
> 6.0 branch so that this error can be resolved there as well. No worries
> on timeline if that was already the plan but I just want to keep -Werror
> on for arm64 and x86_64 allmodconfig for this release.

Yes, that is the plan.

Alex

>
> Cheers,
> Nathan
>
> > On Sat, Sep 17, 2022 at 8:38 AM Maíra Canal <mairacanal@riseup.net> wrote:
> > >
> > > Hi Nathan,
> > >
> > > On 9/16/22 18:06, Nathan Chancellor wrote:
> > > > Most of the arguments are identical between the two call sites and they
> > > > can be accessed through the 'struct vba_vars_st' pointer. This reduces
> > > > the total amount of stack space that
> > > > dml314_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with
> > > > LLVM 16 (2216 -> 1976), helping clear up the following clang warning:
> > > >
> > > >   drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
> > > >   void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
> > > >        ^
> > > >   1 error generated.
> > > >
> > > > Link: https://github.com/ClangBuiltLinux/linux/issues/1710
> > > > Reported-by: "kernelci.org bot" <bot@kernelci.org>
> > > > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> > >
> > > I have built-tested the whole series with clang 14.0.5 (Fedora
> > > 14.0.5-1.fc36), using:
> > >
> > > $ make -kj"$(nproc)" ARCH=x86_64 LLVM=1 mrproper allmodconfig
> > > drivers/gpu/drm/amd/amdgpu/
> > >
> > > Another great patch to the DML! As Tom, I also would like to see this
> > > expand to all display_mode_vba files, but so far this is great to
> > > unbreak the build.
> > >
> > > To the whole series:
> > >
> > > Tested-by: Maíra Canal <mairacanal@riseup.net>
> > >
> > > Best Regards,
> > > - Maíra Canal
> > >
> > > > ---
> > > >
> > > > This is just commit ab2ac59c32db ("drm/amd/display: Reduce number of
> > > > arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport()")
> > > > applied to dml314.
> > > >
> > > >  .../dc/dml/dcn314/display_mode_vba_314.c      | 248 ++++--------------
> > > >  1 file changed, 52 insertions(+), 196 deletions(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > > index 2829f179f982..32ceb72f7a14 100644
> > > > --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > > +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c
> > > > @@ -325,64 +325,28 @@ static void CalculateVupdateAndDynamicMetadataParameters(
> > > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >               struct display_mode_lib *mode_lib,
> > > >               unsigned int PrefetchMode,
> > > > -             unsigned int NumberOfActivePlanes,
> > > > -             unsigned int MaxLineBufferLines,
> > > > -             unsigned int LineBufferSize,
> > > > -             unsigned int WritebackInterfaceBufferSize,
> > > >               double DCFCLK,
> > > >               double ReturnBW,
> > > > -             bool SynchronizedVBlank,
> > > > -             unsigned int dpte_group_bytes[],
> > > > -             unsigned int MetaChunkSize,
> > > >               double UrgentLatency,
> > > >               double ExtraLatency,
> > > > -             double WritebackLatency,
> > > > -             double WritebackChunkSize,
> > > >               double SOCCLK,
> > > > -             double DRAMClockChangeLatency,
> > > > -             double SRExitTime,
> > > > -             double SREnterPlusExitTime,
> > > > -             double SRExitZ8Time,
> > > > -             double SREnterPlusExitZ8Time,
> > > >               double DCFCLKDeepSleep,
> > > >               unsigned int DETBufferSizeY[],
> > > >               unsigned int DETBufferSizeC[],
> > > >               unsigned int SwathHeightY[],
> > > >               unsigned int SwathHeightC[],
> > > > -             unsigned int LBBitPerPixel[],
> > > >               double SwathWidthY[],
> > > >               double SwathWidthC[],
> > > > -             double HRatio[],
> > > > -             double HRatioChroma[],
> > > > -             unsigned int vtaps[],
> > > > -             unsigned int VTAPsChroma[],
> > > > -             double VRatio[],
> > > > -             double VRatioChroma[],
> > > > -             unsigned int HTotal[],
> > > > -             double PixelClock[],
> > > > -             unsigned int BlendingAndTiming[],
> > > >               unsigned int DPPPerPlane[],
> > > >               double BytePerPixelDETY[],
> > > >               double BytePerPixelDETC[],
> > > > -             double DSTXAfterScaler[],
> > > > -             double DSTYAfterScaler[],
> > > > -             bool WritebackEnable[],
> > > > -             enum source_format_class WritebackPixelFormat[],
> > > > -             double WritebackDestinationWidth[],
> > > > -             double WritebackDestinationHeight[],
> > > > -             double WritebackSourceHeight[],
> > > >               bool UnboundedRequestEnabled,
> > > >               unsigned int CompressedBufferSizeInkByte,
> > > >               enum clock_change_support *DRAMClockChangeSupport,
> > > > -             double *UrgentWatermark,
> > > > -             double *WritebackUrgentWatermark,
> > > > -             double *DRAMClockChangeWatermark,
> > > > -             double *WritebackDRAMClockChangeWatermark,
> > > >               double *StutterExitWatermark,
> > > >               double *StutterEnterPlusExitWatermark,
> > > >               double *Z8StutterExitWatermark,
> > > > -             double *Z8StutterEnterPlusExitWatermark,
> > > > -             double *MinActiveDRAMClockChangeLatencySupported);
> > > > +             double *Z8StutterEnterPlusExitWatermark);
> > > >
> > > >  static void CalculateDCFCLKDeepSleep(
> > > >               struct display_mode_lib *mode_lib,
> > > > @@ -3041,64 +3005,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
> > > >               CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >                               mode_lib,
> > > >                               PrefetchMode,
> > > > -                             v->NumberOfActivePlanes,
> > > > -                             v->MaxLineBufferLines,
> > > > -                             v->LineBufferSize,
> > > > -                             v->WritebackInterfaceBufferSize,
> > > >                               v->DCFCLK,
> > > >                               v->ReturnBW,
> > > > -                             v->SynchronizedVBlank,
> > > > -                             v->dpte_group_bytes,
> > > > -                             v->MetaChunkSize,
> > > >                               v->UrgentLatency,
> > > >                               v->UrgentExtraLatency,
> > > > -                             v->WritebackLatency,
> > > > -                             v->WritebackChunkSize,
> > > >                               v->SOCCLK,
> > > > -                             v->DRAMClockChangeLatency,
> > > > -                             v->SRExitTime,
> > > > -                             v->SREnterPlusExitTime,
> > > > -                             v->SRExitZ8Time,
> > > > -                             v->SREnterPlusExitZ8Time,
> > > >                               v->DCFCLKDeepSleep,
> > > >                               v->DETBufferSizeY,
> > > >                               v->DETBufferSizeC,
> > > >                               v->SwathHeightY,
> > > >                               v->SwathHeightC,
> > > > -                             v->LBBitPerPixel,
> > > >                               v->SwathWidthY,
> > > >                               v->SwathWidthC,
> > > > -                             v->HRatio,
> > > > -                             v->HRatioChroma,
> > > > -                             v->vtaps,
> > > > -                             v->VTAPsChroma,
> > > > -                             v->VRatio,
> > > > -                             v->VRatioChroma,
> > > > -                             v->HTotal,
> > > > -                             v->PixelClock,
> > > > -                             v->BlendingAndTiming,
> > > >                               v->DPPPerPlane,
> > > >                               v->BytePerPixelDETY,
> > > >                               v->BytePerPixelDETC,
> > > > -                             v->DSTXAfterScaler,
> > > > -                             v->DSTYAfterScaler,
> > > > -                             v->WritebackEnable,
> > > > -                             v->WritebackPixelFormat,
> > > > -                             v->WritebackDestinationWidth,
> > > > -                             v->WritebackDestinationHeight,
> > > > -                             v->WritebackSourceHeight,
> > > >                               v->UnboundedRequestEnabled,
> > > >                               v->CompressedBufferSizeInkByte,
> > > >                               &DRAMClockChangeSupport,
> > > > -                             &v->UrgentWatermark,
> > > > -                             &v->WritebackUrgentWatermark,
> > > > -                             &v->DRAMClockChangeWatermark,
> > > > -                             &v->WritebackDRAMClockChangeWatermark,
> > > >                               &v->StutterExitWatermark,
> > > >                               &v->StutterEnterPlusExitWatermark,
> > > >                               &v->Z8StutterExitWatermark,
> > > > -                             &v->Z8StutterEnterPlusExitWatermark,
> > > > -                             &v->MinActiveDRAMClockChangeLatencySupported);
> > > > +                             &v->Z8StutterEnterPlusExitWatermark);
> > > >
> > > >               for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >                       if (v->WritebackEnable[k] == true) {
> > > > @@ -5496,64 +5424,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > > >                       CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >                                       mode_lib,
> > > >                                       v->PrefetchModePerState[i][j],
> > > > -                                     v->NumberOfActivePlanes,
> > > > -                                     v->MaxLineBufferLines,
> > > > -                                     v->LineBufferSize,
> > > > -                                     v->WritebackInterfaceBufferSize,
> > > >                                       v->DCFCLKState[i][j],
> > > >                                       v->ReturnBWPerState[i][j],
> > > > -                                     v->SynchronizedVBlank,
> > > > -                                     v->dpte_group_bytes,
> > > > -                                     v->MetaChunkSize,
> > > >                                       v->UrgLatency[i],
> > > >                                       v->ExtraLatency,
> > > > -                                     v->WritebackLatency,
> > > > -                                     v->WritebackChunkSize,
> > > >                                       v->SOCCLKPerState[i],
> > > > -                                     v->DRAMClockChangeLatency,
> > > > -                                     v->SRExitTime,
> > > > -                                     v->SREnterPlusExitTime,
> > > > -                                     v->SRExitZ8Time,
> > > > -                                     v->SREnterPlusExitZ8Time,
> > > >                                       v->ProjectedDCFCLKDeepSleep[i][j],
> > > >                                       v->DETBufferSizeYThisState,
> > > >                                       v->DETBufferSizeCThisState,
> > > >                                       v->SwathHeightYThisState,
> > > >                                       v->SwathHeightCThisState,
> > > > -                                     v->LBBitPerPixel,
> > > >                                       v->SwathWidthYThisState,
> > > >                                       v->SwathWidthCThisState,
> > > > -                                     v->HRatio,
> > > > -                                     v->HRatioChroma,
> > > > -                                     v->vtaps,
> > > > -                                     v->VTAPsChroma,
> > > > -                                     v->VRatio,
> > > > -                                     v->VRatioChroma,
> > > > -                                     v->HTotal,
> > > > -                                     v->PixelClock,
> > > > -                                     v->BlendingAndTiming,
> > > >                                       v->NoOfDPPThisState,
> > > >                                       v->BytePerPixelInDETY,
> > > >                                       v->BytePerPixelInDETC,
> > > > -                                     v->DSTXAfterScaler,
> > > > -                                     v->DSTYAfterScaler,
> > > > -                                     v->WritebackEnable,
> > > > -                                     v->WritebackPixelFormat,
> > > > -                                     v->WritebackDestinationWidth,
> > > > -                                     v->WritebackDestinationHeight,
> > > > -                                     v->WritebackSourceHeight,
> > > >                                       UnboundedRequestEnabledThisState,
> > > >                                       CompressedBufferSizeInkByteThisState,
> > > >                                       &v->DRAMClockChangeSupport[i][j],
> > > > -                                     &v->UrgentWatermark,
> > > > -                                     &v->WritebackUrgentWatermark,
> > > > -                                     &v->DRAMClockChangeWatermark,
> > > > -                                     &v->WritebackDRAMClockChangeWatermark,
> > > > -                                     &dummy,
> > > >                                       &dummy,
> > > >                                       &dummy,
> > > >                                       &dummy,
> > > > -                                     &v->MinActiveDRAMClockChangeLatencySupported);
> > > > +                                     &dummy);
> > > >               }
> > > >       }
> > > >
> > > > @@ -5679,64 +5571,28 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
> > > >  static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >               struct display_mode_lib *mode_lib,
> > > >               unsigned int PrefetchMode,
> > > > -             unsigned int NumberOfActivePlanes,
> > > > -             unsigned int MaxLineBufferLines,
> > > > -             unsigned int LineBufferSize,
> > > > -             unsigned int WritebackInterfaceBufferSize,
> > > >               double DCFCLK,
> > > >               double ReturnBW,
> > > > -             bool SynchronizedVBlank,
> > > > -             unsigned int dpte_group_bytes[],
> > > > -             unsigned int MetaChunkSize,
> > > >               double UrgentLatency,
> > > >               double ExtraLatency,
> > > > -             double WritebackLatency,
> > > > -             double WritebackChunkSize,
> > > >               double SOCCLK,
> > > > -             double DRAMClockChangeLatency,
> > > > -             double SRExitTime,
> > > > -             double SREnterPlusExitTime,
> > > > -             double SRExitZ8Time,
> > > > -             double SREnterPlusExitZ8Time,
> > > >               double DCFCLKDeepSleep,
> > > >               unsigned int DETBufferSizeY[],
> > > >               unsigned int DETBufferSizeC[],
> > > >               unsigned int SwathHeightY[],
> > > >               unsigned int SwathHeightC[],
> > > > -             unsigned int LBBitPerPixel[],
> > > >               double SwathWidthY[],
> > > >               double SwathWidthC[],
> > > > -             double HRatio[],
> > > > -             double HRatioChroma[],
> > > > -             unsigned int vtaps[],
> > > > -             unsigned int VTAPsChroma[],
> > > > -             double VRatio[],
> > > > -             double VRatioChroma[],
> > > > -             unsigned int HTotal[],
> > > > -             double PixelClock[],
> > > > -             unsigned int BlendingAndTiming[],
> > > >               unsigned int DPPPerPlane[],
> > > >               double BytePerPixelDETY[],
> > > >               double BytePerPixelDETC[],
> > > > -             double DSTXAfterScaler[],
> > > > -             double DSTYAfterScaler[],
> > > > -             bool WritebackEnable[],
> > > > -             enum source_format_class WritebackPixelFormat[],
> > > > -             double WritebackDestinationWidth[],
> > > > -             double WritebackDestinationHeight[],
> > > > -             double WritebackSourceHeight[],
> > > >               bool UnboundedRequestEnabled,
> > > >               unsigned int CompressedBufferSizeInkByte,
> > > >               enum clock_change_support *DRAMClockChangeSupport,
> > > > -             double *UrgentWatermark,
> > > > -             double *WritebackUrgentWatermark,
> > > > -             double *DRAMClockChangeWatermark,
> > > > -             double *WritebackDRAMClockChangeWatermark,
> > > >               double *StutterExitWatermark,
> > > >               double *StutterEnterPlusExitWatermark,
> > > >               double *Z8StutterExitWatermark,
> > > > -             double *Z8StutterEnterPlusExitWatermark,
> > > > -             double *MinActiveDRAMClockChangeLatencySupported)
> > > > +             double *Z8StutterEnterPlusExitWatermark)
> > > >  {
> > > >       struct vba_vars_st *v = &mode_lib->vba;
> > > >       double EffectiveLBLatencyHidingY;
> > > > @@ -5756,103 +5612,103 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >       double TotalPixelBW = 0.0;
> > > >       int k, j;
> > > >
> > > > -     *UrgentWatermark = UrgentLatency + ExtraLatency;
> > > > +     v->UrgentWatermark = UrgentLatency + ExtraLatency;
> > > >
> > > >  #ifdef __DML_VBA_DEBUG__
> > > >       dml_print("DML::%s: UrgentLatency = %f\n", __func__, UrgentLatency);
> > > >       dml_print("DML::%s: ExtraLatency = %f\n", __func__, ExtraLatency);
> > > > -     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, *UrgentWatermark);
> > > > +     dml_print("DML::%s: UrgentWatermark = %f\n", __func__, v->UrgentWatermark);
> > > >  #endif
> > > >
> > > > -     *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
> > > > +     v->DRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->UrgentWatermark;
> > > >
> > > >  #ifdef __DML_VBA_DEBUG__
> > > > -     dml_print("DML::%s: DRAMClockChangeLatency = %f\n", __func__, DRAMClockChangeLatency);
> > > > -     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, *DRAMClockChangeWatermark);
> > > > +     dml_print("DML::%s: v->DRAMClockChangeLatency = %f\n", __func__, v->DRAMClockChangeLatency);
> > > > +     dml_print("DML::%s: DRAMClockChangeWatermark = %f\n", __func__, v->DRAMClockChangeWatermark);
> > > >  #endif
> > > >
> > > >       v->TotalActiveWriteback = 0;
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > -             if (WritebackEnable[k] == true) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > > +             if (v->WritebackEnable[k] == true) {
> > > >                       v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
> > > >               }
> > > >       }
> > > >
> > > >       if (v->TotalActiveWriteback <= 1) {
> > > > -             *WritebackUrgentWatermark = WritebackLatency;
> > > > +             v->WritebackUrgentWatermark = v->WritebackLatency;
> > > >       } else {
> > > > -             *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > > +             v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > >       }
> > > >
> > > >       if (v->TotalActiveWriteback <= 1) {
> > > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
> > > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency;
> > > >       } else {
> > > > -             *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > > +             v->WritebackDRAMClockChangeWatermark = v->DRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
> > > >       }
> > > >
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >               TotalPixelBW = TotalPixelBW
> > > > -                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k])
> > > > -                                             / (HTotal[k] / PixelClock[k]);
> > > > +                             + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k])
> > > > +                                             / (v->HTotal[k] / v->PixelClock[k]);
> > > >       }
> > > >
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >               double EffectiveDETBufferSizeY = DETBufferSizeY[k];
> > > >
> > > >               v->LBLatencyHidingSourceLinesY = dml_min(
> > > > -                             (double) MaxLineBufferLines,
> > > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
> > > > +                             (double) v->MaxLineBufferLines,
> > > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
> > > >
> > > >               v->LBLatencyHidingSourceLinesC = dml_min(
> > > > -                             (double) MaxLineBufferLines,
> > > > -                             dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
> > > > +                             (double) v->MaxLineBufferLines,
> > > > +                             dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
> > > >
> > > > -             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
> > > > +             EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
> > > >
> > > > -             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
> > > > +             EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
> > > >
> > > >               if (UnboundedRequestEnabled) {
> > > >                       EffectiveDETBufferSizeY = EffectiveDETBufferSizeY
> > > > -                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW;
> > > > +                                     + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW;
> > > >               }
> > > >
> > > >               LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[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];
> > > >               if (BytePerPixelDETC[k] > 0) {
> > > >                       LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
> > > >                       LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
> > > > -                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
> > > > +                     FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
> > > >               } else {
> > > >                       LinesInDETC = 0;
> > > >                       FullDETBufferingTimeC = 999999;
> > > >               }
> > > >
> > > >               ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY
> > > > -                             - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > > +                             - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > > >
> > > > -             if (NumberOfActivePlanes > 1) {
> > > > +             if (v->NumberOfActivePlanes > 1) {
> > > >                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
> > > > -                                     - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
> > > > +                                     - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
> > > >               }
> > > >
> > > >               if (BytePerPixelDETC[k] > 0) {
> > > >                       ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC
> > > > -                                     - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTotal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark;
> > > > +                                     - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockChangeWatermark;
> > > >
> > > > -                     if (NumberOfActivePlanes > 1) {
> > > > +                     if (v->NumberOfActivePlanes > 1) {
> > > >                               ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC
> > > > -                                             - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
> > > > +                                             - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
> > > >                       }
> > > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
> > > >               } else {
> > > >                       v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
> > > >               }
> > > >
> > > > -             if (WritebackEnable[k] == true) {
> > > > -                     WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024
> > > > -                                     / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
> > > > -                     if (WritebackPixelFormat[k] == dm_444_64) {
> > > > +             if (v->WritebackEnable[k] == true) {
> > > > +                     WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024
> > > > +                                     / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
> > > > +                     if (v->WritebackPixelFormat[k] == dm_444_64) {
> > > >                               WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
> > > >                       }
> > > >                       WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
> > > > @@ -5862,14 +5718,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >
> > > >       v->MinActiveDRAMClockChangeMargin = 999999;
> > > >       PlaneWithMinActiveDRAMClockChangeMargin = 0;
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > >               if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
> > > >                       v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
> > > > -                     if (BlendingAndTiming[k] == k) {
> > > > +                     if (v->BlendingAndTiming[k] == k) {
> > > >                               PlaneWithMinActiveDRAMClockChangeMargin = k;
> > > >                       } else {
> > > > -                             for (j = 0; j < NumberOfActivePlanes; ++j) {
> > > > -                                     if (BlendingAndTiming[k] == j) {
> > > > +                             for (j = 0; j < v->NumberOfActivePlanes; ++j) {
> > > > +                                     if (v->BlendingAndTiming[k] == j) {
> > > >                                               PlaneWithMinActiveDRAMClockChangeMargin = j;
> > > >                                       }
> > > >                               }
> > > > @@ -5877,11 +5733,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >               }
> > > >       }
> > > >
> > > > -     *MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
> > > > +     v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->DRAMClockChangeLatency ;
> > > >
> > > >       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > -             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > > +             if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin)
> > > >                               && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
> > > >                       SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
> > > >               }
> > > > @@ -5889,25 +5745,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
> > > >
> > > >       v->TotalNumberOfActiveOTG = 0;
> > > >
> > > > -     for (k = 0; k < NumberOfActivePlanes; ++k) {
> > > > -             if (BlendingAndTiming[k] == k) {
> > > > +     for (k = 0; k < v->NumberOfActivePlanes; ++k) {
> > > > +             if (v->BlendingAndTiming[k] == k) {
> > > >                       v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
> > > >               }
> > > >       }
> > > >
> > > >       if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode == 0) {
> > > >               *DRAMClockChangeSupport = dm_dram_clock_change_vactive;
> > > > -     } else if ((SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > > > +     } else if ((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1
> > > >                       || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0) {
> > > >               *DRAMClockChangeSupport = dm_dram_clock_change_vblank;
> > > >       } else {
> > > >               *DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
> > > >       }
> > > >
> > > > -     *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > -     *StutterEnterPlusExitWatermark = (SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > > -     *Z8StutterExitWatermark = SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > -     *Z8StutterEnterPlusExitWatermark = SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > +     *StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > +     *StutterEnterPlusExitWatermark = (v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep);
> > > > +     *Z8StutterExitWatermark = v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > > +     *Z8StutterEnterPlusExitWatermark = v->SREnterPlusExitZ8Time + ExtraLatency + 10 / DCFCLKDeepSleep;
> > > >
> > > >  #ifdef __DML_VBA_DEBUG__
> > > >       dml_print("DML::%s: StutterExitWatermark = %f\n", __func__, *StutterExitWatermark);
> > > >
> > > > base-commit: dacd2d2d9d800b7ab2ee2734578112532cba8105

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2022-09-21  1:12 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-16 21:06 [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport() Nathan Chancellor
2022-09-16 21:06 ` Nathan Chancellor
2022-09-16 21:06 ` [PATCH 2/2] drm/amd/display: Reduce number of arguments of dml314's CalculateFlipSchedule() Nathan Chancellor
2022-09-16 21:06   ` Nathan Chancellor
2022-09-16 22:04 ` [PATCH 1/2] drm/amd/display: Reduce number of arguments of dml314's CalculateWatermarksAndDRAMSpeedChangeSupport() Tom Rix
2022-09-16 22:04   ` Tom Rix
2022-09-16 22:16   ` Nathan Chancellor
2022-09-16 22:16     ` Nathan Chancellor
2022-09-16 22:16     ` Nathan Chancellor
2022-09-17 12:38 ` Maíra Canal
2022-09-20 16:06   ` Alex Deucher
2022-09-20 16:06     ` Alex Deucher
2022-09-20 16:06     ` Alex Deucher
2022-09-20 23:48     ` Nathan Chancellor
2022-09-20 23:48       ` Nathan Chancellor
2022-09-20 23:48       ` Nathan Chancellor
2022-09-21  1:12       ` Alex Deucher
2022-09-21  1:12         ` Alex Deucher
2022-09-21  1:12         ` Alex Deucher

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.