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

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
...@@ -387,6 +387,7 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman ...@@ -387,6 +387,7 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
mode_lib->vba.NumberOfActiveSurfaces, mode_lib->vba.NumberOfActiveSurfaces,
mode_lib->vba.MALLAllocatedForDCNFinal, mode_lib->vba.MALLAllocatedForDCNFinal,
mode_lib->vba.UseMALLForStaticScreen, mode_lib->vba.UseMALLForStaticScreen,
mode_lib->vba.UsesMALLForPStateChange,
mode_lib->vba.DCCEnable, mode_lib->vba.DCCEnable,
mode_lib->vba.ViewportStationary, mode_lib->vba.ViewportStationary,
mode_lib->vba.ViewportXStartY, mode_lib->vba.ViewportXStartY,
...@@ -2628,6 +2629,7 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l ...@@ -2628,6 +2629,7 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
mode_lib->vba.NumberOfActiveSurfaces, mode_lib->vba.NumberOfActiveSurfaces,
mode_lib->vba.MALLAllocatedForDCNFinal, mode_lib->vba.MALLAllocatedForDCNFinal,
mode_lib->vba.UseMALLForStaticScreen, mode_lib->vba.UseMALLForStaticScreen,
mode_lib->vba.UsesMALLForPStateChange,
mode_lib->vba.DCCEnable, mode_lib->vba.DCCEnable,
mode_lib->vba.ViewportStationary, mode_lib->vba.ViewportStationary,
mode_lib->vba.ViewportXStartY, mode_lib->vba.ViewportXStartY,
......
...@@ -1772,6 +1772,7 @@ void dml32_CalculateSurfaceSizeInMall( ...@@ -1772,6 +1772,7 @@ void dml32_CalculateSurfaceSizeInMall(
unsigned int NumberOfActiveSurfaces, unsigned int NumberOfActiveSurfaces,
unsigned int MALLAllocatedForDCN, unsigned int MALLAllocatedForDCN,
enum dm_use_mall_for_static_screen_mode UseMALLForStaticScreen[], enum dm_use_mall_for_static_screen_mode UseMALLForStaticScreen[],
enum dm_use_mall_for_pstate_change_mode UsesMALLForPStateChange[],
bool DCCEnable[], bool DCCEnable[],
bool ViewportStationary[], bool ViewportStationary[],
unsigned int ViewportXStartY[], unsigned int ViewportXStartY[],
...@@ -1803,8 +1804,10 @@ void dml32_CalculateSurfaceSizeInMall( ...@@ -1803,8 +1804,10 @@ void dml32_CalculateSurfaceSizeInMall(
unsigned int SurfaceSizeInMALL[], unsigned int SurfaceSizeInMALL[],
bool *ExceededMALLSize) bool *ExceededMALLSize)
{ {
unsigned int TotalSurfaceSizeInMALL = 0;
unsigned int k; unsigned int k;
unsigned int TotalSurfaceSizeInMALLForSS = 0;
unsigned int TotalSurfaceSizeInMALLForSubVP = 0;
unsigned int MALLAllocatedForDCNInBytes = MALLAllocatedForDCN * 1024 * 1024;
for (k = 0; k < NumberOfActiveSurfaces; ++k) { for (k = 0; k < NumberOfActiveSurfaces; ++k) {
if (ViewportStationary[k]) { if (ViewportStationary[k]) {
...@@ -1896,10 +1899,14 @@ void dml32_CalculateSurfaceSizeInMall( ...@@ -1896,10 +1899,14 @@ void dml32_CalculateSurfaceSizeInMall(
} }
for (k = 0; k < NumberOfActiveSurfaces; ++k) { for (k = 0; k < NumberOfActiveSurfaces; ++k) {
if (UseMALLForStaticScreen[k] == dm_use_mall_static_screen_enable) /* SS and Subvp counted separate as they are never used at the same time */
TotalSurfaceSizeInMALL = TotalSurfaceSizeInMALL + SurfaceSizeInMALL[k]; 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 = (TotalSurfaceSizeInMALL > MALLAllocatedForDCN * 1024 * 1024); *ExceededMALLSize = (TotalSurfaceSizeInMALLForSS > MALLAllocatedForDCNInBytes) ||
(TotalSurfaceSizeInMALLForSubVP > MALLAllocatedForDCNInBytes);
} // CalculateSurfaceSizeInMall } // CalculateSurfaceSizeInMall
void dml32_CalculateVMRowAndSwath( void dml32_CalculateVMRowAndSwath(
......
...@@ -334,6 +334,7 @@ void dml32_CalculateSurfaceSizeInMall( ...@@ -334,6 +334,7 @@ void dml32_CalculateSurfaceSizeInMall(
unsigned int NumberOfActiveSurfaces, unsigned int NumberOfActiveSurfaces,
unsigned int MALLAllocatedForDCN, unsigned int MALLAllocatedForDCN,
enum dm_use_mall_for_static_screen_mode UseMALLForStaticScreen[], enum dm_use_mall_for_static_screen_mode UseMALLForStaticScreen[],
enum dm_use_mall_for_pstate_change_mode UsesMALLForPStateChange[],
bool DCCEnable[], bool DCCEnable[],
bool ViewportStationary[], bool ViewportStationary[],
unsigned int ViewportXStartY[], unsigned int ViewportXStartY[],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment