Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/display: Reduce number of arguments of dcn30's CalculateWatermarksAndDRAMSpeedChangeSupport()

CalculateWatermarksAndDRAMSpeedChangeSupport() has a large number of
parameters, which must be passed on the stack. Most of the parameters
between the two callsites are the same, so they can be accessed through
the existing mode_lib pointer, instead of being passed as explicit
arguments. Doing this reduces the stack size of
dml30_ModeSupportAndSystemConfigurationFull() from 1912 bytes to 1840
bytes building for x86_64 with clang-22, helping stay under the 2048
byte limit for display_mode_vba_30.c.

Additionally, now that there is a pointer to mode_lib->vba available,
use 'v' consistently throughout the entire function.

Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 563dfbefdf633c8d958398ddfa3955f9f40e47d9)

authored by

Nathan Chancellor and committed by
Alex Deucher
6ce6fbfd f54a91f5

+66 -221
+66 -221
drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c
··· 265 265 static void CalculateWatermarksAndDRAMSpeedChangeSupport( 266 266 struct display_mode_lib *mode_lib, 267 267 unsigned int PrefetchMode, 268 - unsigned int NumberOfActivePlanes, 269 - unsigned int MaxLineBufferLines, 270 - unsigned int LineBufferSize, 271 - unsigned int DPPOutputBufferPixels, 272 - unsigned int DETBufferSizeInKByte, 273 - unsigned int WritebackInterfaceBufferSize, 274 268 double DCFCLK, 275 269 double ReturnBW, 276 - bool GPUVMEnable, 277 - unsigned int dpte_group_bytes[], 278 - unsigned int MetaChunkSize, 279 270 double UrgentLatency, 280 271 double ExtraLatency, 281 - double WritebackLatency, 282 - double WritebackChunkSize, 283 272 double SOCCLK, 284 - double DRAMClockChangeLatency, 285 - double SRExitTime, 286 - double SREnterPlusExitTime, 287 273 double DCFCLKDeepSleep, 288 274 unsigned int DPPPerPlane[], 289 - bool DCCEnable[], 290 275 double DPPCLK[], 291 276 unsigned int DETBufferSizeY[], 292 277 unsigned int DETBufferSizeC[], 293 278 unsigned int SwathHeightY[], 294 279 unsigned int SwathHeightC[], 295 - unsigned int LBBitPerPixel[], 296 280 double SwathWidthY[], 297 281 double SwathWidthC[], 298 - double HRatio[], 299 - double HRatioChroma[], 300 - unsigned int vtaps[], 301 - unsigned int VTAPsChroma[], 302 - double VRatio[], 303 - double VRatioChroma[], 304 - unsigned int HTotal[], 305 - double PixelClock[], 306 - unsigned int BlendingAndTiming[], 307 282 double BytePerPixelDETY[], 308 283 double BytePerPixelDETC[], 309 - double DSTXAfterScaler[], 310 - double DSTYAfterScaler[], 311 - bool WritebackEnable[], 312 - enum source_format_class WritebackPixelFormat[], 313 - double WritebackDestinationWidth[], 314 - double WritebackDestinationHeight[], 315 - double WritebackSourceHeight[], 316 - enum clock_change_support *DRAMClockChangeSupport, 317 - double *UrgentWatermark, 318 - double *WritebackUrgentWatermark, 319 - double *DRAMClockChangeWatermark, 320 - double *WritebackDRAMClockChangeWatermark, 321 - double *StutterExitWatermark, 322 - double *StutterEnterPlusExitWatermark, 323 - double *MinActiveDRAMClockChangeLatencySupported); 284 + enum clock_change_support *DRAMClockChangeSupport); 324 285 static void CalculateDCFCLKDeepSleep( 325 286 struct display_mode_lib *mode_lib, 326 287 unsigned int NumberOfActivePlanes, ··· 2607 2646 CalculateWatermarksAndDRAMSpeedChangeSupport( 2608 2647 mode_lib, 2609 2648 PrefetchMode, 2610 - v->NumberOfActivePlanes, 2611 - v->MaxLineBufferLines, 2612 - v->LineBufferSize, 2613 - v->DPPOutputBufferPixels, 2614 - v->DETBufferSizeInKByte[0], 2615 - v->WritebackInterfaceBufferSize, 2616 2649 v->DCFCLK, 2617 2650 v->ReturnBW, 2618 - v->GPUVMEnable, 2619 - v->dpte_group_bytes, 2620 - v->MetaChunkSize, 2621 2651 v->UrgentLatency, 2622 2652 v->UrgentExtraLatency, 2623 - v->WritebackLatency, 2624 - v->WritebackChunkSize, 2625 2653 v->SOCCLK, 2626 - v->FinalDRAMClockChangeLatency, 2627 - v->SRExitTime, 2628 - v->SREnterPlusExitTime, 2629 2654 v->DCFCLKDeepSleep, 2630 2655 v->DPPPerPlane, 2631 - v->DCCEnable, 2632 2656 v->DPPCLK, 2633 2657 v->DETBufferSizeY, 2634 2658 v->DETBufferSizeC, 2635 2659 v->SwathHeightY, 2636 2660 v->SwathHeightC, 2637 - v->LBBitPerPixel, 2638 2661 v->SwathWidthY, 2639 2662 v->SwathWidthC, 2640 - v->HRatio, 2641 - v->HRatioChroma, 2642 - v->vtaps, 2643 - v->VTAPsChroma, 2644 - v->VRatio, 2645 - v->VRatioChroma, 2646 - v->HTotal, 2647 - v->PixelClock, 2648 - v->BlendingAndTiming, 2649 2663 v->BytePerPixelDETY, 2650 2664 v->BytePerPixelDETC, 2651 - v->DSTXAfterScaler, 2652 - v->DSTYAfterScaler, 2653 - v->WritebackEnable, 2654 - v->WritebackPixelFormat, 2655 - v->WritebackDestinationWidth, 2656 - v->WritebackDestinationHeight, 2657 - v->WritebackSourceHeight, 2658 - &DRAMClockChangeSupport, 2659 - &v->UrgentWatermark, 2660 - &v->WritebackUrgentWatermark, 2661 - &v->DRAMClockChangeWatermark, 2662 - &v->WritebackDRAMClockChangeWatermark, 2663 - &v->StutterExitWatermark, 2664 - &v->StutterEnterPlusExitWatermark, 2665 - &v->MinActiveDRAMClockChangeLatencySupported); 2665 + &DRAMClockChangeSupport); 2666 2666 2667 2667 for (k = 0; k < v->NumberOfActivePlanes; ++k) { 2668 2668 if (v->WritebackEnable[k] == true) { ··· 4817 4895 CalculateWatermarksAndDRAMSpeedChangeSupport( 4818 4896 mode_lib, 4819 4897 v->PrefetchModePerState[i][j], 4820 - v->NumberOfActivePlanes, 4821 - v->MaxLineBufferLines, 4822 - v->LineBufferSize, 4823 - v->DPPOutputBufferPixels, 4824 - v->DETBufferSizeInKByte[0], 4825 - v->WritebackInterfaceBufferSize, 4826 4898 v->DCFCLKState[i][j], 4827 4899 v->ReturnBWPerState[i][j], 4828 - v->GPUVMEnable, 4829 - v->dpte_group_bytes, 4830 - v->MetaChunkSize, 4831 4900 v->UrgLatency[i], 4832 4901 v->ExtraLatency, 4833 - v->WritebackLatency, 4834 - v->WritebackChunkSize, 4835 4902 v->SOCCLKPerState[i], 4836 - v->FinalDRAMClockChangeLatency, 4837 - v->SRExitTime, 4838 - v->SREnterPlusExitTime, 4839 4903 v->ProjectedDCFCLKDeepSleep[i][j], 4840 4904 v->NoOfDPPThisState, 4841 - v->DCCEnable, 4842 4905 v->RequiredDPPCLKThisState, 4843 4906 v->DETBufferSizeYThisState, 4844 4907 v->DETBufferSizeCThisState, 4845 4908 v->SwathHeightYThisState, 4846 4909 v->SwathHeightCThisState, 4847 - v->LBBitPerPixel, 4848 4910 v->SwathWidthYThisState, 4849 4911 v->SwathWidthCThisState, 4850 - v->HRatio, 4851 - v->HRatioChroma, 4852 - v->vtaps, 4853 - v->VTAPsChroma, 4854 - v->VRatio, 4855 - v->VRatioChroma, 4856 - v->HTotal, 4857 - v->PixelClock, 4858 - v->BlendingAndTiming, 4859 4912 v->BytePerPixelInDETY, 4860 4913 v->BytePerPixelInDETC, 4861 - v->DSTXAfterScaler, 4862 - v->DSTYAfterScaler, 4863 - v->WritebackEnable, 4864 - v->WritebackPixelFormat, 4865 - v->WritebackDestinationWidth, 4866 - v->WritebackDestinationHeight, 4867 - v->WritebackSourceHeight, 4868 - &v->DRAMClockChangeSupport[i][j], 4869 - &v->UrgentWatermark, 4870 - &v->WritebackUrgentWatermark, 4871 - &v->DRAMClockChangeWatermark, 4872 - &v->WritebackDRAMClockChangeWatermark, 4873 - &v->StutterExitWatermark, 4874 - &v->StutterEnterPlusExitWatermark, 4875 - &v->MinActiveDRAMClockChangeLatencySupported); 4914 + &v->DRAMClockChangeSupport[i][j]); 4876 4915 } 4877 4916 } 4878 4917 ··· 4950 5067 static void CalculateWatermarksAndDRAMSpeedChangeSupport( 4951 5068 struct display_mode_lib *mode_lib, 4952 5069 unsigned int PrefetchMode, 4953 - unsigned int NumberOfActivePlanes, 4954 - unsigned int MaxLineBufferLines, 4955 - unsigned int LineBufferSize, 4956 - unsigned int DPPOutputBufferPixels, 4957 - unsigned int DETBufferSizeInKByte, 4958 - unsigned int WritebackInterfaceBufferSize, 4959 5070 double DCFCLK, 4960 5071 double ReturnBW, 4961 - bool GPUVMEnable, 4962 - unsigned int dpte_group_bytes[], 4963 - unsigned int MetaChunkSize, 4964 5072 double UrgentLatency, 4965 5073 double ExtraLatency, 4966 - double WritebackLatency, 4967 - double WritebackChunkSize, 4968 5074 double SOCCLK, 4969 - double DRAMClockChangeLatency, 4970 - double SRExitTime, 4971 - double SREnterPlusExitTime, 4972 5075 double DCFCLKDeepSleep, 4973 5076 unsigned int DPPPerPlane[], 4974 - bool DCCEnable[], 4975 5077 double DPPCLK[], 4976 5078 unsigned int DETBufferSizeY[], 4977 5079 unsigned int DETBufferSizeC[], 4978 5080 unsigned int SwathHeightY[], 4979 5081 unsigned int SwathHeightC[], 4980 - unsigned int LBBitPerPixel[], 4981 5082 double SwathWidthY[], 4982 5083 double SwathWidthC[], 4983 - double HRatio[], 4984 - double HRatioChroma[], 4985 - unsigned int vtaps[], 4986 - unsigned int VTAPsChroma[], 4987 - double VRatio[], 4988 - double VRatioChroma[], 4989 - unsigned int HTotal[], 4990 - double PixelClock[], 4991 - unsigned int BlendingAndTiming[], 4992 5084 double BytePerPixelDETY[], 4993 5085 double BytePerPixelDETC[], 4994 - double DSTXAfterScaler[], 4995 - double DSTYAfterScaler[], 4996 - bool WritebackEnable[], 4997 - enum source_format_class WritebackPixelFormat[], 4998 - double WritebackDestinationWidth[], 4999 - double WritebackDestinationHeight[], 5000 - double WritebackSourceHeight[], 5001 - enum clock_change_support *DRAMClockChangeSupport, 5002 - double *UrgentWatermark, 5003 - double *WritebackUrgentWatermark, 5004 - double *DRAMClockChangeWatermark, 5005 - double *WritebackDRAMClockChangeWatermark, 5006 - double *StutterExitWatermark, 5007 - double *StutterEnterPlusExitWatermark, 5008 - double *MinActiveDRAMClockChangeLatencySupported) 5086 + enum clock_change_support *DRAMClockChangeSupport) 5009 5087 { 5088 + struct vba_vars_st *v = &mode_lib->vba; 5010 5089 double EffectiveLBLatencyHidingY = 0; 5011 5090 double EffectiveLBLatencyHidingC = 0; 5012 5091 double LinesInDETY[DC__NUM_DPP__MAX] = { 0 }; ··· 4987 5142 double WritebackDRAMClockChangeLatencyHiding = 0; 4988 5143 unsigned int k, j; 4989 5144 4990 - mode_lib->vba.TotalActiveDPP = 0; 4991 - mode_lib->vba.TotalDCCActiveDPP = 0; 4992 - for (k = 0; k < NumberOfActivePlanes; ++k) { 4993 - mode_lib->vba.TotalActiveDPP = mode_lib->vba.TotalActiveDPP + DPPPerPlane[k]; 4994 - if (DCCEnable[k] == true) { 4995 - mode_lib->vba.TotalDCCActiveDPP = mode_lib->vba.TotalDCCActiveDPP + DPPPerPlane[k]; 5145 + v->TotalActiveDPP = 0; 5146 + v->TotalDCCActiveDPP = 0; 5147 + for (k = 0; k < v->NumberOfActivePlanes; ++k) { 5148 + v->TotalActiveDPP = v->TotalActiveDPP + DPPPerPlane[k]; 5149 + if (v->DCCEnable[k] == true) { 5150 + v->TotalDCCActiveDPP = v->TotalDCCActiveDPP + DPPPerPlane[k]; 4996 5151 } 4997 5152 } 4998 5153 4999 - *UrgentWatermark = UrgentLatency + ExtraLatency; 5154 + v->UrgentWatermark = UrgentLatency + ExtraLatency; 5000 5155 5001 - *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark; 5156 + v->DRAMClockChangeWatermark = v->FinalDRAMClockChangeLatency + v->UrgentWatermark; 5002 5157 5003 - mode_lib->vba.TotalActiveWriteback = 0; 5004 - for (k = 0; k < NumberOfActivePlanes; ++k) { 5005 - if (WritebackEnable[k] == true) { 5006 - mode_lib->vba.TotalActiveWriteback = mode_lib->vba.TotalActiveWriteback + 1; 5158 + v->TotalActiveWriteback = 0; 5159 + for (k = 0; k < v->NumberOfActivePlanes; ++k) { 5160 + if (v->WritebackEnable[k] == true) { 5161 + v->TotalActiveWriteback = v->TotalActiveWriteback + 1; 5007 5162 } 5008 5163 } 5009 5164 5010 - if (mode_lib->vba.TotalActiveWriteback <= 1) { 5011 - *WritebackUrgentWatermark = WritebackLatency; 5165 + if (v->TotalActiveWriteback <= 1) { 5166 + v->WritebackUrgentWatermark = v->WritebackLatency; 5012 5167 } else { 5013 - *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK; 5168 + v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK; 5014 5169 } 5015 5170 5016 - if (mode_lib->vba.TotalActiveWriteback <= 1) { 5017 - *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency; 5171 + if (v->TotalActiveWriteback <= 1) { 5172 + v->WritebackDRAMClockChangeWatermark = v->FinalDRAMClockChangeLatency + v->WritebackLatency; 5018 5173 } else { 5019 - *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK; 5174 + v->WritebackDRAMClockChangeWatermark = v->FinalDRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK; 5020 5175 } 5021 5176 5022 - for (k = 0; k < NumberOfActivePlanes; ++k) { 5177 + for (k = 0; k < v->NumberOfActivePlanes; ++k) { 5023 5178 5024 - mode_lib->vba.LBLatencyHidingSourceLinesY = dml_min((double) MaxLineBufferLines, dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1); 5179 + v->LBLatencyHidingSourceLinesY = dml_min((double) v->MaxLineBufferLines, dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1); 5025 5180 5026 - mode_lib->vba.LBLatencyHidingSourceLinesC = dml_min((double) MaxLineBufferLines, dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1); 5181 + v->LBLatencyHidingSourceLinesC = dml_min((double) v->MaxLineBufferLines, dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1); 5027 5182 5028 - EffectiveLBLatencyHidingY = mode_lib->vba.LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]); 5183 + EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]); 5029 5184 5030 - EffectiveLBLatencyHidingC = mode_lib->vba.LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]); 5185 + EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]); 5031 5186 5032 5187 LinesInDETY[k] = (double) DETBufferSizeY[k] / BytePerPixelDETY[k] / SwathWidthY[k]; 5033 5188 LinesInDETYRoundedDownToSwath[k] = dml_floor(LinesInDETY[k], SwathHeightY[k]); 5034 - FullDETBufferingTimeY[k] = LinesInDETYRoundedDownToSwath[k] * (HTotal[k] / PixelClock[k]) / VRatio[k]; 5189 + FullDETBufferingTimeY[k] = LinesInDETYRoundedDownToSwath[k] * (v->HTotal[k] / v->PixelClock[k]) / v->VRatio[k]; 5035 5190 if (BytePerPixelDETC[k] > 0) { 5036 - LinesInDETC = mode_lib->vba.DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k]; 5191 + LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k]; 5037 5192 LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]); 5038 - FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k]; 5193 + FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k]; 5039 5194 } else { 5040 5195 LinesInDETC = 0; 5041 5196 FullDETBufferingTimeC = 999999; 5042 5197 } 5043 5198 5044 - ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY[k] - *UrgentWatermark - (HTotal[k] / PixelClock[k]) * (DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) - *DRAMClockChangeWatermark; 5199 + ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY[k] - v->UrgentWatermark - (v->HTotal[k] / v->PixelClock[k]) * (v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) - v->DRAMClockChangeWatermark; 5045 5200 5046 - if (NumberOfActivePlanes > 1) { 5047 - ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k]; 5201 + if (v->NumberOfActivePlanes > 1) { 5202 + ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k]; 5048 5203 } 5049 5204 5050 5205 if (BytePerPixelDETC[k] > 0) { 5051 - ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC - *UrgentWatermark - (HTotal[k] / PixelClock[k]) * (DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) - *DRAMClockChangeWatermark; 5206 + ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC - v->UrgentWatermark - (v->HTotal[k] / v->PixelClock[k]) * (v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) - v->DRAMClockChangeWatermark; 5052 5207 5053 - if (NumberOfActivePlanes > 1) { 5054 - ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k]; 5208 + if (v->NumberOfActivePlanes > 1) { 5209 + ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k]; 5055 5210 } 5056 - mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC); 5211 + v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC); 5057 5212 } else { 5058 - mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY; 5213 + v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY; 5059 5214 } 5060 5215 5061 - if (WritebackEnable[k] == true) { 5216 + if (v->WritebackEnable[k] == true) { 5062 5217 5063 - WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024 / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4); 5064 - if (WritebackPixelFormat[k] == dm_444_64) { 5218 + WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024 / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4); 5219 + if (v->WritebackPixelFormat[k] == dm_444_64) { 5065 5220 WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2; 5066 5221 } 5067 - if (mode_lib->vba.WritebackConfiguration == dm_whole_buffer_for_single_stream_interleave) { 5222 + if (v->WritebackConfiguration == dm_whole_buffer_for_single_stream_interleave) { 5068 5223 WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding * 2; 5069 5224 } 5070 - WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - mode_lib->vba.WritebackDRAMClockChangeWatermark; 5071 - mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k], WritebackDRAMClockChangeLatencyMargin); 5225 + WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark; 5226 + v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(v->ActiveDRAMClockChangeLatencyMargin[k], WritebackDRAMClockChangeLatencyMargin); 5072 5227 } 5073 5228 } 5074 5229 5075 - mode_lib->vba.MinActiveDRAMClockChangeMargin = 999999; 5230 + v->MinActiveDRAMClockChangeMargin = 999999; 5076 5231 PlaneWithMinActiveDRAMClockChangeMargin = 0; 5077 - for (k = 0; k < NumberOfActivePlanes; ++k) { 5078 - if (mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] < mode_lib->vba.MinActiveDRAMClockChangeMargin) { 5079 - mode_lib->vba.MinActiveDRAMClockChangeMargin = mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k]; 5080 - if (BlendingAndTiming[k] == k) { 5232 + for (k = 0; k < v->NumberOfActivePlanes; ++k) { 5233 + if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) { 5234 + v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k]; 5235 + if (v->BlendingAndTiming[k] == k) { 5081 5236 PlaneWithMinActiveDRAMClockChangeMargin = k; 5082 5237 } else { 5083 - for (j = 0; j < NumberOfActivePlanes; ++j) { 5084 - if (BlendingAndTiming[k] == j) { 5238 + for (j = 0; j < v->NumberOfActivePlanes; ++j) { 5239 + if (v->BlendingAndTiming[k] == j) { 5085 5240 PlaneWithMinActiveDRAMClockChangeMargin = j; 5086 5241 } 5087 5242 } ··· 5089 5244 } 5090 5245 } 5091 5246 5092 - *MinActiveDRAMClockChangeLatencySupported = mode_lib->vba.MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency; 5247 + v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->FinalDRAMClockChangeLatency; 5093 5248 5094 5249 SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999; 5095 - for (k = 0; k < NumberOfActivePlanes; ++k) { 5096 - if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin) && mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) { 5097 - SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k]; 5250 + for (k = 0; k < v->NumberOfActivePlanes; ++k) { 5251 + if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin) && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) { 5252 + SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k]; 5098 5253 } 5099 5254 } 5100 5255 5101 - mode_lib->vba.TotalNumberOfActiveOTG = 0; 5102 - for (k = 0; k < NumberOfActivePlanes; ++k) { 5103 - if (BlendingAndTiming[k] == k) { 5104 - mode_lib->vba.TotalNumberOfActiveOTG = mode_lib->vba.TotalNumberOfActiveOTG + 1; 5256 + v->TotalNumberOfActiveOTG = 0; 5257 + for (k = 0; k < v->NumberOfActivePlanes; ++k) { 5258 + if (v->BlendingAndTiming[k] == k) { 5259 + v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1; 5105 5260 } 5106 5261 } 5107 5262 5108 - if (mode_lib->vba.MinActiveDRAMClockChangeMargin > 0) { 5263 + if (v->MinActiveDRAMClockChangeMargin > 0) { 5109 5264 *DRAMClockChangeSupport = dm_dram_clock_change_vactive; 5110 - } else if (((mode_lib->vba.SynchronizedVBlank == true || mode_lib->vba.TotalNumberOfActiveOTG == 1 || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0)) { 5265 + } else if (((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1 || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0)) { 5111 5266 *DRAMClockChangeSupport = dm_dram_clock_change_vblank; 5112 5267 } else { 5113 5268 *DRAMClockChangeSupport = dm_dram_clock_change_unsupported; 5114 5269 } 5115 5270 5116 5271 FullDETBufferingTimeYStutterCriticalPlane = FullDETBufferingTimeY[0]; 5117 - for (k = 0; k < NumberOfActivePlanes; ++k) { 5272 + for (k = 0; k < v->NumberOfActivePlanes; ++k) { 5118 5273 if (FullDETBufferingTimeY[k] <= FullDETBufferingTimeYStutterCriticalPlane) { 5119 5274 FullDETBufferingTimeYStutterCriticalPlane = FullDETBufferingTimeY[k]; 5120 - TimeToFinishSwathTransferStutterCriticalPlane = (SwathHeightY[k] - (LinesInDETY[k] - LinesInDETYRoundedDownToSwath[k])) * (HTotal[k] / PixelClock[k]) / VRatio[k]; 5275 + TimeToFinishSwathTransferStutterCriticalPlane = (SwathHeightY[k] - (LinesInDETY[k] - LinesInDETYRoundedDownToSwath[k])) * (v->HTotal[k] / v->PixelClock[k]) / v->VRatio[k]; 5121 5276 } 5122 5277 } 5123 5278 5124 - *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep; 5125 - *StutterEnterPlusExitWatermark = dml_max(SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep, TimeToFinishSwathTransferStutterCriticalPlane); 5279 + v->StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep; 5280 + v->StutterEnterPlusExitWatermark = dml_max(v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep, TimeToFinishSwathTransferStutterCriticalPlane); 5126 5281 5127 5282 } 5128 5283