Commit a21005e4 authored by Dillon Varone's avatar Dillon Varone Committed by Alex Deucher
Browse files

drm/amd/display: Account for Subvp Phantoms in DML MALL surface calculations



DML does not explicitly consider support for space in MALL required for
subvp phantom pipes. This adds a check to make sure portion of phantom
surface can fit in MALL.

Tested-by: default avatarDaniel Wheeler <Daniel.Wheeler@amd.com>
Reviewed-by: default avatarAlvin Lee <Alvin.Lee2@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarDillon Varone <Dillon.Varone@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 95c454ca
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -387,6 +387,7 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
				mode_lib->vba.NumberOfActiveSurfaces,
				mode_lib->vba.MALLAllocatedForDCNFinal,
				mode_lib->vba.UseMALLForStaticScreen,
				mode_lib->vba.UsesMALLForPStateChange,
				mode_lib->vba.DCCEnable,
				mode_lib->vba.ViewportStationary,
				mode_lib->vba.ViewportXStartY,
@@ -2628,6 +2629,7 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
			mode_lib->vba.NumberOfActiveSurfaces,
			mode_lib->vba.MALLAllocatedForDCNFinal,
			mode_lib->vba.UseMALLForStaticScreen,
			mode_lib->vba.UsesMALLForPStateChange,
			mode_lib->vba.DCCEnable,
			mode_lib->vba.ViewportStationary,
			mode_lib->vba.ViewportXStartY,
+11 −4
Original line number Diff line number Diff line
@@ -1772,6 +1772,7 @@ void dml32_CalculateSurfaceSizeInMall(
		unsigned int NumberOfActiveSurfaces,
		unsigned int MALLAllocatedForDCN,
		enum dm_use_mall_for_static_screen_mode UseMALLForStaticScreen[],
		enum dm_use_mall_for_pstate_change_mode UsesMALLForPStateChange[],
		bool DCCEnable[],
		bool ViewportStationary[],
		unsigned int ViewportXStartY[],
@@ -1803,8 +1804,10 @@ void dml32_CalculateSurfaceSizeInMall(
		unsigned int    SurfaceSizeInMALL[],
		bool *ExceededMALLSize)
{
	unsigned int TotalSurfaceSizeInMALL  = 0;
	unsigned int k;
	unsigned int TotalSurfaceSizeInMALLForSS = 0;
	unsigned int TotalSurfaceSizeInMALLForSubVP = 0;
	unsigned int MALLAllocatedForDCNInBytes = MALLAllocatedForDCN * 1024 * 1024;

	for (k = 0; k < NumberOfActiveSurfaces; ++k) {
		if (ViewportStationary[k]) {
@@ -1896,10 +1899,14 @@ void dml32_CalculateSurfaceSizeInMall(
	}

	for (k = 0; k < NumberOfActiveSurfaces; ++k) {
		if (UseMALLForStaticScreen[k] == dm_use_mall_static_screen_enable)
			TotalSurfaceSizeInMALL = TotalSurfaceSizeInMALL + SurfaceSizeInMALL[k];
	}
	*ExceededMALLSize =  (TotalSurfaceSizeInMALL > MALLAllocatedForDCN * 1024 * 1024);
		/* SS and Subvp counted separate as they are never used at the same time */
		if (UsesMALLForPStateChange[k] == dm_use_mall_pstate_change_phantom_pipe)
			TotalSurfaceSizeInMALLForSubVP = TotalSurfaceSizeInMALLForSubVP + SurfaceSizeInMALL[k];
		else if (UseMALLForStaticScreen[k] == dm_use_mall_static_screen_enable)
			TotalSurfaceSizeInMALLForSS = TotalSurfaceSizeInMALLForSS + SurfaceSizeInMALL[k];
	}
	*ExceededMALLSize =  (TotalSurfaceSizeInMALLForSS > MALLAllocatedForDCNInBytes) ||
							(TotalSurfaceSizeInMALLForSubVP > MALLAllocatedForDCNInBytes);
} // CalculateSurfaceSizeInMall

void dml32_CalculateVMRowAndSwath(
+1 −0
Original line number Diff line number Diff line
@@ -334,6 +334,7 @@ void dml32_CalculateSurfaceSizeInMall(
		unsigned int NumberOfActiveSurfaces,
		unsigned int MALLAllocatedForDCN,
		enum dm_use_mall_for_static_screen_mode UseMALLForStaticScreen[],
		enum dm_use_mall_for_pstate_change_mode UsesMALLForPStateChange[],
		bool DCCEnable[],
		bool ViewportStationary[],
		unsigned int ViewportXStartY[],