mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	drm/amd/display: fix i386 frame size warning
Addresses the following warning:
drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_mode_vba_30.c:3596:6: error: stack frame size (2092) exceeds limit (2048) in 'dml30_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than]
void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
     ^
UseMinimumDCFCLK() is eating away at
dml30_ModeSupportAndSystemConfigurationFull()'s stack space, so use a
pointer to struct vba_vars_st instead of passing lots of large arrays
as parameters by value.
Signed-off-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
			
			
This commit is contained in:
		
							parent
							
								
									947f63f17e
								
							
						
					
					
						commit
						a0f7e7f759
					
				| @ -396,64 +396,10 @@ static void CalculateUrgentBurstFactor( | |||||||
| 
 | 
 | ||||||
| static void UseMinimumDCFCLK( | static void UseMinimumDCFCLK( | ||||||
| 		struct display_mode_lib *mode_lib, | 		struct display_mode_lib *mode_lib, | ||||||
| 		int MaxInterDCNTileRepeaters, | 		struct vba_vars_st *v, | ||||||
| 		int MaxPrefetchMode, | 		int MaxPrefetchMode, | ||||||
| 		double FinalDRAMClockChangeLatency, | 		int ReorderingBytes); | ||||||
| 		double SREnterPlusExitTime, | 
 | ||||||
| 		int ReturnBusWidth, |  | ||||||
| 		int RoundTripPingLatencyCycles, |  | ||||||
| 		int ReorderingBytes, |  | ||||||
| 		int PixelChunkSizeInKByte, |  | ||||||
| 		int MetaChunkSize, |  | ||||||
| 		bool GPUVMEnable, |  | ||||||
| 		int GPUVMMaxPageTableLevels, |  | ||||||
| 		bool HostVMEnable, |  | ||||||
| 		int NumberOfActivePlanes, |  | ||||||
| 		double HostVMMinPageSize, |  | ||||||
| 		int HostVMMaxNonCachedPageTableLevels, |  | ||||||
| 		bool DynamicMetadataVMEnabled, |  | ||||||
| 		enum immediate_flip_requirement ImmediateFlipRequirement, |  | ||||||
| 		bool ProgressiveToInterlaceUnitInOPP, |  | ||||||
| 		double MaxAveragePercentOfIdealSDPPortBWDisplayCanUseInNormalSystemOperation, |  | ||||||
| 		double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData, |  | ||||||
| 		double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly, |  | ||||||
| 		double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelDataOnly, |  | ||||||
| 		int VTotal[], |  | ||||||
| 		int VActive[], |  | ||||||
| 		int DynamicMetadataTransmittedBytes[], |  | ||||||
| 		int DynamicMetadataLinesBeforeActiveRequired[], |  | ||||||
| 		bool Interlace[], |  | ||||||
| 		double RequiredDPPCLK[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double RequiredDISPCLK[][2], |  | ||||||
| 		double UrgLatency[], |  | ||||||
| 		unsigned int NoOfDPP[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double ProjectedDCFCLKDeepSleep[][2], |  | ||||||
| 		double MaximumVStartup[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double TotalVActivePixelBandwidth[][2], |  | ||||||
| 		double TotalVActiveCursorBandwidth[][2], |  | ||||||
| 		double TotalMetaRowBandwidth[][2], |  | ||||||
| 		double TotalDPTERowBandwidth[][2], |  | ||||||
| 		unsigned int TotalNumberOfActiveDPP[][2], |  | ||||||
| 		unsigned int TotalNumberOfDCCActiveDPP[][2], |  | ||||||
| 		int dpte_group_bytes[], |  | ||||||
| 		double PrefetchLinesY[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double PrefetchLinesC[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		unsigned int swath_width_luma_ub_all_states[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		unsigned int swath_width_chroma_ub_all_states[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		int BytePerPixelY[], |  | ||||||
| 		int BytePerPixelC[], |  | ||||||
| 		int HTotal[], |  | ||||||
| 		double PixelClock[], |  | ||||||
| 		double PDEAndMetaPTEBytesPerFrame[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double DPTEBytesPerRow[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double MetaRowBytes[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		bool DynamicMetadataEnable[], |  | ||||||
| 		double VActivePixelBandwidth[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double VActiveCursorBandwidth[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double ReadBandwidthLuma[], |  | ||||||
| 		double ReadBandwidthChroma[], |  | ||||||
| 		double DCFCLKPerState[], |  | ||||||
| 		double DCFCLKState[][2]); |  | ||||||
| static void CalculatePixelDeliveryTimes( | static void CalculatePixelDeliveryTimes( | ||||||
| 		unsigned int NumberOfActivePlanes, | 		unsigned int NumberOfActivePlanes, | ||||||
| 		double VRatio[], | 		double VRatio[], | ||||||
| @ -4692,66 +4638,7 @@ void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (v->UseMinimumRequiredDCFCLK == true) { | 	if (v->UseMinimumRequiredDCFCLK == true) { | ||||||
| 		UseMinimumDCFCLK( | 		UseMinimumDCFCLK(mode_lib, v, MaxPrefetchMode, ReorderingBytes); | ||||||
| 				mode_lib, |  | ||||||
| 				v->MaxInterDCNTileRepeaters, |  | ||||||
| 				MaxPrefetchMode, |  | ||||||
| 				v->FinalDRAMClockChangeLatency, |  | ||||||
| 				v->SREnterPlusExitTime, |  | ||||||
| 				v->ReturnBusWidth, |  | ||||||
| 				v->RoundTripPingLatencyCycles, |  | ||||||
| 				ReorderingBytes, |  | ||||||
| 				v->PixelChunkSizeInKByte, |  | ||||||
| 				v->MetaChunkSize, |  | ||||||
| 				v->GPUVMEnable, |  | ||||||
| 				v->GPUVMMaxPageTableLevels, |  | ||||||
| 				v->HostVMEnable, |  | ||||||
| 				v->NumberOfActivePlanes, |  | ||||||
| 				v->HostVMMinPageSize, |  | ||||||
| 				v->HostVMMaxNonCachedPageTableLevels, |  | ||||||
| 				v->DynamicMetadataVMEnabled, |  | ||||||
| 				v->ImmediateFlipRequirement[0], |  | ||||||
| 				v->ProgressiveToInterlaceUnitInOPP, |  | ||||||
| 				v->MaxAveragePercentOfIdealSDPPortBWDisplayCanUseInNormalSystemOperation, |  | ||||||
| 				v->PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData, |  | ||||||
| 				v->PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly, |  | ||||||
| 				v->PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelDataOnly, |  | ||||||
| 				v->VTotal, |  | ||||||
| 				v->VActive, |  | ||||||
| 				v->DynamicMetadataTransmittedBytes, |  | ||||||
| 				v->DynamicMetadataLinesBeforeActiveRequired, |  | ||||||
| 				v->Interlace, |  | ||||||
| 				v->RequiredDPPCLK, |  | ||||||
| 				v->RequiredDISPCLK, |  | ||||||
| 				v->UrgLatency, |  | ||||||
| 				v->NoOfDPP, |  | ||||||
| 				v->ProjectedDCFCLKDeepSleep, |  | ||||||
| 				v->MaximumVStartup, |  | ||||||
| 				v->TotalVActivePixelBandwidth, |  | ||||||
| 				v->TotalVActiveCursorBandwidth, |  | ||||||
| 				v->TotalMetaRowBandwidth, |  | ||||||
| 				v->TotalDPTERowBandwidth, |  | ||||||
| 				v->TotalNumberOfActiveDPP, |  | ||||||
| 				v->TotalNumberOfDCCActiveDPP, |  | ||||||
| 				v->dpte_group_bytes, |  | ||||||
| 				v->PrefetchLinesY, |  | ||||||
| 				v->PrefetchLinesC, |  | ||||||
| 				v->swath_width_luma_ub_all_states, |  | ||||||
| 				v->swath_width_chroma_ub_all_states, |  | ||||||
| 				v->BytePerPixelY, |  | ||||||
| 				v->BytePerPixelC, |  | ||||||
| 				v->HTotal, |  | ||||||
| 				v->PixelClock, |  | ||||||
| 				v->PDEAndMetaPTEBytesPerFrame, |  | ||||||
| 				v->DPTEBytesPerRow, |  | ||||||
| 				v->MetaRowBytes, |  | ||||||
| 				v->DynamicMetadataEnable, |  | ||||||
| 				v->VActivePixelBandwidth, |  | ||||||
| 				v->VActiveCursorBandwidth, |  | ||||||
| 				v->ReadBandwidthLuma, |  | ||||||
| 				v->ReadBandwidthChroma, |  | ||||||
| 				v->DCFCLKPerState, |  | ||||||
| 				v->DCFCLKState); |  | ||||||
| 
 | 
 | ||||||
| 		if (v->ClampMinDCFCLK) { | 		if (v->ClampMinDCFCLK) { | ||||||
| 			/* Clamp calculated values to actual minimum */ | 			/* Clamp calculated values to actual minimum */ | ||||||
| @ -6610,77 +6497,21 @@ static double CalculateUrgentLatency( | |||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| static void UseMinimumDCFCLK( | static void UseMinimumDCFCLK( | ||||||
| 		struct display_mode_lib *mode_lib, | 		struct display_mode_lib *mode_lib, | ||||||
| 		int MaxInterDCNTileRepeaters, | 		struct vba_vars_st *v, | ||||||
| 		int MaxPrefetchMode, | 		int MaxPrefetchMode, | ||||||
| 		double FinalDRAMClockChangeLatency, | 		int ReorderingBytes) | ||||||
| 		double SREnterPlusExitTime, |  | ||||||
| 		int ReturnBusWidth, |  | ||||||
| 		int RoundTripPingLatencyCycles, |  | ||||||
| 		int ReorderingBytes, |  | ||||||
| 		int PixelChunkSizeInKByte, |  | ||||||
| 		int MetaChunkSize, |  | ||||||
| 		bool GPUVMEnable, |  | ||||||
| 		int GPUVMMaxPageTableLevels, |  | ||||||
| 		bool HostVMEnable, |  | ||||||
| 		int NumberOfActivePlanes, |  | ||||||
| 		double HostVMMinPageSize, |  | ||||||
| 		int HostVMMaxNonCachedPageTableLevels, |  | ||||||
| 		bool DynamicMetadataVMEnabled, |  | ||||||
| 		enum immediate_flip_requirement ImmediateFlipRequirement, |  | ||||||
| 		bool ProgressiveToInterlaceUnitInOPP, |  | ||||||
| 		double MaxAveragePercentOfIdealSDPPortBWDisplayCanUseInNormalSystemOperation, |  | ||||||
| 		double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData, |  | ||||||
| 		double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly, |  | ||||||
| 		double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelDataOnly, |  | ||||||
| 		int VTotal[], |  | ||||||
| 		int VActive[], |  | ||||||
| 		int DynamicMetadataTransmittedBytes[], |  | ||||||
| 		int DynamicMetadataLinesBeforeActiveRequired[], |  | ||||||
| 		bool Interlace[], |  | ||||||
| 		double RequiredDPPCLK[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double RequiredDISPCLK[][2], |  | ||||||
| 		double UrgLatency[], |  | ||||||
| 		unsigned int NoOfDPP[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double ProjectedDCFCLKDeepSleep[][2], |  | ||||||
| 		double MaximumVStartup[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double TotalVActivePixelBandwidth[][2], |  | ||||||
| 		double TotalVActiveCursorBandwidth[][2], |  | ||||||
| 		double TotalMetaRowBandwidth[][2], |  | ||||||
| 		double TotalDPTERowBandwidth[][2], |  | ||||||
| 		unsigned int TotalNumberOfActiveDPP[][2], |  | ||||||
| 		unsigned int TotalNumberOfDCCActiveDPP[][2], |  | ||||||
| 		int dpte_group_bytes[], |  | ||||||
| 		double PrefetchLinesY[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double PrefetchLinesC[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		unsigned int swath_width_luma_ub_all_states[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		unsigned int swath_width_chroma_ub_all_states[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		int BytePerPixelY[], |  | ||||||
| 		int BytePerPixelC[], |  | ||||||
| 		int HTotal[], |  | ||||||
| 		double PixelClock[], |  | ||||||
| 		double PDEAndMetaPTEBytesPerFrame[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double DPTEBytesPerRow[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double MetaRowBytes[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		bool DynamicMetadataEnable[], |  | ||||||
| 		double VActivePixelBandwidth[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double VActiveCursorBandwidth[][2][DC__NUM_DPP__MAX], |  | ||||||
| 		double ReadBandwidthLuma[], |  | ||||||
| 		double ReadBandwidthChroma[], |  | ||||||
| 		double DCFCLKPerState[], |  | ||||||
| 		double DCFCLKState[][2]) |  | ||||||
| { | { | ||||||
| 	double   NormalEfficiency = 0; | 	double   NormalEfficiency = 0; | ||||||
| 	double   PTEEfficiency = 0; | 	double   PTEEfficiency = 0; | ||||||
| 	double   TotalMaxPrefetchFlipDPTERowBandwidth[DC__VOLTAGE_STATES][2] = { { 0 } }; | 	double   TotalMaxPrefetchFlipDPTERowBandwidth[DC__VOLTAGE_STATES][2] = { { 0 } }; | ||||||
| 	unsigned int i, j, k; | 	unsigned int i, j, k; | ||||||
| 
 | 
 | ||||||
| 	NormalEfficiency =  (HostVMEnable == true ? PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData | 	NormalEfficiency =  (v->HostVMEnable == true ? v->PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData | ||||||
| 			: PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelDataOnly) / 100.0; | 			: v->PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelDataOnly) / 100.0; | ||||||
| 	PTEEfficiency =  (HostVMEnable == true ? PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly | 	PTEEfficiency =  (v->HostVMEnable == true ? v->PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly | ||||||
| 			/ PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData : 1.0); | 			/ v->PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData : 1.0); | ||||||
| 	for (i = 0; i < mode_lib->soc.num_states; ++i) { | 	for (i = 0; i < mode_lib->soc.num_states; ++i) { | ||||||
| 		for (j = 0; j <= 1; ++j) { | 		for (j = 0; j <= 1; ++j) { | ||||||
| 			double PixelDCFCLKCyclesRequiredInPrefetch[DC__NUM_DPP__MAX] = { 0 }; | 			double PixelDCFCLKCyclesRequiredInPrefetch[DC__NUM_DPP__MAX] = { 0 }; | ||||||
| @ -6698,58 +6529,58 @@ static void UseMinimumDCFCLK( | |||||||
| 			double MinimumTvmPlus2Tr0 = 0; | 			double MinimumTvmPlus2Tr0 = 0; | ||||||
| 
 | 
 | ||||||
| 			TotalMaxPrefetchFlipDPTERowBandwidth[i][j] = 0; | 			TotalMaxPrefetchFlipDPTERowBandwidth[i][j] = 0; | ||||||
| 			for (k = 0; k < NumberOfActivePlanes; ++k) { | 			for (k = 0; k < v->NumberOfActivePlanes; ++k) { | ||||||
| 				TotalMaxPrefetchFlipDPTERowBandwidth[i][j] = TotalMaxPrefetchFlipDPTERowBandwidth[i][j] | 				TotalMaxPrefetchFlipDPTERowBandwidth[i][j] = TotalMaxPrefetchFlipDPTERowBandwidth[i][j] | ||||||
| 					+ NoOfDPP[i][j][k] * DPTEBytesPerRow[i][j][k] / (15.75 * HTotal[k] / PixelClock[k]); | 					+ v->NoOfDPP[i][j][k] * v->DPTEBytesPerRow[i][j][k] / (15.75 * v->HTotal[k] / v->PixelClock[k]); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			for (k = 0; k <= NumberOfActivePlanes - 1; ++k) { | 			for (k = 0; k <= v->NumberOfActivePlanes - 1; ++k) { | ||||||
| 				NoOfDPPState[k] = NoOfDPP[i][j][k]; | 				NoOfDPPState[k] = v->NoOfDPP[i][j][k]; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			MinimumTWait = CalculateTWait(MaxPrefetchMode, FinalDRAMClockChangeLatency, UrgLatency[i], SREnterPlusExitTime); | 			MinimumTWait = CalculateTWait(MaxPrefetchMode, v->FinalDRAMClockChangeLatency, v->UrgLatency[i], v->SREnterPlusExitTime); | ||||||
| 			NonDPTEBandwidth = TotalVActivePixelBandwidth[i][j] + TotalVActiveCursorBandwidth[i][j] + TotalMetaRowBandwidth[i][j]; | 			NonDPTEBandwidth = v->TotalVActivePixelBandwidth[i][j] + v->TotalVActiveCursorBandwidth[i][j] + v->TotalMetaRowBandwidth[i][j]; | ||||||
| 			DPTEBandwidth =  (HostVMEnable == true || ImmediateFlipRequirement == dm_immediate_flip_required) ? | 			DPTEBandwidth =  (v->HostVMEnable == true || v->ImmediateFlipRequirement[0] == dm_immediate_flip_required) ? | ||||||
| 					TotalMaxPrefetchFlipDPTERowBandwidth[i][j] : TotalDPTERowBandwidth[i][j]; | 					TotalMaxPrefetchFlipDPTERowBandwidth[i][j] : v->TotalDPTERowBandwidth[i][j]; | ||||||
| 			DCFCLKRequiredForAverageBandwidth = dml_max3(ProjectedDCFCLKDeepSleep[i][j], | 			DCFCLKRequiredForAverageBandwidth = dml_max3(v->ProjectedDCFCLKDeepSleep[i][j], | ||||||
| 					(NonDPTEBandwidth + TotalDPTERowBandwidth[i][j]) / ReturnBusWidth / (MaxAveragePercentOfIdealSDPPortBWDisplayCanUseInNormalSystemOperation / 100), | 					(NonDPTEBandwidth + v->TotalDPTERowBandwidth[i][j]) / v->ReturnBusWidth / (v->MaxAveragePercentOfIdealSDPPortBWDisplayCanUseInNormalSystemOperation / 100), | ||||||
| 					(NonDPTEBandwidth + DPTEBandwidth / PTEEfficiency) / NormalEfficiency / ReturnBusWidth); | 					(NonDPTEBandwidth + DPTEBandwidth / PTEEfficiency) / NormalEfficiency / v->ReturnBusWidth); | ||||||
| 
 | 
 | ||||||
| 			ExtraLatencyBytes = CalculateExtraLatencyBytes(ReorderingBytes, TotalNumberOfActiveDPP[i][j], PixelChunkSizeInKByte, TotalNumberOfDCCActiveDPP[i][j], | 			ExtraLatencyBytes = CalculateExtraLatencyBytes(ReorderingBytes, v->TotalNumberOfActiveDPP[i][j], v->PixelChunkSizeInKByte, v->TotalNumberOfDCCActiveDPP[i][j], | ||||||
| 					MetaChunkSize, GPUVMEnable, HostVMEnable, NumberOfActivePlanes, NoOfDPPState, dpte_group_bytes, | 					v->MetaChunkSize, v->GPUVMEnable, v->HostVMEnable, v->NumberOfActivePlanes, NoOfDPPState, v->dpte_group_bytes, | ||||||
| 					PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData, PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly, | 					v->PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData, v->PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly, | ||||||
| 					HostVMMinPageSize, HostVMMaxNonCachedPageTableLevels); | 					v->HostVMMinPageSize, v->HostVMMaxNonCachedPageTableLevels); | ||||||
| 			ExtraLatencyCycles = RoundTripPingLatencyCycles + 32 + ExtraLatencyBytes / NormalEfficiency / ReturnBusWidth; | 			ExtraLatencyCycles = v->RoundTripPingLatencyCycles + 32 + ExtraLatencyBytes / NormalEfficiency / v->ReturnBusWidth; | ||||||
| 			for (k = 0; k < NumberOfActivePlanes; ++k) { | 			for (k = 0; k < v->NumberOfActivePlanes; ++k) { | ||||||
| 				double DCFCLKCyclesRequiredInPrefetch = { 0 }; | 				double DCFCLKCyclesRequiredInPrefetch = { 0 }; | ||||||
| 				double ExpectedPrefetchBWAcceleration = { 0 }; | 				double ExpectedPrefetchBWAcceleration = { 0 }; | ||||||
| 				double PrefetchTime = { 0 }; | 				double PrefetchTime = { 0 }; | ||||||
| 
 | 
 | ||||||
| 				PixelDCFCLKCyclesRequiredInPrefetch[k] = (PrefetchLinesY[i][j][k] * swath_width_luma_ub_all_states[i][j][k] * BytePerPixelY[k] | 				PixelDCFCLKCyclesRequiredInPrefetch[k] = (v->PrefetchLinesY[i][j][k] * v->swath_width_luma_ub_all_states[i][j][k] * v->BytePerPixelY[k] | ||||||
| 					+ PrefetchLinesC[i][j][k] * swath_width_chroma_ub_all_states[i][j][k] * BytePerPixelC[k]) / NormalEfficiency / ReturnBusWidth; | 					+ v->PrefetchLinesC[i][j][k] * v->swath_width_chroma_ub_all_states[i][j][k] * v->BytePerPixelC[k]) / NormalEfficiency / v->ReturnBusWidth; | ||||||
| 				DCFCLKCyclesRequiredInPrefetch = 2 * ExtraLatencyCycles / NoOfDPPState[k] + PDEAndMetaPTEBytesPerFrame[i][j][k] / PTEEfficiency | 				DCFCLKCyclesRequiredInPrefetch = 2 * ExtraLatencyCycles / NoOfDPPState[k] + v->PDEAndMetaPTEBytesPerFrame[i][j][k] / PTEEfficiency | ||||||
| 					/ NormalEfficiency / ReturnBusWidth *  (GPUVMMaxPageTableLevels > 2 ? 1 : 0) + 2 * DPTEBytesPerRow[i][j][k] / PTEEfficiency | 					/ NormalEfficiency / v->ReturnBusWidth *  (v->GPUVMMaxPageTableLevels > 2 ? 1 : 0) + 2 * v->DPTEBytesPerRow[i][j][k] / PTEEfficiency | ||||||
| 					/ NormalEfficiency / ReturnBusWidth + 2 * MetaRowBytes[i][j][k] / NormalEfficiency / ReturnBusWidth + PixelDCFCLKCyclesRequiredInPrefetch[k]; | 					/ NormalEfficiency / v->ReturnBusWidth + 2 * v->MetaRowBytes[i][j][k] / NormalEfficiency / v->ReturnBusWidth + PixelDCFCLKCyclesRequiredInPrefetch[k]; | ||||||
| 				PrefetchPixelLinesTime[k] = dml_max(PrefetchLinesY[i][j][k], PrefetchLinesC[i][j][k]) * HTotal[k] / PixelClock[k]; | 				PrefetchPixelLinesTime[k] = dml_max(v->PrefetchLinesY[i][j][k], v->PrefetchLinesC[i][j][k]) * v->HTotal[k] / v->PixelClock[k]; | ||||||
| 				ExpectedPrefetchBWAcceleration = (VActivePixelBandwidth[i][j][k] + VActiveCursorBandwidth[i][j][k]) / (ReadBandwidthLuma[k] + ReadBandwidthChroma[k]); | 				ExpectedPrefetchBWAcceleration = (v->VActivePixelBandwidth[i][j][k] + v->VActiveCursorBandwidth[i][j][k]) / (v->ReadBandwidthLuma[k] + v->ReadBandwidthChroma[k]); | ||||||
| 				DynamicMetadataVMExtraLatency[k] = (GPUVMEnable == true && DynamicMetadataEnable[k] == true && DynamicMetadataVMEnabled == true) ? | 				DynamicMetadataVMExtraLatency[k] = (v->GPUVMEnable == true && v->DynamicMetadataEnable[k] == true && v->DynamicMetadataVMEnabled == true) ? | ||||||
| 						UrgLatency[i] * GPUVMMaxPageTableLevels *  (HostVMEnable == true ? HostVMMaxNonCachedPageTableLevels + 1 : 1) : 0; | 						v->UrgLatency[i] * v->GPUVMMaxPageTableLevels *  (v->HostVMEnable == true ? v->HostVMMaxNonCachedPageTableLevels + 1 : 1) : 0; | ||||||
| 				PrefetchTime = (MaximumVStartup[i][j][k] - 1) * HTotal[k] / PixelClock[k] - MinimumTWait - UrgLatency[i] * ((GPUVMMaxPageTableLevels <= 2 ? GPUVMMaxPageTableLevels | 				PrefetchTime = (v->MaximumVStartup[i][j][k] - 1) * v->HTotal[k] / v->PixelClock[k] - MinimumTWait - v->UrgLatency[i] * ((v->GPUVMMaxPageTableLevels <= 2 ? v->GPUVMMaxPageTableLevels | ||||||
| 						: GPUVMMaxPageTableLevels - 2) * (HostVMEnable == true ? HostVMMaxNonCachedPageTableLevels + 1 : 1) - 1) - DynamicMetadataVMExtraLatency[k]; | 						: v->GPUVMMaxPageTableLevels - 2) * (v->HostVMEnable == true ? v->HostVMMaxNonCachedPageTableLevels + 1 : 1) - 1) - DynamicMetadataVMExtraLatency[k]; | ||||||
| 
 | 
 | ||||||
| 				if (PrefetchTime > 0) { | 				if (PrefetchTime > 0) { | ||||||
| 					double ExpectedVRatioPrefetch = { 0 }; | 					double ExpectedVRatioPrefetch = { 0 }; | ||||||
| 					ExpectedVRatioPrefetch = PrefetchPixelLinesTime[k] / (PrefetchTime * PixelDCFCLKCyclesRequiredInPrefetch[k] / DCFCLKCyclesRequiredInPrefetch); | 					ExpectedVRatioPrefetch = PrefetchPixelLinesTime[k] / (PrefetchTime * PixelDCFCLKCyclesRequiredInPrefetch[k] / DCFCLKCyclesRequiredInPrefetch); | ||||||
| 					DCFCLKRequiredForPeakBandwidthPerPlane[k] = NoOfDPPState[k] * PixelDCFCLKCyclesRequiredInPrefetch[k] / PrefetchPixelLinesTime[k] | 					DCFCLKRequiredForPeakBandwidthPerPlane[k] = NoOfDPPState[k] * PixelDCFCLKCyclesRequiredInPrefetch[k] / PrefetchPixelLinesTime[k] | ||||||
| 						* dml_max(1.0, ExpectedVRatioPrefetch) * dml_max(1.0, ExpectedVRatioPrefetch / 4) * ExpectedPrefetchBWAcceleration; | 						* dml_max(1.0, ExpectedVRatioPrefetch) * dml_max(1.0, ExpectedVRatioPrefetch / 4) * ExpectedPrefetchBWAcceleration; | ||||||
| 					if (HostVMEnable == true || ImmediateFlipRequirement == dm_immediate_flip_required) { | 					if (v->HostVMEnable == true || v->ImmediateFlipRequirement[0] == dm_immediate_flip_required) { | ||||||
| 						DCFCLKRequiredForPeakBandwidthPerPlane[k] = DCFCLKRequiredForPeakBandwidthPerPlane[k] | 						DCFCLKRequiredForPeakBandwidthPerPlane[k] = DCFCLKRequiredForPeakBandwidthPerPlane[k] | ||||||
| 							+ NoOfDPPState[k] * DPTEBandwidth / PTEEfficiency / NormalEfficiency / ReturnBusWidth; | 							+ NoOfDPPState[k] * DPTEBandwidth / PTEEfficiency / NormalEfficiency / v->ReturnBusWidth; | ||||||
| 					} | 					} | ||||||
| 				} else { | 				} else { | ||||||
| 					DCFCLKRequiredForPeakBandwidthPerPlane[k] = DCFCLKPerState[i]; | 					DCFCLKRequiredForPeakBandwidthPerPlane[k] = v->DCFCLKPerState[i]; | ||||||
| 				} | 				} | ||||||
| 				if (DynamicMetadataEnable[k] == true) { | 				if (v->DynamicMetadataEnable[k] == true) { | ||||||
| 					double TsetupPipe = { 0 }; | 					double TsetupPipe = { 0 }; | ||||||
| 					double TdmbfPipe = { 0 }; | 					double TdmbfPipe = { 0 }; | ||||||
| 					double TdmsksPipe = { 0 }; | 					double TdmsksPipe = { 0 }; | ||||||
| @ -6757,49 +6588,49 @@ static void UseMinimumDCFCLK( | |||||||
| 					double AllowedTimeForUrgentExtraLatency = { 0 }; | 					double AllowedTimeForUrgentExtraLatency = { 0 }; | ||||||
| 
 | 
 | ||||||
| 					CalculateDynamicMetadataParameters( | 					CalculateDynamicMetadataParameters( | ||||||
| 							MaxInterDCNTileRepeaters, | 							v->MaxInterDCNTileRepeaters, | ||||||
| 							RequiredDPPCLK[i][j][k], | 							v->RequiredDPPCLK[i][j][k], | ||||||
| 							RequiredDISPCLK[i][j], | 							v->RequiredDISPCLK[i][j], | ||||||
| 							ProjectedDCFCLKDeepSleep[i][j], | 							v->ProjectedDCFCLKDeepSleep[i][j], | ||||||
| 							PixelClock[k], | 							v->PixelClock[k], | ||||||
| 							HTotal[k], | 							v->HTotal[k], | ||||||
| 							VTotal[k] - VActive[k], | 							v->VTotal[k] - v->VActive[k], | ||||||
| 							DynamicMetadataTransmittedBytes[k], | 							v->DynamicMetadataTransmittedBytes[k], | ||||||
| 							DynamicMetadataLinesBeforeActiveRequired[k], | 							v->DynamicMetadataLinesBeforeActiveRequired[k], | ||||||
| 							Interlace[k], | 							v->Interlace[k], | ||||||
| 							ProgressiveToInterlaceUnitInOPP, | 							v->ProgressiveToInterlaceUnitInOPP, | ||||||
| 							&TsetupPipe, | 							&TsetupPipe, | ||||||
| 							&TdmbfPipe, | 							&TdmbfPipe, | ||||||
| 							&TdmecPipe, | 							&TdmecPipe, | ||||||
| 							&TdmsksPipe); | 							&TdmsksPipe); | ||||||
| 					AllowedTimeForUrgentExtraLatency = MaximumVStartup[i][j][k] * HTotal[k] / PixelClock[k] - MinimumTWait - TsetupPipe | 					AllowedTimeForUrgentExtraLatency = v->MaximumVStartup[i][j][k] * v->HTotal[k] / v->PixelClock[k] - MinimumTWait - TsetupPipe | ||||||
| 							- TdmbfPipe - TdmecPipe - TdmsksPipe - DynamicMetadataVMExtraLatency[k]; | 							- TdmbfPipe - TdmecPipe - TdmsksPipe - DynamicMetadataVMExtraLatency[k]; | ||||||
| 					if (AllowedTimeForUrgentExtraLatency > 0) { | 					if (AllowedTimeForUrgentExtraLatency > 0) { | ||||||
| 						DCFCLKRequiredForPeakBandwidthPerPlane[k] = dml_max(DCFCLKRequiredForPeakBandwidthPerPlane[k], | 						DCFCLKRequiredForPeakBandwidthPerPlane[k] = dml_max(DCFCLKRequiredForPeakBandwidthPerPlane[k], | ||||||
| 								ExtraLatencyCycles / AllowedTimeForUrgentExtraLatency); | 								ExtraLatencyCycles / AllowedTimeForUrgentExtraLatency); | ||||||
| 					} else { | 					} else { | ||||||
| 						DCFCLKRequiredForPeakBandwidthPerPlane[k] = DCFCLKPerState[i]; | 						DCFCLKRequiredForPeakBandwidthPerPlane[k] = v->DCFCLKPerState[i]; | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			DCFCLKRequiredForPeakBandwidth = 0; | 			DCFCLKRequiredForPeakBandwidth = 0; | ||||||
| 			for (k = 0; k <= NumberOfActivePlanes - 1; ++k) { | 			for (k = 0; k <= v->NumberOfActivePlanes - 1; ++k) { | ||||||
| 				DCFCLKRequiredForPeakBandwidth = DCFCLKRequiredForPeakBandwidth + DCFCLKRequiredForPeakBandwidthPerPlane[k]; | 				DCFCLKRequiredForPeakBandwidth = DCFCLKRequiredForPeakBandwidth + DCFCLKRequiredForPeakBandwidthPerPlane[k]; | ||||||
| 			} | 			} | ||||||
| 			MinimumTvmPlus2Tr0 = UrgLatency[i] * (GPUVMEnable == true ? (HostVMEnable == true ? | 			MinimumTvmPlus2Tr0 = v->UrgLatency[i] * (v->GPUVMEnable == true ? (v->HostVMEnable == true ? | ||||||
| 					(GPUVMMaxPageTableLevels + 2) * (HostVMMaxNonCachedPageTableLevels + 1) - 1 : GPUVMMaxPageTableLevels + 1) : 0); | 					(v->GPUVMMaxPageTableLevels + 2) * (v->HostVMMaxNonCachedPageTableLevels + 1) - 1 : v->GPUVMMaxPageTableLevels + 1) : 0); | ||||||
| 			for (k = 0; k < NumberOfActivePlanes; ++k) { | 			for (k = 0; k < v->NumberOfActivePlanes; ++k) { | ||||||
| 				double MaximumTvmPlus2Tr0PlusTsw = { 0 }; | 				double MaximumTvmPlus2Tr0PlusTsw = { 0 }; | ||||||
| 				MaximumTvmPlus2Tr0PlusTsw = (MaximumVStartup[i][j][k] - 2) * HTotal[k] / PixelClock[k] - MinimumTWait - DynamicMetadataVMExtraLatency[k]; | 				MaximumTvmPlus2Tr0PlusTsw = (v->MaximumVStartup[i][j][k] - 2) * v->HTotal[k] / v->PixelClock[k] - MinimumTWait - DynamicMetadataVMExtraLatency[k]; | ||||||
| 				if (MaximumTvmPlus2Tr0PlusTsw <= MinimumTvmPlus2Tr0 + PrefetchPixelLinesTime[k] / 4) { | 				if (MaximumTvmPlus2Tr0PlusTsw <= MinimumTvmPlus2Tr0 + PrefetchPixelLinesTime[k] / 4) { | ||||||
| 					DCFCLKRequiredForPeakBandwidth = DCFCLKPerState[i]; | 					DCFCLKRequiredForPeakBandwidth = v->DCFCLKPerState[i]; | ||||||
| 				} else { | 				} else { | ||||||
| 					DCFCLKRequiredForPeakBandwidth = dml_max3(DCFCLKRequiredForPeakBandwidth, 2 * ExtraLatencyCycles | 					DCFCLKRequiredForPeakBandwidth = dml_max3(DCFCLKRequiredForPeakBandwidth, 2 * ExtraLatencyCycles | ||||||
| 							/ (MaximumTvmPlus2Tr0PlusTsw - MinimumTvmPlus2Tr0 - PrefetchPixelLinesTime[k] / 4), | 							/ (MaximumTvmPlus2Tr0PlusTsw - MinimumTvmPlus2Tr0 - PrefetchPixelLinesTime[k] / 4), | ||||||
| 						(2 * ExtraLatencyCycles + PixelDCFCLKCyclesRequiredInPrefetch[k]) / (MaximumTvmPlus2Tr0PlusTsw - MinimumTvmPlus2Tr0)); | 						(2 * ExtraLatencyCycles + PixelDCFCLKCyclesRequiredInPrefetch[k]) / (MaximumTvmPlus2Tr0PlusTsw - MinimumTvmPlus2Tr0)); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			DCFCLKState[i][j] = dml_min(DCFCLKPerState[i], 1.05 * (1 + mode_lib->vba.PercentMarginOverMinimumRequiredDCFCLK / 100) | 			v->DCFCLKState[i][j] = dml_min(v->DCFCLKPerState[i], 1.05 * (1 + mode_lib->vba.PercentMarginOverMinimumRequiredDCFCLK / 100) | ||||||
| 					* dml_max(DCFCLKRequiredForAverageBandwidth, DCFCLKRequiredForPeakBandwidth)); | 					* dml_max(DCFCLKRequiredForAverageBandwidth, DCFCLKRequiredForPeakBandwidth)); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Hamza Mahfooz
						Hamza Mahfooz